MCPcopy Create free account
hub / github.com/TheRealMJP/DeferredTexturing / RenderDeferred

Method RenderDeferred

BindlessDeferred/BindlessDeferred.cpp:1515–1926  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1513}
1514
1515void BindlessDeferred::RenderDeferred()
1516{
1517 ID3D12GraphicsCommandList* cmdList = DX12::CmdList;
1518
1519 PIXMarker marker(cmdList, "Render Deferred");
1520
1521 {
1522 // Transition our G-Buffer targets to a writable state
1523 D3D12_RESOURCE_BARRIER barriers[5] = {};
1524 barriers[0].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1525 barriers[0].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1526 barriers[0].Transition.pResource = depthBuffer.Resource();
1527 barriers[0].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1528 barriers[0].Transition.StateAfter = D3D12_RESOURCE_STATE_DEPTH_WRITE;
1529 barriers[0].Transition.Subresource = 0;
1530
1531 barriers[1].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1532 barriers[1].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1533 barriers[1].Transition.pResource = tangentFrameTarget.Resource();
1534 barriers[1].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1535 barriers[1].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1536 barriers[1].Transition.Subresource = 0;
1537
1538 barriers[2].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1539 barriers[2].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1540 barriers[2].Transition.pResource = uvTarget.Resource();
1541 barriers[2].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1542 barriers[2].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1543 barriers[2].Transition.Subresource = 0;
1544
1545 barriers[3].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1546 barriers[3].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1547 barriers[3].Transition.pResource = materialIDTarget.Resource();
1548 barriers[3].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1549 barriers[3].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1550 barriers[3].Transition.Subresource = 0;
1551
1552 barriers[4].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1553 barriers[4].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1554 barriers[4].Transition.pResource = uvGradientsTarget.Resource();
1555 barriers[4].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1556 barriers[4].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1557 barriers[4].Transition.Subresource = 0;
1558
1559 const uint32 numBarriers = AppSettings::ComputeUVGradients ? ArraySize_(barriers) - 1 : ArraySize_(barriers);
1560 cmdList->ResourceBarrier(numBarriers, barriers);
1561 }
1562
1563 {
1564 // Set the G-Buffer render targets and clear them
1565 D3D12_CPU_DESCRIPTOR_HANDLE rtvHandles[] = { tangentFrameTarget.RTV.CPUHandle, uvTarget.RTV.CPUHandle,
1566 materialIDTarget.RTV.CPUHandle, uvGradientsTarget.RTV.CPUHandle };
1567 const uint32 numTargets = AppSettings::ComputeUVGradients ? ArraySize_(rtvHandles) - 1 : ArraySize_(rtvHandles);
1568 cmdList->OMSetRenderTargets(numTargets, rtvHandles, false, &depthBuffer.DSV.CPUHandle);
1569
1570 const float clearColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };
1571 for(uint64 i = 0; i < numTargets; ++i)
1572 cmdList->ClearRenderTargetView(rtvHandles[i], clearColor, 0, nullptr);

Callers

nothing calls this directly

Calls 15

SetViewportFunction · 0.85
AlignToFunction · 0.85
MakeDescriptorTableFunction · 0.85
BindCBufferComputeFunction · 0.85
BindShaderResourcesFunction · 0.85
Float2Class · 0.85
DegToRadFunction · 0.85
RenderGBufferMethod · 0.80
UploadMethod · 0.80
UAVMethod · 0.80
TransitionMethod · 0.80

Tested by

no test coverage detected