Browse Source

Small refactoring

Panagiotis Christopoulos Charitos 3 years ago
parent
commit
c82e019d44

+ 2 - 1
AnKi/Shaders/ForwardShadingFog.ankiprog

@@ -6,6 +6,7 @@
 #pragma anki mutator ANKI_TECHNIQUE 3
 #pragma anki mutator ANKI_TECHNIQUE 3
 
 
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
+#include <AnKi/Shaders/Functions.glsl>
 
 
 struct PerDraw
 struct PerDraw
 {
 {
@@ -44,7 +45,7 @@ layout(location = 0) out F32 out_zVSpace;
 void main()
 void main()
 {
 {
 	const RenderableGpuView renderable = u_renderableGpuViews[0];
 	const RenderableGpuView renderable = u_renderableGpuViews[0];
-	const Vec3 worldPos = renderable.m_worldTransform * Vec4(in_position, 1.0);
+	const Vec3 worldPos = transform(renderable.m_worldTransform, Vec4(in_position, 1.0));
 
 
 	gl_Position = u_global.m_viewProjectionMatrix * Vec4(worldPos, 1.0);
 	gl_Position = u_global.m_viewProjectionMatrix * Vec4(worldPos, 1.0);
 
 

+ 2 - 1
AnKi/Shaders/ForwardShadingGenericTransparent.ankiprog

@@ -8,6 +8,7 @@
 #pragma anki mutator LIGHT 0 1
 #pragma anki mutator LIGHT 0 1
 
 
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
 #include <AnKi/Shaders/ForwardShadingCommon.glsl>
+#include <AnKi/Shaders/Functions.glsl>
 
 
 #pragma anki reflect AnKiLocalUniforms
 #pragma anki reflect AnKiLocalUniforms
 #pragma anki struct AnKiLocalUniforms
 #pragma anki struct AnKiLocalUniforms
@@ -47,7 +48,7 @@ layout(location = 1) out Vec3 out_worldPosition;
 
 
 void main()
 void main()
 {
 {
-	out_worldPosition = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(in_position, 1.0);
+	out_worldPosition = transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(in_position, 1.0));
 
 
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix * Vec4(out_worldPosition, 1.0);
 	gl_Position = u_globalUniforms.m_viewProjectionMatrix * Vec4(out_worldPosition, 1.0);
 
 

+ 3 - 2
AnKi/Shaders/ForwardShadingParticles.ankiprog

@@ -48,8 +48,9 @@ void main()
 	out_uv = Vec2(gl_VertexIndex & 1, gl_VertexIndex >> 1);
 	out_uv = Vec2(gl_VertexIndex & 1, gl_VertexIndex >> 1);
 
 
 	out_worldPos = u_ankiGlobals.m_cameraTransform * Vec4((out_uv - 0.5) * in_scale, 0.0, 0.0) + in_position;
 	out_worldPos = u_ankiGlobals.m_cameraTransform * Vec4((out_uv - 0.5) * in_scale, 0.0, 0.0) + in_position;
-	gl_Position = u_ankiGlobals.m_viewProjectionMatrix
-				  * Vec4(u_renderableGpuViews[0].m_worldTransform * Vec4(out_worldPos, 1.0), 1.0);
+
+	gl_Position = Vec4(transform(u_renderableGpuViews[0].m_worldTransform, Vec4(out_worldPos, 1.0)), 1.0);
+	gl_Position = u_ankiGlobals.m_viewProjectionMatrix * gl_Position;
 
 
 	out_alpha = in_alpha;
 	out_alpha = in_alpha;
 }
 }

+ 8 - 0
AnKi/Shaders/Functions.glsl

@@ -704,3 +704,11 @@ ANKI_RP F32 fastCos(ANKI_RP F32 x)
 {
 {
 	return fastSin(x + kPi / 2.0);
 	return fastSin(x + kPi / 2.0);
 }
 }
+
+Vec3 transform(Vec4 mat[3u], Vec4 v)
+{
+	const F32 a = dot(mat[0], v);
+	const F32 b = dot(mat[1], v);
+	const F32 c = dot(mat[2], v);
+	return Vec3(a, b, c);
+}

+ 15 - 12
AnKi/Shaders/GBufferGeneric.ankiprog

@@ -27,6 +27,7 @@
 #define REALLY_ALPHA_TEST (ALPHA_TEST && DIFFUSE_TEX)
 #define REALLY_ALPHA_TEST (ALPHA_TEST && DIFFUSE_TEX)
 
 
 #include <AnKi/Shaders/GBufferCommon.glsl>
 #include <AnKi/Shaders/GBufferCommon.glsl>
+#include <AnKi/Shaders/Functions.glsl>
 
 
 layout(set = kMaterialSetGlobal, binding = kMaterialBindingTrilinearRepeatSampler) uniform sampler u_globalSampler;
 layout(set = kMaterialSetGlobal, binding = kMaterialBindingTrilinearRepeatSampler) uniform sampler u_globalSampler;
 
 
@@ -139,10 +140,11 @@ void skinning()
 #if ANKI_TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
 #if ANKI_TECHNIQUE == RENDERING_TECHNIQUE_GBUFFER
 void positionUvNormalTangent()
 void positionUvNormalTangent()
 {
 {
-	gl_Position = u_globalUniforms.m_viewProjectionMatrix
-				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0);
-	out_normal = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_normal, 0.0);
-	out_tangent = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_tangent.xyz, 0.0);
+	gl_Position = Vec4(transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(g_position, 1.0)), 1.0);
+	gl_Position = u_globalUniforms.m_viewProjectionMatrix * gl_Position;
+
+	out_normal = transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(g_normal, 0.0));
+	out_tangent = transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(g_tangent.xyz, 0.0));
 	out_bitangent = cross(out_normal, out_tangent) * g_tangent.w;
 	out_bitangent = cross(out_normal, out_tangent) * g_tangent.w;
 	out_uv = g_uv;
 	out_uv = g_uv;
 }
 }
