(D3D11) Use less inlined functions

This commit is contained in:
twinaphex 2022-04-22 22:58:35 +02:00
parent 7f8a0e352f
commit 5d82b36f9c
3 changed files with 72 additions and 29 deletions

View File

@ -2672,13 +2672,3 @@ static INLINE void d3d11_release_shader(d3d11_shader_t* shader)
Release(shader->ps); Release(shader->ps);
Release(shader->gs); Release(shader->gs);
} }
#if !defined(__cplusplus) || defined(CINTERFACE)
static INLINE void d3d11_set_shader(D3D11DeviceContext ctx, d3d11_shader_t* shader)
{
ctx->lpVtbl->IASetInputLayout(ctx, shader->layout);
ctx->lpVtbl->VSSetShader(ctx, shader->vs, NULL, 0);
ctx->lpVtbl->PSSetShader(ctx, shader->ps, NULL, 0);
ctx->lpVtbl->GSSetShader(ctx, shader->gs, NULL, 0);
}
#endif

View File

@ -405,14 +405,18 @@ static void d3d11_set_hdr10(d3d11_video_t* d3d11, bool hdr10)
static void d3d11_set_filtering(void* data, unsigned index, static void d3d11_set_filtering(void* data, unsigned index,
bool smooth, bool ctx_scaling) bool smooth, bool ctx_scaling)
{ {
unsigned i;
d3d11_video_t* d3d11 = (d3d11_video_t*)data; d3d11_video_t* d3d11 = (d3d11_video_t*)data;
for (i = 0; i < RARCH_WRAP_MAX; i++) if (smooth)
{ {
if (smooth) unsigned i;
for (i = 0; i < RARCH_WRAP_MAX; i++)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_LINEAR][i]; d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_LINEAR][i];
else }
else
{
unsigned i;
for (i = 0; i < RARCH_WRAP_MAX; i++)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_NEAREST][i]; d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_NEAREST][i];
} }
} }
@ -2002,7 +2006,13 @@ static bool d3d11_gfx_frame(
{ {
unsigned j; unsigned j;
d3d11_set_shader(context, &d3d11->pass[i].shader); {
d3d11_shader_t *shader = &d3d11->pass[i].shader;
context->lpVtbl->IASetInputLayout(context, shader->layout);
context->lpVtbl->VSSetShader(context, shader->vs, NULL, 0);
context->lpVtbl->PSSetShader(context, shader->ps, NULL, 0);
context->lpVtbl->GSSetShader(context, shader->gs, NULL, 0);
}
if (d3d11->shader_preset->pass[i].frame_count_mod) if (d3d11->shader_preset->pass[i].frame_count_mod)
d3d11->pass[i].frame_count = d3d11->pass[i].frame_count =
@ -2097,7 +2107,13 @@ static bool d3d11_gfx_frame(
if (texture) if (texture)
{ {
d3d11_set_shader(context, &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND]); {
d3d11_shader_t *shader = &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND];
context->lpVtbl->IASetInputLayout(context, shader->layout);
context->lpVtbl->VSSetShader(context, shader->vs, NULL, 0);
context->lpVtbl->PSSetShader(context, shader->ps, NULL, 0);
context->lpVtbl->GSSetShader(context, shader->gs, NULL, 0);
}
D3D11SetPShaderResources(context, 0, 1, &texture->view); D3D11SetPShaderResources(context, 0, 1, &texture->view);
D3D11SetPShaderSamplers( D3D11SetPShaderSamplers(
context, 0, 1, &d3d11->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]); context, 0, 1, &d3d11->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
@ -2115,7 +2131,13 @@ static bool d3d11_gfx_frame(
if (d3d11->menu.fullscreen) if (d3d11->menu.fullscreen)
D3D11SetViewports(context, 1, &d3d11->viewport); D3D11SetViewports(context, 1, &d3d11->viewport);
d3d11_set_shader(context, &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND]); {
d3d11_shader_t *shader = &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND];
context->lpVtbl->IASetInputLayout(context, shader->layout);
context->lpVtbl->VSSetShader(context, shader->vs, NULL, 0);
context->lpVtbl->PSSetShader(context, shader->ps, NULL, 0);
context->lpVtbl->GSSetShader(context, shader->gs, NULL, 0);
}
{ {
UINT stride = sizeof(d3d11_vertex_t); UINT stride = sizeof(d3d11_vertex_t);
UINT offset = 0; UINT offset = 0;
@ -2132,7 +2154,13 @@ static bool d3d11_gfx_frame(
#endif #endif
D3D11SetViewports(context, 1, &d3d11->viewport); D3D11SetViewports(context, 1, &d3d11->viewport);
d3d11_set_shader(context, &d3d11->sprites.shader); {
d3d11_shader_t *shader = &d3d11->sprites.shader;
context->lpVtbl->IASetInputLayout(context, shader->layout);
context->lpVtbl->VSSetShader(context, shader->vs, NULL, 0);
context->lpVtbl->PSSetShader(context, shader->ps, NULL, 0);
context->lpVtbl->GSSetShader(context, shader->gs, NULL, 0);
}
D3D11SetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); D3D11SetPrimitiveTopology(context, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST);
D3D11SetVShaderConstantBuffers(context, 0, 1, &d3d11->ubo); D3D11SetVShaderConstantBuffers(context, 0, 1, &d3d11->ubo);
D3D11SetPShaderConstantBuffers(context, 0, 1, &d3d11->ubo); D3D11SetPShaderConstantBuffers(context, 0, 1, &d3d11->ubo);
@ -2229,8 +2257,13 @@ static bool d3d11_gfx_frame(
D3D11SetScissorRects(context, 1, D3D11SetScissorRects(context, 1,
&d3d11->scissor); &d3d11->scissor);
d3d11_set_shader(context, {
&d3d11->shaders[VIDEO_SHADER_STOCK_HDR]); d3d11_shader_t *shader = &d3d11->shaders[VIDEO_SHADER_STOCK_HDR];
context->lpVtbl->IASetInputLayout(context, shader->layout);
context->lpVtbl->VSSetShader(context, shader->vs, NULL, 0);
context->lpVtbl->PSSetShader(context, shader->ps, NULL, 0);
context->lpVtbl->GSSetShader(context, shader->gs, NULL, 0);
}
D3D11SetVShaderConstantBuffers(context, 0, 1, D3D11SetVShaderConstantBuffers(context, 0, 1,
&d3d11->hdr.ubo); &d3d11->hdr.ubo);
D3D11SetPShaderResources(context, 0, 1, D3D11SetPShaderResources(context, 0, 1,

View File

@ -58,11 +58,23 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
case VIDEO_SHADER_MENU_4: case VIDEO_SHADER_MENU_4:
case VIDEO_SHADER_MENU_5: case VIDEO_SHADER_MENU_5:
case VIDEO_SHADER_MENU_6: case VIDEO_SHADER_MENU_6:
d3d11_set_shader(d3d11->context, &d3d11->shaders[draw->pipeline_id]); {
d3d11_shader_t *shader = &d3d11->shaders[draw->pipeline_id];
d3d11->context->lpVtbl->IASetInputLayout(d3d11->context, shader->layout);
d3d11->context->lpVtbl->VSSetShader(d3d11->context, shader->vs, NULL, 0);
d3d11->context->lpVtbl->PSSetShader(d3d11->context, shader->ps, NULL, 0);
d3d11->context->lpVtbl->GSSetShader(d3d11->context, shader->gs, NULL, 0);
}
D3D11Draw(d3d11->context, draw->coords->vertices, 0); D3D11Draw(d3d11->context, draw->coords->vertices, 0);
D3D11SetBlendState(d3d11->context, d3d11->blend_enable, NULL, D3D11_DEFAULT_SAMPLE_MASK); D3D11SetBlendState(d3d11->context, d3d11->blend_enable, NULL, D3D11_DEFAULT_SAMPLE_MASK);
d3d11_set_shader(d3d11->context, &d3d11->sprites.shader); {
d3d11_shader_t *shader = &d3d11->sprites.shader;
d3d11->context->lpVtbl->IASetInputLayout(d3d11->context, shader->layout);
d3d11->context->lpVtbl->VSSetShader(d3d11->context, shader->vs, NULL, 0);
d3d11->context->lpVtbl->PSSetShader(d3d11->context, shader->ps, NULL, 0);
d3d11->context->lpVtbl->GSSetShader(d3d11->context, shader->gs, NULL, 0);
}
{ {
UINT stride = sizeof(d3d11_sprite_t); UINT stride = sizeof(d3d11_sprite_t);
UINT offset = 0; UINT offset = 0;
@ -146,7 +158,13 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
sprite++; sprite++;
} }
d3d11_set_shader(d3d11->context, &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND]); {
d3d11_shader_t *shader = &d3d11->shaders[VIDEO_SHADER_STOCK_BLEND];
d3d11->context->lpVtbl->IASetInputLayout(d3d11->context, shader->layout);
d3d11->context->lpVtbl->VSSetShader(d3d11->context, shader->vs, NULL, 0);
d3d11->context->lpVtbl->PSSetShader(d3d11->context, shader->ps, NULL, 0);
d3d11->context->lpVtbl->GSSetShader(d3d11->context, shader->gs, NULL, 0);
}
D3D11SetPrimitiveTopology(d3d11->context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP); D3D11SetPrimitiveTopology(d3d11->context, D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);
} }
@ -164,11 +182,13 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
if (vertex_count > 1) if (vertex_count > 1)
{ {
d3d11_set_shader(d3d11->context, &d3d11->sprites.shader); d3d11_shader_t *shader = &d3d11->sprites.shader;
d3d11->context->lpVtbl->IASetInputLayout(d3d11->context, shader->layout);
d3d11->context->lpVtbl->VSSetShader(d3d11->context, shader->vs, NULL, 0);
d3d11->context->lpVtbl->PSSetShader(d3d11->context, shader->ps, NULL, 0);
d3d11->context->lpVtbl->GSSetShader(d3d11->context, shader->gs, NULL, 0);
D3D11SetPrimitiveTopology(d3d11->context, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST); D3D11SetPrimitiveTopology(d3d11->context, D3D11_PRIMITIVE_TOPOLOGY_POINTLIST);
} }
return;
} }
static void gfx_display_d3d11_draw_pipeline(gfx_display_ctx_draw_t *draw, static void gfx_display_d3d11_draw_pipeline(gfx_display_ctx_draw_t *draw,
@ -194,10 +214,10 @@ static void gfx_display_d3d11_draw_pipeline(gfx_display_ctx_draw_t *draw,
desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float); desc.ByteWidth = ca->coords.vertices * 2 * sizeof(float);
desc.BindFlags = D3D11_BIND_VERTEX_BUFFER; desc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
{ {
D3D11_SUBRESOURCE_DATA vertexData = { ca->coords.vertex }; D3D11_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
D3D11CreateBuffer(d3d11->device, &desc, &vertexData, &d3d11->menu_pipeline_vbo); D3D11CreateBuffer(d3d11->device, &desc, &vertexData, &d3d11->menu_pipeline_vbo);
} }
} }
{ {
UINT stride = 2 * sizeof(float); UINT stride = 2 * sizeof(float);
@ -266,7 +286,7 @@ void gfx_display_d3d11_scissor_begin(void *data,
rect.left = x; rect.left = x;
rect.top = y; rect.top = y;
rect.right = width + x; rect.right = width + x;
rect.bottom = height + y; rect.bottom = height + y;
D3D11SetScissorRects(d3d11->context, 1, &rect); D3D11SetScissorRects(d3d11->context, 1, &rect);