From 27170674a574d804a245d6a7d325bd49ff848fec Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 13 May 2018 06:22:12 +0200 Subject: [PATCH] (D3D9) Cleanups --- gfx/common/d3d9_common.h | 14 +-- gfx/drivers_renderchain/d3d9_cg_renderchain.c | 44 ++++----- .../d3d9_hlsl_renderchain.c | 93 ++++++------------- 3 files changed, 51 insertions(+), 100 deletions(-) diff --git a/gfx/common/d3d9_common.h b/gfx/common/d3d9_common.h index 79e3d01ad1..4d2c96d7e8 100644 --- a/gfx/common/d3d9_common.h +++ b/gfx/common/d3d9_common.h @@ -35,28 +35,28 @@ typedef struct d3d9_renderchain_driver { void (*chain_free)(void *data); void *(*chain_new)(void); - bool (*init)(void *data, - const void *video_info_data, + bool (*init)(d3d9_video_t *d3d, + const video_info_t *video_info, void *dev_data, const void *final_viewport_data, const void *info_data, bool rgb32); - void (*set_final_viewport)(void *data, + void (*set_final_viewport)(d3d9_video_t *d3d, void *renderchain_data, const void *viewport_data); bool (*add_pass)(void *data, const void *info_data); bool (*add_lut)(void *data, const char *id, const char *path, bool smooth); void (*add_state_tracker)(void *data, void *tracker_data); - bool (*render)(void *chain_data, const void *data, + bool (*render)(d3d9_video_t *d3d, const void *frame, unsigned width, unsigned height, unsigned pitch, unsigned rotation); void (*convert_geometry)(void *data, const void *info_data, unsigned *out_width, unsigned *out_height, unsigned width, unsigned height, void *final_viewport); - void (*set_font_rect)(void *data, const void *param_data); - bool (*read_viewport)(void *data, uint8_t *buffer, bool is_idle); - void (*viewport_info)(void *data, struct video_viewport *vp); + void (*set_font_rect)(d3d9_video_t *d3d, const void *param_data); + bool (*read_viewport)(d3d9_video_t *d3d, uint8_t *buffer, bool is_idle); + void (*viewport_info)(d3d9_video_t *d3d, struct video_viewport *vp); const char *ident; } d3d9_renderchain_driver_t; diff --git a/gfx/drivers_renderchain/d3d9_cg_renderchain.c b/gfx/drivers_renderchain/d3d9_cg_renderchain.c index 88dab9f5ad..fbf5631165 100644 --- a/gfx/drivers_renderchain/d3d9_cg_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_cg_renderchain.c @@ -773,22 +773,19 @@ static void *d3d9_cg_renderchain_new(void) return renderchain; } -static bool d3d9_cg_renderchain_init_shader(void *data, - void *renderchain_data) +static bool d3d9_cg_renderchain_init_shader(d3d9_video_t *d3d, + cg_renderchain_t *renderchain) { - d3d9_video_t *d3d = (d3d9_video_t*)data; - cg_renderchain_t *renderchain = (cg_renderchain_t*)renderchain_data; + CGcontext cgCtx = cgCreateContext(); - if (!d3d || !renderchain) - return false; - - renderchain->cgCtx = cgCreateContext(); - if (!renderchain->cgCtx) + if (!cgCtx) { RARCH_ERR("Failed to create Cg context.\n"); return false; } + renderchain->cgCtx = cgCtx; + if (FAILED(cgD3D9SetDevice((IDirect3DDevice9*)d3d->dev))) return false; return true; @@ -906,16 +903,15 @@ static bool d3d9_cg_renderchain_create_first_pass( return true; } -static bool d3d9_cg_renderchain_init(void *data, - const void *_video_info, +static bool d3d9_cg_renderchain_init( + d3d9_video_t *d3d, + const video_info_t *video_info, void *dev_, const void *final_viewport_, const void *info_data, bool rgb32) { const struct LinkInfo *info = (const struct LinkInfo*)info_data; - d3d9_video_t *d3d = (d3d9_video_t*)data; cg_renderchain_t *chain = (cg_renderchain_t*)d3d->renderchain_data; - const video_info_t *video_info = (const video_info_t*)_video_info; unsigned fmt = (rgb32) ? RETRO_PIXEL_FORMAT_XRGB8888 : RETRO_PIXEL_FORMAT_RGB565; if (!chain) @@ -1072,11 +1068,10 @@ static void d3d_recompute_pass_sizes(cg_renderchain_t *chain, } static void d3d9_cg_renderchain_set_final_viewport( - void *data, + d3d9_video_t *d3d, void *renderchain_data, const void *viewport_data) { - d3d9_video_t *d3d = (d3d9_video_t*)data; cg_renderchain_t *chain = (cg_renderchain_t*)renderchain_data; const D3DVIEWPORT9 *final_viewport = (const D3DVIEWPORT9*)viewport_data; @@ -1485,7 +1480,7 @@ static void cg_d3d9_renderchain_render_pass( } static bool d3d9_cg_renderchain_render( - void *data, + d3d9_video_t *d3d, const void *frame_data, unsigned width, unsigned height, unsigned pitch, unsigned rotation) @@ -1493,7 +1488,6 @@ static bool d3d9_cg_renderchain_render( LPDIRECT3DSURFACE9 back_buffer, target; unsigned i, current_width, current_height, out_width = 0, out_height = 0; struct Pass *last_pass = NULL; - d3d9_video_t *d3d = (d3d9_video_t*)data; cg_renderchain_t *chain = d3d ? (cg_renderchain_t*)d3d->renderchain_data : NULL; d3d9_cg_renderchain_start_render(chain); @@ -1592,11 +1586,10 @@ static bool d3d9_cg_renderchain_render( } static void d3d9_cg_renderchain_set_font_rect( - void *data, + d3d9_video_t *d3d, const void *font_data) { settings_t *settings = config_get_ptr(); - d3d9_video_t *d3d = (d3d9_video_t*)data; float pos_x = settings->floats.video_msg_pos_x; float pos_y = settings->floats.video_msg_pos_y; float font_size = settings->floats.video_font_size; @@ -1625,22 +1618,17 @@ static void d3d9_cg_renderchain_set_font_rect( } static bool d3d9_cg_renderchain_read_viewport( - void *data, uint8_t *buffer, bool is_idle) + d3d9_video_t *d3d, uint8_t *buffer, bool is_idle) { unsigned width, height; D3DLOCKED_RECT rect; LPDIRECT3DSURFACE9 target = NULL; LPDIRECT3DSURFACE9 dest = NULL; bool ret = true; - d3d9_video_t *d3d = (d3d9_video_t*)data; LPDIRECT3DDEVICE9 d3dr = d3d->dev; video_driver_get_size(&width, &height); - (void)d3d; - (void)data; - (void)buffer; - if ( !d3d9_device_get_render_target(d3dr, 0, (void**)&target) || !d3d9_device_create_offscreen_plain_surface(d3dr, width, height, @@ -1687,12 +1675,12 @@ end: } static void d3d9_cg_renderchain_viewport_info( - void *data, struct video_viewport *vp) + d3d9_video_t *d3d, + struct video_viewport *vp) { unsigned width, height; - d3d9_video_t *d3d = (d3d9_video_t*)data; - if (!d3d || !vp) + if (!vp) return; video_driver_get_size(&width, &height); diff --git a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c index a47bdae9d2..92bc992bb8 100644 --- a/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c +++ b/gfx/drivers_renderchain/d3d9_hlsl_renderchain.c @@ -47,15 +47,14 @@ typedef struct hlsl_d3d9_renderchain LPDIRECT3DVERTEXDECLARATION9 vertex_decl; } hlsl_d3d9_renderchain_t; -static void hlsl_d3d9_renderchain_clear(void *data) +static void hlsl_d3d9_renderchain_clear(hlsl_d3d9_renderchain_t *chain) { - hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*)data; - d3d9_texture_free(chain->tex); d3d9_vertex_buffer_free(chain->vertex_buf, chain->vertex_decl); } -static bool hlsl_d3d9_renderchain_init_shader_fvf(void *data, void *pass_data) +static bool hlsl_d3d9_renderchain_init_shader_fvf(d3d9_video_t *d3d, + hlsl_d3d9_renderchain_t *chain) { static const D3DVERTEXELEMENT9 VertexElements[] = { @@ -63,21 +62,14 @@ static bool hlsl_d3d9_renderchain_init_shader_fvf(void *data, void *pass_data) { 0, 2 * sizeof(float), D3DDECLTYPE_FLOAT2, D3DDECLMETHOD_DEFAULT, D3DDECLUSAGE_TEXCOORD, 0 }, D3DDECL_END() }; - d3d9_video_t *d3d = (d3d9_video_t*)data; - d3d9_video_t *pass = (d3d9_video_t*)data; - hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*) - d3d->renderchain_data; - - (void)pass_data; return d3d9_vertex_declaration_new(d3d->dev, VertexElements, (void**)&chain->vertex_decl); } -static bool hlsl_d3d9_renderchain_create_first_pass(void *data, +static bool hlsl_d3d9_renderchain_create_first_pass(d3d9_video_t *d3d, const video_info_t *info) { - d3d9_video_t *d3d = (d3d9_video_t*)data; hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*) d3d->renderchain_data; @@ -109,28 +101,25 @@ static bool hlsl_d3d9_renderchain_create_first_pass(void *data, d3d9_set_render_state(d3d->dev, D3DRS_CULLMODE, D3DCULL_NONE); d3d9_set_render_state(d3d->dev, D3DRS_ZENABLE, FALSE); - if (!hlsl_d3d9_renderchain_init_shader_fvf(chain, chain)) + if (!hlsl_d3d9_renderchain_init_shader_fvf(d3d, chain)) return false; return true; } static void hlsl_d3d9_renderchain_set_vertices( - void *data, unsigned pass, - unsigned vert_width, unsigned vert_height, uint64_t frame_count) + d3d9_video_t *d3d, + hlsl_d3d9_renderchain_t *chain, + unsigned pass, + unsigned vert_width, unsigned vert_height, + uint64_t frame_count) { video_shader_ctx_params_t params; video_shader_ctx_info_t shader_info; unsigned width, height; - d3d9_video_t *d3d = (d3d9_video_t*)data; - hlsl_d3d9_renderchain_t *chain = d3d ? - (hlsl_d3d9_renderchain_t*)d3d->renderchain_data : NULL; video_driver_get_size(&width, &height); - if (!chain) - return; - if (chain->last_width != vert_width || chain->last_height != vert_height) { unsigned i; @@ -201,11 +190,10 @@ static void hlsl_d3d9_renderchain_set_vertices( } static void hlsl_d3d9_renderchain_blit_to_texture( - void *data, const void *frame, + hlsl_d3d9_renderchain_t *chain, const void *frame, unsigned width, unsigned height, unsigned pitch) { D3DLOCKED_RECT d3dlr = { 0, NULL }; - hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*)data; if (chain->last_width != width || chain->last_height != height) { @@ -226,30 +214,15 @@ static void hlsl_d3d9_renderchain_blit_to_texture( } } -static void hlsl_d3d9_renderchain_deinit(void *data) -{ - hlsl_d3d9_renderchain_t *renderchain = (hlsl_d3d9_renderchain_t*)data; - - if (renderchain) - free(renderchain); -} - -static void hlsl_d3d9_renderchain_deinit_shader(void *data) -{ - (void)data; - /* stub */ -} - static void hlsl_d3d9_renderchain_free(void *data) { - d3d9_video_t *chain = (d3d9_video_t*)data; + hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*)data; if (!chain) return; - hlsl_d3d9_renderchain_deinit_shader(chain); - hlsl_d3d9_renderchain_deinit(chain->renderchain_data); hlsl_d3d9_renderchain_clear(chain->renderchain_data); + free(chain); } void *hlsl_d3d9_renderchain_new(void) @@ -262,16 +235,10 @@ void *hlsl_d3d9_renderchain_new(void) return renderchain; } -static bool hlsl_d3d9_renderchain_init_shader(void *data, - void *renderchain_data) +static bool hlsl_d3d9_renderchain_init_shader(d3d9_video_t *d3d, + hlsl_d3d9_renderchain_t *chain) { video_shader_ctx_init_t init; - d3d9_video_t *d3d = (d3d9_video_t*)data; - settings_t *settings = config_get_ptr(); - (void)renderchain_data; - - if (!d3d) - return false; init.shader_type = RARCH_SHADER_HLSL; init.data = data; @@ -283,7 +250,8 @@ static bool hlsl_d3d9_renderchain_init_shader(void *data, return video_shader_driver_init(&init); } -static bool hlsl_d3d9_renderchain_init(void *data, +static bool hlsl_d3d9_renderchain_init( + d3d9_video_t *d3d, const void *_video_info, void *dev_data, const void *final_viewport_data, @@ -292,8 +260,6 @@ static bool hlsl_d3d9_renderchain_init(void *data, ) { unsigned width, height; - d3d9_video_t *d3d = (d3d9_video_t*)data; - const video_info_t *video_info = (const video_info_t*)_video_info; const struct LinkInfo *link_info = (const struct LinkInfo*)info_data; hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*) d3d->renderchain_data; @@ -303,7 +269,7 @@ static bool hlsl_d3d9_renderchain_init(void *data, (void)final_viewport_data; - if (!hlsl_d3d9_renderchain_init_shader(d3d, NULL)) + if (!hlsl_d3d9_renderchain_init_shader(d3d, chain)) return false; video_driver_get_size(&width, &height); @@ -326,23 +292,20 @@ static bool hlsl_d3d9_renderchain_init(void *data, return true; } -static void hlsl_d3d9_renderchain_set_final_viewport(void *data, +static void hlsl_d3d9_renderchain_set_final_viewport( + d3d9_video_t *d3d, void *renderchain_data, const void *viewport_data) { - (void)data; - (void)renderchain_data; - (void)viewport_data; - - /* stub */ } -static bool hlsl_d3d9_renderchain_render(void *data, const void *frame, +static bool hlsl_d3d9_renderchain_render( + d3d9_video_t *d3d, + const void *frame, unsigned frame_width, unsigned frame_height, unsigned pitch, unsigned rotation) { unsigned i; unsigned width, height; - d3d9_video_t *d3d = (d3d9_video_t*)data; settings_t *settings = config_get_ptr(); hlsl_d3d9_renderchain_t *chain = (hlsl_d3d9_renderchain_t*)d3d->renderchain_data; bool video_smooth = settings->bools.video_smooth; @@ -353,7 +316,7 @@ static bool hlsl_d3d9_renderchain_render(void *data, const void *frame, hlsl_d3d9_renderchain_blit_to_texture(chain, frame, frame_width, frame_height, pitch); - hlsl_d3d9_renderchain_set_vertices(d3d, + hlsl_d3d9_renderchain_set_vertices(d3d, chain, 1, frame_width, frame_height, chain->frame_count); d3d9_set_texture(chain->dev, 0, chain->tex); @@ -365,7 +328,8 @@ static bool hlsl_d3d9_renderchain_render(void *data, const void *frame, d3d9_set_vertex_declaration(chain->dev, chain->vertex_decl); for (i = 0; i < 4; i++) - d3d9_set_stream_source(chain->dev, i, chain->vertex_buf, 0, sizeof(Vertex)); + d3d9_set_stream_source(chain->dev, i, + chain->vertex_buf, 0, sizeof(Vertex)); d3d9_draw_primitive(chain->dev, D3DPT_TRIANGLESTRIP, 0, 2); return true; @@ -408,12 +372,11 @@ static void hlsl_d3d9_renderchain_convert_geometry( } static void hlsl_d3d9_renderchain_viewport_info( - void *data, struct video_viewport *vp) + d3d9_video_t *d3d, struct video_viewport *vp) { unsigned width, height; - d3d9_video_t *d3d = (d3d9_video_t*)data; - if (!d3d || !vp) + if (!vp) return; video_driver_get_size(&width, &height);