Browse Source

Vulkan: Fix some validation errors

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
baa1b288b3

+ 4 - 4
programs/GBufferGeneric.ankiprog

@@ -8,7 +8,7 @@ http://www.anki3d.org/LICENSE
 	<mutators>
 	<mutators>
 		<mutator name="INSTANCE_COUNT" values="1 2 4 8 16 32 64" instanced="1"/>
 		<mutator name="INSTANCE_COUNT" values="1 2 4 8 16 32 64" instanced="1"/>
 		<mutator name="LOD" values="0 1 2"/>
 		<mutator name="LOD" values="0 1 2"/>
-		<mutator name="PASS" values="0 1"/>
+		<mutator name="PASS" values="0 1 2"/>
 		<mutator name="DIFFUSE_TEX" values="0 1"/>
 		<mutator name="DIFFUSE_TEX" values="0 1"/>
 		<mutator name="SPECULAR_TEX" values="0 1"/>
 		<mutator name="SPECULAR_TEX" values="0 1"/>
 		<mutator name="ROUGHNESS_TEX" values="0 1"/>
 		<mutator name="ROUGHNESS_TEX" values="0 1"/>
@@ -38,7 +38,7 @@ http://www.anki3d.org/LICENSE
 			<source><![CDATA[#include "shaders/GBufferCommonVert.glsl"
 			<source><![CDATA[#include "shaders/GBufferCommonVert.glsl"
 void main() 
 void main() 
 {
 {
-#if PASS == 0
+#if PASS == PASS_GB_FS
 	positionUvNormalTangent(mvp, normalMat);
 	positionUvNormalTangent(mvp, normalMat);
 	
 	
 	#if PARALLAX
 	#if PARALLAX
@@ -148,7 +148,7 @@ void main()
 			<source><![CDATA[#include "shaders/GBufferCommonFrag.glsl"
 			<source><![CDATA[#include "shaders/GBufferCommonFrag.glsl"
 void main()
 void main()
 {
 {
-#if PASS == 0
+#if PASS == PASS_GB_FS
 	#if heightTex_DEFINED
 	#if heightTex_DEFINED
 		vec2 uv =  computeTextureCoordParallax(heightTex, in_uv, heightMapScale);
 		vec2 uv =  computeTextureCoordParallax(heightTex, in_uv, heightMapScale);
 	#else
 	#else
@@ -182,7 +182,7 @@ void main()
 	#endif
 	#endif
 
 
 	writeRts(diffColor, normal, specColor, roughness, subsurface, emission, metallic);
 	writeRts(diffColor, normal, specColor, roughness, subsurface, emission, metallic);
-#else
+#elif PASS == PASS_EZ
 	out_msRt0 = vec4(0.0);
 	out_msRt0 = vec4(0.0);
 	out_msRt1 = vec4(0.0);
 	out_msRt1 = vec4(0.0);
 	out_msRt2 = vec4(0.0);
 	out_msRt2 = vec4(0.0);

+ 5 - 0
shaders/Common.glsl

@@ -50,4 +50,9 @@ const uint MAX_U32 = 0xFFFFFFFFu;
 
 
 #define CALC_BITANGENT_IN_VERT 1
 #define CALC_BITANGENT_IN_VERT 1
 
 
+// Passes
+#define PASS_GB_FS 0
+#define PASS_SM 1
+#define PASS_EZ 2
+
 #endif
 #endif

+ 9 - 3
shaders/GBufferCommonFrag.glsl

@@ -12,8 +12,8 @@
 //
 //
 // Input
 // Input
 //
 //
+#if PASS == PASS_GB_FS
 layout(location = 0) in highp vec2 in_uv;
 layout(location = 0) in highp vec2 in_uv;
-
 layout(location = 1) in mediump vec3 in_normal;
 layout(location = 1) in mediump vec3 in_normal;
 layout(location = 2) in mediump vec4 in_tangent;
 layout(location = 2) in mediump vec4 in_tangent;
 #if CALC_BITANGENT_IN_VERT
 #if CALC_BITANGENT_IN_VERT
@@ -22,14 +22,21 @@ layout(location = 3) in mediump vec3 in_bitangent;
 layout(location = 4) in mediump vec3 in_vertPosViewSpace;
 layout(location = 4) in mediump vec3 in_vertPosViewSpace;
 layout(location = 5) in mediump vec3 in_eyeTangentSpace; // Parallax
 layout(location = 5) in mediump vec3 in_eyeTangentSpace; // Parallax
 layout(location = 6) in mediump vec3 in_normalTangentSpace; // Parallax
 layout(location = 6) in mediump vec3 in_normalTangentSpace; // Parallax
+#endif // PASS == PASS_GB_FS
 
 
 //
 //
 // Output
 // Output
 //
 //
+#if PASS == PASS_GB_FS || PASS == PASS_EZ
 layout(location = 0) out vec4 out_msRt0;
 layout(location = 0) out vec4 out_msRt0;
 layout(location = 1) out vec4 out_msRt1;
 layout(location = 1) out vec4 out_msRt1;
 layout(location = 2) out vec4 out_msRt2;
 layout(location = 2) out vec4 out_msRt2;
+#endif
 
 
+//
+// Functions
+//
+#if PASS == PASS_GB_FS
 // Do normal mapping
 // Do normal mapping
 vec3 readNormalFromTexture(sampler2D map, highp vec2 texCoords)
 vec3 readNormalFromTexture(sampler2D map, highp vec2 texCoords)
 {
 {
@@ -130,7 +137,6 @@ vec2 computeTextureCoordParallax(in sampler2D heightMap, in vec2 uv, in float he
 }
 }
 
 
 // Write the data to FAIs
 // Write the data to FAIs
-#if PASS == 0
 void writeRts(in vec3 diffColor, // from 0 to 1
 void writeRts(in vec3 diffColor, // from 0 to 1
 	in vec3 normal,
 	in vec3 normal,
 	in vec3 specularColor,
 	in vec3 specularColor,
@@ -149,6 +155,6 @@ void writeRts(in vec3 diffColor, // from 0 to 1
 	g.metallic = metallic;
 	g.metallic = metallic;
 	writeGBuffer(g, out_msRt0, out_msRt1, out_msRt2);
 	writeGBuffer(g, out_msRt0, out_msRt1, out_msRt2);
 }
 }
-#endif
+#endif // PASS == PASS_GB_FS
 
 
 #endif
 #endif

+ 9 - 1
shaders/GBufferCommonVert.glsl

@@ -12,9 +12,11 @@
 // Input
 // Input
 //
 //
 layout(location = POSITION_LOCATION) in highp vec3 in_position;
 layout(location = POSITION_LOCATION) in highp vec3 in_position;
+#if PASS == PASS_GB_FS
 layout(location = TEXTURE_COORDINATE_LOCATION) in highp vec2 in_uv;
 layout(location = TEXTURE_COORDINATE_LOCATION) in highp vec2 in_uv;
 layout(location = NORMAL_LOCATION) in mediump vec4 in_normal;
 layout(location = NORMAL_LOCATION) in mediump vec4 in_normal;
 layout(location = TANGENT_LOCATION) in mediump vec4 in_tangent;
 layout(location = TANGENT_LOCATION) in mediump vec4 in_tangent;
+#endif
 
 
 //
 //
 // Output
 // Output
@@ -24,17 +26,22 @@ out gl_PerVertex
 	vec4 gl_Position;
 	vec4 gl_Position;
 };
 };
 
 
+#if PASS == PASS_GB_FS
 layout(location = 0) out highp vec2 out_uv;
 layout(location = 0) out highp vec2 out_uv;
 layout(location = 1) out mediump vec3 out_normal;
 layout(location = 1) out mediump vec3 out_normal;
 layout(location = 2) out mediump vec4 out_tangent;
 layout(location = 2) out mediump vec4 out_tangent;
 #if CALC_BITANGENT_IN_VERT
 #if CALC_BITANGENT_IN_VERT
 layout(location = 3) out mediump vec3 out_bitangent;
 layout(location = 3) out mediump vec3 out_bitangent;
 #endif
 #endif
-
 layout(location = 4) out mediump vec3 out_vertPosViewSpace;
 layout(location = 4) out mediump vec3 out_vertPosViewSpace;
 layout(location = 5) out mediump vec3 out_eyeTangentSpace; // Parallax
 layout(location = 5) out mediump vec3 out_eyeTangentSpace; // Parallax
 layout(location = 6) out mediump vec3 out_normalTangentSpace; // Parallax
 layout(location = 6) out mediump vec3 out_normalTangentSpace; // Parallax
+#endif // PASS == PASS_GB_FS
 
 
+//
+// Functions
+//
+#if PASS == PASS_GB_FS
 void positionUvNormalTangent(mat4 mvp, mat3 normalMat)
 void positionUvNormalTangent(mat4 mvp, mat3 normalMat)
 {
 {
 	out_uv = in_uv;
 	out_uv = in_uv;
@@ -70,5 +77,6 @@ void parallax(in mat4 modelViewMat)
 	out_eyeTangentSpace = invTbn * out_vertPosViewSpace;
 	out_eyeTangentSpace = invTbn * out_vertPosViewSpace;
 	out_normalTangentSpace = invTbn * n;
 	out_normalTangentSpace = invTbn * n;
 }
 }
+#endif // PASS == PASS_GB_FS
 
 
 #endif
 #endif

+ 1 - 1
src/anki/renderer/GBuffer.cpp

@@ -146,7 +146,7 @@ void GBuffer::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCou
 			}
 			}
 
 
 			ANKI_ASSERT(earlyZStart < earlyZEnd && earlyZEnd <= I32(earlyZCount));
 			ANKI_ASSERT(earlyZStart < earlyZEnd && earlyZEnd <= I32(earlyZCount));
-			m_r->getSceneDrawer().drawRange(Pass::SM,
+			m_r->getSceneDrawer().drawRange(Pass::EZ,
 				ctx.m_renderQueue->m_viewMatrix,
 				ctx.m_renderQueue->m_viewMatrix,
 				ctx.m_viewProjMatJitter,
 				ctx.m_viewProjMatJitter,
 				cmdb,
 				cmdb,

+ 14 - 8
src/anki/renderer/Indirect.cpp

@@ -476,10 +476,13 @@ void Indirect::runIs(RenderingContext& rctx, const RenderQueue& rqueue, U layer,
 
 
 	cmdb->generateMipmaps2d(m_is.m_lightRt, faceIdx, layer);
 	cmdb->generateMipmaps2d(m_is.m_lightRt, faceIdx, layer);
 
 
-	cmdb->setTextureSurfaceBarrier(m_is.m_lightRt,
-		TextureUsageBit::GENERATE_MIPMAPS,
-		TextureUsageBit::SAMPLED_FRAGMENT,
-		TextureSurfaceInfo(0, 0, faceIdx, layer));
+	for(U i = 0; i < m_is.m_lightRtMipCount; ++i)
+	{
+		cmdb->setTextureSurfaceBarrier(m_is.m_lightRt,
+			TextureUsageBit::GENERATE_MIPMAPS,
+			TextureUsageBit::SAMPLED_FRAGMENT,
+			TextureSurfaceInfo(i, 0, faceIdx, layer));
+	}
 
 
 	// Restore state
 	// Restore state
 	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
 	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
@@ -522,10 +525,13 @@ void Indirect::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)
 
 
 	cmdb->generateMipmaps2d(m_irradiance.m_cubeArr, faceIdx, layer);
 	cmdb->generateMipmaps2d(m_irradiance.m_cubeArr, faceIdx, layer);
 
 
-	cmdb->setTextureSurfaceBarrier(m_irradiance.m_cubeArr,
-		TextureUsageBit::GENERATE_MIPMAPS,
-		TextureUsageBit::SAMPLED_FRAGMENT,
-		TextureSurfaceInfo(0, 0, faceIdx, layer));
+	for(U i = 0; i < m_irradiance.m_cubeArrMipCount; ++i)
+	{
+		cmdb->setTextureSurfaceBarrier(m_irradiance.m_cubeArr,
+			TextureUsageBit::GENERATE_MIPMAPS,
+			TextureUsageBit::SAMPLED_FRAGMENT,
+			TextureSurfaceInfo(i, 0, faceIdx, layer));
+	}
 }
 }
 
 
 void Indirect::run(RenderingContext& rctx)
 void Indirect::run(RenderingContext& rctx)

+ 1 - 1
src/anki/resource/Model.cpp

@@ -72,7 +72,7 @@ void ModelPatch::getRenderingDataSub(
 		}
 		}
 		else
 		else
 		{
 		{
-			inf.m_vertexAttributeCount = 2;
+			inf.m_vertexAttributeCount = 1;
 		}
 		}
 	}
 	}
 
 

+ 1 - 0
src/anki/resource/RenderingKey.h

@@ -15,6 +15,7 @@ enum class Pass : U8
 {
 {
 	GB_FS, ///< GBuffer or forward shading.
 	GB_FS, ///< GBuffer or forward shading.
 	SM,
 	SM,
+	EZ,
 	COUNT
 	COUNT
 };
 };