mirror of
https://github.com/libretro/RetroArch
synced 2025-03-29 22:20:21 +00:00
(D3D9) Cleanups
This commit is contained in:
parent
dee50349ba
commit
27170674a5
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
@ -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);
|
||||
|
Loading…
x
Reference in New Issue
Block a user