Browse Source

Remove the EarlyZ variant from the shaders

Panagiotis Christopoulos Charitos 2 years ago
parent
commit
4146297b9e

+ 7 - 7
AnKi/Gr/Vulkan/Pipeline.cpp

@@ -118,8 +118,8 @@ Bool PipelineStateTracker::updateHashes()
 	// Color
 	if(!!m_fbColorAttachmentMask)
 	{
-		ANKI_ASSERT(m_fbColorAttachmentMask == m_shaderColorAttachmentWritemask
-					&& "Shader and fb should have same attachment mask");
+		ANKI_ASSERT((m_fbColorAttachmentMask == m_shaderColorAttachmentWritemask || !m_shaderColorAttachmentWritemask)
+					&& "Shader and FB should have same attachment mask or shader mask should be zero");
 
 		if(m_dirty.m_color)
 		{
@@ -188,13 +188,13 @@ void PipelineStateTracker::updateSuperHash()
 	}
 
 	// Color
-	if(!!m_shaderColorAttachmentWritemask)
+	if(!!m_fbColorAttachmentMask)
 	{
 		buff[count++] = m_hashes.m_color;
 
 		for(U i = 0; i < kMaxColorRenderTargets; ++i)
 		{
-			if(m_shaderColorAttachmentWritemask.get(i))
+			if(m_fbColorAttachmentMask.get(i))
 			{
 				buff[count++] = m_hashes.m_colAttachments[i];
 			}
@@ -342,17 +342,17 @@ const VkGraphicsPipelineCreateInfo& PipelineStateTracker::updatePipelineCreateIn
 	}
 
 	// Color/blend
-	if(!!m_shaderColorAttachmentWritemask)
+	if(!!m_fbColorAttachmentMask)
 	{
 		VkPipelineColorBlendStateCreateInfo& colCi = m_ci.m_color;
 		colCi = {};
 		colCi.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
-		colCi.attachmentCount = m_shaderColorAttachmentWritemask.getEnabledBitCount();
+		colCi.attachmentCount = m_fbColorAttachmentMask.getEnabledBitCount();
 		colCi.pAttachments = &m_ci.m_colAttachments[0];
 
 		for(U i = 0; i < colCi.attachmentCount; ++i)
 		{
-			ANKI_ASSERT(m_shaderColorAttachmentWritemask.get(i) && "No gaps are allowed");
+			ANKI_ASSERT(m_fbColorAttachmentMask.get(i) && "No gaps are allowed");
 			VkPipelineColorBlendAttachmentState& out = m_ci.m_colAttachments[i];
 			const ColorAttachmentState& in = m_state.m_color.m_attachments[i];
 

+ 1 - 1
AnKi/Resource/MaterialResource.cpp

@@ -14,7 +14,7 @@ inline constexpr Array<CString, U32(BuiltinMutatorId::kCount)> kBuiltinMutatorNa
 	{"NONE", "ANKI_TECHNIQUE", "ANKI_BONES", "ANKI_VELOCITY"}};
 
 inline constexpr Array<CString, U(RenderingTechnique::kCount)> kTechniqueNames = {
-	{"GBuffer", "GBufferEarlyZ", "Shadow", "Forward", "RtShadow"}};
+	{"GBuffer", "Depth", "Forward", "RtShadow"}};
 
 // This is some trickery to select calling between XmlElement::getAttributeNumber and XmlElement::getAttributeNumbers
 namespace {

+ 1 - 1
AnKi/Resource/MaterialResource.h

@@ -226,7 +226,7 @@ public:
 
 	Bool castsShadow() const
 	{
-		return !!(m_techniquesMask & (RenderingTechniqueBit::kShadow | RenderingTechniqueBit::kRtShadow));
+		return !!(m_techniquesMask & (RenderingTechniqueBit::kDepth | RenderingTechniqueBit::kRtShadow));
 	}
 
 	ConstWeakArray<MaterialVariable> getVariables() const

+ 6 - 8
AnKi/Resource/RenderingKey.h

@@ -14,10 +14,9 @@ namespace anki {
 enum class RenderingTechnique : U8
 {
 	kGBuffer = 0,
-	kGBufferEarlyZ = 1,
-	kShadow = 2,
-	kForward = 3,
-	kRtShadow = 4,
+	kDepth = 1,
+	kForward = 2,
+	kRtShadow = 3,
 
 	kCount,
 	kFirst = 0
@@ -28,10 +27,9 @@ enum class RenderingTechniqueBit : U8
 {
 	kNone = 0,
 	kGBuffer = 1 << 0,
-	kGBufferEarlyZ = 1 << 1,
-	kShadow = 1 << 2,
-	kForward = 1 << 3,
-	kRtShadow = 1 << 4,
+	kDepth = 1 << 1,
+	kForward = 1 << 2,
+	kRtShadow = 1 << 3,
 
 	kAllRt = kRtShadow
 };

+ 2 - 2
AnKi/Scene/Visibility.cpp

@@ -316,7 +316,7 @@ void VisibilityTestTask::test(ThreadHive& hive, U32 taskId)
 
 			WeakArray<RenderableQueueElement> elements;
 			modelc.setupRenderableQueueElements(
-				lod, (isShadowFrustum) ? RenderingTechnique::kShadow : RenderingTechnique::kGBuffer, elements);
+				lod, (isShadowFrustum) ? RenderingTechnique::kDepth : RenderingTechnique::kGBuffer, elements);
 			for(RenderableQueueElement& el : elements)
 			{
 				el.m_distanceFromCamera = distanceFromCamera;
@@ -332,7 +332,7 @@ void VisibilityTestTask::test(ThreadHive& hive, U32 taskId)
 
 			if(wantsEarlyZ && distanceFromCamera < testedFrustum.getEarlyZDistance())
 			{
-				modelc.setupRenderableQueueElements(lod, RenderingTechnique::kGBufferEarlyZ, elements);
+				modelc.setupRenderableQueueElements(lod, RenderingTechnique::kDepth, elements);
 				for(RenderableQueueElement& el : elements)
 				{
 					el.m_distanceFromCamera = distanceFromCamera;

+ 1 - 1
AnKi/Shaders/ForwardShadingFog.ankiprog

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#pragma anki mutator ANKI_TECHNIQUE 3
+#pragma anki mutator ANKI_TECHNIQUE 2
 
 #include <AnKi/Shaders/ForwardShadingCommon.hlsl>
 #include <AnKi/Shaders/Functions.hlsl>

+ 1 - 1
AnKi/Shaders/ForwardShadingGenericTransparent.ankiprog

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#pragma anki mutator ANKI_TECHNIQUE 3
+#pragma anki mutator ANKI_TECHNIQUE 2
 #pragma anki mutator TEXTURE 0 1
 #pragma anki mutator LIGHT 0 1
 

+ 1 - 1
AnKi/Shaders/ForwardShadingParticles.ankiprog

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#pragma anki mutator ANKI_TECHNIQUE 3
+#pragma anki mutator ANKI_TECHNIQUE 2
 #pragma anki mutator ANIMATED_TEXTURE 0 1
 #pragma anki mutator LIGHT 0 1
 

+ 3 - 15
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -4,7 +4,7 @@
 // http://www.anki3d.org/LICENSE
 
 #pragma anki mutator ANKI_VELOCITY 0 1
-#pragma anki mutator ANKI_TECHNIQUE 0 1 2
+#pragma anki mutator ANKI_TECHNIQUE 0 1
 #pragma anki mutator ANKI_BONES 0 1
 #pragma anki mutator DIFFUSE_TEX 0 1
 #pragma anki mutator SPECULAR_TEX 0 1
@@ -17,7 +17,6 @@
 
 #pragma anki skip_mutation ALPHA_TEST 1 DIFFUSE_TEX 0
 #pragma anki skip_mutation ANKI_VELOCITY 1 ANKI_TECHNIQUE 1
-#pragma anki skip_mutation ANKI_VELOCITY 1 ANKI_TECHNIQUE 2
 
 // Some defines the clear up things
 #define REALLY_ALPHA_TEST (ALPHA_TEST && DIFFUSE_TEX)
@@ -90,7 +89,7 @@ struct VertOut
 	nointerpolation U32 m_uniformsOffset : UNIS_OFFSET;
 };
 
-#if ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_GBUFFER || ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_GBUFFER_EZ
+#if ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_GBUFFER
 struct FragOut
 {
 	Vec4 m_color0 : SV_TARGET0;
@@ -220,7 +219,7 @@ void doAlphaTest(RF32 alpha)
 	}
 }
 
-#if ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_SHADOWS
+#if ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_DEPTH
 void main(VertOut input)
 {
 	ANKI_MAYBE_UNUSED(input);
@@ -230,17 +229,6 @@ void main(VertOut input)
 	doAlphaTest(diffColorA.a);
 #	endif
 }
-#elif ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_GBUFFER_EZ
-FragOut main(VertOut input)
-{
-	ANKI_MAYBE_UNUSED(input);
-#	if REALLY_ALPHA_TEST
-	const AnKiLocalUniforms localUniforms = loadAnKiLocalUniforms(g_gpuScene, input.m_uniformsOffset);
-	const RVec4 diffColorA = g_bindlessTextures2dF32[localUniforms.m_diffTex].Sample(g_globalSampler, input.m_uv);
-	doAlphaTest(diffColorA.a);
-#	endif
-	return (FragOut)0;
-}
 #elif ANKI_TECHNIQUE == ANKI_RENDERING_TECHNIQUE_GBUFFER
 // Do normal mapping
 RVec3 readNormalFromTexture(VertOut input, Texture2D<RVec4> map, SamplerState sampl, Vec2 texCoords)

+ 2 - 3
AnKi/Shaders/Include/MaterialTypes.h

@@ -79,8 +79,7 @@ enum class MaterialBinding : U32
 
 // Techniques
 #define ANKI_RENDERING_TECHNIQUE_GBUFFER 0
-#define ANKI_RENDERING_TECHNIQUE_GBUFFER_EZ 1
-#define ANKI_RENDERING_TECHNIQUE_SHADOWS 2
-#define ANKI_RENDERING_TECHNIQUE_FORWARD 3
+#define ANKI_RENDERING_TECHNIQUE_DEPTH 1
+#define ANKI_RENDERING_TECHNIQUE_FORWARD 2
 
 ANKI_END_NAMESPACE

+ 1 - 1
AnKi/Shaders/RtShadowsHit.ankiprog

@@ -6,7 +6,7 @@
 #pragma anki library RtShadows
 #pragma anki ray_type 0
 
-#pragma anki mutator ANKI_TECHNIQUE 4
+#pragma anki mutator ANKI_TECHNIQUE 3
 #pragma anki mutator ALPHA_TEXTURE 0 1
 
 #include <AnKi/Shaders/RtShadows.hlsl>