mirror of
https://github.com/libretro/RetroArch
synced 2025-02-05 15:40:04 +00:00
(D3D12) Get rid of some wrapper functions
This commit is contained in:
parent
64bee66ba9
commit
19705a3453
@ -380,14 +380,18 @@ void d3d12_upload_texture(D3D12GraphicsCommandList cmd,
|
||||
dst.Type = D3D12_TEXTURE_COPY_TYPE_SUBRESOURCE_INDEX;
|
||||
dst.SubresourceIndex = 0;
|
||||
|
||||
d3d12_resource_transition(
|
||||
cmd, texture->handle, D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
cmd,
|
||||
texture->handle,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
|
||||
D3D12_RESOURCE_STATE_COPY_DEST);
|
||||
|
||||
D3D12CopyTextureRegion(cmd, &dst, 0, 0, 0, &src, NULL);
|
||||
|
||||
d3d12_resource_transition(
|
||||
cmd, texture->handle, D3D12_RESOURCE_STATE_COPY_DEST,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
cmd,
|
||||
texture->handle,
|
||||
D3D12_RESOURCE_STATE_COPY_DEST,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
|
||||
|
||||
if (texture->desc.MipLevels > 1)
|
||||
|
@ -30,6 +30,18 @@
|
||||
|
||||
#define D3D12_MAX_GPU_COUNT 16
|
||||
|
||||
#define D3D12_RESOURCE_TRANSITION(cmd, resource, state_before, state_after) \
|
||||
{ \
|
||||
D3D12_RESOURCE_BARRIER _barrier; \
|
||||
_barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION; \
|
||||
_barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE; \
|
||||
_barrier.Transition.pResource = resource; \
|
||||
_barrier.Transition.StateBefore = state_before; \
|
||||
_barrier.Transition.StateAfter = state_after; \
|
||||
_barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES; \
|
||||
D3D12ResourceBarrier(cmd, 1, &_barrier); \
|
||||
}
|
||||
|
||||
typedef const ID3D12PipelineState* D3D12PipelineStateRef;
|
||||
|
||||
/* auto-generated */
|
||||
@ -774,41 +786,4 @@ void d3d12_update_texture(
|
||||
void d3d12_upload_texture(D3D12GraphicsCommandList cmd,
|
||||
d3d12_texture_t* texture, void *userdata);
|
||||
|
||||
#if !defined(__cplusplus) || defined(CINTERFACE)
|
||||
static INLINE void d3d12_resource_transition(
|
||||
D3D12GraphicsCommandList cmd,
|
||||
D3D12Resource resource,
|
||||
D3D12_RESOURCE_STATES state_before,
|
||||
D3D12_RESOURCE_STATES state_after)
|
||||
{
|
||||
D3D12_RESOURCE_BARRIER barrier;
|
||||
barrier.Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
|
||||
barrier.Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
|
||||
barrier.Transition.pResource = resource;
|
||||
barrier.Transition.StateBefore = state_before;
|
||||
barrier.Transition.StateAfter = state_after;
|
||||
barrier.Transition.Subresource = D3D12_RESOURCE_BARRIER_ALL_SUBRESOURCES;
|
||||
D3D12ResourceBarrier(cmd, 1, &barrier);
|
||||
}
|
||||
|
||||
static INLINE void d3d12_set_texture(D3D12GraphicsCommandList cmd, const d3d12_texture_t* texture)
|
||||
{
|
||||
D3D12SetGraphicsRootDescriptorTable(cmd, ROOT_ID_TEXTURE_T, texture->gpu_descriptor[0]);
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
d3d12_set_sampler(D3D12GraphicsCommandList cmd, D3D12_GPU_DESCRIPTOR_HANDLE sampler)
|
||||
{
|
||||
D3D12SetGraphicsRootDescriptorTable(cmd, ROOT_ID_SAMPLER_T, sampler);
|
||||
}
|
||||
|
||||
static INLINE void
|
||||
d3d12_set_texture_and_sampler(D3D12GraphicsCommandList cmd, const d3d12_texture_t* texture)
|
||||
{
|
||||
D3D12SetGraphicsRootDescriptorTable(cmd, ROOT_ID_TEXTURE_T, texture->gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(cmd, ROOT_ID_SAMPLER_T, texture->sampler);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
RETRO_END_DECLS
|
||||
|
@ -2512,8 +2512,9 @@ static bool d3d12_gfx_frame(
|
||||
|
||||
if (d3d12->pass[i].rt.handle)
|
||||
{
|
||||
d3d12_resource_transition(
|
||||
d3d12->queue.cmd, d3d12->pass[i].rt.handle,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->pass[i].rt.handle,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
|
||||
@ -2534,8 +2535,9 @@ static bool d3d12_gfx_frame(
|
||||
else
|
||||
D3D12DrawInstanced(d3d12->queue.cmd, 4, 1, 4, 0);
|
||||
|
||||
d3d12_resource_transition(
|
||||
d3d12->queue.cmd, d3d12->pass[i].rt.handle,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->pass[i].rt.handle,
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
|
||||
texture = &d3d12->pass[i].rt;
|
||||
@ -2554,9 +2556,13 @@ static bool d3d12_gfx_frame(
|
||||
d3d12->pipes[VIDEO_SHADER_STOCK_BLEND]);
|
||||
D3D12SetGraphicsRootSignature(d3d12->queue.cmd,
|
||||
d3d12->desc.rootSignature);
|
||||
d3d12_set_texture(d3d12->queue.cmd, &d3d12->frame.texture[0]);
|
||||
d3d12_set_sampler(d3d12->queue.cmd,
|
||||
d3d12->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_TEXTURE_T,
|
||||
d3d12->frame.texture[0].gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_SAMPLER_T,
|
||||
d3d12->samplers[
|
||||
RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
|
||||
D3D12SetGraphicsRootConstantBufferView(
|
||||
d3d12->queue.cmd, ROOT_ID_UBO,
|
||||
d3d12->frame.ubo_view.BufferLocation);
|
||||
@ -2568,8 +2574,9 @@ static bool d3d12_gfx_frame(
|
||||
#ifdef HAVE_DXGI_HDR
|
||||
if ((d3d12->flags & D3D12_ST_FLAG_HDR_ENABLE) && use_back_buffer)
|
||||
{
|
||||
d3d12_resource_transition(
|
||||
d3d12->queue.cmd, d3d12->chain.back_buffer.handle,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->chain.back_buffer.handle,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE,
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
|
||||
@ -2589,7 +2596,7 @@ static bool d3d12_gfx_frame(
|
||||
else
|
||||
#endif
|
||||
{
|
||||
d3d12_resource_transition(
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->chain.renderTargets[d3d12->chain.frame_index],
|
||||
D3D12_RESOURCE_STATE_PRESENT,
|
||||
@ -2630,7 +2637,12 @@ static bool d3d12_gfx_frame(
|
||||
D3D12RSSetScissorRects(d3d12->queue.cmd, 1, &d3d12->chain.scissorRect);
|
||||
}
|
||||
|
||||
d3d12_set_texture_and_sampler(d3d12->queue.cmd, &d3d12->menu.texture);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_TEXTURE_T,
|
||||
d3d12->menu.texture.gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_SAMPLER_T,
|
||||
d3d12->menu.texture.sampler);
|
||||
D3D12IASetVertexBuffers(d3d12->queue.cmd, 0, 1, &d3d12->menu.vbo_view);
|
||||
D3D12DrawInstanced(d3d12->queue.cmd, 4, 1, 0, 0);
|
||||
}
|
||||
@ -2711,14 +2723,15 @@ static bool d3d12_gfx_frame(
|
||||
/* Copy over back buffer to swap chain render targets */
|
||||
if ((d3d12->flags & D3D12_ST_FLAG_HDR_ENABLE) && use_back_buffer)
|
||||
{
|
||||
d3d12_resource_transition(
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->chain.renderTargets[d3d12->chain.frame_index],
|
||||
D3D12_RESOURCE_STATE_PRESENT,
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET);
|
||||
|
||||
d3d12_resource_transition(
|
||||
d3d12->queue.cmd, d3d12->chain.back_buffer.handle,
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->chain.back_buffer.handle,
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET,
|
||||
D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE);
|
||||
D3D12SetPipelineState(d3d12->queue.cmd,
|
||||
@ -2735,9 +2748,13 @@ static bool d3d12_gfx_frame(
|
||||
|
||||
D3D12SetGraphicsRootSignature(d3d12->queue.cmd,
|
||||
d3d12->desc.rootSignature);
|
||||
d3d12_set_texture(d3d12->queue.cmd, &d3d12->chain.back_buffer);
|
||||
d3d12_set_sampler(d3d12->queue.cmd,
|
||||
d3d12->samplers[RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_TEXTURE_T,
|
||||
d3d12->chain.back_buffer.gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_SAMPLER_T,
|
||||
d3d12->samplers[
|
||||
RARCH_FILTER_UNSPEC][RARCH_WRAP_DEFAULT]);
|
||||
D3D12SetGraphicsRootConstantBufferView(
|
||||
d3d12->queue.cmd, ROOT_ID_UBO,
|
||||
d3d12->hdr.ubo_view.BufferLocation);
|
||||
@ -2756,7 +2773,7 @@ static bool d3d12_gfx_frame(
|
||||
}
|
||||
#endif
|
||||
|
||||
d3d12_resource_transition(
|
||||
D3D12_RESOURCE_TRANSITION(
|
||||
d3d12->queue.cmd,
|
||||
d3d12->chain.renderTargets[d3d12->chain.frame_index],
|
||||
D3D12_RESOURCE_STATE_RENDER_TARGET,
|
||||
|
@ -165,7 +165,8 @@ static void gfx_display_d3d12_draw(gfx_display_ctx_draw_t *draw,
|
||||
D3D12SetPipelineState(d3d12->queue.cmd,
|
||||
d3d12->sprites.pipe);
|
||||
}
|
||||
d3d12_set_texture_and_sampler(d3d12->queue.cmd, texture);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd, ROOT_ID_TEXTURE_T, texture->gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd, ROOT_ID_SAMPLER_T, texture->sampler);
|
||||
}
|
||||
|
||||
D3D12DrawInstanced(d3d12->queue.cmd, vertex_count, 1, d3d12->sprites.offset, 0);
|
||||
|
@ -221,7 +221,10 @@ static void d3d12_font_render_line(
|
||||
d3d12);
|
||||
|
||||
D3D12SetPipelineState(d3d12->queue.cmd, d3d12->sprites.pipe_font);
|
||||
d3d12_set_texture_and_sampler(d3d12->queue.cmd, &font->texture);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_TEXTURE_T, font->texture.gpu_descriptor[0]);
|
||||
D3D12SetGraphicsRootDescriptorTable(d3d12->queue.cmd,
|
||||
ROOT_ID_SAMPLER_T, font->texture.sampler);
|
||||
D3D12DrawInstanced(d3d12->queue.cmd, count, 1, d3d12->sprites.offset, 0);
|
||||
|
||||
D3D12SetPipelineState(d3d12->queue.cmd, d3d12->sprites.pipe);
|
||||
|
Loading…
x
Reference in New Issue
Block a user