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

Method RenderForward

BindlessDeferred/BindlessDeferred.cpp:1420–1513  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1418}
1419
1420void BindlessDeferred::RenderForward()
1421{
1422 ID3D12GraphicsCommandList* cmdList = DX12::CmdList;
1423
1424 PIXMarker marker(cmdList, "Forward rendering");
1425
1426 {
1427 // Transition render targets and depth buffers back to a writable state
1428 D3D12_RESOURCE_BARRIER barriers[3] = {};
1429 barriers[0].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1430 barriers[0].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1431 barriers[0].Transition.pResource = mainTarget.Resource();
1432 barriers[0].Transition.StateBefore = D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCE;
1433 barriers[0].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1434 barriers[0].Transition.Subresource = 0;
1435
1436 barriers[1].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1437 barriers[1].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1438 barriers[1].Transition.pResource = tangentFrameTarget.Resource();
1439 barriers[1].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1440 barriers[1].Transition.StateAfter = D3D12_RESOURCE_STATE_RENDER_TARGET;
1441 barriers[1].Transition.Subresource = 0;
1442
1443 barriers[2].Type = D3D12_RESOURCE_BARRIER_TYPE_TRANSITION;
1444 barriers[2].Flags = D3D12_RESOURCE_BARRIER_FLAG_NONE;
1445 barriers[2].Transition.pResource = depthBuffer.Resource();
1446 barriers[2].Transition.StateBefore = D3D12_RESOURCE_STATE_NON_PIXEL_SHADER_RESOURCE;
1447 barriers[2].Transition.StateAfter = D3D12_RESOURCE_STATE_DEPTH_WRITE;
1448 barriers[2].Transition.Subresource = 0;
1449
1450 cmdList->ResourceBarrier(ArraySize_(barriers), barriers);
1451 }
1452
1453 D3D12_CPU_DESCRIPTOR_HANDLE rtvHandles[2] = { mainTarget.RTV.CPUHandle, tangentFrameTarget.RTV.CPUHandle };
1454 cmdList->OMSetRenderTargets(2, rtvHandles, false, &depthBuffer.DSV.CPUHandle);
1455
1456 const float clearColor[] = { 0.0f, 0.0f, 0.0f, 0.0f };
1457 cmdList->ClearRenderTargetView(rtvHandles[0], clearColor, 0, nullptr);
1458 cmdList->ClearRenderTargetView(rtvHandles[1], clearColor, 0, nullptr);
1459 cmdList->ClearDepthStencilView(depthBuffer.DSV.CPUHandle, D3D12_CLEAR_FLAG_DEPTH | D3D12_CLEAR_FLAG_STENCIL, 1.0f, 0, 0, nullptr);
1460
1461 DX12::SetViewport(cmdList, mainTarget.Width(), mainTarget.Height());
1462
1463 if(AppSettings::DepthPrepass)
1464 meshRenderer.RenderDepthPrepass(cmdList, camera);
1465
1466 {
1467 ProfileBlock profileBlock(cmdList, "Forward Rendering Pass");
1468
1469 // Render the main forward pass
1470 MainPassData mainPassData;
1471 mainPassData.SkyCache = &skyCache;
1472 mainPassData.DecalTextures = decalTextures;
1473 mainPassData.DecalBuffer = &decalBuffer;
1474 mainPassData.CursorDecal = cursorDecal;
1475 mainPassData.CursorDecalIntensity = cursorDecalIntensity;
1476 mainPassData.DecalClusterBuffer = &decalClusterBuffer;
1477 mainPassData.SpotLightBuffer = &spotLightBuffer;

Callers

nothing calls this directly

Calls 7

SetViewportFunction · 0.85
RenderDepthPrepassMethod · 0.80
RenderMainPassMethod · 0.80
RenderSkyMethod · 0.80
ResourceMethod · 0.45
WidthMethod · 0.45
HeightMethod · 0.45

Tested by

no test coverage detected