Browse Source

Add a raster path downscale pyramid passes

Panagiotis Christopoulos Charitos 4 years ago
parent
commit
3b00f2c838
2 changed files with 13 additions and 24 deletions
  1. 12 22
      AnKi/Renderer/DownscaleBlur.cpp
  2. 1 2
      AnKi/Renderer/DownscaleBlur.h

+ 12 - 22
AnKi/Renderer/DownscaleBlur.cpp

@@ -6,6 +6,7 @@
 #include <AnKi/Renderer/DownscaleBlur.h>
 #include <AnKi/Renderer/Renderer.h>
 #include <AnKi/Renderer/TemporalAA.h>
+#include <AnKi/Core/ConfigSet.h>
 
 namespace anki {
 
@@ -30,14 +31,15 @@ Error DownscaleBlur::initInternal()
 	m_passCount = computeMaxMipmapCount2d(m_r->getPostProcessResolution().x(), m_r->getPostProcessResolution().y(),
 										  DOWNSCALE_BLUR_DOWN_TO)
 				  - 1;
-	ANKI_R_LOGI("Initializing dowscale blur (passCount: %u)", m_passCount);
+
+	const Bool preferCompute = getConfig().getRPreferCompute();
 
 	// Create the miped texture
 	TextureInitInfo texinit = m_r->create2DRenderTargetDescription(
 		m_r->getPostProcessResolution().x() / 2, m_r->getPostProcessResolution().y() / 2,
 		LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT, "DownscaleBlur");
 	texinit.m_usage = TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::SAMPLED_COMPUTE;
-	if(m_useCompute)
+	if(preferCompute)
 	{
 		texinit.m_usage |= TextureUsageBit::SAMPLED_COMPUTE | TextureUsageBit::IMAGE_COMPUTE_WRITE;
 	}
@@ -50,7 +52,7 @@ Error DownscaleBlur::initInternal()
 	m_rtTex = m_r->createAndClearRenderTarget(texinit);
 
 	// FB descr
-	if(!m_useCompute)
+	if(!preferCompute)
 	{
 		m_fbDescrs.create(getAllocator(), m_passCount);
 		for(U32 pass = 0; pass < m_passCount; ++pass)
@@ -63,20 +65,10 @@ Error DownscaleBlur::initInternal()
 	}
 
 	// Shader programs
+	ANKI_CHECK(getResourceManager().loadResource(
+		(preferCompute) ? "Shaders/DownscaleBlurCompute.ankiprog" : "Shaders/DownscaleBlurRaster.ankiprog", m_prog));
 	const ShaderProgramResourceVariant* variant = nullptr;
-	if(m_useCompute)
-	{
-		ANKI_CHECK(getResourceManager().loadResource("Shaders/DownscaleBlurCompute.ankiprog", m_prog));
-		m_prog->getOrCreateVariant(variant);
-		m_workgroupSize[0] = variant->getWorkgroupSizes()[0];
-		m_workgroupSize[1] = variant->getWorkgroupSizes()[1];
-		ANKI_ASSERT(variant->getWorkgroupSizes()[2] == 1);
-	}
-	else
-	{
-		ANKI_CHECK(getResourceManager().loadResource("Shaders/DownscaleBlurRaster.ankiprog", m_prog));
-		m_prog->getOrCreateVariant(variant);
-	}
+	m_prog->getOrCreateVariant(variant);
 	m_grProg = variant->getProgram();
 
 	return Error::NONE;
@@ -95,7 +87,7 @@ void DownscaleBlur::populateRenderGraph(RenderingContext& ctx)
 	// Create passes
 	static const Array<CString, 8> passNames = {"DownBlur #0",  "Down/Blur #1", "Down/Blur #2", "Down/Blur #3",
 												"Down/Blur #4", "Down/Blur #5", "Down/Blur #6", "Down/Blur #7"};
-	if(m_useCompute)
+	if(getConfig().getRPreferCompute())
 	{
 		for(U32 i = 0; i < m_passCount; ++i)
 		{
@@ -178,7 +170,7 @@ void DownscaleBlur::run(U32 passIdx, RenderPassWorkContext& rgraphCtx)
 		rgraphCtx.bindColorTexture(0, 1, m_r->getTemporalAA().getHdrRt());
 	}
 
-	if(m_useCompute)
+	if(getConfig().getRPreferCompute())
 	{
 		TextureSubresourceInfo sampleSubresource;
 		sampleSubresource.m_firstMipmap = passIdx;
@@ -186,16 +178,14 @@ void DownscaleBlur::run(U32 passIdx, RenderPassWorkContext& rgraphCtx)
 
 		UVec4 fbSize(vpWidth, vpHeight, 0, 0);
 		cmdb->setPushConstants(&fbSize, sizeof(fbSize));
-	}
 
-	if(m_useCompute)
-	{
 		dispatchPPCompute(cmdb, m_workgroupSize[0], m_workgroupSize[1], vpWidth, vpHeight);
 	}
 	else
 	{
 		cmdb->setViewport(0, 0, vpWidth, vpHeight);
-		drawQuad(cmdb);
+
+		cmdb->drawArrays(PrimitiveTopology::TRIANGLES, 3);
 	}
 }
 

+ 1 - 2
AnKi/Renderer/DownscaleBlur.h

@@ -52,8 +52,7 @@ public:
 	}
 
 private:
-	static const Bool m_useCompute = true;
-	Array<U32, 2> m_workgroupSize = {0, 0};
+	const Array<U32, 2> m_workgroupSize = {16, 16};
 
 	U32 m_passCount = 0; ///< It's also the mip count of the m_rtTex.