@@ -161,9 +163,9 @@ void parallax()
 	// const Mat3 invTbn = transpose(u_globalUniforms.m_viewRotationMatrix
 	// const Mat3 invTbn = transpose(u_globalUniforms.m_viewRotationMatrix
 	//							  * u_renderableGpuViews[gl_InstanceIndex].m_worldRotation * Mat3(t, b, n));
 	//							  * u_renderableGpuViews[gl_InstanceIndex].m_worldRotation * Mat3(t, b, n));
 
 
-	const Vec3 viewPos = (u_globalUniforms.m_viewMatrix
-						  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0))
-							 .xyz;
+	const Vec4 v4 =
+		Vec4(transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(g_position, 1.0)), 1.0);
+	const Vec3 viewPos = u_globalUniforms.m_viewMatrix * v4;
 	out_distFromTheCamera = viewPos.z;
 	out_distFromTheCamera = viewPos.z;
 
 
 	out_eyeTangentSpace = invTbn * viewPos;
 	out_eyeTangentSpace = invTbn * viewPos;
@@ -178,13 +180,14 @@ void velocity()
 
 
 #	if ANKI_VELOCITY
 #	if ANKI_VELOCITY
 	// Object is also moving
 	// Object is also moving
-	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_previousWorldTransform;
+	const Vec4 trf[3] = u_renderableGpuViews[gl_InstanceIndex].m_previousWorldTransform;
 #	else
 #	else
 	// Object is a skin that is not moving
 	// Object is a skin that is not moving
-	const Mat3x4 trf = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform;
+	const Vec4 trf[3] = u_renderableGpuViews[gl_InstanceIndex].m_worldTransform;
 #	endif
 #	endif
 
 
-	const Vec4 v4 = u_globalUniforms.m_previousViewProjectionMatrix * Vec4(trf * Vec4(prevLocalPos, 1.0), 1.0);
+	Vec4 v4 = Vec4(transform(trf, Vec4(prevLocalPos, 1.0)), 1.0);
+	v4 = u_globalUniforms.m_previousViewProjectionMatrix * v4;
 
 
 	out_prevClipXyw = v4.xyw;
 	out_prevClipXyw = v4.xyw;
 	out_crntClipXyw = gl_Position.xyw;
 	out_crntClipXyw = gl_Position.xyw;
