From 0df2be001ee2f994a7c37dccec8088cb8bbfa857 Mon Sep 17 00:00:00 2001 From: libretroadmin Date: Mon, 16 May 2022 13:24:58 +0200 Subject: [PATCH] (D3D9) Only d3d9_renderchain_add_lut requires create_texture_from_file now, so split up into two separate functions - this function requires D3DX which we intend to get rid of long-term --- gfx/common/d3d9_common.c | 44 ++++++++++++++++++---------------- gfx/common/d3d9_common.h | 7 ++++++ gfx/drivers/d3d9_renderchain.h | 5 ++-- gfx/drivers/d3d9cg.c | 2 +- gfx/drivers/d3d9hlsl.c | 2 +- 5 files changed, 35 insertions(+), 25 deletions(-) diff --git a/gfx/common/d3d9_common.c b/gfx/common/d3d9_common.c index 07847bcb0e..164354a00c 100644 --- a/gfx/common/d3d9_common.c +++ b/gfx/common/d3d9_common.c @@ -254,35 +254,39 @@ void d3d9_deinitialize_symbols(void) #endif } -void *d3d9_texture_new(void *_dev, +void *d3d9_texture_new_from_file(void *_dev, const char *path, unsigned width, unsigned height, unsigned miplevels, unsigned usage, INT32 format, INT32 pool, unsigned filter, unsigned mipfilter, INT32 color_key, void *src_info_data, PALETTEENTRY *palette, bool want_mipmap) +{ +#ifdef HAVE_D3DX + LPDIRECT3DDEVICE9 dev = (LPDIRECT3DDEVICE9)_dev; + void *buf = NULL; + if (SUCCEEDED(D3D9CreateTextureFromFile((LPDIRECT3DDEVICE9)dev, + path, width, height, miplevels, usage, format, + (D3DPOOL)pool, filter, mipfilter, color_key, + (D3DXIMAGE_INFO*)src_info_data, + palette, (struct IDirect3DTexture9**)&buf))) + return buf; +#endif + return NULL; +} + +void *d3d9_texture_new(void *_dev, + unsigned width, unsigned height, + unsigned miplevels, unsigned usage, INT32 format, + INT32 pool, unsigned filter, unsigned mipfilter, + INT32 color_key, void *src_info_data, + PALETTEENTRY *palette, bool want_mipmap) { LPDIRECT3DDEVICE9 dev = (LPDIRECT3DDEVICE9)_dev; void *buf = NULL; - - if (path) - { -#ifdef HAVE_D3DX - void *buf = NULL; - if (SUCCEEDED(D3D9CreateTextureFromFile((LPDIRECT3DDEVICE9)dev, - path, width, height, miplevels, usage, format, - (D3DPOOL)pool, filter, mipfilter, color_key, - (D3DXIMAGE_INFO*)src_info_data, - palette, (struct IDirect3DTexture9**)&buf))) - return buf; -#endif - return NULL; - } - #ifndef _XBOX if (want_mipmap) usage |= D3DUSAGE_AUTOGENMIPMAP; #endif - if (FAILED(IDirect3DDevice9_CreateTexture(dev, width, height, miplevels, usage, (D3DFORMAT)format, @@ -1147,7 +1151,7 @@ void d3d9_set_menu_texture_frame(void *data, { IDirect3DTexture9_Release((LPDIRECT3DTEXTURE9)d3d->menu->tex); - d3d->menu->tex = d3d9_texture_new(d3d->dev, NULL, + d3d->menu->tex = d3d9_texture_new(d3d->dev, width, height, 1, 0, D3D9_ARGB8888_FORMAT, D3DPOOL_MANAGED, 0, 0, 0, NULL, NULL, false); @@ -1239,7 +1243,7 @@ static void d3d9_video_texture_load_d3d( (info->type == TEXTURE_FILTER_MIPMAP_NEAREST)) want_mipmap = true; - tex = (LPDIRECT3DTEXTURE9)d3d9_texture_new(d3d->dev, NULL, + tex = (LPDIRECT3DTEXTURE9)d3d9_texture_new(d3d->dev, ti->width, ti->height, 0, usage, D3D9_ARGB8888_FORMAT, D3DPOOL_MANAGED, 0, 0, 0, @@ -1574,7 +1578,7 @@ static bool d3d9_overlay_load(void *data, unsigned height = images[i].height; overlay_t *overlay = (overlay_t*)&d3d->overlays[i]; - overlay->tex = d3d9_texture_new(d3d->dev, NULL, + overlay->tex = d3d9_texture_new(d3d->dev, width, height, 1, 0, D3D9_ARGB8888_FORMAT, diff --git a/gfx/common/d3d9_common.h b/gfx/common/d3d9_common.h index b3b1c14418..12b03c864e 100644 --- a/gfx/common/d3d9_common.h +++ b/gfx/common/d3d9_common.h @@ -101,6 +101,13 @@ void *d3d9_vertex_buffer_new(void *dev, void d3d9_vertex_buffer_free(void *vertex_data, void *vertex_declaration); void *d3d9_texture_new(void *dev, + unsigned width, unsigned height, + unsigned miplevels, unsigned usage, INT32 format, + INT32 pool, unsigned filter, unsigned mipfilter, + INT32 color_key, void *src_info, + PALETTEENTRY *palette, bool want_mipmap); + +void *d3d9_texture_new_from_file(void *dev, const char *path, unsigned width, unsigned height, unsigned miplevels, unsigned usage, INT32 format, INT32 pool, unsigned filter, unsigned mipfilter, diff --git a/gfx/drivers/d3d9_renderchain.h b/gfx/drivers/d3d9_renderchain.h index 611495ff6e..e5b0011ea4 100644 --- a/gfx/drivers/d3d9_renderchain.h +++ b/gfx/drivers/d3d9_renderchain.h @@ -111,7 +111,6 @@ static INLINE bool d3d9_renderchain_add_pass(d3d9_renderchain_t *chain, tex = (LPDIRECT3DTEXTURE9)d3d9_texture_new( chain->dev, - NULL, info->tex_w, info->tex_h, 1, @@ -141,7 +140,7 @@ static INLINE bool d3d9_renderchain_add_lut(d3d9_renderchain_t *chain, { struct lut_info info; LPDIRECT3DTEXTURE9 lut = (LPDIRECT3DTEXTURE9) - d3d9_texture_new( + d3d9_texture_new_from_file( chain->dev, path, D3D_DEFAULT_NONPOW2, @@ -283,7 +282,7 @@ static INLINE bool d3d9_renderchain_set_pass_size( pass->info.tex_h = height; pass->pool = D3DPOOL_DEFAULT; pass->tex = (LPDIRECT3DTEXTURE9) - d3d9_texture_new(dev, NULL, + d3d9_texture_new(dev, width, height, 1, D3DUSAGE_RENDERTARGET, pass2->info.pass->fbo.fp_fbo ? diff --git a/gfx/drivers/d3d9cg.c b/gfx/drivers/d3d9cg.c index 2bf977bb24..b8e0b6482c 100644 --- a/gfx/drivers/d3d9cg.c +++ b/gfx/drivers/d3d9cg.c @@ -813,7 +813,7 @@ static bool d3d9_cg_renderchain_create_first_pass( return false; chain->prev.tex[i] = (LPDIRECT3DTEXTURE9) - d3d9_texture_new(chain->dev, NULL, + d3d9_texture_new(chain->dev, info->tex_w, info->tex_h, 1, 0, fmt, D3DPOOL_MANAGED, 0, 0, 0, NULL, NULL, false); diff --git a/gfx/drivers/d3d9hlsl.c b/gfx/drivers/d3d9hlsl.c index d35338c4a5..20f7c31437 100644 --- a/gfx/drivers/d3d9hlsl.c +++ b/gfx/drivers/d3d9hlsl.c @@ -322,7 +322,7 @@ static bool hlsl_d3d9_renderchain_create_first_pass( return false; chain->prev.tex[i] = (LPDIRECT3DTEXTURE9) - d3d9_texture_new(chain->dev, NULL, + d3d9_texture_new(chain->dev, info->tex_w, info->tex_h, 1, 0, fmt, D3DPOOL_MANAGED, 0, 0, 0, NULL, NULL, false);