(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->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,
bool smooth, bool ctx_scaling)
{
unsigned i;
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];
else
}
else
{
unsigned i;
for (i = 0; i < RARCH_WRAP_MAX; i++)
d3d11->samplers[RARCH_FILTER_UNSPEC][i] = d3d11->samplers[RARCH_FILTER_NEAREST][i];
}
}
@ -2002,7 +2006,13 @@ static bool d3d11_gfx_frame(
{
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)
d3d11->pass[i].frame_count =
@ -2097,7 +2107,13 @@ static bool d3d11_gfx_frame(
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);
D3D11SetPShaderSamplers(
context, 0, 1, &d3d11->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
@ -2115,7 +2131,13 @@ static bool d3d11_gfx_frame(
if (d3d11->menu.fullscreen)
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 offset = 0;
@ -2132,7 +2154,13 @@ static bool d3d11_gfx_frame(
#endif
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);
D3D11SetVShaderConstantBuffers(context, 0, 1, &d3d11->ubo);
D3D11SetPShaderConstantBuffers(context, 0, 1, &d3d11->ubo);
@ -2229,8 +2257,13 @@ static bool d3d11_gfx_frame(
D3D11SetScissorRects(context, 1,
&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,
&d3d11->hdr.ubo);
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_5:
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);
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 offset = 0;
@ -146,7 +158,13 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
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);
}
@ -164,11 +182,13 @@ static void gfx_display_d3d11_draw(gfx_display_ctx_draw_t *draw,
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);
}
return;
}
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.BindFlags = D3D11_BIND_VERTEX_BUFFER;
{
{
D3D11_SUBRESOURCE_DATA vertexData = { ca->coords.vertex };
D3D11CreateBuffer(d3d11->device, &desc, &vertexData, &d3d11->menu_pipeline_vbo);
}
}
}
{
UINT stride = 2 * sizeof(float);
@ -266,7 +286,7 @@ void gfx_display_d3d11_scissor_begin(void *data,
rect.left = x;
rect.top = y;
rect.right = width + x;
rect.right = width + x;
rect.bottom = height + y;
D3D11SetScissorRects(d3d11->context, 1, &rect);