gallium: Windows user mode portability fixes.

This commit is contained in:
José Fonseca
2008-04-25 18:19:51 +09:00
parent dacfef1589
commit b06cd4debf
6 changed files with 56 additions and 36 deletions

View File

@@ -34,6 +34,12 @@
*/ */
#include "pipe/p_config.h"
#if defined(PIPE_OS_LINUX)
#include <unistd.h>
#endif
#include "pipe/p_compiler.h" #include "pipe/p_compiler.h"
#include "pipe/p_error.h" #include "pipe/p_error.h"
#include "pipe/p_debug.h" #include "pipe/p_debug.h"
@@ -45,9 +51,6 @@
#include "pb_buffer.h" #include "pb_buffer.h"
#include "pb_buffer_fenced.h" #include "pb_buffer_fenced.h"
#ifndef WIN32
#include <unistd.h>
#endif
/** /**
@@ -425,7 +428,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list)
/* Wait on outstanding fences */ /* Wait on outstanding fences */
while (fenced_list->numDelayed) { while (fenced_list->numDelayed) {
_glthread_UNLOCK_MUTEX(fenced_list->mutex); _glthread_UNLOCK_MUTEX(fenced_list->mutex);
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
sched_yield(); sched_yield();
#endif #endif
_fenced_buffer_list_check_free(fenced_list, 1); _fenced_buffer_list_check_free(fenced_list, 1);

View File

@@ -26,9 +26,11 @@
**************************************************************************/ **************************************************************************/
#include "pipe/p_config.h"
#include <stdarg.h> #include <stdarg.h>
#ifdef WIN32 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
#include <windows.h> #include <windows.h>
#include <winddi.h> #include <winddi.h>
#else #else
@@ -42,7 +44,7 @@
#include "util/u_string.h" #include "util/u_string.h"
#ifdef WIN32 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
static INLINE void static INLINE void
_EngDebugPrint(const char *format, ...) _EngDebugPrint(const char *format, ...)
{ {
@@ -56,7 +58,7 @@ _EngDebugPrint(const char *format, ...)
void _debug_vprintf(const char *format, va_list ap) void _debug_vprintf(const char *format, va_list ap)
{ {
#ifdef WIN32 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
#ifndef WINCE #ifndef WINCE
/* EngDebugPrint does not handle float point arguments, so we need to use /* EngDebugPrint does not handle float point arguments, so we need to use
* our own vsnprintf implementation. It is also very slow, so buffer until * our own vsnprintf implementation. It is also very slow, so buffer until
@@ -101,7 +103,7 @@ void _debug_break(void)
__asm("int3"); __asm("int3");
#elif (defined(__i386__) || defined(__386__)) && defined(__MSC__) #elif (defined(__i386__) || defined(__386__)) && defined(__MSC__)
_asm {int 3}; _asm {int 3};
#elif defined(WIN32) && !defined(WINCE) #elif defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) && !defined(WINCE)
EngDebugBreak(); EngDebugBreak();
#else #else
abort(); abort();
@@ -109,7 +111,7 @@ void _debug_break(void)
} }
#ifdef WIN32 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
static const char * static const char *
find(const char *start, const char *end, char c) find(const char *start, const char *end, char c)
{ {
@@ -150,7 +152,7 @@ const char *
debug_get_option(const char *name, const char *dfault) debug_get_option(const char *name, const char *dfault)
{ {
const char *result; const char *result;
#ifdef WIN32 #ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
ULONG_PTR iFile = 0; ULONG_PTR iFile = 0;
const void *pMap = NULL; const void *pMap = NULL;
const char *sol, *eol, *sep; const char *sol, *eol, *sep;

View File

@@ -32,7 +32,9 @@
* @author José Fonseca <jrfonseca@tungstengraphics.com> * @author José Fonseca <jrfonseca@tungstengraphics.com>
*/ */
#ifdef WIN32 #include "pipe/p_config.h"
#ifdef PIPE_SUBSYSTEM_WINDOWS_DISPLAY
#include <windows.h> #include <windows.h>
#include <winddi.h> #include <winddi.h>
#else #else
@@ -47,7 +49,7 @@
#define DEBUG_MEMORY_MAGIC 0x6e34090aU #define DEBUG_MEMORY_MAGIC 0x6e34090aU
#if defined(WIN32) && !defined(WINCE) #if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) && !defined(WINCE)
#define real_malloc(_size) EngAllocMem(0, _size, 'D3AG') #define real_malloc(_size) EngAllocMem(0, _size, 'D3AG')
#define real_free(_ptr) EngFreeMem(_ptr) #define real_free(_ptr) EngFreeMem(_ptr)
#else #else

View File

@@ -33,27 +33,35 @@
*/ */
#ifndef WIN32
#include <sys/time.h>
#else
#include <windows.h>
#include <winddi.h>
#endif
#include "util/u_time.h" #include "util/u_time.h"
#if defined(PIPE_OS_LINUX)
#include <sys/time.h>
#elif defined(PIPE_OS_WINDOWS)
#include <windows.h>
#if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
#include <winddi.h>
#endif
#else
#error Unsupported OS
#endif
#ifdef WIN32
#if defined(PIPE_OS_WINDOWS)
static LONGLONG frequency = 0; static LONGLONG frequency = 0;
#if !defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
#define EngQueryPerformanceFrequency(p) QueryPerformanceFrequency((LARGE_INTEGER*)(p))
#define EngQueryPerformanceCounter(p) QueryPerformanceCounter((LARGE_INTEGER*)(p))
#endif
#endif #endif
void void
util_time_get(struct util_time *t) util_time_get(struct util_time *t)
{ {
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
gettimeofday(&t->tv, NULL); gettimeofday(&t->tv, NULL);
#else #elif defined(PIPE_OS_WINDOWS)
EngQueryPerformanceCounter(&t->counter); EngQueryPerformanceCounter(&t->counter);
#endif #endif
} }
@@ -64,10 +72,10 @@ util_time_add(const struct util_time *t1,
int64_t usecs, int64_t usecs,
struct util_time *t2) struct util_time *t2)
{ {
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
t2->tv.tv_sec = t1->tv.tv_sec + usecs / 1000000; t2->tv.tv_sec = t1->tv.tv_sec + usecs / 1000000;
t2->tv.tv_usec = t1->tv.tv_usec + usecs % 1000000; t2->tv.tv_usec = t1->tv.tv_usec + usecs % 1000000;
#else #elif defined(PIPE_OS_WINDOWS)
if(!frequency) if(!frequency)
EngQueryPerformanceFrequency(&frequency); EngQueryPerformanceFrequency(&frequency);
t2->counter = t1->counter + (usecs * frequency + 999999LL)/1000000LL; t2->counter = t1->counter + (usecs * frequency + 999999LL)/1000000LL;
@@ -79,10 +87,12 @@ int64_t
util_time_diff(const struct util_time *t1, util_time_diff(const struct util_time *t1,
const struct util_time *t2) const struct util_time *t2)
{ {
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
return (t2->tv.tv_usec - t1->tv.tv_usec) + return (t2->tv.tv_usec - t1->tv.tv_usec) +
(t2->tv.tv_sec - t1->tv.tv_sec)*1000000; (t2->tv.tv_sec - t1->tv.tv_sec)*1000000;
#else #elif defined(PIPE_OS_WINDOWS)
if(!frequency)
EngQueryPerformanceFrequency(&frequency);
return (t2->counter - t1->counter)*1000000LL/frequency; return (t2->counter - t1->counter)*1000000LL/frequency;
#endif #endif
} }
@@ -98,7 +108,7 @@ static INLINE int
util_time_compare(const struct util_time *t1, util_time_compare(const struct util_time *t1,
const struct util_time *t2) const struct util_time *t2)
{ {
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
if (t1->tv.tv_sec < t2->tv.tv_sec) if (t1->tv.tv_sec < t2->tv.tv_sec)
return -1; return -1;
else if(t1->tv.tv_sec > t2->tv.tv_sec) else if(t1->tv.tv_sec > t2->tv.tv_sec)
@@ -109,7 +119,7 @@ util_time_compare(const struct util_time *t1,
return 1; return 1;
else else
return 0; return 0;
#else #elif defined(PIPE_OS_WINDOWS)
if (t1->counter < t2->counter) if (t1->counter < t2->counter)
return -1; return -1;
else if(t1->counter > t2->counter) else if(t1->counter > t2->counter)
@@ -132,7 +142,7 @@ util_time_timeout(const struct util_time *start,
} }
#ifdef WIN32 #if defined(PIPE_OS_WINDOWS)
void util_time_sleep(unsigned usecs) void util_time_sleep(unsigned usecs)
{ {
LONGLONG start, curr, end; LONGLONG start, curr, end;

View File

@@ -36,7 +36,9 @@
#define U_TIME_H_ #define U_TIME_H_
#ifndef WIN32 #include "pipe/p_config.h"
#if defined(PIPE_OS_LINUX)
#include <time.h> /* timeval */ #include <time.h> /* timeval */
#include <unistd.h> /* usleep */ #include <unistd.h> /* usleep */
#endif #endif
@@ -56,7 +58,7 @@ extern "C" {
*/ */
struct util_time struct util_time
{ {
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
struct timeval tv; struct timeval tv;
#else #else
long long counter; long long counter;
@@ -84,7 +86,7 @@ util_time_timeout(const struct util_time *start,
const struct util_time *end, const struct util_time *end,
const struct util_time *curr); const struct util_time *curr);
#ifndef WIN32 #if defined(PIPE_OS_LINUX)
#define util_time_sleep usleep #define util_time_sleep usleep
#else #else
void void

View File

@@ -28,6 +28,7 @@
#ifndef P_UTIL_H #ifndef P_UTIL_H
#define P_UTIL_H #define P_UTIL_H
#include "p_config.h"
#include "p_compiler.h" #include "p_compiler.h"
#include "p_debug.h" #include "p_debug.h"
#include "p_pointer.h" #include "p_pointer.h"
@@ -40,7 +41,7 @@ extern "C" {
#endif #endif
#if defined(WIN32) && defined(DEBUG) /* memory debugging */ #if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY) && defined(DEBUG) /* memory debugging */
#include "p_debug.h" #include "p_debug.h"
@@ -55,7 +56,7 @@ extern "C" {
#else #else
#ifdef WIN32 #if defined(PIPE_SUBSYSTEM_WINDOWS_DISPLAY)
void * __stdcall void * __stdcall
EngAllocMem( EngAllocMem(
@@ -118,7 +119,7 @@ REALLOC( void *old_ptr, unsigned old_size, unsigned new_size )
return new_ptr; return new_ptr;
} }
#else /* !WIN32 */ #else /* !PIPE_SUBSYSTEM_WINDOWS_DISPLAY */
#define MALLOC( SIZE ) malloc( SIZE ) #define MALLOC( SIZE ) malloc( SIZE )
@@ -128,7 +129,7 @@ REALLOC( void *old_ptr, unsigned old_size, unsigned new_size )
#define REALLOC( OLDPTR, OLDSIZE, NEWSIZE ) realloc( OLDPTR, NEWSIZE ) #define REALLOC( OLDPTR, OLDSIZE, NEWSIZE ) realloc( OLDPTR, NEWSIZE )
#endif /* !WIN32 */ #endif /* !PIPE_SUBSYSTEM_WINDOWS_DISPLAY */
#endif /* !DEBUG */ #endif /* !DEBUG */
#define MALLOC_STRUCT(T) (struct T *) MALLOC(sizeof(struct T)) #define MALLOC_STRUCT(T) (struct T *) MALLOC(sizeof(struct T))