| 1513 | } |
| 1514 | |
| 1515 | void 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); |
nothing calls this directly
no test coverage detected