mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-18 22:28:06 +02:00
gallium: Add support for BSD operating systems, tested with FreeBSD
BSD supports pipe in the same way as linux hence options which are safe for linux are also safe for BSD. Define PIPE_OS_BSD in include/pipe/p_config.h and adjust the defines to make use of it. Also define MAP_ANONYMOUS for BSD systems which use MAP_ANON Signed-off-by: Benjamin Close <Benjamin.Close@clearchain.com>
This commit is contained in:
parent
afe139f629
commit
dbab39c6ca
8 changed files with 32 additions and 24 deletions
|
|
@ -36,7 +36,7 @@
|
|||
|
||||
#include "pipe/p_config.h"
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#include <unistd.h>
|
||||
#include <sched.h>
|
||||
#endif
|
||||
|
|
@ -559,7 +559,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
|
|||
/* Wait on outstanding fences */
|
||||
while (fenced_list->numDelayed) {
|
||||
pipe_mutex_unlock(fenced_list->mutex);
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
sched_yield();
|
||||
#endif
|
||||
_fenced_buffer_list_check_free(fenced_list, 1);
|
||||
|
|
|
|||
|
|
@ -37,8 +37,12 @@
|
|||
|
||||
#include "rtasm_execmem.h"
|
||||
|
||||
#if defined(PIPE_OS_BSD)
|
||||
#define MAP_ANONYMOUS MAP_ANON
|
||||
#endif
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
|
||||
|
||||
/*
|
||||
|
|
@ -114,7 +118,7 @@ rtasm_exec_free(void *addr)
|
|||
}
|
||||
|
||||
|
||||
#else /* PIPE_OS_LINUX */
|
||||
#else /* PIPE_OS_LINUX || PIPE_OS_BSD */
|
||||
|
||||
/*
|
||||
* Just use regular memory.
|
||||
|
|
@ -134,4 +138,4 @@ rtasm_exec_free(void *addr)
|
|||
}
|
||||
|
||||
|
||||
#endif /* PIPE_OS_LINUX */
|
||||
#endif /* PIPE_OS_LINUX || PIPE_OS_BSD */
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@
|
|||
|
||||
#include "pipe/p_config.h"
|
||||
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD) || defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
|
||||
#include "pipe/p_config.h"
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#include <sys/time.h>
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
|
||||
#include <windows.h>
|
||||
|
|
@ -77,7 +77,7 @@ util_time_get_frequency(void)
|
|||
void
|
||||
util_time_get(struct util_time *t)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
gettimeofday(&t->tv, NULL);
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
|
||||
LONGLONG temp;
|
||||
|
|
@ -102,7 +102,7 @@ util_time_add(const struct util_time *t1,
|
|||
int64_t usecs,
|
||||
struct util_time *t2)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
t2->tv.tv_sec = t1->tv.tv_sec + usecs / 1000000;
|
||||
t2->tv.tv_usec = t1->tv.tv_usec + usecs % 1000000;
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) || defined(PIPE_SUBSYSTEM_WINDOWS_USER) || defined(PIPE_SUBSYSTEM_WINDOWS_CE)
|
||||
|
|
@ -124,7 +124,7 @@ int64_t
|
|||
util_time_diff(const struct util_time *t1,
|
||||
const struct util_time *t2)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
return (t2->tv.tv_usec - t1->tv.tv_usec) +
|
||||
(t2->tv.tv_sec - t1->tv.tv_sec)*1000000;
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) || defined(PIPE_SUBSYSTEM_WINDOWS_USER) || defined(PIPE_SUBSYSTEM_WINDOWS_CE)
|
||||
|
|
@ -144,7 +144,7 @@ util_time_micros( void )
|
|||
|
||||
util_time_get(&t1);
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
return t1.tv.tv_usec + t1.tv.tv_sec*1000000LL;
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) || defined(PIPE_SUBSYSTEM_WINDOWS_USER) || defined(PIPE_SUBSYSTEM_WINDOWS_CE)
|
||||
util_time_get_frequency();
|
||||
|
|
@ -166,7 +166,7 @@ static INLINE int
|
|||
util_time_compare(const struct util_time *t1,
|
||||
const struct util_time *t2)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
if (t1->tv.tv_sec < t2->tv.tv_sec)
|
||||
return -1;
|
||||
else if(t1->tv.tv_sec > t2->tv.tv_sec)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
|
||||
#include "pipe/p_config.h"
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#include <time.h> /* timeval */
|
||||
#include <unistd.h> /* usleep */
|
||||
#endif
|
||||
|
|
@ -58,7 +58,7 @@ extern "C" {
|
|||
*/
|
||||
struct util_time
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
struct timeval tv;
|
||||
#else
|
||||
int64_t counter;
|
||||
|
|
@ -89,7 +89,7 @@ util_time_timeout(const struct util_time *start,
|
|||
const struct util_time *end,
|
||||
const struct util_time *curr);
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#define util_time_sleep usleep
|
||||
#else
|
||||
void
|
||||
|
|
|
|||
|
|
@ -40,7 +40,7 @@
|
|||
|
||||
#include "pipe/p_config.h"
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#include <stdlib.h>
|
||||
#endif
|
||||
|
||||
|
|
@ -236,7 +236,7 @@ boolean trace_dump_trace_begin()
|
|||
trace_dump_writes("<?xml-stylesheet type='text/xsl' href='trace.xsl'?>\n");
|
||||
trace_dump_writes("<trace version='0.1'>\n");
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
/* Linux applications rarely cleanup GL / Gallium resources so catch
|
||||
* application exit here */
|
||||
atexit(trace_dump_trace_close);
|
||||
|
|
|
|||
|
|
@ -111,6 +111,10 @@
|
|||
#define PIPE_OS_LINUX
|
||||
#endif
|
||||
|
||||
#if defined(__FreeBSD__)
|
||||
#define PIPE_OS_BSD
|
||||
#endif
|
||||
|
||||
#if defined(_WIN32) || defined(WIN32)
|
||||
#define PIPE_OS_WINDOWS
|
||||
#endif
|
||||
|
|
@ -122,9 +126,9 @@
|
|||
* NOTE: There is no way to auto-detect most of these.
|
||||
*/
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
#define PIPE_SUBSYSTEM_DRI
|
||||
#endif /* PIPE_OS_LINUX */
|
||||
#endif /* PIPE_OS_LINUX || PIPE_OS_BSD */
|
||||
|
||||
#if defined(PIPE_OS_WINDOWS)
|
||||
#if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@
|
|||
#include "pipe/p_compiler.h"
|
||||
|
||||
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
|
||||
#include <pthread.h> /* POSIX threads headers */
|
||||
#include <stdio.h> /* for perror() */
|
||||
|
|
@ -210,7 +210,7 @@ typedef unsigned pipe_condvar;
|
|||
*/
|
||||
|
||||
typedef struct {
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
pthread_key_t key;
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
DWORD key;
|
||||
|
|
@ -225,7 +225,7 @@ typedef struct {
|
|||
static INLINE void
|
||||
pipe_tsd_init(pipe_tsd *tsd)
|
||||
{
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
if (pthread_key_create(&tsd->key, NULL/*free*/) != 0) {
|
||||
perror("pthread_key_create(): failed to allocate key for thread specific data");
|
||||
exit(-1);
|
||||
|
|
@ -242,7 +242,7 @@ pipe_tsd_get(pipe_tsd *tsd)
|
|||
if (tsd->initMagic != (int) PIPE_TSD_INIT_MAGIC) {
|
||||
pipe_tsd_init(tsd);
|
||||
}
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
return pthread_getspecific(tsd->key);
|
||||
#elif defined(PIPE_SUBSYSTEM_WINDOWS_USER)
|
||||
assert(0);
|
||||
|
|
@ -259,7 +259,7 @@ pipe_tsd_set(pipe_tsd *tsd, void *value)
|
|||
if (tsd->initMagic != (int) PIPE_TSD_INIT_MAGIC) {
|
||||
pipe_tsd_init(tsd);
|
||||
}
|
||||
#if defined(PIPE_OS_LINUX)
|
||||
#if defined(PIPE_OS_LINUX) || defined(PIPE_OS_BSD)
|
||||
if (pthread_setspecific(tsd->key, value) != 0) {
|
||||
perror("pthread_set_specific() failed");
|
||||
exit(-1);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue