Browse Source

Move BloomUpscale to the new format

Panagiotis Christopoulos Charitos 5 years ago
parent
commit
b2afe26f04
3 changed files with 15 additions and 13 deletions
  1. 3 3
      shaders/BloomUpscale.ankiprog
  2. 9 7
      src/anki/renderer/Bloom.cpp
  3. 3 3
      src/anki/renderer/Bloom.h

+ 3 - 3
shaders/BloomUpscale.glslp → shaders/BloomUpscale.ankiprog

@@ -3,9 +3,9 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#pragma anki input const UVec2 INPUT_TEX_SIZE
-#pragma anki input const UVec2 WORKGROUP_SIZE
-#pragma anki input const UVec2 FB_SIZE
+ANKI_SPECIALIZATION_CONSTANT_IVEC2(FB_SIZE, 0, IVec2(1));
+ANKI_SPECIALIZATION_CONSTANT_IVEC2(INPUT_TEX_SIZE, 2, IVec2(1));
+const UVec2 WORKGROUP_SIZE = UVec2(16u, 16u);
 
 #pragma anki start comp
 #include <shaders/Common.glsl>

+ 9 - 7
src/anki/renderer/Bloom.cpp

@@ -62,16 +62,18 @@ Error Bloom::initUpscale(const ConfigSet& config)
 	m_upscale.m_rtDescr.bake();
 
 	// init shaders
-	ANKI_CHECK(getResourceManager().loadResource("shaders/BloomUpscale.glslp", m_upscale.m_prog));
+	ANKI_CHECK(getResourceManager().loadResource("shaders/BloomUpscale.ankiprog", m_upscale.m_prog));
 
-	ShaderProgramResourceConstantValueInitList<3> consts(m_upscale.m_prog);
-	consts.add("FB_SIZE", UVec2(m_upscale.m_width, m_upscale.m_height))
-		.add("WORKGROUP_SIZE", UVec2(m_workgroupSize[0], m_workgroupSize[1]))
-		.add("INPUT_TEX_SIZE", UVec2(m_exposure.m_width, m_exposure.m_height));
+	ShaderProgramResourceVariantInitInfo2 variantInitInfo(m_upscale.m_prog);
+	variantInitInfo.addConstant("FB_SIZE", IVec2(m_upscale.m_width, m_upscale.m_height));
+	variantInitInfo.addConstant("INPUT_TEX_SIZE", IVec2(m_exposure.m_width, m_exposure.m_height));
 
-	const ShaderProgramResourceVariant* variant;
-	m_upscale.m_prog->getOrCreateVariant(consts.get(), variant);
+	const ShaderProgramResourceVariant2* variant;
+	m_upscale.m_prog->getOrCreateVariant(variantInitInfo, variant);
 	m_upscale.m_grProg = variant->getProgram();
+	ANKI_ASSERT(variant->getWorkgroupSizes()[0] == m_workgroupSize[0]
+				&& variant->getWorkgroupSizes()[1] == m_workgroupSize[1]
+				&& variant->getWorkgroupSizes()[2] == m_workgroupSize[2]);
 
 	// Textures
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/LensDirt.ankitex", m_upscale.m_lensDirtTex));

+ 3 - 3
src/anki/renderer/Bloom.h

@@ -43,9 +43,9 @@ public:
 	}
 
 private:
-	static const Format RT_PIXEL_FORMAT = Format::A2B10G10R10_UNORM_PACK32;
+	static constexpr Format RT_PIXEL_FORMAT = Format::A2B10G10R10_UNORM_PACK32;
 
-	Array<U32, 2> m_workgroupSize = {{16, 16}};
+	const Array<U32, 3> m_workgroupSize = {{16, 16, 1}};
 
 	class
 	{
@@ -65,7 +65,7 @@ private:
 	{
 	public:
 		TextureResourcePtr m_lensDirtTex;
-		ShaderProgramResourcePtr m_prog;
+		ShaderProgramResource2Ptr m_prog;
 		ShaderProgramPtr m_grProg;
 
 		U32 m_width = 0;