@@ -208,8 +211,8 @@ void main()
 	velocity();
 	velocity();
 #	endif
 #	endif
 #else
 #else
-	gl_Position = u_globalUniforms.m_viewProjectionMatrix
-				  * Vec4(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform * Vec4(g_position, 1.0), 1.0);
+	gl_Position = Vec4(transform(u_renderableGpuViews[gl_InstanceIndex].m_worldTransform, Vec4(g_position, 1.0)), 1.0);
+	gl_Position = u_globalUniforms.m_viewProjectionMatrix * gl_Position;
 
 
 #	if REALLY_ALPHA_TEST
 #	if REALLY_ALPHA_TEST
 	out_uv = g_uv;
 	out_uv = g_uv;

+ 8 - 5
AnKi/Shaders/GBufferGpuParticles.ankiprog

@@ -8,7 +8,7 @@
 #include <AnKi/Shaders/Include/ParticleTypes.h>
 #include <AnKi/Shaders/Include/ParticleTypes.h>
 #include <AnKi/Shaders/Include/MaterialTypes.h>
 #include <AnKi/Shaders/Include/MaterialTypes.h>
 #include <AnKi/Shaders/Include/GpuSceneTypes.h>
 #include <AnKi/Shaders/Include/GpuSceneTypes.h>
-#include <AnKi/Shaders/Common.glsl>
+#include <AnKi/Shaders/Functions.glsl>
 
 
 #pragma anki reflect AnKiLocalUniforms
 #pragma anki reflect AnKiLocalUniforms
 #pragma anki struct AnKiLocalUniforms
 #pragma anki struct AnKiLocalUniforms
@@ -50,10 +50,13 @@ void main()
 {
 {
 	const GpuParticle part = u_particles[gl_VertexIndex / 2];
 	const GpuParticle part = u_particles[gl_VertexIndex / 2];
 
 
-	const Vec4 crntClipPos = u_globalUniforms.m_viewProjectionMatrix
-							 * Vec4(u_renderableGpuViews[0].m_worldTransform * Vec4(part.m_newWorldPosition, 1.0), 1.0);
-	const Vec4 prevClipPos = u_globalUniforms.m_viewProjectionMatrix
-							 * Vec4(u_renderableGpuViews[0].m_worldTransform * Vec4(part.m_oldWorldPosition, 1.0), 1.0);
+	Vec4 crntClipPos =
+		Vec4(transform(u_renderableGpuViews[0].m_worldTransform, Vec4(part.m_newWorldPosition, 1.0)), 1.0);
+	crntClipPos = u_globalUniforms.m_viewProjectionMatrix * crntClipPos;
+
+	Vec4 prevClipPos =
+		Vec4(transform(u_renderableGpuViews[0].m_worldTransform, Vec4(part.m_oldWorldPosition, 1.0)), 1.0);
+	prevClipPos = u_globalUniforms.m_viewProjectionMatrix * prevClipPos;
 
 
 	gl_Position = ((gl_VertexIndex & 1) == 0) ? crntClipPos : prevClipPos;
 	gl_Position = ((gl_VertexIndex & 1) == 0) ? crntClipPos : prevClipPos;
 
 

+ 2 - 2
AnKi/Shaders/Include/GpuSceneTypes.h

@@ -39,8 +39,8 @@ struct MeshGpuView
 
 
 struct RenderableGpuView
 struct RenderableGpuView
 {
 {
-	Mat3x4 m_worldTransform;
-	Mat3x4 m_previousWorldTransform;
+	Vec4 m_worldTransform[3u];
+	Vec4 m_previousWorldTransform[3u];
 	Vec4 m_positionScaleF32AndTranslationVec3; ///< The scale and translation that uncompress positions.
 	Vec4 m_positionScaleF32AndTranslationVec3; ///< The scale and translation that uncompress positions.
 };
 };