Switched platform specific thread creation code to bx::Thread.

This commit is contained in:
bkaradzic 2012-12-02 18:29:28 -08:00
parent bda65c2c0d
commit 88c07c3061
2 changed files with 19 additions and 45 deletions

View file

@ -752,15 +752,9 @@ namespace bgfx
#endif // BX_PLATFORM_ #endif // BX_PLATFORM_
#if BGFX_CONFIG_MULTITHREADED #if BGFX_CONFIG_MULTITHREADED
m_renderThread = 0;
if (_createRenderThread) if (_createRenderThread)
{ {
# if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360 m_thread.init();
m_renderThread = CreateThread(NULL, 16<<10, renderThread, NULL, 0, NULL);
# elif BX_PLATFORM_POSIX
pthread_create(&m_renderThread, NULL, renderThread, NULL);
# endif // BX_PLATFORM_
} }
#else #else
BX_UNUSED(_createRenderThread); BX_UNUSED(_createRenderThread);
@ -801,15 +795,9 @@ namespace bgfx
frame(); frame();
#if BGFX_CONFIG_MULTITHREADED #if BGFX_CONFIG_MULTITHREADED
if (0 != m_renderThread) if (m_thread.isRunning() )
{ {
# if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360 m_thread.shutdown();
WaitForSingleObject(m_renderThread, INFINITE);
m_renderThread = NULL;
# elif BX_PLATFORM_POSIX
pthread_join(m_renderThread, NULL);
m_renderThread = 0;
# endif // BX_PLATFORM_*
} }
#endif // BGFX_CONFIG_MULTITHREADED #endif // BGFX_CONFIG_MULTITHREADED
@ -817,16 +805,6 @@ namespace bgfx
m_render->destroy(); m_render->destroy();
} }
#if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360
DWORD WINAPI renderThread(LPVOID)
#else
void* renderThread(void*)
#endif // BX_PLATFORM_WINDOWS
{
while (!renderFrame() );
return EXIT_SUCCESS;
}
const Memory* alloc(uint32_t _size) const Memory* alloc(uint32_t _size)
{ {
Memory* mem = (Memory*)g_realloc(NULL, sizeof(Memory) + _size); Memory* mem = (Memory*)g_realloc(NULL, sizeof(Memory) + _size);

View file

@ -72,8 +72,6 @@ extern HWND g_bgfxHwnd;
#elif BX_PLATFORM_XBOX360 #elif BX_PLATFORM_XBOX360
# include <malloc.h> # include <malloc.h>
# include <xtl.h> # include <xtl.h>
#elif BX_PLATFORM_POSIX
# include <pthread.h>
#endif // BX_PLATFORM_* #endif // BX_PLATFORM_*
#include "dds.h" #include "dds.h"
@ -107,11 +105,8 @@ namespace stl = std;
#include "config.h" #include "config.h"
#if BGFX_CONFIG_MULTITHREADED
# include <bx/sem.h>
#endif // BGFX_CONFIG_MULTITHREADED
#include <bx/cpu.h> #include <bx/cpu.h>
#include <bx/thread.h>
#include <bx/timer.h> #include <bx/timer.h>
#define BGFX_DRAW_WHOLE_INDEX_BUFFER 0xffffffff #define BGFX_DRAW_WHOLE_INDEX_BUFFER 0xffffffff
@ -1414,16 +1409,11 @@ namespace bgfx
UsedList m_used; UsedList m_used;
}; };
#if BX_PLATFORM_WINDOWS || BX_PLATFORM_XBOX360
DWORD WINAPI renderThread(LPVOID _arg);
#elif BX_PLATFORM_POSIX
void* renderThread(void*);
#endif // BX_PLATFORM_
struct Context struct Context
{ {
Context() Context()
: m_render(&m_frame[0]) : m_thread(renderThread, thisSuppressC4355() )
, m_render(&m_frame[0])
, m_submit(&m_frame[1]) , m_submit(&m_frame[1])
, m_dynamicIndexBufferHandle(BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS) , m_dynamicIndexBufferHandle(BGFX_CONFIG_MAX_DYNAMIC_INDEX_BUFFERS)
, m_dynamicVertexBufferHandle(BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS) , m_dynamicVertexBufferHandle(BGFX_CONFIG_MAX_DYNAMIC_VERTEX_BUFFERS)
@ -1447,6 +1437,18 @@ namespace bgfx
{ {
} }
Context* thisSuppressC4355()
{
return this;
}
static int32_t renderThread(void* _userData)
{
Context* ctx = (Context*)_userData;
while (!ctx->renderFrame() );
return EXIT_SUCCESS;
}
// game thread // game thread
void init(bool _createRenderThread); void init(bool _createRenderThread);
void shutdown(); void shutdown();
@ -2736,13 +2738,6 @@ namespace bgfx
Semaphore m_renderSem; Semaphore m_renderSem;
Semaphore m_gameSem; Semaphore m_gameSem;
# if BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360
HANDLE m_renderThread;
# else
pthread_t m_renderThread;
# endif // BX_PLATFORM_WINDOWS|BX_PLATFORM_XBOX360
#else #else
void gameSemPost() void gameSemPost()
{ {
@ -2761,6 +2756,7 @@ namespace bgfx
} }
#endif // BGFX_CONFIG_MULTITHREADED #endif // BGFX_CONFIG_MULTITHREADED
Thread m_thread;
Frame m_frame[2]; Frame m_frame[2];
Frame* m_render; Frame* m_render;
Frame* m_submit; Frame* m_submit;