fix dx12 global barriers
This commit is contained in:
parent
2144de02a0
commit
0efcc35696
@ -719,7 +719,7 @@ void G_MemorySyncEx(G_CommandListHandle cl, G_MemoryBarrierDesc desc);
|
|||||||
})
|
})
|
||||||
|
|
||||||
#define G_GlobalMemorySync(_cl, _stage_prev, _access_prev, _stage_next, _access_next) \
|
#define G_GlobalMemorySync(_cl, _stage_prev, _access_prev, _stage_next, _access_next) \
|
||||||
G_MemorySync((_cl), (G_MemoryBarrierDesc) { \
|
G_MemorySyncEx((_cl), (G_MemoryBarrierDesc) { \
|
||||||
.is_global = 1, \
|
.is_global = 1, \
|
||||||
.stage_prev = _stage_prev, \
|
.stage_prev = _stage_prev, \
|
||||||
.access_prev = _access_prev, \
|
.access_prev = _access_prev, \
|
||||||
|
|||||||
@ -1876,20 +1876,25 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
if (barrier_cmd->kind == G_D12_CmdKind_Barrier)
|
if (barrier_cmd->kind == G_D12_CmdKind_Barrier)
|
||||||
{
|
{
|
||||||
G_MemoryBarrierDesc desc = barrier_cmd->barrier.desc;
|
G_MemoryBarrierDesc desc = barrier_cmd->barrier.desc;
|
||||||
G_D12_Resource *resource = G_D12_ResourceFromHandle(desc.resource);
|
|
||||||
D3D12_BARRIER_TYPE barrier_type = resource->is_texture ? D3D12_BARRIER_TYPE_TEXTURE : D3D12_BARRIER_TYPE_BUFFER;
|
|
||||||
|
|
||||||
/* Translate gpu barrier kind -> d3d barrier fields */
|
/* Translate gpu barrier kind -> d3d barrier fields */
|
||||||
D3D12_BARRIER_SYNC sync_before = G_D12_BarrierSyncFromStages(desc.stage_prev);
|
D3D12_BARRIER_SYNC sync_before = G_D12_BarrierSyncFromStages(desc.stage_prev);
|
||||||
D3D12_BARRIER_SYNC sync_after = G_D12_BarrierSyncFromStages(desc.stage_next);
|
D3D12_BARRIER_SYNC sync_after = G_D12_BarrierSyncFromStages(desc.stage_next);
|
||||||
D3D12_BARRIER_ACCESS access_before = G_D12_BarrierAccessFromAccesses(desc.access_prev);
|
D3D12_BARRIER_ACCESS access_before = G_D12_BarrierAccessFromAccesses(desc.access_prev);
|
||||||
D3D12_BARRIER_ACCESS access_after = G_D12_BarrierAccessFromAccesses(desc.access_next);
|
D3D12_BARRIER_ACCESS access_after = G_D12_BarrierAccessFromAccesses(desc.access_next);
|
||||||
D3D12_BARRIER_LAYOUT layout_before = resource->texture_layout;
|
D3D12_BARRIER_LAYOUT layout_before = D3D12_BARRIER_LAYOUT_UNDEFINED;
|
||||||
D3D12_BARRIER_LAYOUT layout_after = resource->texture_layout;
|
D3D12_BARRIER_LAYOUT layout_after = D3D12_BARRIER_LAYOUT_UNDEFINED;
|
||||||
if (desc.layout != G_Layout_NoChange)
|
D3D12_BARRIER_TYPE barrier_type = D3D12_BARRIER_TYPE_GLOBAL;
|
||||||
|
if (!desc.is_global)
|
||||||
{
|
{
|
||||||
layout_after = G_D12_BarrierLayoutFromLayout(desc.layout);
|
G_D12_Resource *resource = G_D12_ResourceFromHandle(desc.resource);
|
||||||
resource->texture_layout = layout_after;
|
barrier_type = resource->is_texture ? D3D12_BARRIER_TYPE_TEXTURE : D3D12_BARRIER_TYPE_BUFFER;
|
||||||
|
layout_before = resource->texture_layout;
|
||||||
|
layout_after = resource->texture_layout;
|
||||||
|
if (desc.layout != G_Layout_NoChange)
|
||||||
|
{
|
||||||
|
layout_after = G_D12_BarrierLayoutFromLayout(desc.layout);
|
||||||
|
resource->texture_layout = layout_after;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Build barrier */
|
/* Build barrier */
|
||||||
@ -1897,6 +1902,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
{
|
{
|
||||||
case D3D12_BARRIER_TYPE_BUFFER:
|
case D3D12_BARRIER_TYPE_BUFFER:
|
||||||
{
|
{
|
||||||
|
G_D12_Resource *resource = G_D12_ResourceFromHandle(desc.resource);
|
||||||
D3D12_BUFFER_BARRIER *barrier = &buffer_barriers[buffer_barriers_count++];
|
D3D12_BUFFER_BARRIER *barrier = &buffer_barriers[buffer_barriers_count++];
|
||||||
barrier->SyncBefore = sync_before;
|
barrier->SyncBefore = sync_before;
|
||||||
barrier->SyncAfter = sync_after;
|
barrier->SyncAfter = sync_after;
|
||||||
@ -1909,6 +1915,7 @@ i64 G_CommitCommandList(G_CommandListHandle cl_handle)
|
|||||||
|
|
||||||
case D3D12_BARRIER_TYPE_TEXTURE:
|
case D3D12_BARRIER_TYPE_TEXTURE:
|
||||||
{
|
{
|
||||||
|
G_D12_Resource *resource = G_D12_ResourceFromHandle(desc.resource);
|
||||||
D3D12_TEXTURE_BARRIER *barrier = &texture_barriers[texture_barriers_count++];
|
D3D12_TEXTURE_BARRIER *barrier = &texture_barriers[texture_barriers_count++];
|
||||||
barrier->SyncBefore = sync_before;
|
barrier->SyncBefore = sync_before;
|
||||||
barrier->SyncAfter = sync_after;
|
barrier->SyncAfter = sync_after;
|
||||||
|
|||||||
@ -602,6 +602,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
);
|
);
|
||||||
G_Texture2DRef draw_target_ro = G_PushTexture2DRef(frame->gpu_arena, draw_target);
|
G_Texture2DRef draw_target_ro = G_PushTexture2DRef(frame->gpu_arena, draw_target);
|
||||||
G_RWTexture2DRef draw_target_rw = G_PushRWTexture2DRef(frame->gpu_arena, draw_target);
|
G_RWTexture2DRef draw_target_rw = G_PushRWTexture2DRef(frame->gpu_arena, draw_target);
|
||||||
|
Rng3 viewport = RNG3(VEC3(0, 0, 0), VEC3(draw_size.x, draw_size.y, 1));
|
||||||
|
Rng2 scissor = RNG2(VEC2(viewport.p0.x, viewport.p0.y), VEC2(viewport.p1.x, viewport.p1.y));
|
||||||
|
|
||||||
/* Verts */
|
/* Verts */
|
||||||
G_ResourceHandle dverts_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromArena(frame->dverts_arena));
|
G_ResourceHandle dverts_buff = G_PushBufferFromString(frame->gpu_arena, frame->cl, StringFromArena(frame->dverts_arena));
|
||||||
@ -630,8 +632,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
/* Constants */
|
/* Constants */
|
||||||
G_SetConstant(frame->cl, V_ShaderConst_Params, params_ro);
|
G_SetConstant(frame->cl, V_ShaderConst_Params, params_ro);
|
||||||
|
|
||||||
Rng3 viewport = RNG3(VEC3(0, 0, 0), VEC3(draw_size.x, draw_size.y, 1));
|
/* Sync */
|
||||||
Rng2 scissor = RNG2(VEC2(viewport.p0.x, viewport.p0.y), VEC2(viewport.p1.x, viewport.p1.y));
|
G_DumbGlobalMemorySync(frame->cl);
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Backdrop pass
|
//- Backdrop pass
|
||||||
|
|||||||
@ -1395,6 +1395,9 @@ void UI_EndFrame(UI_Frame *frame)
|
|||||||
/* Constants */
|
/* Constants */
|
||||||
G_SetConstant(frame->cl, UI_ShaderConst_Params, params_ro);
|
G_SetConstant(frame->cl, UI_ShaderConst_Params, params_ro);
|
||||||
|
|
||||||
|
/* Sync */
|
||||||
|
G_DumbGlobalMemorySync(frame->cl);
|
||||||
|
|
||||||
//////////////////////////////
|
//////////////////////////////
|
||||||
//- Dispatch shaders
|
//- Dispatch shaders
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user