(D3D8) Cleanups - get rid of many inline functions

This commit is contained in:
twinaphex 2022-04-22 15:05:28 +02:00
parent 0117228fec
commit 45c901ca53
3 changed files with 45 additions and 185 deletions

View File

@ -73,14 +73,6 @@ typedef struct d3d8_video
overlay_t *overlays;
} d3d8_video_t;
static INLINE bool d3d8_swap(void *data, LPDIRECT3DDEVICE8 dev)
{
if (IDirect3DDevice8_Present(dev, NULL, NULL, NULL, NULL)
== D3DERR_DEVICELOST)
return false;
return true;
}
static INLINE void *d3d8_vertex_buffer_new(
LPDIRECT3DDEVICE8 dev,
unsigned length, unsigned usage,
@ -158,78 +150,6 @@ void *d3d8_texture_new(LPDIRECT3DDEVICE8 dev,
INT32 color_key, void *src_info_data,
PALETTEENTRY *palette, bool want_mipmap);
static INLINE void d3d8_set_stream_source(LPDIRECT3DDEVICE8 dev,
unsigned stream_no,
LPDIRECT3DVERTEXBUFFER8 stream_vertbuf,
unsigned offset_bytes,
unsigned stride)
{
if (stream_vertbuf)
IDirect3DDevice8_SetStreamSource(dev,
stream_no, stream_vertbuf, stride);
}
static INLINE void d3d8_texture_free(LPDIRECT3DTEXTURE8 tex)
{
if (tex)
IDirect3DTexture8_Release(tex);
}
static INLINE void d3d8_set_texture_stage_state(LPDIRECT3DDEVICE8 dev,
unsigned sampler, D3DTEXTURESTAGESTATETYPE type, unsigned value)
{
if (IDirect3DDevice8_SetTextureStageState(dev, sampler,
(D3DTEXTURESTAGESTATETYPE)type, value) != D3D_OK)
RARCH_ERR("SetTextureStageState call failed, sampler: %d, value: %d, type: %d\n", sampler, value, type);
}
static INLINE void d3d8_set_sampler_address_u(LPDIRECT3DDEVICE8 dev,
unsigned sampler, unsigned value)
{
d3d8_set_texture_stage_state(dev, sampler, D3DTSS_ADDRESSU, value);
}
static INLINE void d3d8_set_sampler_address_v(LPDIRECT3DDEVICE8 dev,
unsigned sampler, unsigned value)
{
d3d8_set_texture_stage_state(dev, sampler, D3DTSS_ADDRESSV, value);
}
static INLINE void d3d8_set_sampler_minfilter(void *_dev,
unsigned sampler, enum D3DTEXTUREFILTERTYPE value)
{
d3d8_set_texture_stage_state(_dev, sampler, D3DTSS_MINFILTER, value);
}
static INLINE void d3d8_set_sampler_magfilter(void *_dev,
unsigned sampler, enum D3DTEXTUREFILTERTYPE value)
{
d3d8_set_texture_stage_state(_dev, sampler, D3DTSS_MAGFILTER, value);
}
void d3d8_set_sampler_mipfilter(void *dev,
unsigned sampler, unsigned value);
static INLINE bool d3d8_begin_scene(LPDIRECT3DDEVICE8 dev)
{
if (!dev)
return false;
#ifdef _XBOX
IDirect3DDevice8_BeginScene(dev);
#else
if (FAILED(IDirect3DDevice8_BeginScene(dev)))
return false;
#endif
return true;
}
static INLINE void d3d8_end_scene(LPDIRECT3DDEVICE8 dev)
{
if (dev)
IDirect3DDevice8_EndScene(dev);
}
static INLINE void d3d8_draw_primitive(LPDIRECT3DDEVICE8 dev,
D3DPRIMITIVETYPE type, unsigned start, unsigned count)
{
@ -262,25 +182,6 @@ static INLINE void d3d8_lock_rectangle_clear(
IDirect3DTexture8_UnlockRect((LPDIRECT3DTEXTURE8)tex, 0);
}
static INLINE void d3d8_set_texture(
LPDIRECT3DDEVICE8 dev, unsigned sampler,
LPDIRECT3DTEXTURE8 tex)
{
if (dev && tex)
IDirect3DDevice8_SetTexture(dev, sampler,
(IDirect3DBaseTexture8*)tex);
}
static INLINE bool d3d8_set_vertex_shader(
LPDIRECT3DDEVICE8 dev,
unsigned index,
void *data)
{
if (IDirect3DDevice8_SetVertexShader(dev, index) != D3D_OK)
return false;
return true;
}
static INLINE void d3d8_texture_blit(
unsigned pixel_size,
void *tex,
@ -298,38 +199,6 @@ static INLINE void d3d8_texture_blit(
}
}
static INLINE void d3d8_set_viewports(
LPDIRECT3DDEVICE8 dev,
void *vp)
{
if (dev)
IDirect3DDevice8_SetViewport(dev, (D3DVIEWPORT8*)vp);
}
static INLINE void d3d8_set_render_state(
LPDIRECT3DDEVICE8 dev,
D3DRENDERSTATETYPE state,
DWORD value)
{
if (dev)
IDirect3DDevice8_SetRenderState(dev, state, value);
}
static INLINE void d3d8_enable_blend_func(void *data)
{
if (!data)
return;
d3d8_set_render_state(data, D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
d3d8_set_render_state(data, D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
d3d8_set_render_state(data, D3DRS_ALPHABLENDENABLE, true);
}
static INLINE void d3d8_disable_blend_func(void *data)
{
d3d8_set_render_state(data, D3DRS_ALPHABLENDENABLE, false);
}
void d3d8_frame_postprocess(void *data);
static INLINE void d3d8_surface_free(LPDIRECT3DSURFACE8 surf)
@ -349,14 +218,6 @@ static INLINE bool d3d8_device_get_render_target(
return false;
}
static INLINE void d3d8_device_set_render_target(
LPDIRECT3DDEVICE8 dev, unsigned idx,
LPDIRECT3DSURFACE8 surf)
{
if (dev)
IDirect3DDevice8_SetRenderTarget(dev, surf, NULL);
}
static INLINE bool d3d8_get_render_state(LPDIRECT3DDEVICE8 dev,
D3DRENDERSTATETYPE state, DWORD *value)
{
@ -378,18 +239,6 @@ static INLINE bool d3d8_surface_lock_rect(
return false;
}
static INLINE void d3d8_surface_unlock_rect(LPDIRECT3DSURFACE8 surf)
{
if (surf)
IDirect3DSurface8_UnlockRect(surf);
}
static INLINE void d3d8_unlock_rectangle(LPDIRECT3DTEXTURE8 tex)
{
if (tex)
IDirect3DTexture8_UnlockRect(tex, 0);
}
static INLINE bool d3d8_get_adapter_display_mode(
LPDIRECT3D8 d3d,
unsigned idx,

View File

@ -306,7 +306,9 @@ static void d3d8_renderchain_render_pass(
IDirect3DDevice8_SetStreamSource(d3dr,
0, chain->vertex_buf, sizeof(Vertex));
d3d8_set_mvp(d3d->dev, &d3d->mvp_rotate);
d3d8_draw_primitive(d3dr, D3DPT_TRIANGLESTRIP, 0, 2);
IDirect3DDevice8_BeginScene(d3dr);
IDirect3DDevice8_DrawPrimitive(d3dr, D3DPT_TRIANGLESTRIP, 0, 2);
IDirect3DDevice8_EndScene(d3dr);
}
static bool d3d8_renderchain_render(
@ -527,7 +529,9 @@ static void d3d8_overlay_render(d3d8_video_t *d3d,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MAGFILTER, filter_type);
IDirect3DDevice8_SetTextureStageState(d3d->dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MINFILTER, filter_type);
d3d8_draw_primitive(d3d->dev, D3DPT_TRIANGLESTRIP, 0, 2);
IDirect3DDevice8_BeginScene(d3d->dev);
IDirect3DDevice8_DrawPrimitive(d3d->dev, D3DPT_TRIANGLESTRIP, 0, 2);
IDirect3DDevice8_EndScene(d3d->dev);
/* Restore previous state. */
IDirect3DDevice8_SetRenderState(d3d->dev, D3DRS_ALPHABLENDENABLE, false);
@ -539,7 +543,8 @@ static void d3d8_free_overlay(d3d8_video_t *d3d, overlay_t *overlay)
if (!d3d)
return;
d3d8_texture_free(overlay->tex);
if (overlay->tex)
IDirect3DTexture8_Release(overlay->tex);
d3d8_vertex_buffer_free(overlay->vert_buf, NULL);
}
@ -1390,7 +1395,7 @@ static bool d3d8_overlay_load(void *data,
for (y = 0; y < height; y++, dst += pitch, src += width)
memcpy(dst, src, width << 2);
d3d8_unlock_rectangle(overlay->tex);
IDirect3DTexture8_UnlockRect(overlay->tex, 0);
}
overlay->tex_w = width;
@ -1608,7 +1613,7 @@ static void d3d8_set_menu_texture_frame(void *data,
d3d->menu->tex_h != height)
{
if (d3d->menu)
d3d8_texture_free(d3d->menu->tex);
IDirect3DTexture8_Release(d3d->menu->tex);
d3d->menu->tex = d3d8_texture_new(d3d->dev, NULL,
width, height, 1,
@ -1668,7 +1673,7 @@ static void d3d8_set_menu_texture_frame(void *data,
}
if (d3d->menu)
d3d8_unlock_rectangle(d3d->menu->tex);
IDirect3DTexture8_UnlockRect(d3d->menu->tex, 0);
}
}

View File

@ -102,30 +102,22 @@ static void gfx_display_d3d8_blend_end(void *data)
IDirect3DDevice8_SetRenderState(d3d->dev, D3DRS_ALPHABLENDENABLE, false);
}
static void gfx_display_d3d8_bind_texture(gfx_display_ctx_draw_t *draw,
d3d8_video_t *d3d)
{
LPDIRECT3DDEVICE8 dev = d3d->dev;
IDirect3DDevice8_SetTexture(d3d->dev, 0,
(IDirect3DBaseTexture8*)draw->texture);
IDirect3DDevice8_SetTextureStageState(d3d->dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSU, D3DTADDRESS_COMM_CLAMP);
IDirect3DDevice8_SetTextureStageState(d3d->dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSV, D3DTADDRESS_COMM_CLAMP);
IDirect3DDevice8_SetTextureStageState(d3d->dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MINFILTER, D3DTEXF_COMM_LINEAR);
IDirect3DDevice8_SetTextureStageState(d3d->dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MAGFILTER, D3DTEXF_COMM_LINEAR);
}
static void gfx_display_d3d8_draw(gfx_display_ctx_draw_t *draw,
void *data,
unsigned video_width,
unsigned video_height)
{
static float default_mvp[] ={ 1.0f, 0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f, 0.0f,
0.0f, 0.0f, 1.0f, 0.0f,
0.0f, 0.0f, 0.0f, 1.0f
};
unsigned i;
math_matrix_4x4 mop, m1, m2;
LPDIRECT3DDEVICE8 dev;
D3DPRIMITIVETYPE type;
unsigned start = 0;
unsigned count = 0;
d3d8_video_t *d3d = (d3d8_video_t*)data;
Vertex * pv = NULL;
const float *vertex = NULL;
@ -137,8 +129,8 @@ static void gfx_display_d3d8_draw(gfx_display_ctx_draw_t *draw,
if ((d3d->menu_display.offset + draw->coords->vertices )
> (unsigned)d3d->menu_display.size)
return;
pv = (Vertex*)
dev = d3d->dev;
pv = (Vertex*)
d3d8_vertex_buffer_lock(d3d->menu_display.buffer);
if (!pv)
@ -192,7 +184,7 @@ static void gfx_display_d3d8_draw(gfx_display_ctx_draw_t *draw,
d3d8_vertex_buffer_unlock(d3d->menu_display.buffer);
if (!draw->matrix_data)
draw->matrix_data = gfx_display_d3d8_get_default_mvp(d3d);
draw->matrix_data = &default_mvp;
/* ugh */
matrix_4x4_scale(m1, 2.0, 2.0, 0);
@ -212,17 +204,31 @@ static void gfx_display_d3d8_draw(gfx_display_ctx_draw_t *draw,
matrix_4x4_multiply(m2, d3d->mvp_transposed, m1);
d3d_matrix_transpose(&m1, &m2);
d3d8_set_mvp(d3d->dev, &m1);
d3d8_set_mvp(dev, &m1);
if (draw && draw->texture)
gfx_display_d3d8_bind_texture(draw, d3d);
if (draw->texture)
{
IDirect3DDevice8_SetTexture(dev, 0,
(IDirect3DBaseTexture8*)draw->texture);
IDirect3DDevice8_SetTextureStageState(dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSU, D3DTADDRESS_COMM_CLAMP);
IDirect3DDevice8_SetTextureStageState(dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_ADDRESSV, D3DTADDRESS_COMM_CLAMP);
IDirect3DDevice8_SetTextureStageState(dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MINFILTER, D3DTEXF_COMM_LINEAR);
IDirect3DDevice8_SetTextureStageState(dev, 0,
(D3DTEXTURESTAGESTATETYPE)D3DTSS_MAGFILTER, D3DTEXF_COMM_LINEAR);
}
d3d8_draw_primitive(d3d->dev,
gfx_display_prim_to_d3d8_enum(draw->prim_type),
d3d->menu_display.offset,
draw->coords->vertices -
type = gfx_display_prim_to_d3d8_enum(draw->prim_type);
start = d3d->menu_display.offset;
count = draw->coords->vertices -
((draw->prim_type == GFX_DISPLAY_PRIM_TRIANGLESTRIP)
? 2 : 0));
? 2 : 0);
IDirect3DDevice8_BeginScene(dev);
IDirect3DDevice8_DrawPrimitive(dev, type, start, count);
IDirect3DDevice8_EndScene(dev);
d3d->menu_display.offset += draw->coords->vertices;
}