Browse Source

Merge a few RT shaders

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
bb0c91ce0d

+ 11 - 1
AnKi/Renderer/RendererObject.cpp

@@ -31,7 +31,7 @@ Error RendererObject::loadShaderProgram(CString filename, ShaderProgramResourceP
 }
 
 Error RendererObject::loadShaderProgram(CString filename, ConstWeakArray<SubMutation> mutators, ShaderProgramResourcePtr& rsrc,
-										ShaderProgramPtr& grProg)
+										ShaderProgramPtr& grProg, ShaderTypeBit shaderTypes, CString technique)
 {
 	if(!rsrc.isCreated())
 	{
@@ -44,6 +44,16 @@ Error RendererObject::loadShaderProgram(CString filename, ConstWeakArray<SubMuta
 		initInf.addMutation(pair.m_mutatorName, pair.m_value);
 	}
 
+	if(!!shaderTypes)
+	{
+		initInf.requestShaderTypes(shaderTypes);
+	}
+
+	if(technique)
+	{
+		initInf.requestTechnique(technique);
+	}
+
 	const ShaderProgramResourceVariant* variant;
 	rsrc->getOrCreateVariant(initInf, variant);
 

+ 2 - 1
AnKi/Renderer/RendererObject.h

@@ -92,7 +92,8 @@ protected:
 		MutatorValue m_value;
 	};
 
-	static Error loadShaderProgram(CString filename, ConstWeakArray<SubMutation> mutators, ShaderProgramResourcePtr& rsrc, ShaderProgramPtr& grProg);
+	static Error loadShaderProgram(CString filename, ConstWeakArray<SubMutation> mutators, ShaderProgramResourcePtr& rsrc, ShaderProgramPtr& grProg,
+								   ShaderTypeBit shaderTypes = ShaderTypeBit::kNone, CString technique = {});
 
 	static void zeroBuffer(Buffer* buff);
 };

+ 7 - 18
AnKi/Renderer/RtShadows.cpp

@@ -46,35 +46,24 @@ Error RtShadows::initInternal()
 
 	ANKI_CHECK(ResourceManager::getSingleton().loadResource("EngineAssets/BlueNoise_Rgba8_64x64.png", m_blueNoiseImage));
 
-	// Setup build SBT program
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/RtShadowsSetupSbtBuild.ankiprogbin", m_setupBuildSbtProg, m_setupBuildSbtGrProg));
-
-	// Build SBT program
 	ANKI_CHECK(loadShaderProgram("ShaderBinaries/RtShadowsSbtBuild.ankiprogbin", m_buildSbtProg, m_buildSbtGrProg));
+	ANKI_CHECK(ResourceManager::getSingleton().loadResource("ShaderBinaries/RtShadows.ankiprogbin", m_rayGenAndMissProg));
 
-	// Ray gen program
+	// Ray gen and miss
 	{
-		ANKI_CHECK(ResourceManager::getSingleton().loadResource("ShaderBinaries/RtShadowsRayGen.ankiprogbin", m_rayGenProg));
-
-		ShaderProgramResourceVariantInitInfo variantInitInfo(m_rayGenProg);
+		ShaderProgramResourceVariantInitInfo variantInitInfo(m_rayGenAndMissProg);
 		variantInitInfo.addMutation("RAYS_PER_PIXEL", g_rtShadowsRaysPerPixelCVar.get());
 		variantInitInfo.requestTechnique("RtShadows");
 
+		variantInitInfo.requestShaderTypes(ShaderTypeBit::kRayGen);
 		const ShaderProgramResourceVariant* variant;
-		m_rayGenProg->getOrCreateVariant(variantInitInfo, variant);
+		m_rayGenAndMissProg->getOrCreateVariant(variantInitInfo, variant);
 		m_rtLibraryGrProg.reset(&variant->getProgram());
 		m_rayGenShaderGroupIdx = variant->getShaderGroupHandleIndex();
-	}
-
-	// Miss prog
-	{
-		ANKI_CHECK(ResourceManager::getSingleton().loadResource("ShaderBinaries/RtShadowsMiss.ankiprogbin", m_missProg));
-
-		ShaderProgramResourceVariantInitInfo variantInitInfo(m_missProg);
-		variantInitInfo.requestTechnique("RtShadows");
 
-		const ShaderProgramResourceVariant* variant;
-		m_missProg->getOrCreateVariant(variantInitInfo, variant);
+		variantInitInfo.requestShaderTypes(ShaderTypeBit::kMiss);
+		m_rayGenAndMissProg->getOrCreateVariant(variantInitInfo, variant);
 		m_missShaderGroupIdx = variant->getShaderGroupHandleIndex();
 	}
 

+ 1 - 3
AnKi/Renderer/RtShadows.h

@@ -56,11 +56,9 @@ public:
 	ShaderProgramResourcePtr m_buildSbtProg;
 	ShaderProgramPtr m_buildSbtGrProg;
 
-	ShaderProgramResourcePtr m_rayGenProg;
+	ShaderProgramResourcePtr m_rayGenAndMissProg;
 	ShaderProgramPtr m_rtLibraryGrProg;
 	U32 m_rayGenShaderGroupIdx = kMaxU32;
-
-	ShaderProgramResourcePtr m_missProg;
 	U32 m_missShaderGroupIdx = kMaxU32;
 
 	ShaderProgramResourcePtr m_denoiseProg;

+ 10 - 0
AnKi/Shaders/RtShadowsRayGen.ankiprog → AnKi/Shaders/RtShadows.ankiprog

@@ -132,3 +132,13 @@ Vec3 genRandomDirection(U32 rayIdx, Vec2 uv)
 	g_momentsImage[DispatchRaysIndex().xy] = Vec4(moments, 0.0, 0.0);
 }
 #pragma anki technique_end rgen RtShadows
+
+#pragma anki technique_start miss RtShadows
+
+#include <AnKi/Shaders/RtShadows.hlsl>
+
+[shader("miss")] void main(inout RayPayload payload)
+{
+	payload.m_shadowFactor = 1.0;
+}
+#pragma anki technique_end miss RtShadows

+ 0 - 15
AnKi/Shaders/RtShadowsMiss.ankiprog

@@ -1,15 +0,0 @@
-// Copyright (C) 2009-2023, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-// TODO merge with ray gen
-#pragma anki technique_start miss RtShadows
-
-#include <AnKi/Shaders/RtShadows.hlsl>
-
-[shader("miss")] void main(inout RayPayload payload)
-{
-	payload.m_shadowFactor = 1.0;
-}
-#pragma anki technique_end miss RtShadows