diff --git a/gfx/d3d9/d3d.cpp b/gfx/d3d9/d3d.cpp index 0835a6576c..42c198e142 100644 --- a/gfx/d3d9/d3d.cpp +++ b/gfx/d3d9/d3d.cpp @@ -42,7 +42,6 @@ namespace Monitor static HMONITOR last_hm; static HMONITOR all_hms[MAX_MONITORS]; static unsigned num_mons; - static unsigned cur_mon_id; } static BOOL CALLBACK monitor_enum_proc(HMONITOR hMonitor, HDC hdcMonitor, LPRECT lprcMonitor, LPARAM dwData) @@ -66,7 +65,7 @@ RECT d3d_monitor_rect(void *data) if (fs_monitor && fs_monitor <= Monitor::num_mons && Monitor::all_hms[fs_monitor - 1]) { hm_to_use = Monitor::all_hms[fs_monitor - 1]; - Monitor::cur_mon_id = fs_monitor - 1; + d3d->cur_mon_id = fs_monitor - 1; } else { @@ -74,7 +73,7 @@ RECT d3d_monitor_rect(void *data) { if (Monitor::all_hms[i] == hm_to_use) { - Monitor::cur_mon_id = i; + d3d->cur_mon_id = i; break; } } @@ -141,7 +140,6 @@ namespace Callback { static bool quit = false; static D3DVideo *curD3D = NULL; - static HRESULT d3d_err; static void *dinput; LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, @@ -195,8 +193,8 @@ static bool d3d_init_base(void *data, const video_info_t *info) return false; } - if (FAILED(Callback::d3d_err = d3d->g_pD3D->CreateDevice( - Monitor::cur_mon_id, + if (FAILED(d3d->d3d_err = d3d->g_pD3D->CreateDevice( + d3d->cur_mon_id, D3DDEVTYPE_HAL, d3d->hWnd, D3DCREATE_HARDWARE_VERTEXPROCESSING, @@ -204,10 +202,10 @@ static bool d3d_init_base(void *data, const video_info_t *info) &d3d->dev))) { RARCH_WARN("[D3D]: Failed to init device with hardware vertex processing (code: 0x%x). Trying to fall back to software vertex processing.\n", - (unsigned)Callback::d3d_err); + (unsigned)d3d->d3d_err); - if (FAILED(Callback::d3d_err = d3d->g_pD3D->CreateDevice( - Monitor::cur_mon_id, + if (FAILED(d3d->d3d_err = d3d->g_pD3D->CreateDevice( + d3d->cur_mon_id, D3DDEVTYPE_HAL, d3d->hWnd, D3DCREATE_SOFTWARE_VERTEXPROCESSING, @@ -344,7 +342,11 @@ static void d3d_overlay_render(void *data, overlay_t &overlay) { d3d->dev->CreateVertexBuffer( sizeof(vert), +#ifdef _XBOX + 0, +#else d3d->dev->GetSoftwareVertexProcessing() ? D3DUSAGE_SOFTWAREPROCESSING : 0, +#endif 0, D3DPOOL_MANAGED, &overlay.vert_buf, @@ -693,13 +695,13 @@ static bool d3d_read_viewport(void *data, uint8_t *buffer) LPDIRECT3DSURFACE target = NULL; LPDIRECT3DSURFACE dest = NULL; - if (FAILED(Callback::d3d_err = d3d->dev->GetRenderTarget(0, &target))) + if (FAILED(d3d->d3d_err = d3d->dev->GetRenderTarget(0, &target))) { ret = false; goto end; } - if (FAILED(Callback::d3d_err = d3d->dev->CreateOffscreenPlainSurface(d3d->screen_width, + if (FAILED(d3d->d3d_err = d3d->dev->CreateOffscreenPlainSurface(d3d->screen_width, d3d->screen_height, D3DFMT_X8R8G8B8, D3DPOOL_SYSTEMMEM, &dest, NULL))) @@ -708,7 +710,7 @@ static bool d3d_read_viewport(void *data, uint8_t *buffer) goto end; } - if (FAILED(Callback::d3d_err = d3d->dev->GetRenderTargetData(target, dest))) + if (FAILED(d3d->d3d_err = d3d->dev->GetRenderTargetData(target, dest))) { ret = false; goto end; diff --git a/gfx/d3d9/d3d9.hpp b/gfx/d3d9/d3d9.hpp index cecef182d3..8c9c3377aa 100644 --- a/gfx/d3d9/d3d9.hpp +++ b/gfx/d3d9/d3d9.hpp @@ -21,6 +21,20 @@ #include "../../config.h" #endif +#ifndef _XBOX +#define HAVE_WINDOW +#endif + +#if defined(_XBOX1) +#ifndef HAVE_D3D8 +#define HAVE_D3D8 +#endif +#else +#ifndef HAVE_D3D9 +#define HAVE_D3D9 +#endif +#endif + #include "../../general.h" #include "../../driver.h" #include "../shader_parse.h" @@ -73,11 +87,17 @@ struct D3DVideo { bool should_resize; +#ifdef HAVE_WINDOW WNDCLASSEX windowClass; +#endif HWND hWnd; LPDIRECT3D g_pD3D; LPDIRECT3DDEVICE dev; +#ifndef _XBOX LPD3DXFONT font; +#endif + HRESULT d3d_err; + static unsigned cur_mon_id; unsigned screen_width; unsigned screen_height; diff --git a/gfx/d3d9/render_chain.hpp b/gfx/d3d9/render_chain.hpp index a587a11830..be484a641a 100644 --- a/gfx/d3d9/render_chain.hpp +++ b/gfx/d3d9/render_chain.hpp @@ -52,7 +52,7 @@ class RenderChain bool init(const LinkInfo &info, PixelFormat fmt); bool set_pass_size(unsigned pass, unsigned width, unsigned height); - void set_final_viewport(const D3DVIEWPORT9 &final_viewport); + void set_final_viewport(const D3DVIEWPORT &final_viewport); bool add_pass(const LinkInfo &info); bool add_lut(const std::string &id, const std::string &path, bool smooth); void add_state_tracker(state_tracker_t *tracker); @@ -102,12 +102,16 @@ class RenderChain #endif unsigned last_width, last_height; +#ifdef HAVE_D3D9 LPDIRECT3DVERTEXDECLARATION vertex_decl; +#endif std::vector attrib_map; }; std::vector passes; +#ifdef HAVE_CG CGprogram vStock, fStock; +#endif struct lut_info { @@ -121,7 +125,13 @@ class RenderChain unsigned frame_count; bool create_first_pass(const LinkInfo &info, PixelFormat fmt); +#if defined(HAVE_CG) bool compile_shaders(CGprogram &fPrg, CGprogram &vPrg, const std::string &shader); + void set_shaders(CGprogram &fPrg, CGprogram &vPrg); + void set_cg_mvp(CGprogram &vPrg, + unsigned vp_width, unsigned vp_height, + unsigned rotation); +#endif void set_vertices(Pass &pass, unsigned width, unsigned height, @@ -130,10 +140,6 @@ class RenderChain unsigned rotation); void set_viewport(const D3DVIEWPORT &vp); - void set_shaders(CGprogram &fPrg, CGprogram &vPrg); - void set_cg_mvp(CGprogram &vPrg, - unsigned vp_width, unsigned vp_height, - unsigned rotation); void set_cg_params(Pass &pass, unsigned input_w, unsigned input_h, unsigned tex_w, unsigned tex_h,