GBufferPost.cpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright (C) 2009-present, Panagiotis Christopoulos Charitos and contributors.
  2. // All rights reserved.
  3. // Code licensed under the BSD License.
  4. // http://www.anki3d.org/LICENSE
  5. #include <AnKi/Renderer/GBufferPost.h>
  6. #include <AnKi/Renderer/Renderer.h>
  7. #include <AnKi/Renderer/GBuffer.h>
  8. #include <AnKi/Renderer/ClusterBinning.h>
  9. #include <AnKi/Util/Tracer.h>
  10. namespace anki {
  11. Error GBufferPost::init()
  12. {
  13. ANKI_CHECK(loadShaderProgram("ShaderBinaries/GBufferPost.ankiprogbin", m_prog, m_grProg));
  14. return Error::kNone;
  15. }
  16. void GBufferPost::populateRenderGraph(RenderingContext& ctx)
  17. {
  18. ANKI_TRACE_SCOPED_EVENT(GBufferPost);
  19. if(GpuSceneArrays::Decal::getSingleton().getElementCount() == 0)
  20. {
  21. return;
  22. }
  23. RenderGraphBuilder& rgraph = ctx.m_renderGraphDescr;
  24. NonGraphicsRenderPass& rpass = rgraph.newNonGraphicsRenderPass("GBuffPost");
  25. rpass.newTextureDependency(getGBuffer().getColorRt(0), TextureUsageBit::kUavCompute);
  26. rpass.newTextureDependency(getGBuffer().getColorRt(1), TextureUsageBit::kUavCompute);
  27. rpass.newTextureDependency(getGBuffer().getColorRt(2), TextureUsageBit::kUavCompute);
  28. rpass.newTextureDependency(getGBuffer().getDepthRt(), TextureUsageBit::kSrvCompute);
  29. rpass.newBufferDependency(getClusterBinning().getDependency(), BufferUsageBit::kSrvCompute);
  30. rpass.setWork([this, &ctx](RenderPassWorkContext& rgraphCtx) {
  31. CommandBuffer& cmdb = *rgraphCtx.m_commandBuffer;
  32. rgraphCtx.bindUav(0, 0, getGBuffer().getColorRt(0));
  33. rgraphCtx.bindUav(1, 0, getGBuffer().getColorRt(1));
  34. rgraphCtx.bindUav(2, 0, getGBuffer().getColorRt(2));
  35. rgraphCtx.bindSrv(0, 0, getGBuffer().getDepthRt());
  36. cmdb.bindSrv(1, 0, getClusterBinning().getPackedObjectsBuffer(GpuSceneNonRenderableObjectType::kDecal));
  37. cmdb.bindSrv(2, 0, getClusterBinning().getClustersBuffer());
  38. cmdb.bindConstantBuffer(0, 0, ctx.m_globalRenderingConstantsBuffer);
  39. cmdb.bindSampler(0, 0, getRenderer().getSamplers().m_trilinearClamp.get());
  40. cmdb.bindShaderProgram(m_grProg.get());
  41. dispatchPPCompute(cmdb, 8, 8, getRenderer().getInternalResolution().x, getRenderer().getInternalResolution().y);
  42. });
  43. }
  44. } // end namespace anki