diff --git a/gfx/common/d3d_common.c b/gfx/common/d3d_common.c index 0a86e265d8..bfae08d679 100644 --- a/gfx/common/d3d_common.c +++ b/gfx/common/d3d_common.c @@ -543,39 +543,43 @@ void d3d_set_transform(void *_dev, } } -bool d3d_texture_get_level_desc(LPDIRECT3DTEXTURE tex, +bool d3d_texture_get_level_desc(void *_tex, unsigned idx, void *_ppsurface_level) { - if (!tex) - return false; switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: + { #ifdef HAVE_D3D9 + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)_tex; #ifdef __cplusplus - if (SUCCEEDED(tex->GetLevelDesc(idx, (D3DSURFACE_DESC*)_ppsurface_level))) - return true; + if (SUCCEEDED(tex->GetLevelDesc(idx, (D3DSURFACE_DESC*)_ppsurface_level))) + return true; #else #if defined(_XBOX) - D3DTexture_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level); - return true; -#else - if (SUCCEEDED(IDirect3DTexture9_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level))) + D3DTexture_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level); return true; +#else + if (SUCCEEDED(IDirect3DTexture9_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level))) + return true; #endif #endif #endif + } break; case GFX_CTX_DIRECT3D8_API: + { #ifdef HAVE_D3D8 + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)_tex; #ifdef __cplusplus - if (SUCCEEDED(tex->GetLevelDesc(idx, (D3DSURFACE_DESC*)_ppsurface_level))) - return true; + if (SUCCEEDED(tex->GetLevelDesc(idx, (D3DSURFACE_DESC*)_ppsurface_level))) + return true; #else - if (SUCCEEDED(IDirect3DTexture8_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level))) - return true; + if (SUCCEEDED(IDirect3DTexture8_GetLevelDesc(tex, idx, (D3DSURFACE_DESC*)_ppsurface_level))) + return true; #endif #endif + } break; case GFX_CTX_NONE: default: @@ -585,35 +589,42 @@ bool d3d_texture_get_level_desc(LPDIRECT3DTEXTURE tex, return false; } -bool d3d_texture_get_surface_level(LPDIRECT3DTEXTURE tex, +bool d3d_texture_get_surface_level(void *_tex, unsigned idx, void **_ppsurface_level) { - if (!tex) - return false; - switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: + { #ifdef HAVE_D3D9 + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)_tex; + if (!tex) + return false; #ifdef __cplusplus - if (SUCCEEDED(tex->GetSurfaceLevel(idx, (ID3DSURFACE**)_ppsurface_level))) - return true; + if (SUCCEEDED(tex->GetSurfaceLevel(idx, (ID3DSURFACE**)_ppsurface_level))) + return true; #else - if (SUCCEEDED(IDirect3DTexture9_GetSurfaceLevel(tex, idx, (IDirect3DSurface9**)_ppsurface_level))) - return true; + if (SUCCEEDED(IDirect3DTexture9_GetSurfaceLevel(tex, idx, (IDirect3DSurface9**)_ppsurface_level))) + return true; #endif #endif + } break; case GFX_CTX_DIRECT3D8_API: + { #ifdef HAVE_D3D8 + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)_tex; + if (!tex) + return false; #ifdef __cplusplus - if (SUCCEEDED(tex->GetSurfaceLevel(idx, (ID3DSURFACE**)_ppsurface_level))) - return true; + if (SUCCEEDED(tex->GetSurfaceLevel(idx, (ID3DSURFACE**)_ppsurface_level))) + return true; #else - if (SUCCEEDED(IDirect3DTexture8_GetSurfaceLevel(tex, idx, (IDirect3DSurface8**)_ppsurface_level))) - return true; + if (SUCCEEDED(IDirect3DTexture8_GetSurfaceLevel(tex, idx, (IDirect3DSurface8**)_ppsurface_level))) + return true; #endif #endif + } break; case GFX_CTX_NONE: default: @@ -624,7 +635,7 @@ bool d3d_texture_get_surface_level(LPDIRECT3DTEXTURE tex, } #ifdef HAVE_D3DX -static LPDIRECT3DTEXTURE d3d_texture_new_from_file( +static void *d3d_texture_new_from_file( void *dev, const char *path, unsigned width, unsigned height, unsigned miplevels, unsigned usage, D3DFORMAT format, @@ -632,42 +643,39 @@ static LPDIRECT3DTEXTURE d3d_texture_new_from_file( D3DCOLOR color_key, void *src_info_data, PALETTEENTRY *palette) { - LPDIRECT3DTEXTURE buf = NULL; + void *buf = NULL; + HRESULT hr = E_FAIL; + + switch (d3d_common_api) { - HRESULT hr = E_FAIL; - - switch (d3d_common_api) - { - case GFX_CTX_DIRECT3D9_API: + case GFX_CTX_DIRECT3D9_API: #if defined(HAVE_D3D9) - hr = D3DCreateTextureFromFile((LPDIRECT3DDEVICE9)dev, - path, width, height, miplevels, usage, format, - pool, filter, mipfilter, color_key, src_info_data, - palette, &buf); + hr = D3DCreateTextureFromFile((LPDIRECT3DDEVICE9)dev, + path, width, height, miplevels, usage, format, + pool, filter, mipfilter, color_key, src_info_data, + palette, (struct IDirect3DTexture9**)&buf); #endif - break; - case GFX_CTX_DIRECT3D8_API: + break; + case GFX_CTX_DIRECT3D8_API: #if defined(HAVE_D3D8) - hr = D3DCreateTextureFromFile((LPDIRECT3DDEVICE8)dev, - path, width, height, miplevels, usage, format, - pool, filter, mipfilter, color_key, src_info_data, - palette, &buf); + hr = D3DCreateTextureFromFile((LPDIRECT3DDEVICE8)dev, + path, width, height, miplevels, usage, format, + pool, filter, mipfilter, color_key, src_info_data, + palette, (struct IDirect3DTeture8**)&buf); #endif - break; - default: - break; - } - - if (FAILED(hr)) - return NULL; - + break; + default: + break; } + if (FAILED(hr)) + return NULL; + return buf; } #endif -LPDIRECT3DTEXTURE d3d_texture_new(void *_dev, +void *d3d_texture_new(void *_dev, const char *path, unsigned width, unsigned height, unsigned miplevels, unsigned usage, D3DFORMAT format, D3DPOOL pool, unsigned filter, unsigned mipfilter, @@ -675,7 +683,7 @@ LPDIRECT3DTEXTURE d3d_texture_new(void *_dev, PALETTEENTRY *palette, bool want_mipmap) { HRESULT hr = S_OK; - LPDIRECT3DTEXTURE buf = NULL; + void *buf = NULL; if (path) { @@ -702,11 +710,11 @@ LPDIRECT3DTEXTURE d3d_texture_new(void *_dev, #ifdef __cplusplus hr = dev->CreateTexture( width, height, miplevels, usage, - format, pool, &buf, NULL); + format, pool, (LPDIRECT3DTEXTURE9)&buf, NULL); #else hr = IDirect3DDevice9_CreateTexture(dev, width, height, miplevels, usage, - format, pool, &buf, NULL); + format, pool, (struct IDirect3DTexture9**)&buf, NULL); #endif #endif } @@ -718,11 +726,11 @@ LPDIRECT3DTEXTURE d3d_texture_new(void *_dev, #ifdef __cplusplus hr = dev->CreateTexture( width, height, miplevels, usage, - format, pool, &buf); + format, pool, (LPDIRECT3DTEXTURE8)&buf); #else hr = IDirect3DDevice8_CreateTexture(dev, width, height, miplevels, usage, - format, pool, &buf); + format, pool, (LPDIRECT3DTEXTURE8)&buf); #endif #endif } @@ -738,30 +746,37 @@ LPDIRECT3DTEXTURE d3d_texture_new(void *_dev, return buf; } -void d3d_texture_free(LPDIRECT3DTEXTURE tex) +void d3d_texture_free(void *_tex) { - if (!tex) - return; - switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: + { #ifdef HAVE_D3D9 + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)_tex; + if (!tex) + return; #ifdef __cplusplus - tex->Release(); + tex->Release(); #else - IDirect3DTexture9_Release(tex); + IDirect3DTexture9_Release(tex); #endif #endif + } break; case GFX_CTX_DIRECT3D8_API: + { #ifdef HAVE_D3D8 + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)_tex; + if (!tex) + return; #ifdef __cplusplus - tex->Release(); + tex->Release(); #else - IDirect3DTexture8_Release(tex); + IDirect3DTexture8_Release(tex); #endif #endif + } break; case GFX_CTX_NONE: default: @@ -1653,37 +1668,47 @@ bool d3d_device_get_render_target(void *_dev, } -bool d3d_lock_rectangle(LPDIRECT3DTEXTURE tex, +bool d3d_lock_rectangle(void *_tex, unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect, unsigned rectangle_height, unsigned flags) { switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: + { #ifdef HAVE_D3D9 + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)_tex; + if (!tex) + return false; #ifdef __cplusplus - if (FAILED(tex->LockRect(level, lock_rect, rect, flags))) - return false; + if (FAILED(tex->LockRect(level, lock_rect, rect, flags))) + return false; #else #ifdef _XBOX - IDirect3DTexture9_LockRect(tex, level, lock_rect, (const RECT*)rect, flags); + IDirect3DTexture9_LockRect(tex, level, lock_rect, (const RECT*)rect, flags); #else - if (IDirect3DTexture9_LockRect(tex, level, lock_rect, (const RECT*)rect, flags) != D3D_OK) - return false; + if (IDirect3DTexture9_LockRect(tex, level, lock_rect, (const RECT*)rect, flags) != D3D_OK) + return false; #endif #endif #endif + } break; case GFX_CTX_DIRECT3D8_API: + { #ifdef HAVE_D3D8 + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)_tex; + if (!tex) + return false; #ifdef __cplusplus - if (FAILED(tex->LockRect(level, lock_rect, rect, flags))) - return false; + if (FAILED(tex->LockRect(level, lock_rect, rect, flags))) + return false; #else - if (IDirect3DTexture8_LockRect(tex, level, lock_rect, rect, flags) != D3D_OK) - return false; + if (IDirect3DTexture8_LockRect(tex, level, lock_rect, rect, flags) != D3D_OK) + return false; #endif #endif + } break; case GFX_CTX_NONE: default: @@ -1693,27 +1718,37 @@ bool d3d_lock_rectangle(LPDIRECT3DTEXTURE tex, return true; } -void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex) +void d3d_unlock_rectangle(void *_tex) { switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: + { #ifdef HAVE_D3D9 + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)_tex; + if (!tex) + return; #ifdef __cplusplus - tex->UnlockRect(0); + tex->UnlockRect(0); #else - IDirect3DTexture9_UnlockRect(tex, 0); + IDirect3DTexture9_UnlockRect(tex, 0); #endif #endif + } break; case GFX_CTX_DIRECT3D8_API: + { #ifdef HAVE_D3D8 + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)_tex; + if (!tex) + return; #ifdef __cplusplus - tex->UnlockRect(0); + tex->UnlockRect(0); #else - IDirect3DTexture8_UnlockRect(tex, 0); + IDirect3DTexture8_UnlockRect(tex, 0); #endif #endif + } break; case GFX_CTX_NONE: default: @@ -1721,7 +1756,7 @@ void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex) } } -void d3d_lock_rectangle_clear(LPDIRECT3DTEXTURE tex, +void d3d_lock_rectangle_clear(void *tex, unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect, unsigned rectangle_height, unsigned flags) { @@ -1773,18 +1808,14 @@ void d3d_set_viewports(void *_dev, D3DVIEWPORT *vp) void d3d_set_texture(void *_dev, unsigned sampler, void *tex_data) { - LPDIRECT3DTEXTURE tex = (LPDIRECT3DTEXTURE)tex_data; - - if (!tex) - return; - switch (d3d_common_api) { case GFX_CTX_DIRECT3D9_API: { #ifdef HAVE_D3D9 - LPDIRECT3DDEVICE9 dev = (LPDIRECT3DDEVICE9)_dev; - if (!dev) + LPDIRECT3DTEXTURE9 tex = (LPDIRECT3DTEXTURE9)tex_data; + LPDIRECT3DDEVICE9 dev = (LPDIRECT3DDEVICE9)_dev; + if (!dev || !tex) return; #ifdef __cplusplus dev->SetTexture(sampler, tex); @@ -1798,8 +1829,9 @@ void d3d_set_texture(void *_dev, unsigned sampler, case GFX_CTX_DIRECT3D8_API: { #ifdef HAVE_D3D8 - LPDIRECT3DDEVICE8 dev = (LPDIRECT3DDEVICE8)_dev; - if (!dev) + LPDIRECT3DTEXTURE8 tex = (LPDIRECT3DTEXTURE8)tex_data; + LPDIRECT3DDEVICE8 dev = (LPDIRECT3DDEVICE8)_dev; + if (!dev || !tex) return; #ifdef __cplusplus dev->SetTexture(sampler, tex); @@ -2057,7 +2089,7 @@ bool d3d_set_vertex_shader_constantf(void *_dev, } void d3d_texture_blit(unsigned pixel_size, - LPDIRECT3DTEXTURE tex, + void *tex, D3DLOCKED_RECT *lr, const void *frame, unsigned width, unsigned height, unsigned pitch) { diff --git a/gfx/common/d3d_common.h b/gfx/common/d3d_common.h index 3e4352e4be..27c478661d 100644 --- a/gfx/common/d3d_common.h +++ b/gfx/common/d3d_common.h @@ -26,7 +26,7 @@ RETRO_BEGIN_DECLS typedef struct d3d_texture { - LPDIRECT3DTEXTURE data; + void *data; D3DPOOL pool; } d3d_texture_t; @@ -41,13 +41,13 @@ void d3d_vertex_buffer_unlock(void *data); void d3d_vertex_buffer_free(void *vertex_data, void *vertex_declaration); -bool d3d_texture_get_level_desc(LPDIRECT3DTEXTURE tex, +bool d3d_texture_get_level_desc(void *tex, unsigned idx, void *_ppsurface_level); -bool d3d_texture_get_surface_level(LPDIRECT3DTEXTURE tex, +bool d3d_texture_get_surface_level(void *tex, unsigned idx, void **_ppsurface_level); -LPDIRECT3DTEXTURE d3d_texture_new(void *dev, +void *d3d_texture_new(void *dev, const char *path, unsigned width, unsigned height, unsigned miplevels, unsigned usage, D3DFORMAT format, D3DPOOL pool, unsigned filter, unsigned mipfilter, @@ -58,7 +58,7 @@ void d3d_set_stream_source(void *dev, unsigned stream_no, void *stream_vertbuf, unsigned offset_bytes, unsigned stride); -void d3d_texture_free(LPDIRECT3DTEXTURE tex); +void d3d_texture_free(void *tex); void d3d_set_transform(void *dev, D3DTRANSFORMSTATETYPE state, CONST D3DMATRIX *matrix); @@ -89,15 +89,15 @@ void d3d_clear(void *dev, unsigned count, const D3DRECT *rects, unsigned flags, D3DCOLOR color, float z, unsigned stencil); -bool d3d_lock_rectangle(LPDIRECT3DTEXTURE tex, +bool d3d_lock_rectangle(void *tex, unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect, unsigned rectangle_height, unsigned flags); -void d3d_lock_rectangle_clear(LPDIRECT3DTEXTURE tex, +void d3d_lock_rectangle_clear(void *tex, unsigned level, D3DLOCKED_RECT *lock_rect, RECT *rect, unsigned rectangle_height, unsigned flags); -void d3d_unlock_rectangle(LPDIRECT3DTEXTURE tex); +void d3d_unlock_rectangle(void *tex); void d3d_set_texture(void *dev, unsigned sampler, void *tex_data); @@ -121,7 +121,7 @@ bool d3d_set_vertex_shader_constantf(void *dev, UINT start_register,const float* constant_data, unsigned vector4f_count); void d3d_texture_blit(unsigned pixel_size, - LPDIRECT3DTEXTURE tex, + void *tex, D3DLOCKED_RECT *lr, const void *frame, unsigned width, unsigned height, unsigned pitch); diff --git a/gfx/drivers/d3d.h b/gfx/drivers/d3d.h index 6c94d93517..eb529a95ab 100644 --- a/gfx/drivers/d3d.h +++ b/gfx/drivers/d3d.h @@ -52,7 +52,7 @@ typedef struct float tex_coords[4]; float vert_coords[4]; float alpha_mod; - LPDIRECT3DTEXTURE tex; + void *tex; void *vert_buf; } overlay_t; diff --git a/gfx/drivers/d3d8.c b/gfx/drivers/d3d8.c index f7a937e3b1..6e38dc3d78 100644 --- a/gfx/drivers/d3d8.c +++ b/gfx/drivers/d3d8.c @@ -62,7 +62,7 @@ typedef struct d3d8_renderchain unsigned pixel_size; LPDIRECT3DDEVICE8 dev; const video_info_t *video_info; - LPDIRECT3DTEXTURE tex; + LPDIRECT3DTEXTURE8 tex; LPDIRECT3DVERTEXBUFFER vertex_buf; unsigned last_width; unsigned last_height; @@ -1643,8 +1643,8 @@ static void d3d8_video_texture_load_d3d(d3d_video_t *d3d, uintptr_t *id) { D3DLOCKED_RECT d3dlr; - unsigned usage = 0; - LPDIRECT3DTEXTURE tex = d3d_texture_new(d3d->dev, NULL, + unsigned usage = 0; + LPDIRECT3DTEXTURE8 tex = d3d_texture_new(d3d->dev, NULL, ti->width, ti->height, 0, usage, d3d_get_argb8888_format(), D3DPOOL_MANAGED, 0, 0, 0, @@ -1698,11 +1698,11 @@ static uintptr_t d3d8_load_texture(void *video_data, void *data, static void d3d8_unload_texture(void *data, uintptr_t id) { - LPDIRECT3DTEXTURE texid; + LPDIRECT3DTEXTURE8 texid; if (!id) return; - texid = (LPDIRECT3DTEXTURE)id; + texid = (LPDIRECT3DTEXTURE8)id; d3d_texture_free(texid); } diff --git a/gfx/drivers/d3d9.c b/gfx/drivers/d3d9.c index 13d85ca5b9..21a80203d4 100644 --- a/gfx/drivers/d3d9.c +++ b/gfx/drivers/d3d9.c @@ -1639,9 +1639,9 @@ static void d3d9_video_texture_load_d3d(d3d_video_t *d3d, uintptr_t *id) { D3DLOCKED_RECT d3dlr; - LPDIRECT3DTEXTURE tex = NULL; - unsigned usage = 0; - bool want_mipmap = false; + LPDIRECT3DTEXTURE9 tex = NULL; + unsigned usage = 0; + bool want_mipmap = false; if((filter_type == TEXTURE_FILTER_MIPMAP_LINEAR) || (filter_type == TEXTURE_FILTER_MIPMAP_NEAREST)) @@ -1721,11 +1721,11 @@ static uintptr_t d3d9_load_texture(void *video_data, void *data, static void d3d9_unload_texture(void *data, uintptr_t id) { - LPDIRECT3DTEXTURE texid; + LPDIRECT3DTEXTURE9 texid; if (!id) return; - texid = (LPDIRECT3DTEXTURE)id; + texid = (LPDIRECT3DTEXTURE9)id; d3d_texture_free(texid); } diff --git a/gfx/drivers_renderchain/d3d9_cg_renderchain.c b/gfx/drivers_renderchain/d3d9_cg_renderchain.c index 9aa7866458..fc2be9f33f 100644 --- a/gfx/drivers_renderchain/d3d9_cg_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_cg_renderchain.c @@ -58,7 +58,7 @@ struct lut_info { - LPDIRECT3DTEXTURE tex; + LPDIRECT3DTEXTURE9 tex; char id[64]; bool smooth; }; @@ -75,7 +75,7 @@ struct Pass { struct LinkInfo info; D3DPOOL pool; - LPDIRECT3DTEXTURE tex; + LPDIRECT3DTEXTURE9 tex; LPDIRECT3DVERTEXBUFFER vertex_buf; CGprogram vPrg, fPrg; unsigned last_width, last_height; @@ -101,7 +101,7 @@ typedef struct cg_renderchain unsigned frame_count; struct { - LPDIRECT3DTEXTURE tex[TEXTURES]; + LPDIRECT3DTEXTURE9 tex[TEXTURES]; LPDIRECT3DVERTEXBUFFER vertex_buf[TEXTURES]; unsigned ptr; unsigned last_width[TEXTURES]; @@ -516,11 +516,11 @@ static void d3d9_cg_renderchain_bind_prev(void *data, const void *pass_data) param = cgGetNamedParameter(pass->fPrg, attr_texture); if (param) { - LPDIRECT3DTEXTURE tex; + LPDIRECT3DTEXTURE9 tex; index = cgGetParameterResourceIndex(param); - tex = (LPDIRECT3DTEXTURE) + tex = (LPDIRECT3DTEXTURE9) chain->prev.tex[(chain->prev.ptr - (i + 1)) & TEXTURESMASK]; d3d_set_texture(chain->dev, index, tex); @@ -1126,7 +1126,7 @@ static bool d3d9_cg_renderchain_add_lut(void *data, { struct lut_info info; cg_renderchain_t *chain = (cg_renderchain_t*)data; - LPDIRECT3DTEXTURE lut = d3d_texture_new( + LPDIRECT3DTEXTURE9 lut = d3d_texture_new( chain->dev, path, D3D_DEFAULT_NONPOW2,