diff --git a/defines/d3d_defines.h b/defines/d3d_defines.h index 0825184d4b..6f87b21867 100644 --- a/defines/d3d_defines.h +++ b/defines/d3d_defines.h @@ -44,6 +44,8 @@ #elif defined(HAVE_D3D8) #ifdef _XBOX #include +#else +#include "../gfx/include/d3d8/d3d8.h" #endif /* Direct3D 8 */ @@ -60,7 +62,9 @@ #define D3DCREATE_CTX Direct3DCreate8 +#if !defined(D3DLOCK_NOSYSLOCK) && defined(_XBOX) #define D3DLOCK_NOSYSLOCK (0) +#endif #define D3DSAMP_ADDRESSU D3DTSS_ADDRESSU #define D3DSAMP_ADDRESSV D3DTSS_ADDRESSV #define D3DSAMP_MAGFILTER D3DTSS_MAGFILTER diff --git a/gfx/common/d3d_common.cpp b/gfx/common/d3d_common.cpp index f6f8ffcb25..0ef4ab26cd 100644 --- a/gfx/common/d3d_common.cpp +++ b/gfx/common/d3d_common.cpp @@ -18,8 +18,10 @@ #include "d3d_common.h" -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) #include "../include/d3d9/d3dx9tex.h" +#elif defined(HAVE_D3D8) +#include "../include/d3d8/d3dx8tex.h" #endif bool d3d_swap(void *data, LPDIRECT3DDEVICE dev) @@ -75,7 +77,7 @@ LPDIRECT3DTEXTURE d3d_texture_new(LPDIRECT3DDEVICE dev, { hr = dev->CreateTexture(width, height, miplevels, usage, format, pool, &buf -#ifndef _XBOX1 +#ifndef HAVE_D3D8 , NULL #endif ); @@ -120,12 +122,14 @@ LPDIRECT3DVERTEXBUFFER d3d_vertex_buffer_new(LPDIRECT3DDEVICE dev, LPDIRECT3DVERTEXBUFFER buf; #ifndef _XBOX +#ifndef HAVE_D3D8 if (usage == 0) { if (dev->GetSoftwareVertexProcessing()) usage = D3DUSAGE_SOFTWAREPROCESSING; } #endif +#endif #if defined(HAVE_D3D8) hr = IDirect3DDevice8_CreateVertexBuffer(dev, length, usage, fvf, pool, @@ -222,6 +226,8 @@ void d3d_set_sampler_address_u(LPDIRECT3DDEVICE dev, D3DDevice_SetSamplerState_AddressU_Inline(dev, sampler, value); #elif defined(HAVE_D3D9) && !defined(__cplusplus) IDirect3DDevice9_SetSamplerState(dev, sampler, D3DSAMP_ADDRESSU, value); +#elif defined(HAVE_D3D8) + /* TODO/FIXME - we need a D3D8 implementation here */ #else dev->SetSamplerState(sampler, D3DSAMP_ADDRESSU, value); #endif @@ -237,6 +243,8 @@ void d3d_set_sampler_address_v(LPDIRECT3DDEVICE dev, D3DDevice_SetSamplerState_AddressV_Inline(dev, sampler, value); #elif defined(HAVE_D3D9) && !defined(__cplusplus) IDirect3DDevice9_SetSamplerState(dev, sampler, D3DSAMP_ADDRESSV, value); +#elif defined(HAVE_D3D8) + /* TODO/FIXME - we need a D3D8 implementation here */ #else dev->SetSamplerState(sampler, D3DSAMP_ADDRESSV, value); #endif @@ -252,6 +260,8 @@ void d3d_set_sampler_minfilter(LPDIRECT3DDEVICE dev, D3DDevice_SetSamplerState_MinFilter(dev, sampler, value); #elif defined(HAVE_D3D9) && !defined(__cplusplus) IDirect3DDevice9_SetSamplerState(dev, sampler, D3DSAMP_MINFILTER, value); +#elif defined(HAVE_D3D8) + /* TODO/FIXME - we need a D3D8 implementation here */ #else dev->SetSamplerState(sampler, D3DSAMP_MINFILTER, value); #endif @@ -267,6 +277,8 @@ void d3d_set_sampler_magfilter(LPDIRECT3DDEVICE dev, D3DDevice_SetSamplerState_MagFilter(dev, sampler, value); #elif defined(HAVE_D3D9) && !defined(__cplusplus) IDirect3DDevice9_SetSamplerState(dev, sampler, D3DSAMP_MAGFILTER, value); +#elif defined(HAVE_D3D8) + /* TODO/FIXME - we need a D3D8 implementation here */ #else dev->SetSamplerState(sampler, D3DSAMP_MAGFILTER, value); #endif @@ -390,6 +402,8 @@ HRESULT d3d_set_vertex_shader(LPDIRECT3DDEVICE dev, unsigned index, LPDIRECT3DVERTEXSHADER shader = (LPDIRECT3DVERTEXSHADER)data; D3DDevice_SetVertexShader(dev, shader); return S_OK; +#elif defined(HAVE_D3D8) + return E_FAIL; #else LPDIRECT3DVERTEXSHADER shader = (LPDIRECT3DVERTEXSHADER)data; return dev->SetVertexShader(shader); diff --git a/gfx/common/win32_common.c b/gfx/common/win32_common.c index 544eef679c..6bee409cb8 100644 --- a/gfx/common/win32_common.c +++ b/gfx/common/win32_common.c @@ -55,7 +55,7 @@ extern LRESULT win32_menu_loop(HWND owner, WPARAM wparam); -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) || defined(HAVE_D3D8) extern bool dinput_handle_message(void *dinput, UINT message, WPARAM wParam, LPARAM lParam); extern void *dinput_gdi; @@ -506,7 +506,7 @@ static void win32_set_droppable(ui_window_win32_t *window, bool droppable) DragAcceptFiles_func(window->hwnd, droppable); } -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) || defined(HAVE_D3D8) LRESULT CALLBACK WndProcD3D(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam) { @@ -595,7 +595,7 @@ LRESULT CALLBACK WndProcGL(HWND hwnd, UINT message, return 0; } -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) || defined(HAVE_D3D8) if (dinput_wgl && dinput_handle_message(dinput_wgl, message, wparam, lparam)) return 0; @@ -687,7 +687,7 @@ LRESULT CALLBACK WndProcGDI(HWND hwnd, UINT message, return 0; } -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) || defined(HAVE_D3D8) if (dinput_gdi && dinput_handle_message(dinput_gdi, message, wparam, lparam)) return 0; diff --git a/gfx/common/win32_common.h b/gfx/common/win32_common.h index 43bef2fc85..c87a991fdb 100644 --- a/gfx/common/win32_common.h +++ b/gfx/common/win32_common.h @@ -124,7 +124,7 @@ void win32_window_reset(void); void win32_destroy_window(void); -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) || defined(HAVE_D3D8) LRESULT CALLBACK WndProcD3D(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam); #endif diff --git a/gfx/drivers/d3d.cpp b/gfx/drivers/d3d.cpp index 2dec2df5be..39f6c99f63 100644 --- a/gfx/drivers/d3d.cpp +++ b/gfx/drivers/d3d.cpp @@ -405,7 +405,7 @@ static void d3d_overlay_render(d3d_video_t *d3d, video_frame_info_t *video_info, d3d_enable_blend_func(d3d->dev); -#ifndef _XBOX1 +#if defined(HAVE_D3D9) { LPDIRECT3DVERTEXDECLARATION vertex_decl; /* set vertex declaration for overlay. */ @@ -485,6 +485,12 @@ static void d3d_deinitialize(d3d_video_t *d3d) d3d_deinit_chain(d3d); } +#if defined(HAVE_D3D8) && !defined(_XBOX) +#define FS_PRESENTINTERVAL(pp) ((pp)->FullScreen_PresentationInterval) +#else +#define FS_PRESENTINTERVAL(pp) ((pp)->PresentationInterval) +#endif + void d3d_make_d3dpp(void *data, const video_info_t *info, D3DPRESENT_PARAMETERS *d3dpp) { @@ -503,7 +509,7 @@ void d3d_make_d3dpp(void *data, d3dpp->Windowed = settings->bools.video_windowed_fullscreen || !info->fullscreen; #endif - d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_IMMEDIATE; + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_IMMEDIATE; if (info->vsync) { @@ -511,16 +517,16 @@ void d3d_make_d3dpp(void *data, { default: case 1: - d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_ONE; + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_ONE; break; case 2: - d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_TWO; + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_TWO; break; case 3: - d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_THREE; + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_THREE; break; case 4: - d3dpp->PresentationInterval = D3DPRESENT_INTERVAL_FOUR; + FS_PRESENTINTERVAL(d3dpp) = D3DPRESENT_INTERVAL_FOUR; break; } } @@ -988,6 +994,7 @@ static bool d3d_construct(d3d_video_t *d3d, #endif memset(&d3d->windowClass, 0, sizeof(d3d->windowClass)); + #ifdef HAVE_WINDOW d3d->windowClass.lpfnWndProc = WndProcD3D; win32_window_init(&d3d->windowClass, true, NULL); diff --git a/gfx/drivers/d3d.h b/gfx/drivers/d3d.h index c1d520b629..d30410733b 100644 --- a/gfx/drivers/d3d.h +++ b/gfx/drivers/d3d.h @@ -28,16 +28,6 @@ #define HAVE_WINDOW #endif -#if defined(_XBOX1) -#ifndef HAVE_D3D8 -#define HAVE_D3D8 -#endif -#else -#ifndef HAVE_D3D9 -#define HAVE_D3D9 -#endif -#endif - #include "../../defines/d3d_defines.h" #ifdef _XBOX1 @@ -65,11 +55,11 @@ typedef struct void *vert_buf; } overlay_t; -#ifdef _XBOX +#if defined(_XBOX) || defined(HAVE_D3D8) typedef struct Vertex { float x, y; -#if defined(_XBOX1) +#if defined(_XBOX1) || defined(HAVE_D3D8) float z; float rhw; #endif diff --git a/gfx/drivers_font/d3d_w32_font.cpp b/gfx/drivers_font/d3d_w32_font.cpp index 6347bb5bf2..351ace05ff 100644 --- a/gfx/drivers_font/d3d_w32_font.cpp +++ b/gfx/drivers_font/d3d_w32_font.cpp @@ -23,8 +23,10 @@ #include "../../configuration.h" -#ifdef HAVE_D3D9 +#if defined(HAVE_D3D9) #include "../include/d3d9/d3dx9core.h" +#elif defined(HAVE_D3D8) +#include "../include/d3d8/d3dx8core.h" #endif #include @@ -43,7 +45,11 @@ static void *d3dfonts_w32_init_font(void *video_data, uint32_t r, g, b; d3dfonts_t *d3dfonts = NULL; settings_t *settings = config_get_ptr(); +#if defined(HAVE_D3D8) + D3DXPASS_DESC desc = { +#else D3DXFONT_DESC desc = { +#endif (int)(font_size), 0, 400, 0, false, DEFAULT_CHARSET, OUT_TT_PRECIS, diff --git a/gfx/drivers_renderchain/d3d8_renderchain.cpp b/gfx/drivers_renderchain/d3d8_renderchain.cpp index 5dc1939776..eae343df28 100644 --- a/gfx/drivers_renderchain/d3d8_renderchain.cpp +++ b/gfx/drivers_renderchain/d3d8_renderchain.cpp @@ -16,6 +16,7 @@ #include #include +#include #include "../drivers/d3d.h" #include "../common/d3d_common.h" @@ -82,7 +83,13 @@ static bool renderchain_create_first_pass(void *data, chain->tex = d3d_texture_new(d3dr, NULL, chain->tex_w, chain->tex_h, 1, 0, - info->rgb32 ? D3DFMT_LIN_X8R8G8B8 : D3DFMT_LIN_R5G6B5, + info->rgb32 + ? +#ifdef _XBOX + D3DFMT_LIN_X8R8G8B8 : D3DFMT_LIN_R5G6B5, +#else + D3DFMT_X8R8G8B8 : D3DFMT_R5G6B5, +#endif 0, 0, 0, 0, NULL, NULL); if (!chain->tex) @@ -206,8 +213,10 @@ static void d3d8_renderchain_free(void *data) d3d8_renderchain_deinit(chain->renderchain_data); d3d8_renderchain_clear(chain->renderchain_data); +#if 0 if (chain->tracker) state_tracker_free(chain->tracker); +#endif }