Browse Source

The great refactoring. Remove the acronyms in the renderer to ease adoption

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
42863c8c26
90 changed files with 714 additions and 719 deletions
  1. 1 1
      bled/Main.cpp
  2. 55 9
      programs/DeferredShading.ankiprog
  3. 2 2
      programs/ForwardShadingFog.ankiprog
  4. 7 2
      programs/ForwardShadingParticles.ankiprog
  5. 2 2
      programs/GBufferGeneric.ankiprog
  6. 26 9
      programs/Irradiance.ankiprog
  7. 0 0
      programs/LightShading.ankiprog
  8. 1 1
      samples/simple_scene/assets/room-material.ankimtl
  9. 1 1
      samples/sponza/assets/Material__57_001-material.ankimtl
  10. 1 1
      samples/sponza/assets/arch-material.ankimtl
  11. 1 1
      samples/sponza/assets/bricks-material.ankimtl
  12. 1 1
      samples/sponza/assets/ceiling-material.ankimtl
  13. 1 1
      samples/sponza/assets/chain-material.ankimtl
  14. 1 1
      samples/sponza/assets/column_a-material.ankimtl
  15. 1 1
      samples/sponza/assets/column_b-material.ankimtl
  16. 1 1
      samples/sponza/assets/column_c-material.ankimtl
  17. 1 1
      samples/sponza/assets/details-material.ankimtl
  18. 1 1
      samples/sponza/assets/fabric_a-material.ankimtl
  19. 1 1
      samples/sponza/assets/fabric_c-material.ankimtl
  20. 1 1
      samples/sponza/assets/fabric_d-material.ankimtl
  21. 1 1
      samples/sponza/assets/fabric_e-material.ankimtl
  22. 1 1
      samples/sponza/assets/fabric_f-material.ankimtl
  23. 1 1
      samples/sponza/assets/fire.ankimtl
  24. 1 1
      samples/sponza/assets/flagpole-material.ankimtl
  25. 1 1
      samples/sponza/assets/floor-material.ankimtl
  26. 1 1
      samples/sponza/assets/leaf-material.ankimtl
  27. 1 1
      samples/sponza/assets/lion-material.ankimtl
  28. 1 1
      samples/sponza/assets/lion_stand-material.ankimtl
  29. 1 1
      samples/sponza/assets/roof-material.ankimtl
  30. 1 1
      samples/sponza/assets/smoke.ankimtl
  31. 1 1
      samples/sponza/assets/vase-material.ankimtl
  32. 1 1
      samples/sponza/assets/vase_hanging-material.ankimtl
  33. 1 1
      samples/sponza/assets/vase_round_001-material.ankimtl
  34. 1 1
      samples/sponza/assets/writings-material.ankimtl
  35. 1 1
      sandbox/Main.cpp
  36. 2 0
      shaders/Common.glsl
  37. 2 3
      shaders/ForwardShadingCommonFrag.glsl
  38. 3 3
      shaders/ForwardShadingCommonVert.glsl
  39. 3 3
      shaders/GBufferCommonFrag.glsl
  40. 0 0
      shaders/GBufferCommonTessc.glsl
  41. 0 0
      shaders/GBufferCommonTesse.glsl
  42. 3 3
      shaders/GBufferCommonVert.glsl
  43. 0 23
      shaders/Light.vert.glsl
  44. 0 13
      shaders/MsFsCommon.glsl
  45. 1 1
      src/anki/Renderer.h
  46. 4 3
      src/anki/gr/Enums.h
  47. 11 6
      src/anki/gr/common/Misc.cpp
  48. 7 2
      src/anki/gr/gl/Common.cpp
  49. 3 3
      src/anki/gr/vulkan/Common.cpp
  50. 3 3
      src/anki/renderer/Bloom.cpp
  51. 3 3
      src/anki/renderer/Bloom.h
  52. 1 1
      src/anki/renderer/Common.cpp
  53. 16 16
      src/anki/renderer/Common.h
  54. 4 4
      src/anki/renderer/Dbg.cpp
  55. 2 2
      src/anki/renderer/DebugDrawer.cpp
  56. 3 3
      src/anki/renderer/DepthDownscale.cpp
  57. 3 3
      src/anki/renderer/DownscaleBlur.cpp
  58. 15 15
      src/anki/renderer/FinalComposite.cpp
  59. 3 3
      src/anki/renderer/FinalComposite.h
  60. 91 25
      src/anki/renderer/ForwardShading.cpp
  61. 26 3
      src/anki/renderer/ForwardShading.h
  62. 0 84
      src/anki/renderer/FsUpscale.cpp
  63. 0 40
      src/anki/renderer/FsUpscale.h
  64. 15 15
      src/anki/renderer/GBuffer.cpp
  65. 4 4
      src/anki/renderer/GBuffer.h
  66. 54 60
      src/anki/renderer/Indirect.cpp
  67. 13 15
      src/anki/renderer/Indirect.h
  68. 11 11
      src/anki/renderer/LensFlare.cpp
  69. 3 3
      src/anki/renderer/LensFlare.h
  70. 46 42
      src/anki/renderer/LightShading.cpp
  71. 4 4
      src/anki/renderer/LightShading.h
  72. 5 5
      src/anki/renderer/MainRenderer.cpp
  73. 74 74
      src/anki/renderer/Renderer.cpp
  74. 40 55
      src/anki/renderer/Renderer.h
  75. 4 4
      src/anki/renderer/ScreenspaceLensFlare.cpp
  76. 2 2
      src/anki/renderer/ScreenspaceLensFlare.h
  77. 59 54
      src/anki/renderer/ShadowMapping.cpp
  78. 3 3
      src/anki/renderer/ShadowMapping.h
  79. 2 2
      src/anki/renderer/Ssao.cpp
  80. 14 14
      src/anki/renderer/TemporalAA.cpp
  81. 3 3
      src/anki/renderer/TemporalAA.h
  82. 4 4
      src/anki/renderer/Tonemapping.cpp
  83. 2 2
      src/anki/renderer/Tonemapping.h
  84. 14 14
      src/anki/renderer/Volumetric.cpp
  85. 1 1
      src/anki/resource/Model.cpp
  86. 1 1
      src/anki/resource/ParticleEmitterResource.cpp
  87. 2 2
      src/anki/resource/RenderingKey.h
  88. 2 2
      src/anki/resource/TextureResource.cpp
  89. 1 1
      src/anki/scene/ReflectionProbe.cpp
  90. 1 1
      tools/scene/ExporterMaterial.cpp

+ 1 - 1
bled/Main.cpp

@@ -56,7 +56,7 @@ Error MyApp::init()
 
 		app->getMainRenderer()
 			.getOffscreenRenderer()
-			.getPps();
+			.getFinalComposite();
 			// .loadColorGradingTexture("textures/adis/dungeon.ankitex");
 	}
 

+ 55 - 9
shaders/Light.frag.glsl → programs/DeferredShading.ankiprog

@@ -1,11 +1,53 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
+<!-- 
+Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
+All rights reserved.
+Code licensed under the BSD License.
+http://www.anki3d.org/LICENSE
+-->
 
+<!-- Classic deferred lighting shader -->
+
+<shaderProgram>
+	<mutators>
+		<mutator name="LIGHT_TYPE" values="0 1"/>
+	</mutators>
+
+	<shaders>
+		<shader type="vert">
+			<source><![CDATA[
+#include "shaders/Common.glsl"
+
+layout(location = 0) in vec3 in_position;
+
+out gl_PerVertex
+{
+	vec4 gl_Position;
+};
+
+layout(ANKI_UBO_BINDING(0, 0), row_major) uniform u0_
+{
+	mat4 u_mvp;
+};
+
+void main()
+{
+	ANKI_WRITE_POSITION(u_mvp * vec4(in_position, 1.0));
+}
+			]]></source>
+		</shader>
+
+		<shader type="frag">
+			<inputs>
+				<input name="FB_SIZE" type="uvec2" const="1" />
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Pack.glsl"
 #include "shaders/LightFunctions.glsl"
 
+#define POINT_LIGHT_TYPE 0
+#define SPOT_LIGHT_TYPE 1
+
 layout(location = 0) out vec3 out_color;
 
 // Point light
@@ -34,16 +76,16 @@ layout(ANKI_TEX_BINDING(0, 3)) uniform sampler2D u_msDepthRt;
 
 layout(ANKI_UBO_BINDING(0, 1)) uniform u1_
 {
-#if defined(POINT_LIGHT)
+#if LIGHT_TYPE == POINT_LIGHT_TYPE
 	PointLight u_light;
-#elif defined(SPOT_LIGHT)
+#elif LIGHT_TYPE == SPOT_LIGHT_TYPE
 	SpotLight u_light;
 #else
 #error See file
 #endif
 };
 
-#if defined(POINT_LIGHT)
+#if LIGHT_TYPE == POINT_LIGHT_TYPE
 #define u_ldiff u_light.diffuseColorPad1.xyz
 #define u_lspec u_light.specularColorPad1.xyz
 #else
@@ -66,7 +108,7 @@ vec3 readPosition(in vec2 uv)
 void main()
 {
 	// Read G-buffer
-	vec2 uv = vec2(gl_FragCoord.xy) / vec2(RENDERING_WIDTH, RENDERING_HEIGHT);
+	vec2 uv = vec2(gl_FragCoord.xy) / vec2(FB_SIZE.x, FB_SIZE.y);
 	GbufferInfo gbuffer;
 	readGBuffer(u_msRt0, u_msRt1, u_msRt2, uv, 0.0, gbuffer);
 	float a2 = pow(gbuffer.roughness, 2.0);
@@ -85,7 +127,7 @@ void main()
 	float att = computeAttenuationFactor(u_light.posRadius.w, frag2Light);
 	float lambert = nol;
 
-#if defined(POINT_LIGHT)
+#if LIGHT_TYPE == POINT_LIGHT_TYPE
 	out_color = (specC + diffC) * (att * max(lambert, gbuffer.subsurface));
 #else
 	float spot =
@@ -94,3 +136,7 @@ void main()
 	out_color = (diffC + specC) * (att * spot * max(lambert, gbuffer.subsurface));
 #endif
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 2 - 2
programs/FsFog.ankiprog → programs/ForwardShadingFog.ankiprog

@@ -12,7 +12,7 @@ http://www.anki3d.org/LICENSE
 			</inputs>
 
 			<source><![CDATA[
-#include "shaders/FsCommonVert.glsl"
+#include "shaders/ForwardShadingCommonVert.glsl"
 
 void main() 
 {
@@ -28,7 +28,7 @@ void main()
 			</inputs>
 
 			<source><![CDATA[
-#include "shaders/FsCommonFrag.glsl"
+#include "shaders/ForwardShadingCommonFrag.glsl"
 
 void main() 
 {

+ 7 - 2
programs/FsParticles.ankiprog → programs/ForwardShadingParticles.ankiprog

@@ -18,7 +18,9 @@ http://www.anki3d.org/LICENSE
 				<input name="viewMat" type="mat4"/>
 			</inputs>
 
-			<source><![CDATA[#include "shaders/FsCommonVert.glsl"
+			<source><![CDATA[
+#include "shaders/ForwardShadingCommonVert.glsl"
+
 void main() 
 {
 	particle(mvp, cameraRotMat, viewMat);
@@ -48,7 +50,10 @@ void main()
 				<input name="colorBias" type="vec4" const="1"/>
 			</inputs>
 
-			<source><![CDATA[#include "shaders/FsCommonFrag.glsl"
+			<source><![CDATA[
+
+#include "shaders/ForwardShadingCommonFrag.glsl"
+
 void main() 
 {
 #if ANIMATED_TEXTURE == 1

+ 2 - 2
programs/MsGeneric.ankiprog → programs/GBufferGeneric.ankiprog

@@ -35,7 +35,7 @@ http://www.anki3d.org/LICENSE
 				</input>
 			</inputs>
 
-			<source><![CDATA[#include "shaders/MsCommonVert.glsl"
+			<source><![CDATA[#include "shaders/GBufferCommonVert.glsl"
 void main() 
 {
 #if PASS == 0
@@ -145,7 +145,7 @@ void main()
 				</input>
 			</inputs>
 
-			<source><![CDATA[#include "shaders/MsCommonFrag.glsl"
+			<source><![CDATA[#include "shaders/GBufferCommonFrag.glsl"
 void main()
 {
 #if PASS == 0

+ 26 - 9
shaders/Irradiance.frag.glsl → programs/Irradiance.ankiprog

@@ -1,14 +1,27 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
+<!-- 
+Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
+All rights reserved.
+Code licensed under the BSD License.
+http://www.anki3d.org/LICENSE
+-->
+<shaderProgram>
+	<shaders>
+		<shader type="vert">
+			<source><![CDATA[
+#include "shaders/Quad.vert.glsl"
+			]]></source>
+		</shader>
 
+		<shader type="frag">
+			<inputs>
+				<input name="FACE_SIZE" type="uint" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 // Compute the irradiance given an environment map
 
 #include "shaders/Functions.glsl"
 
-const float INDIRECT_BUMP = 2.5; // A sort of hack
-
 layout(location = 0) in vec2 in_uv;
 layout(location = 0) out vec3 out_color;
 
@@ -36,11 +49,11 @@ void main()
 	// For all the faces and texels of the environment map calculate a color sum
 	for(uint f = 0u; f < 6u; ++f)
 	{
-		for(uint i = 0u; i < CUBEMAP_SIZE; ++i)
+		for(uint i = 0u; i < FACE_SIZE; ++i)
 		{
-			for(uint j = 0u; j < CUBEMAP_SIZE; ++j)
+			for(uint j = 0u; j < FACE_SIZE; ++j)
 			{
-				vec2 uv = vec2(j, i) / float(CUBEMAP_SIZE);
+				vec2 uv = vec2(j, i) / float(FACE_SIZE);
 				vec3 r = getCubemapDirection(UV_TO_NDC(uv), f);
 
 				float lambert = dot(r, ri);
@@ -57,3 +70,7 @@ void main()
 
 	out_color = outCol / weight * (2.0 * PI);
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 0 - 0
programs/Is.ankiprog → programs/LightShading.ankiprog


+ 1 - 1
samples/simple_scene/assets/room-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="0"/>

+ 1 - 1
samples/sponza/assets/Material__57_001-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/arch-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/bricks-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/ceiling-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/chain-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/column_a-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/column_b-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/column_c-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/details-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fabric_a-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fabric_c-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fabric_d-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fabric_e-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fabric_f-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/fire.ankimtl

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="programs/FsParticles.ankiprog" forwardShading="1" shadow="0">
+<material shaderProgram="programs/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
 	<mutators>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="LIGHT" value="0"/>

+ 1 - 1
samples/sponza/assets/flagpole-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/floor-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/leaf-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/lion-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/lion_stand-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/roof-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/smoke.ankimtl

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" ?>
-<material shaderProgram="programs/FsParticles.ankiprog" forwardShading="1" shadow="0">
+<material shaderProgram="programs/ForwardShadingParticles.ankiprog" forwardShading="1" shadow="0">
 	<mutators>
 		<mutator name="ANIMATED_TEXTURE" value="0"/>
 		<mutator name="LIGHT" value="1"/>

+ 1 - 1
samples/sponza/assets/vase-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/vase_hanging-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/vase_round_001-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
samples/sponza/assets/writings-material.ankimtl

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="1"/>

+ 1 - 1
sandbox/Main.cpp

@@ -64,7 +64,7 @@ Error MyApp::init(int argc, char* argv[])
 	ANKI_CHECK(resources.loadResource(argv[2], script));
 	ANKI_CHECK(getScriptManager().evalString(script->getSource()));
 
-	ANKI_CHECK(renderer.getOffscreenRenderer().getPps().loadColorGradingTexture(
+	ANKI_CHECK(renderer.getOffscreenRenderer().getFinalComposite().loadColorGradingTexture(
 		"textures/color_gradient_luts/forge_lut.ankitex"));
 
 #if PLAYER

+ 2 - 0
shaders/Common.glsl

@@ -48,4 +48,6 @@ const uint MAX_U32 = 0xFFFFFFFFu;
 #define readFirstInvocationARB(x_) (x_)
 #endif
 
+#define CALC_BITANGENT_IN_VERT 1
+
 #endif

+ 2 - 3
shaders/FsCommonFrag.glsl → shaders/ForwardShadingCommonFrag.glsl

@@ -3,12 +3,11 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#ifndef ANKI_SHADERS_FS_COMMON_FRAG_GLSL
-#define ANKI_SHADERS_FS_COMMON_FRAG_GLSL
+#ifndef ANKI_SHADERS_FORWARD_SHADING_COMMON_FRAG_GLSL
+#define ANKI_SHADERS_FORWARD_SHADING_COMMON_FRAG_GLSL
 
 // Common code for all fragment shaders of BS
 #include "shaders/Common.glsl"
-#include "shaders/MsFsCommon.glsl"
 #include "shaders/Functions.glsl"
 #include "shaders/Clusterer.glsl"
 

+ 3 - 3
shaders/FsCommonVert.glsl → shaders/ForwardShadingCommonVert.glsl

@@ -3,11 +3,11 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#ifndef ANKI_SHADERS_FS_COMMON_VERT_GLSL
-#define ANKI_SHADERS_FS_COMMON_VERT_GLSL
+#ifndef ANKI_SHADERS_FORWARD_SHADING_COMMON_VERT_GLSL
+#define ANKI_SHADERS_FORWARD_SHADING_COMMON_VERT_GLSL
 
 // Common code for all vertex shaders of FS
-#include "shaders/MsFsCommon.glsl"
+#include "shaders/Common.glsl"
 
 // Global resources
 #define LIGHT_SET 1

+ 3 - 3
shaders/MsCommonFrag.glsl → shaders/GBufferCommonFrag.glsl

@@ -3,11 +3,11 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#ifndef ANKI_SHADERS_MS_COMMON_FRAG_GLSL
-#define ANKI_SHADERS_MS_COMMON_FRAG_GLSL
+#ifndef ANKI_SHADERS_GBUFFER_COMMON_FRAG_GLSL
+#define ANKI_SHADERS_GBUFFER_COMMON_FRAG_GLSL
 
 #include "shaders/Pack.glsl"
-#include "shaders/MsFsCommon.glsl"
+#include "shaders/Common.glsl"
 
 //
 // Input

+ 0 - 0
shaders/MsCommonTessc.glsl → shaders/GBufferCommonTessc.glsl


+ 0 - 0
shaders/MsCommonTesse.glsl → shaders/GBufferCommonTesse.glsl


+ 3 - 3
shaders/MsCommonVert.glsl → shaders/GBufferCommonVert.glsl

@@ -3,10 +3,10 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#ifndef ANKI_SHADERS_MS_COMMON_VERT_GLSL
-#define ANKI_SHADERS_MS_COMMON_VERT_GLSL
+#ifndef ANKI_SHADERS_GBUFFER_COMMON_VERT_GLSL
+#define ANKI_SHADERS_GBUFFER_COMMON_VERT_GLSL
 
-#include "shaders/MsFsCommon.glsl"
+#include "shaders/Common.glsl"
 
 //
 // Input

+ 0 - 23
shaders/Light.vert.glsl

@@ -1,23 +0,0 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#include "shaders/Common.glsl"
-
-layout(location = 0) in vec3 in_position;
-
-out gl_PerVertex
-{
-	vec4 gl_Position;
-};
-
-layout(ANKI_UBO_BINDING(0, 0), row_major) uniform u0_
-{
-	mat4 u_mvp;
-};
-
-void main()
-{
-	ANKI_WRITE_POSITION(u_mvp * vec4(in_position, 1.0));
-}

+ 0 - 13
shaders/MsFsCommon.glsl

@@ -1,13 +0,0 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#ifndef ANKI_SHADERS_MS_FS_COMMON_GLSL
-#define ANKI_SHADERS_MS_FS_COMMON_GLSL
-
-#include "shaders/Common.glsl"
-
-#define CALC_BITANGENT_IN_VERT 1
-
-#endif

+ 1 - 1
src/anki/Renderer.h

@@ -7,7 +7,7 @@
 
 #include <anki/renderer/MainRenderer.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/Dbg.h>
 #include <anki/renderer/Volumetric.h>
 

+ 4 - 3
src/anki/gr/Enums.h

@@ -142,9 +142,10 @@ enum class ComponentFormat : U8
 	DEFAULT_FRAMEBUFFER, ///< Implicit format.
 
 	// Compressed
-	R8G8B8_S3TC, ///< DXT1
+	R8G8B8_BC1, ///< DXT1
+	R8G8B8A8_BC3, ///< DXT5
+	R16G16B16_BC6, ///< HDR
 	R8G8B8_ETC2,
-	R8G8B8A8_S3TC, ///< DXT5
 	R8G8B8A8_ETC2,
 
 	// Depth & stencil
@@ -155,7 +156,7 @@ enum class ComponentFormat : U8
 	S8,
 
 	// Helpers
-	FIRST_COMPRESSED = R8G8B8_S3TC,
+	FIRST_COMPRESSED = R8G8B8_BC1,
 	LAST_COMPRESSED = R8G8B8A8_ETC2,
 	FIRST_DEPTH_STENCIL = D16,
 	LAST_DEPTH_STENCIL = S8

+ 11 - 6
src/anki/gr/common/Misc.cpp

@@ -158,21 +158,26 @@ void getFormatInfo(const PixelFormat& fmt, U& texelComponents, U& texelBytes, U&
 		texelComponents = 3;
 		texelBytes = 4;
 		break;
-	case ComponentFormat::R8G8B8_S3TC:
+	case ComponentFormat::R8G8B8_BC1:
 		texelComponents = 3;
 		blockSize = 4;
 		blockBytes = 8;
 		break;
-	case ComponentFormat::R8G8B8_ETC2:
-		texelComponents = 3;
+	case ComponentFormat::R8G8B8A8_BC3:
+		texelComponents = 4;
 		blockSize = 4;
-		blockBytes = 8;
+		blockBytes = 16;
 		break;
-	case ComponentFormat::R8G8B8A8_S3TC:
-		texelComponents = 4;
+	case ComponentFormat::R16G16B16_BC6:
+		texelComponents = 3;
 		blockSize = 4;
 		blockBytes = 16;
 		break;
+	case ComponentFormat::R8G8B8_ETC2:
+		texelComponents = 3;
+		blockSize = 4;
+		blockBytes = 8;
+		break;
 	case ComponentFormat::R8G8B8A8_ETC2:
 		texelComponents = 4;
 		blockSize = 4;

+ 7 - 2
src/anki/gr/gl/Common.cpp

@@ -272,16 +272,21 @@ void convertTextureInformation(const PixelFormat& pf,
 	switch(pf.m_components)
 	{
 #if ANKI_GL == ANKI_GL_DESKTOP
-	case ComponentFormat::R8G8B8_S3TC:
+	case ComponentFormat::R8G8B8_BC1:
 		format = GL_COMPRESSED_RGB_S3TC_DXT1_EXT;
 		internalFormat = format;
 		type = GL_UNSIGNED_BYTE;
 		break;
-	case ComponentFormat::R8G8B8A8_S3TC:
+	case ComponentFormat::R8G8B8A8_BC3:
 		format = GL_COMPRESSED_RGBA_S3TC_DXT5_EXT;
 		internalFormat = format;
 		type = GL_UNSIGNED_BYTE;
 		break;
+	case ComponentFormat::R16G16B16_BC6:
+		format = GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT;
+		internalFormat = format;
+		type = GL_FLOAT;
+		break;
 #else
 	case ComponentFormat::R8G8B8_ETC2:
 		format = GL_COMPRESSED_RGB8_ETC2;

+ 3 - 3
src/anki/gr/vulkan/Common.cpp

@@ -201,19 +201,19 @@ static const ConvertFormat CONVERT_FORMAT_TABLE[] = {ANKI_FMT(NONE, NONE, VK_FOR
 	ANKI_FMT(NONE, NONE, VK_FORMAT_D16_UNORM_S8_UINT, DS),
 	ANKI_FMT(D24S8, UNORM, VK_FORMAT_D24_UNORM_S8_UINT, DS),
 	ANKI_FMT(D32S8, UNORM, VK_FORMAT_D32_SFLOAT_S8_UINT, DS),
-	ANKI_FMT(R8G8B8_S3TC, UNORM, VK_FORMAT_BC1_RGB_UNORM_BLOCK, C),
+	ANKI_FMT(R8G8B8_BC1, UNORM, VK_FORMAT_BC1_RGB_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC1_RGB_SRGB_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC1_RGBA_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC1_RGBA_SRGB_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC2_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC2_SRGB_BLOCK, C),
-	ANKI_FMT(R8G8B8A8_S3TC, UNORM, VK_FORMAT_BC3_UNORM_BLOCK, C),
+	ANKI_FMT(R8G8B8A8_BC3, UNORM, VK_FORMAT_BC3_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC3_SRGB_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC4_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC4_SNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC5_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC5_SNORM_BLOCK, C),
-	ANKI_FMT(NONE, NONE, VK_FORMAT_BC6H_UFLOAT_BLOCK, C),
+	ANKI_FMT(R16G16B16_BC6, FLOAT, VK_FORMAT_BC6H_UFLOAT_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC6H_SFLOAT_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC7_UNORM_BLOCK, C),
 	ANKI_FMT(NONE, NONE, VK_FORMAT_BC7_SRGB_BLOCK, C),

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

@@ -5,9 +5,9 @@
 
 #include <anki/renderer/Bloom.h>
 #include <anki/renderer/DownscaleBlur.h>
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Tm.h>
+#include <anki/renderer/Tonemapping.h>
 #include <anki/misc/ConfigSet.h>
 
 namespace anki
@@ -83,7 +83,7 @@ void BloomExposure::run(RenderingContext& ctx)
 	Vec4* uniforms = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
 	*uniforms = Vec4(m_threshold, m_scale, 0.0, 0.0);
 
-	cmdb->bindStorageBuffer(0, 0, m_r->getTm().m_luminanceBuff, 0, MAX_PTR_SIZE);
+	cmdb->bindStorageBuffer(0, 0, m_r->getTonemapping().m_luminanceBuff, 0, MAX_PTR_SIZE);
 
 	m_r->drawQuad(cmdb);
 	cmdb->endRenderPass();

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

@@ -6,7 +6,7 @@
 #pragma once
 
 #include <anki/renderer/RenderingPass.h>
-#include <anki/renderer/Sslf.h>
+#include <anki/renderer/ScreenspaceLensFlare.h>
 #include <anki/Gr.h>
 #include <anki/resource/TextureResource.h>
 #include <anki/resource/ShaderResource.h>
@@ -78,13 +78,13 @@ private:
 	ShaderProgramPtr m_prog;
 };
 
-/// Bloom pass.
+/// Bloom passes.
 class Bloom : public RenderingPass
 {
 anki_internal:
 	BloomExposure m_extractExposure;
 	BloomUpscale m_upscale;
-	Sslf m_sslf;
+	ScreenspaceLensFlare m_sslf;
 
 	Bloom(Renderer* r)
 		: RenderingPass(r)

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

@@ -8,7 +8,7 @@
 namespace anki
 {
 
-const Array<PixelFormat, MS_COLOR_ATTACHMENT_COUNT> MS_COLOR_ATTACHMENT_PIXEL_FORMATS = {
+const Array<PixelFormat, GBUFFER_COLOR_ATTACHMENT_COUNT> MS_COLOR_ATTACHMENT_PIXEL_FORMATS = {
 	{PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM),
 		PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM),
 		PixelFormat(ComponentFormat::R8G8B8A8, TransformFormat::UNORM)}};

+ 16 - 16
src/anki/renderer/Common.h

@@ -19,24 +19,24 @@ namespace anki
 
 // Forward
 class Renderer;
-class Ms;
-class Sm;
-class Is;
-class Fs;
-class Lf;
+class GBuffer;
+class ShadowMapping;
+class LightShading;
+class ForwardShading;
+class LensFlare;
 class Ssao;
-class Sslf;
-class Tm;
+class ScreenspaceLensFlare;
+class Tonemapping;
 class Bloom;
-class Pps;
+class FinalComposite;
 class Dbg;
 class Tiler;
-class Ir;
-class FsUpscale;
+class Indirect;
+class ForwardShadingUpscale;
 class DownscaleBlur;
 class Volumetric;
 class DepthDownscale;
-class Taa;
+class TemporalAA;
 
 class RenderingContext;
 class DebugDrawer;
@@ -68,18 +68,18 @@ inline void computeLinearizeDepthOptimal(F32 near, F32 far, F32& a, F32& b)
 	b = (near - far) / (2.0f * near);
 }
 
-const U MS_COLOR_ATTACHMENT_COUNT = 3;
+const U GBUFFER_COLOR_ATTACHMENT_COUNT = 3;
 
 /// Downsample and blur down to a texture with size DOWNSCALE_BLUR_DOWN_TO
 const U DOWNSCALE_BLUR_DOWN_TO = 32;
 
-extern const Array<PixelFormat, MS_COLOR_ATTACHMENT_COUNT> MS_COLOR_ATTACHMENT_PIXEL_FORMATS;
+extern const Array<PixelFormat, GBUFFER_COLOR_ATTACHMENT_COUNT> MS_COLOR_ATTACHMENT_PIXEL_FORMATS;
 
-const PixelFormat MS_DEPTH_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::D24S8, TransformFormat::UNORM);
+const PixelFormat GBUFFER_DEPTH_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::D24S8, TransformFormat::UNORM);
 
-const PixelFormat IS_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R11G11B10, TransformFormat::FLOAT);
+const PixelFormat LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R11G11B10, TransformFormat::FLOAT);
 
-const PixelFormat FS_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R16G16B16A16, TransformFormat::FLOAT);
+const PixelFormat FORWARD_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R16G16B16A16, TransformFormat::FLOAT);
 
 const PixelFormat DBG_COLOR_ATTACHMENT_PIXEL_FORMAT(ComponentFormat::R8G8B8, TransformFormat::UNORM);
 /// @}

+ 4 - 4
src/anki/renderer/Dbg.cpp

@@ -5,9 +5,9 @@
 
 #include <anki/renderer/Dbg.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/GBuffer.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/DebugDrawer.h>
 #include <anki/resource/ShaderResource.h>
 #include <anki/Scene.h>
@@ -58,7 +58,7 @@ Error Dbg::lazyInit()
 	fbInit.m_colorAttachmentCount = 1;
 	fbInit.m_colorAttachments[0].m_texture = m_rt;
 	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::CLEAR;
-	fbInit.m_depthStencilAttachment.m_texture = m_r->getMs().m_depthRt;
+	fbInit.m_depthStencilAttachment.m_texture = m_r->getGBuffer().m_depthRt;
 	fbInit.m_depthStencilAttachment.m_loadOperation = AttachmentLoadOperation::LOAD;
 	fbInit.m_depthStencilAttachment.m_aspect = DepthStencilAspectBit::DEPTH;
 

+ 2 - 2
src/anki/renderer/DebugDrawer.cpp

@@ -8,8 +8,8 @@
 #include <anki/resource/ShaderResource.h>
 #include <anki/resource/TextureResource.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Pps.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/FinalComposite.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/util/Logger.h>
 #include <anki/physics/PhysicsWorld.h>
 #include <anki/Collision.h>

+ 3 - 3
src/anki/renderer/DepthDownscale.cpp

@@ -5,7 +5,7 @@
 
 #include <anki/renderer/DepthDownscale.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/GBuffer.h>
 
 namespace anki
 {
@@ -23,7 +23,7 @@ Error HalfDepth::init(const ConfigSet&)
 	// Create RT
 	m_depthRt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(width,
 		height,
-		MS_DEPTH_ATTACHMENT_PIXEL_FORMAT,
+		GBUFFER_DEPTH_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE | TextureUsageBit::SAMPLED_FRAGMENT,
 		SamplingFilter::LINEAR,
 		1,
@@ -64,7 +64,7 @@ void HalfDepth::run(RenderingContext& ctx)
 
 	cmdb->beginRenderPass(m_fb);
 	cmdb->bindShaderProgram(m_prog);
-	cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt);
+	cmdb->bindTexture(0, 0, m_r->getGBuffer().m_depthRt);
 
 	cmdb->setViewport(0, 0, m_r->getWidth() / 2, m_r->getHeight() / 2);
 	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);

+ 3 - 3
src/anki/renderer/DownscaleBlur.cpp

@@ -5,7 +5,7 @@
 
 #include <anki/renderer/DownscaleBlur.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Taa.h>
+#include <anki/renderer/TemporalAA.h>
 
 namespace anki
 {
@@ -35,7 +35,7 @@ Error DownscaleBlur::initSubpass(U idx, const UVec2& inputTexSize)
 	// RT
 	pass.m_rt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(pass.m_width,
 		pass.m_height,
-		IS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+		LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE
 			| TextureUsageBit::SAMPLED_COMPUTE,
 		SamplingFilter::LINEAR,
@@ -92,7 +92,7 @@ void DownscaleBlur::run(RenderingContext& ctx)
 {
 	CommandBufferPtr cmdb = ctx.m_commandBuffer;
 
-	cmdb->bindTexture(0, 0, m_r->getTaa().getRt());
+	cmdb->bindTexture(0, 0, m_r->getTemporalAA().getRt());
 
 	for(U i = 0; i < m_passes.getSize(); ++i)
 	{

+ 15 - 15
src/anki/renderer/Pps.cpp → src/anki/renderer/FinalComposite.cpp

@@ -3,14 +3,14 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Bloom.h>
-#include <anki/renderer/Taa.h>
-#include <anki/renderer/Sslf.h>
-#include <anki/renderer/Tm.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/TemporalAA.h>
+#include <anki/renderer/ScreenspaceLensFlare.h>
+#include <anki/renderer/Tonemapping.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/renderer/Dbg.h>
 #include <anki/renderer/Ssao.h>
 #include <anki/renderer/DownscaleBlur.h>
@@ -22,18 +22,18 @@
 namespace anki
 {
 
-const PixelFormat Pps::RT_PIXEL_FORMAT(ComponentFormat::R8G8B8, TransformFormat::UNORM);
+const PixelFormat FinalComposite::RT_PIXEL_FORMAT(ComponentFormat::R8G8B8, TransformFormat::UNORM);
 
-Pps::Pps(Renderer* r)
+FinalComposite::FinalComposite(Renderer* r)
 	: RenderingPass(r)
 {
 }
 
-Pps::~Pps()
+FinalComposite::~FinalComposite()
 {
 }
 
-Error Pps::initInternal(const ConfigSet& config)
+Error FinalComposite::initInternal(const ConfigSet& config)
 {
 	ANKI_ASSERT("Initializing PPS");
 
@@ -82,7 +82,7 @@ Error Pps::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Pps::init(const ConfigSet& config)
+Error FinalComposite::init(const ConfigSet& config)
 {
 	Error err = initInternal(config);
 	if(err)
@@ -93,7 +93,7 @@ Error Pps::init(const ConfigSet& config)
 	return err;
 }
 
-Error Pps::loadColorGradingTexture(CString filename)
+Error FinalComposite::loadColorGradingTexture(CString filename)
 {
 	m_lut.reset(nullptr);
 	ANKI_CHECK(getResourceManager().loadResource(filename, m_lut));
@@ -104,7 +104,7 @@ Error Pps::loadColorGradingTexture(CString filename)
 	return ErrorCode::NONE;
 }
 
-Error Pps::run(RenderingContext& ctx)
+Error FinalComposite::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 
@@ -114,7 +114,7 @@ Error Pps::run(RenderingContext& ctx)
 
 	// Bind stuff
 	cmdb->bindTextureAndSampler(
-		0, 0, m_r->getTaa().getRt(), (drawToDefaultFb) ? m_r->getNearestSampler() : m_r->getLinearSampler());
+		0, 0, m_r->getTemporalAA().getRt(), (drawToDefaultFb) ? m_r->getNearestSampler() : m_r->getLinearSampler());
 	cmdb->bindTexture(0, 1, m_r->getBloom().m_upscale.m_rt);
 	cmdb->bindTexture(0, 2, m_lut->getGrTexture());
 	cmdb->bindTexture(0, 3, m_blueNoise->getGrTexture());
@@ -123,7 +123,7 @@ Error Pps::run(RenderingContext& ctx)
 		cmdb->bindTexture(0, 5, m_r->getDbg().getRt());
 	}
 
-	cmdb->bindStorageBuffer(0, 0, m_r->getTm().m_luminanceBuff, 0, MAX_PTR_SIZE);
+	cmdb->bindStorageBuffer(0, 0, m_r->getTonemapping().m_luminanceBuff, 0, MAX_PTR_SIZE);
 
 	Vec4* uniforms = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
 	uniforms->x() = F32(m_r->getFrameCount() % m_blueNoise->getLayerCount());

+ 3 - 3
src/anki/renderer/Pps.h → src/anki/renderer/FinalComposite.h

@@ -15,7 +15,7 @@ namespace anki
 /// @{
 
 /// Post-processing stage.
-class Pps : public RenderingPass
+class FinalComposite : public RenderingPass
 {
 public:
 	/// Load the color grading texture.
@@ -24,8 +24,8 @@ public:
 anki_internal:
 	static const PixelFormat RT_PIXEL_FORMAT;
 
-	Pps(Renderer* r);
-	~Pps();
+	FinalComposite(Renderer* r);
+	~FinalComposite();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& config);
 	ANKI_USE_RESULT Error run(RenderingContext& ctx);

+ 91 - 25
src/anki/renderer/Fs.cpp → src/anki/renderer/ForwardShading.cpp

@@ -3,11 +3,11 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Fs.h>
+#include <anki/renderer/ForwardShading.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Sm.h>
+#include <anki/renderer/GBuffer.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/ShadowMapping.h>
 #include <anki/renderer/Volumetric.h>
 #include <anki/renderer/DepthDownscale.h>
 #include <anki/scene/SceneGraph.h>
@@ -16,11 +16,11 @@
 namespace anki
 {
 
-Fs::~Fs()
+ForwardShading::~ForwardShading()
 {
 }
 
-Error Fs::init(const ConfigSet& cfg)
+Error ForwardShading::init(const ConfigSet& cfg)
 {
 	ANKI_R_LOGI("Initializing forward shading");
 
@@ -33,7 +33,7 @@ Error Fs::init(const ConfigSet& cfg)
 	return err;
 }
 
-Error Fs::initInternal(const ConfigSet&)
+Error ForwardShading::initInternal(const ConfigSet&)
 {
 	m_width = m_r->getWidth() / FS_FRACTION;
 	m_height = m_r->getHeight() / FS_FRACTION;
@@ -41,7 +41,7 @@ Error Fs::initInternal(const ConfigSet&)
 	// Create RT
 	m_rt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_width,
 		m_height,
-		FS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+		FORWARD_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
 		SamplingFilter::LINEAR,
 		1,
@@ -62,7 +62,7 @@ Error Fs::initInternal(const ConfigSet&)
 	return ErrorCode::NONE;
 }
 
-Error Fs::initVol()
+Error ForwardShading::initVol()
 {
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_vol.m_noiseTex));
 
@@ -82,7 +82,7 @@ Error Fs::initVol()
 	return ErrorCode::NONE;
 }
 
-void Fs::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
+void ForwardShading::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
 	cmdb->bindShaderProgram(m_vol.m_prog);
 	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
@@ -110,7 +110,7 @@ void Fs::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
 	cmdb->setDepthCompareOperation(CompareOperation::LESS);
 }
 
-Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
+Error ForwardShading::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
 {
 	U problemSize = ctx.m_visResults->getCount(VisibilityGroupType::RENDERABLES_FS);
 	PtrSize start, end;
@@ -131,20 +131,20 @@ Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	}
 	cinf.m_framebuffer = m_fb;
 	CommandBufferPtr cmdb = m_r->getGrManager().newInstance<CommandBuffer>(cinf);
-	ctx.m_fs.m_commandBuffers[threadId] = cmdb;
+	ctx.m_forwardShading.m_commandBuffers[threadId] = cmdb;
 
 	cmdb->informTextureCurrentUsage(m_r->getDepthDownscale().m_hd.m_depthRt,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ);
 	cmdb->informTextureCurrentUsage(m_rt, TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE);
 
 	cmdb->bindTexture(1, 0, m_r->getDepthDownscale().m_hd.m_depthRt);
-	cmdb->bindTexture(1, 1, m_r->getSm().m_spotTexArray);
-	cmdb->bindTexture(1, 2, m_r->getSm().m_omniTexArray);
-	bindUniforms(cmdb, 1, 0, ctx.m_is.m_commonToken);
-	bindUniforms(cmdb, 1, 1, ctx.m_is.m_pointLightsToken);
-	bindUniforms(cmdb, 1, 2, ctx.m_is.m_spotLightsToken);
-	bindStorage(cmdb, 1, 0, ctx.m_is.m_clustersToken);
-	bindStorage(cmdb, 1, 1, ctx.m_is.m_lightIndicesToken);
+	cmdb->bindTexture(1, 1, m_r->getShadowMapping().m_spotTexArray);
+	cmdb->bindTexture(1, 2, m_r->getShadowMapping().m_omniTexArray);
+	bindUniforms(cmdb, 1, 0, ctx.m_lightShading.m_commonToken);
+	bindUniforms(cmdb, 1, 1, ctx.m_lightShading.m_pointLightsToken);
+	bindUniforms(cmdb, 1, 2, ctx.m_lightShading.m_spotLightsToken);
+	bindStorage(cmdb, 1, 0, ctx.m_lightShading.m_clustersToken);
+	bindStorage(cmdb, 1, 1, ctx.m_lightShading.m_lightIndicesToken);
 
 	cmdb->setViewport(0, 0, m_width, m_height);
 	cmdb->setBlendFactors(
@@ -153,7 +153,7 @@ Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	cmdb->setDepthWrite(false);
 
 	// Start drawing
-	Error err = m_r->getSceneDrawer().drawRange(Pass::MS_FS,
+	Error err = m_r->getSceneDrawer().drawRange(Pass::GB_FS,
 		ctx.m_viewMat,
 		ctx.m_viewProjMat,
 		cmdb,
@@ -163,7 +163,7 @@ Error Fs::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	return err;
 }
 
-void Fs::setPreRunBarriers(RenderingContext& ctx)
+void ForwardShading::setPreRunBarriers(RenderingContext& ctx)
 {
 	ctx.m_commandBuffer->setTextureSurfaceBarrier(m_rt,
 		TextureUsageBit::NONE,
@@ -171,7 +171,7 @@ void Fs::setPreRunBarriers(RenderingContext& ctx)
 		TextureSurfaceInfo(0, 0, 0, 0));
 }
 
-void Fs::setPostRunBarriers(RenderingContext& ctx)
+void ForwardShading::setPostRunBarriers(RenderingContext& ctx)
 {
 	ctx.m_commandBuffer->setTextureSurfaceBarrier(m_rt,
 		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
@@ -179,7 +179,7 @@ void Fs::setPostRunBarriers(RenderingContext& ctx)
 		TextureSurfaceInfo(0, 0, 0, 0));
 }
 
-void Fs::run(RenderingContext& ctx)
+void ForwardShading::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 	cmdb->beginRenderPass(m_fb);
@@ -187,13 +187,79 @@ void Fs::run(RenderingContext& ctx)
 
 	for(U i = 0; i < m_r->getThreadPool().getThreadsCount(); ++i)
 	{
-		if(ctx.m_fs.m_commandBuffers[i].isCreated())
+		if(ctx.m_forwardShading.m_commandBuffers[i].isCreated())
 		{
-			cmdb->pushSecondLevelCommandBuffer(ctx.m_fs.m_commandBuffers[i]);
+			cmdb->pushSecondLevelCommandBuffer(ctx.m_forwardShading.m_commandBuffers[i]);
 		}
 	}
 
 	cmdb->endRenderPass();
 }
 
+Error ForwardShadingUpscale::init(const ConfigSet& config)
+{
+	Error err = initInternal(config);
+	if(err)
+	{
+		ANKI_R_LOGE("Failed to initialize forward shading upscale");
+	}
+
+	return err;
+}
+
+Error ForwardShadingUpscale::initInternal(const ConfigSet& config)
+{
+	ANKI_R_LOGI("Initializing forward shading upscale");
+
+	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_noiseTex));
+
+	// Shader
+	ANKI_CHECK(m_r->createShaderf("shaders/FsUpscale.frag.glsl",
+		m_frag,
+		"#define FB_SIZE uvec2(%uu, %uu)\n"
+		"#define SRC_SIZE uvec2(%uu, %uu)\n"
+		"#define NOISE_TEX_SIZE %u\n",
+		m_r->getWidth(),
+		m_r->getHeight(),
+		m_r->getWidth() / FS_FRACTION,
+		m_r->getHeight() / FS_FRACTION,
+		m_noiseTex->getWidth()));
+
+	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
+
+	// Create FB
+	FramebufferInitInfo fbInit("fwdupscale");
+	fbInit.m_colorAttachmentCount = 1;
+	fbInit.m_colorAttachments[0].m_texture = m_r->getLightShading().getRt();
+	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::LOAD;
+	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
+
+	return ErrorCode::NONE;
+}
+
+void ForwardShadingUpscale::run(RenderingContext& ctx)
+{
+	CommandBufferPtr cmdb = ctx.m_commandBuffer;
+
+	Vec4* linearDepth = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
+	computeLinearizeDepthOptimal(ctx.m_near, ctx.m_far, linearDepth->x(), linearDepth->y());
+
+	cmdb->bindTexture(0, 0, m_r->getGBuffer().m_depthRt);
+	cmdb->bindTextureAndSampler(0, 1, m_r->getDepthDownscale().m_hd.m_depthRt, m_r->getNearestSampler());
+	cmdb->bindTexture(0, 2, m_r->getForwardShading().getRt());
+	cmdb->bindTexture(0, 3, m_noiseTex->getGrTexture());
+
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::SRC_ALPHA);
+
+	cmdb->beginRenderPass(m_fb);
+	cmdb->bindShaderProgram(m_prog);
+	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
+
+	m_r->drawQuad(cmdb);
+	cmdb->endRenderPass();
+
+	// Restore state
+	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
+}
+
 } // end namespace anki

+ 26 - 3
src/anki/renderer/Fs.h → src/anki/renderer/ForwardShading.h

@@ -14,15 +14,15 @@ namespace anki
 /// @{
 
 /// Forward rendering stage. The objects that blend must be handled differently
-class Fs : public RenderingPass
+class ForwardShading : public RenderingPass
 {
 anki_internal:
-	Fs(Renderer* r)
+	ForwardShading(Renderer* r)
 		: RenderingPass(r)
 	{
 	}
 
-	~Fs();
+	~ForwardShading();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 
@@ -73,6 +73,29 @@ private:
 	ANKI_USE_RESULT Error initInternal(const ConfigSet& initializer);
 	ANKI_USE_RESULT Error initVol();
 };
+
+/// Upscale some textures and append them to light buffer.
+class ForwardShadingUpscale : public RenderingPass
+{
+public:
+	ForwardShadingUpscale(Renderer* r)
+		: RenderingPass(r)
+	{
+	}
+
+	ANKI_USE_RESULT Error init(const ConfigSet& config);
+
+	void run(RenderingContext& ctx);
+
+private:
+	FramebufferPtr m_fb;
+	ShaderResourcePtr m_frag;
+	ShaderProgramPtr m_prog;
+
+	TextureResourcePtr m_noiseTex;
+
+	ANKI_USE_RESULT Error initInternal(const ConfigSet& config);
+};
 /// @}
 
 } // end namespace anki

+ 0 - 84
src/anki/renderer/FsUpscale.cpp

@@ -1,84 +0,0 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#include <anki/renderer/FsUpscale.h>
-#include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Fs.h>
-#include <anki/renderer/Volumetric.h>
-#include <anki/renderer/DepthDownscale.h>
-#include <anki/scene/FrustumComponent.h>
-
-namespace anki
-{
-
-Error FsUpscale::init(const ConfigSet& config)
-{
-	Error err = initInternal(config);
-	if(err)
-	{
-		ANKI_R_LOGE("Failed to initialize forward shading upscale");
-	}
-
-	return err;
-}
-
-Error FsUpscale::initInternal(const ConfigSet& config)
-{
-	ANKI_R_LOGI("Initializing forward shading upscale");
-
-	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_noiseTex));
-
-	// Shader
-	ANKI_CHECK(m_r->createShaderf("shaders/FsUpscale.frag.glsl",
-		m_frag,
-		"#define FB_SIZE uvec2(%uu, %uu)\n"
-		"#define SRC_SIZE uvec2(%uu, %uu)\n"
-		"#define NOISE_TEX_SIZE %u\n",
-		m_r->getWidth(),
-		m_r->getHeight(),
-		m_r->getWidth() / FS_FRACTION,
-		m_r->getHeight() / FS_FRACTION,
-		m_noiseTex->getWidth()));
-
-	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
-
-	// Create FB
-	FramebufferInitInfo fbInit("fwdupscale");
-	fbInit.m_colorAttachmentCount = 1;
-	fbInit.m_colorAttachments[0].m_texture = m_r->getIs().getRt();
-	fbInit.m_colorAttachments[0].m_loadOperation = AttachmentLoadOperation::LOAD;
-	m_fb = getGrManager().newInstance<Framebuffer>(fbInit);
-
-	return ErrorCode::NONE;
-}
-
-void FsUpscale::run(RenderingContext& ctx)
-{
-	CommandBufferPtr cmdb = ctx.m_commandBuffer;
-
-	Vec4* linearDepth = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
-	computeLinearizeDepthOptimal(ctx.m_near, ctx.m_far, linearDepth->x(), linearDepth->y());
-
-	cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt);
-	cmdb->bindTextureAndSampler(0, 1, m_r->getDepthDownscale().m_hd.m_depthRt, m_r->getNearestSampler());
-	cmdb->bindTexture(0, 2, m_r->getFs().getRt());
-	cmdb->bindTexture(0, 3, m_noiseTex->getGrTexture());
-
-	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::SRC_ALPHA);
-
-	cmdb->beginRenderPass(m_fb);
-	cmdb->bindShaderProgram(m_prog);
-	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
-
-	m_r->drawQuad(cmdb);
-	cmdb->endRenderPass();
-
-	// Restore state
-	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ZERO);
-}
-
-} // end namespace anki

+ 0 - 40
src/anki/renderer/FsUpscale.h

@@ -1,40 +0,0 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-#pragma once
-
-#include <anki/renderer/RenderingPass.h>
-
-namespace anki
-{
-
-/// @addtogroup renderer
-/// @{
-
-/// Upscale some textures and append them to IS.
-class FsUpscale : public RenderingPass
-{
-public:
-	FsUpscale(Renderer* r)
-		: RenderingPass(r)
-	{
-	}
-
-	ANKI_USE_RESULT Error init(const ConfigSet& config);
-
-	void run(RenderingContext& ctx);
-
-private:
-	FramebufferPtr m_fb;
-	ShaderResourcePtr m_frag;
-	ShaderProgramPtr m_prog;
-
-	TextureResourcePtr m_noiseTex;
-
-	ANKI_USE_RESULT Error initInternal(const ConfigSet& config);
-};
-/// @}
-
-} // end namespace anki

+ 15 - 15
src/anki/renderer/Ms.cpp → src/anki/renderer/GBuffer.cpp

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/util/Logger.h>
 #include <anki/util/ThreadPool.h>
@@ -15,15 +15,15 @@
 namespace anki
 {
 
-Ms::~Ms()
+GBuffer::~GBuffer()
 {
 }
 
-Error Ms::createRt()
+Error GBuffer::createRt()
 {
 	m_depthRt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_r->getWidth(),
 		m_r->getHeight(),
-		MS_DEPTH_ATTACHMENT_PIXEL_FORMAT,
+		GBUFFER_DEPTH_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE
 			| TextureUsageBit::GENERATE_MIPMAPS,
 		SamplingFilter::NEAREST,
@@ -61,7 +61,7 @@ Error Ms::createRt()
 #endif
 
 	FramebufferInitInfo fbInit("gbuffer");
-	fbInit.m_colorAttachmentCount = MS_COLOR_ATTACHMENT_COUNT;
+	fbInit.m_colorAttachmentCount = GBUFFER_COLOR_ATTACHMENT_COUNT;
 	fbInit.m_colorAttachments[0].m_texture = m_rt0;
 	fbInit.m_colorAttachments[0].m_loadOperation = loadop;
 	fbInit.m_colorAttachments[0].m_clearValue.m_colorf = {{1.0, 0.0, 0.0, 0.0}};
@@ -81,7 +81,7 @@ Error Ms::createRt()
 	return ErrorCode::NONE;
 }
 
-Error Ms::init(const ConfigSet& initializer)
+Error GBuffer::init(const ConfigSet& initializer)
 {
 	ANKI_R_LOGI("Initializing g-buffer pass");
 
@@ -94,13 +94,13 @@ Error Ms::init(const ConfigSet& initializer)
 	return err;
 }
 
-Error Ms::initInternal(const ConfigSet& initializer)
+Error GBuffer::initInternal(const ConfigSet& initializer)
 {
 	ANKI_CHECK(createRt());
 	return ErrorCode::NONE;
 }
 
-Error Ms::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
+Error GBuffer::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
 {
 	ANKI_TRACE_START_EVENT(RENDER_MS);
 
@@ -122,7 +122,7 @@ Error Ms::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 		}
 		cinf.m_framebuffer = m_fb;
 		CommandBufferPtr cmdb = m_r->getGrManager().newInstance<CommandBuffer>(cinf);
-		ctx.m_ms.m_commandBuffers[threadId] = cmdb;
+		ctx.m_gbuffer.m_commandBuffers[threadId] = cmdb;
 
 		// Inform on RTs
 		TextureSurfaceInfo surf(0, 0, 0, 0);
@@ -135,7 +135,7 @@ Error Ms::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 		cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 
 		// Start drawing
-		ANKI_CHECK(m_r->getSceneDrawer().drawRange(Pass::MS_FS,
+		ANKI_CHECK(m_r->getSceneDrawer().drawRange(Pass::GB_FS,
 			ctx.m_viewMat,
 			ctx.m_viewProjMatJitter,
 			cmdb,
@@ -147,7 +147,7 @@ Error Ms::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	return ErrorCode::NONE;
 }
 
-void Ms::run(RenderingContext& ctx)
+void GBuffer::run(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_MS);
 
@@ -159,9 +159,9 @@ void Ms::run(RenderingContext& ctx)
 
 	for(U i = 0; i < m_r->getThreadPool().getThreadsCount(); ++i)
 	{
-		if(ctx.m_ms.m_commandBuffers[i].isCreated())
+		if(ctx.m_gbuffer.m_commandBuffers[i].isCreated())
 		{
-			cmdb->pushSecondLevelCommandBuffer(ctx.m_ms.m_commandBuffers[i]);
+			cmdb->pushSecondLevelCommandBuffer(ctx.m_gbuffer.m_commandBuffers[i]);
 		}
 	}
 
@@ -170,7 +170,7 @@ void Ms::run(RenderingContext& ctx)
 	ANKI_TRACE_STOP_EVENT(RENDER_MS);
 }
 
-void Ms::setPreRunBarriers(RenderingContext& ctx)
+void GBuffer::setPreRunBarriers(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_MS);
 
@@ -186,7 +186,7 @@ void Ms::setPreRunBarriers(RenderingContext& ctx)
 	ANKI_TRACE_STOP_EVENT(RENDER_MS);
 }
 
-void Ms::setPostRunBarriers(RenderingContext& ctx)
+void GBuffer::setPostRunBarriers(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_MS);
 

+ 4 - 4
src/anki/renderer/Ms.h → src/anki/renderer/GBuffer.h

@@ -14,8 +14,8 @@ namespace anki
 /// @addtogroup renderer
 /// @{
 
-/// Material stage also known as G buffer stage. It populates the G buffer
-class Ms : public RenderingPass
+/// G buffer stage. It populates the G buffer
+class GBuffer : public RenderingPass
 {
 anki_internal:
 	TexturePtr m_rt0;
@@ -23,12 +23,12 @@ anki_internal:
 	TexturePtr m_rt2;
 	TexturePtr m_depthRt;
 
-	Ms(Renderer* r)
+	GBuffer(Renderer* r)
 		: RenderingPass(r)
 	{
 	}
 
-	~Ms();
+	~GBuffer();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 

+ 54 - 60
src/anki/renderer/Ir.cpp → src/anki/renderer/Indirect.cpp

@@ -3,10 +3,10 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Ir.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Pps.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/Indirect.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/FinalComposite.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/core/Config.h>
 #include <anki/scene/SceneNode.h>
 #include <anki/scene/Visibility.h>
@@ -45,17 +45,17 @@ public:
 	Vec4 m_lightDirPad1;
 };
 
-Ir::Ir(Renderer* r)
+Indirect::Indirect(Renderer* r)
 	: RenderingPass(r)
 {
 }
 
-Ir::~Ir()
+Indirect::~Indirect()
 {
 	m_cacheEntries.destroy(getAllocator());
 }
 
-Error Ir::init(const ConfigSet& config)
+Error Indirect::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing image reflections");
 
@@ -68,7 +68,7 @@ Error Ir::init(const ConfigSet& config)
 	return err;
 }
 
-Error Ir::initInternal(const ConfigSet& config)
+Error Indirect::initInternal(const ConfigSet& config)
 {
 	m_fbSize = config.getNumber("ir.rendererSize");
 
@@ -105,7 +105,7 @@ Error Ir::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Ir::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount)
+Error Indirect::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount)
 {
 	MeshLoader loader(&getResourceManager());
 	ANKI_CHECK(loader.load(fname));
@@ -155,7 +155,7 @@ Error Ir::loadMesh(CString fname, BufferPtr& vert, BufferPtr& idx, U32& idxCount
 	return ErrorCode::NONE;
 }
 
-void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
+void Indirect::initFaceInfo(U cacheEntryIdx, U faceIdx)
 {
 	FaceInfo& face = m_cacheEntries[cacheEntryIdx].m_faces[faceIdx];
 	ANKI_ASSERT(!face.created());
@@ -174,7 +174,7 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 	texinit.m_usage = TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE;
 
 	// Create color attachments
-	for(U i = 0; i < MS_COLOR_ATTACHMENT_COUNT; ++i)
+	for(U i = 0; i < GBUFFER_COLOR_ATTACHMENT_COUNT; ++i)
 	{
 		texinit.m_format = MS_COLOR_ATTACHMENT_PIXEL_FORMATS[i];
 
@@ -183,14 +183,14 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 
 	// Create depth attachment
 	texinit.m_usage |= TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ;
-	texinit.m_format = MS_DEPTH_ATTACHMENT_PIXEL_FORMAT;
+	texinit.m_format = GBUFFER_DEPTH_ATTACHMENT_PIXEL_FORMAT;
 	face.m_gbufferDepthRt = m_r->createAndClearRenderTarget(texinit);
 
 	// Create MS FB
 	FramebufferInitInfo fbInit;
-	fbInit.m_colorAttachmentCount = MS_COLOR_ATTACHMENT_COUNT;
+	fbInit.m_colorAttachmentCount = GBUFFER_COLOR_ATTACHMENT_COUNT;
 
-	for(U j = 0; j < MS_COLOR_ATTACHMENT_COUNT; ++j)
+	for(U j = 0; j < GBUFFER_COLOR_ATTACHMENT_COUNT; ++j)
 	{
 		fbInit.m_colorAttachments[j].m_texture = face.m_gbufferColorRts[j];
 		fbInit.m_colorAttachments[j].m_loadOperation = AttachmentLoadOperation::DONT_CARE;
@@ -228,7 +228,7 @@ void Ir::initFaceInfo(U cacheEntryIdx, U faceIdx)
 	face.m_irradianceFb = getGrManager().newInstance<Framebuffer>(fbInit);
 }
 
-Error Ir::initIs()
+Error Indirect::initIs()
 {
 	m_is.m_lightRtMipCount = computeMaxMipmapCount2d(m_fbSize, m_fbSize, 4);
 
@@ -245,35 +245,26 @@ Error Ir::initIs()
 	texinit.m_sampling.m_mipmapFilter = SamplingFilter::LINEAR;
 	texinit.m_usage = TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE
 		| TextureUsageBit::CLEAR | TextureUsageBit::GENERATE_MIPMAPS;
-	texinit.m_format = IS_COLOR_ATTACHMENT_PIXEL_FORMAT;
+	texinit.m_format = LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT;
 
 	m_is.m_lightRt = m_r->createAndClearRenderTarget(texinit);
 
 	// Init shaders
-	ANKI_CHECK(getResourceManager().loadResource("shaders/Light.vert.glsl", m_is.m_lightVert));
-
-	ANKI_CHECK(m_r->createShaderf("shaders/Light.frag.glsl",
-		m_is.m_plightFrag,
-		"#define POINT_LIGHT\n"
-		"#define RENDERING_WIDTH %d\n"
-		"#define RENDERING_HEIGHT %d\n",
-		m_fbSize,
-		m_fbSize));
-
-	ANKI_CHECK(m_r->createShaderf("shaders/Light.frag.glsl",
-		m_is.m_slightFrag,
-		"#define SPOT_LIGHT\n"
-		"#define RENDERING_WIDTH %d\n"
-		"#define RENDERING_HEIGHT %d\n",
-		m_fbSize,
-		m_fbSize));
-
-	// Init the progs
-	m_is.m_plightProg =
-		getGrManager().newInstance<ShaderProgram>(m_is.m_lightVert->getGrShader(), m_is.m_plightFrag->getGrShader());
-
-	m_is.m_slightProg =
-		getGrManager().newInstance<ShaderProgram>(m_is.m_lightVert->getGrShader(), m_is.m_slightFrag->getGrShader());
+	ANKI_CHECK(getResourceManager().loadResource("programs/DeferredShading.ankiprog", m_is.m_lightProg));
+
+	ShaderProgramResourceMutationInitList<1> mutators(m_is.m_lightProg);
+	mutators.add("LIGHT_TYPE", 0);
+
+	ShaderProgramResourceConstantValueInitList<1> consts(m_is.m_lightProg);
+	consts.add("FB_SIZE", UVec2(m_fbSize, m_fbSize));
+
+	const ShaderProgramResourceVariant* variant;
+	m_is.m_lightProg->getOrCreateVariant(mutators.get(), consts.get(), variant);
+	m_is.m_plightGrProg = variant->getProgram();
+
+	mutators[0].m_value = 1;
+	m_is.m_lightProg->getOrCreateVariant(mutators.get(), consts.get(), variant);
+	m_is.m_slightGrProg = variant->getProgram();
 
 	// Init vert/idx buffers
 	ANKI_CHECK(
@@ -285,7 +276,7 @@ Error Ir::initIs()
 	return ErrorCode::NONE;
 }
 
-Error Ir::initIrradiance()
+Error Indirect::initIrradiance()
 {
 	m_irradiance.m_cubeArrMipCount = computeMaxMipmapCount2d(IRRADIANCE_TEX_SIZE, IRRADIANCE_TEX_SIZE, 4);
 
@@ -302,21 +293,24 @@ Error Ir::initIrradiance()
 	texinit.m_sampling.m_mipmapFilter = SamplingFilter::LINEAR;
 	texinit.m_usage = TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE
 		| TextureUsageBit::CLEAR | TextureUsageBit::GENERATE_MIPMAPS;
-	texinit.m_format = IS_COLOR_ATTACHMENT_PIXEL_FORMAT;
+	texinit.m_format = LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT;
 
 	m_irradiance.m_cubeArr = m_r->createAndClearRenderTarget(texinit);
 
-	// Create the shader
-	ANKI_CHECK(m_r->createShaderf(
-		"shaders/Irradiance.frag.glsl", m_irradiance.m_frag, "#define CUBEMAP_SIZE %u\n", IRRADIANCE_TEX_SIZE));
+	// Create prog
+	ANKI_CHECK(m_r->getResourceManager().loadResource("programs/Irradiance.ankiprog", m_irradiance.m_prog));
+
+	ShaderProgramResourceConstantValueInitList<1> consts(m_irradiance.m_prog);
+	consts.add("FACE_SIZE", U32(IRRADIANCE_TEX_SIZE));
 
-	// Create the prog
-	m_r->createDrawQuadShaderProgram(m_irradiance.m_frag->getGrShader(), m_irradiance.m_prog);
+	const ShaderProgramResourceVariant* variant;
+	m_irradiance.m_prog->getOrCreateVariant(consts.get(), variant);
+	m_irradiance.m_grProg = variant->getProgram();
 
 	return ErrorCode::NONE;
 }
 
-Error Ir::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx)
+Error Indirect::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx)
 {
 	CommandBufferPtr& cmdb = rctx.m_commandBuffer;
 	VisibilityTestResults& vis = frc.getVisibilityTestResults();
@@ -329,7 +323,7 @@ Error Ir::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceId
 	}
 
 	// Set barriers
-	for(U i = 0; i < MS_COLOR_ATTACHMENT_COUNT; ++i)
+	for(U i = 0; i < GBUFFER_COLOR_ATTACHMENT_COUNT; ++i)
 	{
 		cmdb->setTextureSurfaceBarrier(face.m_gbufferColorRts[i],
 			TextureUsageBit::NONE,
@@ -347,7 +341,7 @@ Error Ir::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceId
 	cmdb->setViewport(0, 0, m_fbSize, m_fbSize);
 
 	/// Draw
-	ANKI_CHECK(m_r->getSceneDrawer().drawRange(Pass::MS_FS,
+	ANKI_CHECK(m_r->getSceneDrawer().drawRange(Pass::GB_FS,
 		frc.getViewMatrix(),
 		frc.getViewProjectionMatrix(),
 		cmdb,
@@ -357,7 +351,7 @@ Error Ir::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceId
 	// End and set barriers
 	cmdb->endRenderPass();
 
-	for(U i = 0; i < MS_COLOR_ATTACHMENT_COUNT; ++i)
+	for(U i = 0; i < GBUFFER_COLOR_ATTACHMENT_COUNT; ++i)
 	{
 		cmdb->setTextureSurfaceBarrier(face.m_gbufferColorRts[i],
 			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
@@ -373,7 +367,7 @@ Error Ir::runMs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceId
 	return ErrorCode::NONE;
 }
 
-void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx)
+void Indirect::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx)
 {
 	CommandBufferPtr& cmdb = rctx.m_commandBuffer;
 	VisibilityTestResults& vis = frc.getVisibilityTestResults();
@@ -404,7 +398,7 @@ void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx
 	const Mat4& vpMat = frc.getViewProjectionMatrix();
 	const Mat4& vMat = frc.getViewMatrix();
 
-	cmdb->bindShaderProgram(m_is.m_plightProg);
+	cmdb->bindShaderProgram(m_is.m_plightGrProg);
 	cmdb->bindVertexBuffer(0, m_is.m_plightPositions, 0, sizeof(F32) * 3);
 	cmdb->bindIndexBuffer(m_is.m_plightIndices, 0, IndexType::U16);
 
@@ -439,7 +433,7 @@ void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx
 		++it;
 	}
 
-	cmdb->bindShaderProgram(m_is.m_slightProg);
+	cmdb->bindShaderProgram(m_is.m_slightGrProg);
 	cmdb->bindVertexBuffer(0, m_is.m_slightPositions, 0, sizeof(F32) * 3);
 	cmdb->bindIndexBuffer(m_is.m_slightIndices, 0, IndexType::U16);
 
@@ -512,7 +506,7 @@ void Ir::runIs(RenderingContext& rctx, FrustumComponent& frc, U layer, U faceIdx
 	cmdb->setCullMode(FaceSelectionBit::BACK);
 }
 
-void Ir::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)
+void Indirect::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)
 {
 	CommandBufferPtr& cmdb = rctx.m_commandBuffer;
 	FaceInfo& face = m_cacheEntries[layer].m_faces[faceIdx];
@@ -532,7 +526,7 @@ void Ir::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)
 
 	cmdb->informTextureCurrentUsage(m_is.m_lightRt, TextureUsageBit::SAMPLED_FRAGMENT);
 	cmdb->bindTexture(0, 0, m_is.m_lightRt);
-	cmdb->bindShaderProgram(m_irradiance.m_prog);
+	cmdb->bindShaderProgram(m_irradiance.m_grProg);
 	cmdb->beginRenderPass(face.m_irradianceFb);
 
 	m_r->drawQuad(cmdb);
@@ -552,7 +546,7 @@ void Ir::computeIrradiance(RenderingContext& rctx, U layer, U faceIdx)
 		TextureSurfaceInfo(0, 0, faceIdx, layer));
 }
 
-Error Ir::run(RenderingContext& rctx)
+Error Indirect::run(RenderingContext& rctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_IR);
 	const VisibilityTestResults& visRez = *rctx.m_visResults;
@@ -588,7 +582,7 @@ Error Ir::run(RenderingContext& rctx)
 	return ErrorCode::NONE;
 }
 
-Error Ir::tryRender(RenderingContext& ctx, SceneNode& node, U& probesRendered)
+Error Indirect::tryRender(RenderingContext& ctx, SceneNode& node, U& probesRendered)
 {
 	ReflectionProbeComponent& reflc = node.getComponent<ReflectionProbeComponent>();
 
@@ -615,7 +609,7 @@ Error Ir::tryRender(RenderingContext& ctx, SceneNode& node, U& probesRendered)
 	return ErrorCode::NONE;
 }
 
-Error Ir::renderReflection(RenderingContext& ctx, SceneNode& node, U cubemapIdx)
+Error Indirect::renderReflection(RenderingContext& ctx, SceneNode& node, U cubemapIdx)
 {
 	ANKI_TRACE_INC_COUNTER(RENDERER_REFLECTIONS, 1);
 
@@ -644,7 +638,7 @@ Error Ir::renderReflection(RenderingContext& ctx, SceneNode& node, U cubemapIdx)
 	return ErrorCode::NONE;
 }
 
-void Ir::findCacheEntry(SceneNode& node, U& entry, Bool& render)
+void Indirect::findCacheEntry(SceneNode& node, U& entry, Bool& render)
 {
 	CacheEntry* it = m_cacheEntries.getBegin();
 	const CacheEntry* const end = m_cacheEntries.getEnd();

+ 13 - 15
src/anki/renderer/Ir.h → src/anki/renderer/Indirect.h

@@ -22,15 +22,15 @@ class ReflectionProbeComponent;
 /// @addtogroup renderer
 /// @{
 
-/// Image based reflections.
-class Ir : public RenderingPass
+/// Probe reflections and irradiance.
+class Indirect : public RenderingPass
 {
 	friend class IrTask;
 
 anki_internal:
-	Ir(Renderer* r);
+	Indirect(Renderer* r);
 
-	~Ir();
+	~Indirect();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& cfg);
 
@@ -66,19 +66,19 @@ private:
 	{
 	public:
 		// MS
-		Array<TexturePtr, MS_COLOR_ATTACHMENT_COUNT> m_gbufferColorRts;
+		Array<TexturePtr, GBUFFER_COLOR_ATTACHMENT_COUNT> m_gbufferColorRts;
 		TexturePtr m_gbufferDepthRt;
-		FramebufferPtr m_msFb;
+		FramebufferPtr m_gbufferFb;
 
 		// IS
-		FramebufferPtr m_isFb;
+		FramebufferPtr m_lightShadingFb;
 
 		// Irradiance
 		FramebufferPtr m_irradianceFb;
 
 		Bool created() const
 		{
-			return m_isFb.isCreated();
+			return m_lightShadingFb.isCreated();
 		}
 	};
 
@@ -105,11 +105,9 @@ private:
 		TexturePtr m_lightRt; ///< Cube array.
 		U32 m_lightRtMipCount = 0;
 
-		ShaderResourcePtr m_lightVert;
-		ShaderResourcePtr m_plightFrag;
-		ShaderResourcePtr m_slightFrag;
-		ShaderProgramPtr m_plightProg;
-		ShaderProgramPtr m_slightProg;
+		ShaderProgramResourcePtr m_lightProg;
+		ShaderProgramPtr m_plightGrProg;
+		ShaderProgramPtr m_slightGrProg;
 
 		BufferPtr m_plightPositions;
 		BufferPtr m_plightIndices;
@@ -126,8 +124,8 @@ private:
 		TexturePtr m_cubeArr;
 		U32 m_cubeArrMipCount = 0;
 
-		ShaderResourcePtr m_frag;
-		ShaderProgramPtr m_prog;
+		ShaderProgramResourcePtr m_prog;
+		ShaderProgramPtr m_grProg;
 	} m_irradiance;
 
 	DynamicArray<CacheEntry> m_cacheEntries;

+ 11 - 11
src/anki/renderer/Lf.cpp → src/anki/renderer/LensFlare.cpp

@@ -3,9 +3,9 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Lf.h>
+#include <anki/renderer/LensFlare.h>
 #include <anki/renderer/Bloom.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/MoveComponent.h>
@@ -27,12 +27,12 @@ public:
 	U32 m_padding[3];
 };
 
-Lf::~Lf()
+LensFlare::~LensFlare()
 {
 	m_queries.destroy(getAllocator());
 }
 
-Error Lf::init(const ConfigSet& config)
+Error LensFlare::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing lens flare pass");
 
@@ -45,7 +45,7 @@ Error Lf::init(const ConfigSet& config)
 	return err;
 }
 
-Error Lf::initInternal(const ConfigSet& config)
+Error LensFlare::initInternal(const ConfigSet& config)
 {
 	ANKI_CHECK(initSprite(config));
 	ANKI_CHECK(initOcclusion(config));
@@ -53,7 +53,7 @@ Error Lf::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Lf::initSprite(const ConfigSet& config)
+Error LensFlare::initSprite(const ConfigSet& config)
 {
 	m_maxSpritesPerFlare = config.getNumber("lf.maxSpritesPerFlare");
 	m_maxFlares = config.getNumber("lf.maxFlares");
@@ -81,7 +81,7 @@ Error Lf::initSprite(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Lf::initOcclusion(const ConfigSet& config)
+Error LensFlare::initOcclusion(const ConfigSet& config)
 {
 	GrManager& gr = getGrManager();
 
@@ -106,7 +106,7 @@ Error Lf::initOcclusion(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-void Lf::resetOcclusionQueries(RenderingContext& ctx, CommandBufferPtr cmdb)
+void LensFlare::resetOcclusionQueries(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
 	if(ctx.m_visResults->getCount(VisibilityGroupType::FLARES) > m_maxFlares)
 	{
@@ -125,7 +125,7 @@ void Lf::resetOcclusionQueries(RenderingContext& ctx, CommandBufferPtr cmdb)
 	}
 }
 
-void Lf::runOcclusionTests(RenderingContext& ctx, CommandBufferPtr cmdb)
+void LensFlare::runOcclusionTests(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
 	const U count = min<U>(ctx.m_visResults->getCount(VisibilityGroupType::FLARES), m_maxFlares);
 	Vec3* positions = nullptr;
@@ -179,7 +179,7 @@ void Lf::runOcclusionTests(RenderingContext& ctx, CommandBufferPtr cmdb)
 	}
 }
 
-void Lf::updateIndirectInfo(RenderingContext& ctx, CommandBufferPtr cmdb)
+void LensFlare::updateIndirectInfo(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
 	U count = min<U>(ctx.m_visResults->getCount(VisibilityGroupType::FLARES), m_maxFlares);
 	if(count == 0)
@@ -214,7 +214,7 @@ void Lf::updateIndirectInfo(RenderingContext& ctx, CommandBufferPtr cmdb)
 		sizeof(DrawArraysIndirectInfo) * count);
 }
 
-void Lf::run(RenderingContext& ctx, CommandBufferPtr cmdb)
+void LensFlare::run(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
 	const U count = min<U>(ctx.m_visResults->getCount(VisibilityGroupType::FLARES), m_maxFlares);
 	if(count == 0)

+ 3 - 3
src/anki/renderer/Lf.h → src/anki/renderer/LensFlare.h

@@ -17,15 +17,15 @@ namespace anki
 /// @{
 
 /// Lens flare rendering pass. Part of forward shading.
-class Lf : public RenderingPass
+class LensFlare : public RenderingPass
 {
 anki_internal:
-	Lf(Renderer* r)
+	LensFlare(Renderer* r)
 		: RenderingPass(r)
 	{
 	}
 
-	~Lf();
+	~LensFlare();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& config);
 

+ 46 - 42
src/anki/renderer/Is.cpp → src/anki/renderer/LightShading.cpp

@@ -3,12 +3,12 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Is.h>
+#include <anki/renderer/LightShading.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Sm.h>
+#include <anki/renderer/ShadowMapping.h>
 #include <anki/renderer/Ssao.h>
-#include <anki/renderer/Ir.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/Indirect.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/renderer/LightBin.h>
 #include <anki/scene/FrustumComponent.h>
 #include <anki/misc/ConfigSet.h>
@@ -41,12 +41,12 @@ enum class IsShaderVariantBit : U8
 };
 ANKI_ENUM_ALLOW_NUMERIC_OPERATIONS(IsShaderVariantBit, inline)
 
-Is::Is(Renderer* r)
+LightShading::LightShading(Renderer* r)
 	: RenderingPass(r)
 {
 }
 
-Is::~Is()
+LightShading::~LightShading()
 {
 	if(m_lightBin)
 	{
@@ -54,7 +54,7 @@ Is::~Is()
 	}
 }
 
-Error Is::init(const ConfigSet& config)
+Error LightShading::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing light stage");
 	Error err = initInternal(config);
@@ -67,7 +67,7 @@ Error Is::init(const ConfigSet& config)
 	return err;
 }
 
-Error Is::initInternal(const ConfigSet& config)
+Error LightShading::initInternal(const ConfigSet& config)
 {
 	m_maxLightIds = config.getNumber("is.maxLightsPerCluster");
 
@@ -94,13 +94,13 @@ Error Is::initInternal(const ConfigSet& config)
 	//
 	// Load shaders and programs
 	//
-	ANKI_CHECK(getResourceManager().loadResource("programs/Is.ankiprog", m_prog));
+	ANKI_CHECK(getResourceManager().loadResource("programs/LightShading.ankiprog", m_prog));
 
 	ShaderProgramResourceConstantValueInitList<4> consts(m_prog);
 	consts.add("CLUSTER_COUNT_X", U32(m_clusterCounts[0]))
 		.add("CLUSTER_COUNT_Y", U32(m_clusterCounts[1]))
 		.add("CLUSTER_COUNT", U32(m_clusterCount))
-		.add("IR_MIPMAP_COUNT", U32(m_r->getIr().getReflectionTextureMipmapCount()));
+		.add("IR_MIPMAP_COUNT", U32(m_r->getIndirect().getReflectionTextureMipmapCount()));
 
 	m_prog->getOrCreateVariant(consts.get(), m_progVariant);
 
@@ -109,7 +109,7 @@ Error Is::initInternal(const ConfigSet& config)
 	//
 	m_rt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_r->getWidth(),
 		m_r->getHeight(),
-		IS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+		LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
 		SamplingFilter::LINEAR,
 		1,
@@ -124,7 +124,7 @@ Error Is::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Is::binLights(RenderingContext& ctx)
+Error LightShading::binLights(RenderingContext& ctx)
 {
 	updateCommonBlock(ctx);
 
@@ -136,19 +136,19 @@ Error Is::binLights(RenderingContext& ctx)
 		getFrameAllocator(),
 		m_maxLightIds,
 		true,
-		ctx.m_is.m_pointLightsToken,
-		ctx.m_is.m_spotLightsToken,
-		&ctx.m_is.m_probesToken,
-		ctx.m_is.m_decalsToken,
-		ctx.m_is.m_clustersToken,
-		ctx.m_is.m_lightIndicesToken,
-		ctx.m_is.m_diffDecalTex,
-		ctx.m_is.m_normRoughnessDecalTex));
+		ctx.m_lightShading.m_pointLightsToken,
+		ctx.m_lightShading.m_spotLightsToken,
+		&ctx.m_lightShading.m_probesToken,
+		ctx.m_lightShading.m_decalsToken,
+		ctx.m_lightShading.m_clustersToken,
+		ctx.m_lightShading.m_lightIndicesToken,
+		ctx.m_lightShading.m_diffDecalTex,
+		ctx.m_lightShading.m_normRoughnessDecalTex));
 
 	return ErrorCode::NONE;
 }
 
-void Is::run(RenderingContext& ctx)
+void LightShading::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 
@@ -156,39 +156,43 @@ void Is::run(RenderingContext& ctx)
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->bindShaderProgram(m_progVariant->getProgram());
 
-	cmdb->bindTexture(1, 0, m_r->getMs().m_rt0);
-	cmdb->bindTexture(1, 1, m_r->getMs().m_rt1);
-	cmdb->bindTexture(1, 2, m_r->getMs().m_rt2);
-	cmdb->bindTexture(1, 3, m_r->getMs().m_depthRt, DepthStencilAspectBit::DEPTH);
+	cmdb->bindTexture(1, 0, m_r->getGBuffer().m_rt0);
+	cmdb->bindTexture(1, 1, m_r->getGBuffer().m_rt1);
+	cmdb->bindTexture(1, 2, m_r->getGBuffer().m_rt2);
+	cmdb->bindTexture(1, 3, m_r->getGBuffer().m_depthRt, DepthStencilAspectBit::DEPTH);
 	cmdb->informTextureCurrentUsage(m_r->getSsao().getRt(), TextureUsageBit::SAMPLED_FRAGMENT);
 	cmdb->bindTexture(1, 4, m_r->getSsao().getRt());
 
-	cmdb->bindTexture(0, 0, m_r->getSm().m_spotTexArray);
-	cmdb->bindTexture(0, 1, m_r->getSm().m_omniTexArray);
-	cmdb->bindTexture(0, 2, m_r->getIr().getReflectionTexture());
-	cmdb->bindTexture(0, 3, m_r->getIr().getIrradianceTexture());
-	cmdb->bindTextureAndSampler(0, 4, m_r->getIr().getIntegrationLut(), m_r->getIr().getIntegrationLutSampler());
-	cmdb->bindTexture(0, 5, (ctx.m_is.m_diffDecalTex) ? ctx.m_is.m_diffDecalTex : m_r->getDummyTexture());
+	cmdb->bindTexture(0, 0, m_r->getShadowMapping().m_spotTexArray);
+	cmdb->bindTexture(0, 1, m_r->getShadowMapping().m_omniTexArray);
+	cmdb->bindTexture(0, 2, m_r->getIndirect().getReflectionTexture());
+	cmdb->bindTexture(0, 3, m_r->getIndirect().getIrradianceTexture());
+	cmdb->bindTextureAndSampler(
+		0, 4, m_r->getIndirect().getIntegrationLut(), m_r->getIndirect().getIntegrationLutSampler());
 	cmdb->bindTexture(
-		0, 6, (ctx.m_is.m_normRoughnessDecalTex) ? ctx.m_is.m_normRoughnessDecalTex : m_r->getDummyTexture());
+		0, 5, (ctx.m_lightShading.m_diffDecalTex) ? ctx.m_lightShading.m_diffDecalTex : m_r->getDummyTexture());
+	cmdb->bindTexture(0,
+		6,
+		(ctx.m_lightShading.m_normRoughnessDecalTex) ? ctx.m_lightShading.m_normRoughnessDecalTex
+													 : m_r->getDummyTexture());
 
-	bindUniforms(cmdb, 0, 0, ctx.m_is.m_commonToken);
-	bindUniforms(cmdb, 0, 1, ctx.m_is.m_pointLightsToken);
-	bindUniforms(cmdb, 0, 2, ctx.m_is.m_spotLightsToken);
-	bindUniforms(cmdb, 0, 3, ctx.m_is.m_probesToken);
-	bindUniforms(cmdb, 0, 4, ctx.m_is.m_decalsToken);
+	bindUniforms(cmdb, 0, 0, ctx.m_lightShading.m_commonToken);
+	bindUniforms(cmdb, 0, 1, ctx.m_lightShading.m_pointLightsToken);
+	bindUniforms(cmdb, 0, 2, ctx.m_lightShading.m_spotLightsToken);
+	bindUniforms(cmdb, 0, 3, ctx.m_lightShading.m_probesToken);
+	bindUniforms(cmdb, 0, 4, ctx.m_lightShading.m_decalsToken);
 
-	bindStorage(cmdb, 0, 0, ctx.m_is.m_clustersToken);
-	bindStorage(cmdb, 0, 1, ctx.m_is.m_lightIndicesToken);
+	bindStorage(cmdb, 0, 0, ctx.m_lightShading.m_clustersToken);
+	bindStorage(cmdb, 0, 1, ctx.m_lightShading.m_lightIndicesToken);
 
 	cmdb->drawArrays(PrimitiveTopology::TRIANGLES, 3);
 	cmdb->endRenderPass();
 }
 
-void Is::updateCommonBlock(RenderingContext& ctx)
+void LightShading::updateCommonBlock(RenderingContext& ctx)
 {
 	ShaderCommonUniforms* blk =
-		allocateUniforms<ShaderCommonUniforms*>(sizeof(ShaderCommonUniforms), ctx.m_is.m_commonToken);
+		allocateUniforms<ShaderCommonUniforms*>(sizeof(ShaderCommonUniforms), ctx.m_lightShading.m_commonToken);
 
 	// Start writing
 	blk->m_projectionParams = ctx.m_unprojParams;
@@ -206,7 +210,7 @@ void Is::updateCommonBlock(RenderingContext& ctx)
 	blk->m_invProjMat = ctx.m_projMatJitter.getInverse();
 }
 
-void Is::setPreRunBarriers(RenderingContext& ctx)
+void LightShading::setPreRunBarriers(RenderingContext& ctx)
 {
 	ctx.m_commandBuffer->setTextureSurfaceBarrier(m_rt,
 		TextureUsageBit::NONE,

+ 4 - 4
src/anki/renderer/Is.h → src/anki/renderer/LightShading.h

@@ -20,13 +20,13 @@ class LightBin;
 /// @addtogroup renderer
 /// @{
 
-/// Illumination stage
-class Is : public RenderingPass
+/// Clustered deferred light pass.
+class LightShading : public RenderingPass
 {
 anki_internal:
-	Is(Renderer* r);
+	LightShading(Renderer* r);
 
-	~Is();
+	~LightShading();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 

+ 5 - 5
src/anki/renderer/MainRenderer.cpp

@@ -5,11 +5,11 @@
 
 #include <anki/renderer/MainRenderer.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/Dbg.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Ir.h>
+#include <anki/renderer/GBuffer.h>
+#include <anki/renderer/Indirect.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/Camera.h>
 #include <anki/util/Logger.h>
@@ -132,7 +132,7 @@ Error MainRenderer::render(SceneGraph& scene)
 		cmdb->setViewport(0, 0, m_width, m_height);
 
 		cmdb->bindShaderProgram(m_blitProg);
-		cmdb->bindTexture(0, 0, m_r->getPps().getRt());
+		cmdb->bindTexture(0, 0, m_r->getFinalComposite().getRt());
 
 		m_r->drawQuad(cmdb);
 		cmdb->endRenderPass();

+ 74 - 74
src/anki/renderer/Renderer.cpp

@@ -9,22 +9,21 @@
 #include <anki/core/Trace.h>
 #include <anki/misc/ConfigSet.h>
 
-#include <anki/renderer/Ir.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Is.h>
-#include <anki/renderer/Sm.h>
-#include <anki/renderer/Pps.h>
+#include <anki/renderer/Indirect.h>
+#include <anki/renderer/GBuffer.h>
+#include <anki/renderer/LightShading.h>
+#include <anki/renderer/ShadowMapping.h>
+#include <anki/renderer/FinalComposite.h>
 #include <anki/renderer/Ssao.h>
 #include <anki/renderer/Bloom.h>
-#include <anki/renderer/Tm.h>
-#include <anki/renderer/Fs.h>
-#include <anki/renderer/Lf.h>
+#include <anki/renderer/Tonemapping.h>
+#include <anki/renderer/ForwardShading.h>
+#include <anki/renderer/LensFlare.h>
 #include <anki/renderer/Dbg.h>
-#include <anki/renderer/FsUpscale.h>
 #include <anki/renderer/DownscaleBlur.h>
 #include <anki/renderer/Volumetric.h>
 #include <anki/renderer/DepthDownscale.h>
-#include <anki/renderer/Taa.h>
+#include <anki/renderer/TemporalAA.h>
 
 #include <cstdarg> // For var args
 
@@ -114,17 +113,17 @@ Error Renderer::initInternal(const ConfigSet& config)
 	ANKI_CHECK(m_resources->loadResource("shaders/Quad.vert.glsl", m_drawQuadVert));
 
 	// Init the stages. Careful with the order!!!!!!!!!!
-	m_ir.reset(m_alloc.newInstance<Ir>(this));
-	ANKI_CHECK(m_ir->init(config));
+	m_indirect.reset(m_alloc.newInstance<Indirect>(this));
+	ANKI_CHECK(m_indirect->init(config));
 
-	m_ms.reset(m_alloc.newInstance<Ms>(this));
-	ANKI_CHECK(m_ms->init(config));
+	m_gbuffer.reset(m_alloc.newInstance<GBuffer>(this));
+	ANKI_CHECK(m_gbuffer->init(config));
 
-	m_sm.reset(m_alloc.newInstance<Sm>(this));
-	ANKI_CHECK(m_sm->init(config));
+	m_shadowMapping.reset(m_alloc.newInstance<ShadowMapping>(this));
+	ANKI_CHECK(m_shadowMapping->init(config));
 
-	m_is.reset(m_alloc.newInstance<Is>(this));
-	ANKI_CHECK(m_is->init(config));
+	m_lightShading.reset(m_alloc.newInstance<LightShading>(this));
+	ANKI_CHECK(m_lightShading->init(config));
 
 	m_depth.reset(m_alloc.newInstance<DepthDownscale>(this));
 	ANKI_CHECK(m_depth->init(config));
@@ -132,32 +131,32 @@ Error Renderer::initInternal(const ConfigSet& config)
 	m_vol.reset(m_alloc.newInstance<Volumetric>(this));
 	ANKI_CHECK(m_vol->init(config));
 
-	m_fs.reset(m_alloc.newInstance<Fs>(this));
-	ANKI_CHECK(m_fs->init(config));
+	m_forwardShading.reset(m_alloc.newInstance<ForwardShading>(this));
+	ANKI_CHECK(m_forwardShading->init(config));
 
-	m_lf.reset(m_alloc.newInstance<Lf>(this));
-	ANKI_CHECK(m_lf->init(config));
+	m_lensFlare.reset(m_alloc.newInstance<LensFlare>(this));
+	ANKI_CHECK(m_lensFlare->init(config));
 
 	m_ssao.reset(m_alloc.newInstance<Ssao>(this));
 	ANKI_CHECK(m_ssao->init(config));
 
-	m_fsUpscale.reset(m_alloc.newInstance<FsUpscale>(this));
+	m_fsUpscale.reset(m_alloc.newInstance<ForwardShadingUpscale>(this));
 	ANKI_CHECK(m_fsUpscale->init(config));
 
 	m_downscale.reset(getAllocator().newInstance<DownscaleBlur>(this));
 	ANKI_CHECK(m_downscale->init(config));
 
-	m_tm.reset(getAllocator().newInstance<Tm>(this));
-	ANKI_CHECK(m_tm->init(config));
+	m_tonemapping.reset(getAllocator().newInstance<Tonemapping>(this));
+	ANKI_CHECK(m_tonemapping->init(config));
 
-	m_taa.reset(getAllocator().newInstance<Taa>(this));
-	ANKI_CHECK(m_taa->init(config));
+	m_temporalAA.reset(getAllocator().newInstance<TemporalAA>(this));
+	ANKI_CHECK(m_temporalAA->init(config));
 
 	m_bloom.reset(m_alloc.newInstance<Bloom>(this));
 	ANKI_CHECK(m_bloom->init(config));
 
-	m_pps.reset(m_alloc.newInstance<Pps>(this));
-	ANKI_CHECK(m_pps->init(config));
+	m_finalComposite.reset(m_alloc.newInstance<FinalComposite>(this));
+	ANKI_CHECK(m_finalComposite->init(config));
 
 	m_dbg.reset(m_alloc.newInstance<Dbg>(this));
 	ANKI_CHECK(m_dbg->init(config));
@@ -257,29 +256,29 @@ Error Renderer::render(RenderingContext& ctx)
 	}
 
 	// Run stages
-	ANKI_CHECK(m_ir->run(ctx));
+	ANKI_CHECK(m_indirect->run(ctx));
 
-	ANKI_CHECK(m_is->binLights(ctx));
+	ANKI_CHECK(m_lightShading->binLights(ctx));
 
-	m_lf->resetOcclusionQueries(ctx, cmdb);
+	m_lensFlare->resetOcclusionQueries(ctx, cmdb);
 	ANKI_CHECK(buildCommandBuffers(ctx));
 
 	// Barriers
-	m_sm->setPreRunBarriers(ctx);
-	m_ms->setPreRunBarriers(ctx);
+	m_shadowMapping->setPreRunBarriers(ctx);
+	m_gbuffer->setPreRunBarriers(ctx);
 
 	// Passes
-	m_sm->run(ctx);
-	m_ms->run(ctx);
+	m_shadowMapping->run(ctx);
+	m_gbuffer->run(ctx);
 
 	// Barriers
-	m_ms->setPostRunBarriers(ctx);
-	m_sm->setPostRunBarriers(ctx);
+	m_gbuffer->setPostRunBarriers(ctx);
+	m_shadowMapping->setPostRunBarriers(ctx);
 	m_depth->m_hd.setPreRunBarriers(ctx);
 
 	// Passes
 	m_depth->m_hd.run(ctx);
-	m_lf->updateIndirectInfo(ctx, cmdb);
+	m_lensFlare->updateIndirectInfo(ctx, cmdb);
 
 	// Barriers
 	m_depth->m_hd.setPostRunBarriers(ctx);
@@ -320,31 +319,31 @@ Error Renderer::render(RenderingContext& ctx)
 	// Barriers
 	m_vol->m_vblur.setPostRunBarriers(ctx);
 	m_ssao->m_vblur.setPostRunBarriers(ctx);
-	m_is->setPreRunBarriers(ctx);
-	m_fs->setPreRunBarriers(ctx);
+	m_lightShading->setPreRunBarriers(ctx);
+	m_forwardShading->setPreRunBarriers(ctx);
 
 	// Passes
-	m_is->run(ctx);
-	m_fs->run(ctx);
+	m_lightShading->run(ctx);
+	m_forwardShading->run(ctx);
 
 	// Barriers
-	m_fs->setPostRunBarriers(ctx);
+	m_forwardShading->setPostRunBarriers(ctx);
 
 	// Passes
 	m_fsUpscale->run(ctx);
 
 	// Barriers
-	cmdb->setTextureSurfaceBarrier(m_is->getRt(),
+	cmdb->setTextureSurfaceBarrier(m_lightShading->getRt(),
 		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
 		TextureUsageBit::SAMPLED_FRAGMENT,
 		TextureSurfaceInfo(0, 0, 0, 0));
-	m_taa->setPreRunBarriers(ctx);
+	m_temporalAA->setPreRunBarriers(ctx);
 
 	// Passes
-	m_taa->run(ctx);
+	m_temporalAA->run(ctx);
 
 	// Barriers
-	m_taa->setPostRunBarriers(ctx);
+	m_temporalAA->setPostRunBarriers(ctx);
 	m_downscale->setPreRunBarriers(ctx);
 
 	// Passes
@@ -354,7 +353,7 @@ Error Renderer::render(RenderingContext& ctx)
 	m_downscale->setPostRunBarriers(ctx);
 
 	// Passes
-	m_tm->run(ctx);
+	m_tonemapping->run(ctx);
 
 	// Barriers
 	m_bloom->m_extractExposure.setPreRunBarriers(ctx);
@@ -378,7 +377,7 @@ Error Renderer::render(RenderingContext& ctx)
 	}
 
 	// Passes
-	ANKI_CHECK(m_pps->run(ctx));
+	ANKI_CHECK(m_finalComposite->run(ctx));
 
 	++m_frameCount;
 	m_prevViewProjMat = ctx.m_viewProjMat;
@@ -505,61 +504,62 @@ Error Renderer::buildCommandBuffersInternal(RenderingContext& ctx, U32 threadId,
 {
 	// MS
 	//
-	ANKI_CHECK(m_ms->buildCommandBuffers(ctx, threadId, threadCount));
+	ANKI_CHECK(m_gbuffer->buildCommandBuffers(ctx, threadId, threadCount));
 
 	// Append to the last MS's cmdb the occlusion tests
-	if(ctx.m_ms.m_lastThreadWithWork == threadId)
+	if(ctx.m_gbuffer.m_lastThreadWithWork == threadId)
 	{
-		m_lf->runOcclusionTests(ctx, ctx.m_ms.m_commandBuffers[threadId]);
+		m_lensFlare->runOcclusionTests(ctx, ctx.m_gbuffer.m_commandBuffers[threadId]);
 	}
 
-	if(ctx.m_ms.m_commandBuffers[threadId])
+	if(ctx.m_gbuffer.m_commandBuffers[threadId])
 	{
-		ctx.m_ms.m_commandBuffers[threadId]->flush();
+		ctx.m_gbuffer.m_commandBuffers[threadId]->flush();
 	}
 
 	// SM
 	//
-	ANKI_CHECK(m_sm->buildCommandBuffers(ctx, threadId, threadCount));
+	ANKI_CHECK(m_shadowMapping->buildCommandBuffers(ctx, threadId, threadCount));
 
 	// FS
 	//
-	ANKI_CHECK(m_fs->buildCommandBuffers(ctx, threadId, threadCount));
+	ANKI_CHECK(m_forwardShading->buildCommandBuffers(ctx, threadId, threadCount));
 
 	// Append to the last FB's cmdb the other passes
-	if(ctx.m_fs.m_lastThreadWithWork == threadId)
+	if(ctx.m_forwardShading.m_lastThreadWithWork == threadId)
 	{
-		m_lf->run(ctx, ctx.m_fs.m_commandBuffers[threadId]);
-		m_fs->drawVolumetric(ctx, ctx.m_fs.m_commandBuffers[threadId]);
+		m_lensFlare->run(ctx, ctx.m_forwardShading.m_commandBuffers[threadId]);
+		m_forwardShading->drawVolumetric(ctx, ctx.m_forwardShading.m_commandBuffers[threadId]);
 	}
-	else if(threadId == threadCount - 1 && ctx.m_fs.m_lastThreadWithWork == MAX_U32)
+	else if(threadId == threadCount - 1 && ctx.m_forwardShading.m_lastThreadWithWork == MAX_U32)
 	{
 		// There is no FS work. Create a cmdb just for LF & VOL
 
 		CommandBufferInitInfo init;
 		init.m_flags =
 			CommandBufferFlag::GRAPHICS_WORK | CommandBufferFlag::SECOND_LEVEL | CommandBufferFlag::SMALL_BATCH;
-		init.m_framebuffer = m_fs->getFramebuffer();
+		init.m_framebuffer = m_forwardShading->getFramebuffer();
 		CommandBufferPtr cmdb = getGrManager().newInstance<CommandBuffer>(init);
 
 		// Inform on textures
-		cmdb->informTextureSurfaceCurrentUsage(
-			m_fs->getRt(), TextureSurfaceInfo(0, 0, 0, 0), TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE);
+		cmdb->informTextureSurfaceCurrentUsage(m_forwardShading->getRt(),
+			TextureSurfaceInfo(0, 0, 0, 0),
+			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE);
 		cmdb->informTextureSurfaceCurrentUsage(m_depth->m_hd.m_depthRt,
 			TextureSurfaceInfo(0, 0, 0, 0),
 			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ | TextureUsageBit::SAMPLED_FRAGMENT);
 
-		cmdb->setViewport(0, 0, m_fs->getWidth(), m_fs->getHeight());
+		cmdb->setViewport(0, 0, m_forwardShading->getWidth(), m_forwardShading->getHeight());
 
-		m_lf->run(ctx, cmdb);
-		m_fs->drawVolumetric(ctx, cmdb);
+		m_lensFlare->run(ctx, cmdb);
+		m_forwardShading->drawVolumetric(ctx, cmdb);
 
-		ctx.m_fs.m_commandBuffers[threadId] = cmdb;
+		ctx.m_forwardShading.m_commandBuffers[threadId] = cmdb;
 	}
 
-	if(ctx.m_fs.m_commandBuffers[threadId])
+	if(ctx.m_forwardShading.m_commandBuffers[threadId])
 	{
-		ctx.m_fs.m_commandBuffers[threadId]->flush();
+		ctx.m_forwardShading.m_commandBuffers[threadId]->flush();
 	}
 
 	return ErrorCode::NONE;
@@ -571,9 +571,9 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 	ThreadPool& threadPool = getThreadPool();
 
 	// Prepare
-	if(m_sm)
+	if(m_shadowMapping)
 	{
-		m_sm->prepareBuildCommandBuffers(ctx);
+		m_shadowMapping->prepareBuildCommandBuffers(ctx);
 	}
 
 	// Find the last jobs for MS and FS
@@ -593,8 +593,8 @@ Error Renderer::buildCommandBuffers(RenderingContext& ctx)
 		}
 	}
 
-	ctx.m_ms.m_lastThreadWithWork = lastMsJob;
-	ctx.m_fs.m_lastThreadWithWork = lastFsJob;
+	ctx.m_gbuffer.m_lastThreadWithWork = lastMsJob;
+	ctx.m_forwardShading.m_lastThreadWithWork = lastFsJob;
 
 	// Build
 	class Task : public ThreadPoolTask

+ 40 - 55
src/anki/renderer/Renderer.h

@@ -54,33 +54,25 @@ public:
 
 	StackAllocator<U8> m_tempAllocator;
 
-	/// @name MS
-	/// @{
-	class Ms
+	class GBuffer
 	{
 	public:
 		Array<CommandBufferPtr, ThreadPool::MAX_THREADS> m_commandBuffers;
 		U32 m_lastThreadWithWork = 0;
-	} m_ms;
-	/// @}
+	} m_gbuffer;
 
-	/// @name LF
-	/// @{
-	class Lf
+	class LensFlare
 	{
 	public:
 		DynamicArrayAuto<OcclusionQueryPtr> m_queriesToTest;
 
-		Lf(const StackAllocator<U8>& alloc)
+		LensFlare(const StackAllocator<U8>& alloc)
 			: m_queriesToTest(alloc)
 		{
 		}
-	} m_lf;
-	/// @}
+	} m_lensFlare;
 
-	/// @name IS
-	/// @{
-	class Is
+	class LightShading
 	{
 	public:
 		StagingGpuMemoryToken m_commonToken;
@@ -93,12 +85,9 @@ public:
 
 		TexturePtr m_diffDecalTex;
 		TexturePtr m_normRoughnessDecalTex;
-	} m_is;
-	/// @}
+	} m_lightShading;
 
-	/// @name Shadow mapping
-	/// @{
-	class Sm
+	class ShadowMapping
 	{
 	public:
 		DynamicArrayAuto<FramebufferPtr> m_spotFramebuffers;
@@ -115,7 +104,7 @@ public:
 		DynamicArrayAuto<SceneNode*> m_spots;
 		DynamicArrayAuto<SceneNode*> m_omnis;
 
-		Sm(const StackAllocator<U8>& alloc)
+		ShadowMapping(const StackAllocator<U8>& alloc)
 			: m_spotFramebuffers(alloc)
 			, m_omniFramebuffers(alloc)
 			, m_spotCacheIndices(alloc)
@@ -126,18 +115,14 @@ public:
 			, m_omnis(alloc)
 		{
 		}
-	} m_sm;
-	/// @}
+	} m_shadowMapping;
 
-	/// @name FS
-	/// @{
-	class Fs
+	class ForwardShading
 	{
 	public:
 		Array<CommandBufferPtr, ThreadPool::MAX_THREADS> m_commandBuffers;
 		U32 m_lastThreadWithWork = 0;
-	} m_fs;
-	/// @}
+	} m_forwardShading;
 
 	FramebufferPtr m_outFb;
 	U32 m_outFbWidth = 0;
@@ -145,8 +130,8 @@ public:
 
 	RenderingContext(const StackAllocator<U8>& alloc)
 		: m_tempAllocator(alloc)
-		, m_lf(alloc)
-		, m_sm(alloc)
+		, m_lensFlare(alloc)
+		, m_shadowMapping(alloc)
 	{
 	}
 };
@@ -160,24 +145,24 @@ public:
 
 	~Renderer();
 
-	Ir& getIr()
+	Indirect& getIndirect()
 	{
-		return *m_ir;
+		return *m_indirect;
 	}
 
-	Sm& getSm()
+	ShadowMapping& getShadowMapping()
 	{
-		return *m_sm;
+		return *m_shadowMapping;
 	}
 
-	Ms& getMs()
+	GBuffer& getGBuffer()
 	{
-		return *m_ms;
+		return *m_gbuffer;
 	}
 
-	Is& getIs()
+	LightShading& getLightShading()
 	{
-		return *m_is;
+		return *m_lightShading;
 	}
 
 	DepthDownscale& getDepthDownscale()
@@ -185,9 +170,9 @@ public:
 		return *m_depth;
 	}
 
-	Fs& getFs()
+	ForwardShading& getForwardShading()
 	{
-		return *m_fs;
+		return *m_forwardShading;
 	}
 
 	Volumetric& getVolumetric()
@@ -195,9 +180,9 @@ public:
 		return *m_vol;
 	}
 
-	Tm& getTm()
+	Tonemapping& getTonemapping()
 	{
-		return *m_tm;
+		return *m_tonemapping;
 	}
 
 	Ssao& getSsao()
@@ -210,9 +195,9 @@ public:
 		return *m_bloom;
 	}
 
-	Pps& getPps()
+	FinalComposite& getFinalComposite()
 	{
-		return *m_pps;
+		return *m_finalComposite;
 	}
 
 	Dbg& getDbg()
@@ -220,9 +205,9 @@ public:
 		return *m_dbg;
 	}
 
-	Taa& getTaa()
+	TemporalAA& getTemporalAA()
 	{
-		return *m_taa;
+		return *m_temporalAA;
 	}
 
 	DownscaleBlur& getDownscaleBlur()
@@ -415,21 +400,21 @@ private:
 
 	/// @name Rendering stages
 	/// @{
-	UniquePtr<Ir> m_ir;
-	UniquePtr<Sm> m_sm; ///< Shadow mapping.
-	UniquePtr<Ms> m_ms; ///< Material rendering stage
-	UniquePtr<Is> m_is; ///< Illumination rendering stage
+	UniquePtr<Indirect> m_indirect;
+	UniquePtr<ShadowMapping> m_shadowMapping; ///< Shadow mapping.
+	UniquePtr<GBuffer> m_gbuffer; ///< Material rendering stage
+	UniquePtr<LightShading> m_lightShading; ///< Illumination rendering stage
 	UniquePtr<DepthDownscale> m_depth;
-	UniquePtr<Fs> m_fs; ///< Forward shading.
+	UniquePtr<ForwardShading> m_forwardShading; ///< Forward shading.
 	UniquePtr<Volumetric> m_vol; ///< Volumetric effects.
-	UniquePtr<Lf> m_lf; ///< Forward shading lens flares.
-	UniquePtr<FsUpscale> m_fsUpscale;
+	UniquePtr<LensFlare> m_lensFlare; ///< Forward shading lens flares.
+	UniquePtr<ForwardShadingUpscale> m_fsUpscale;
 	UniquePtr<DownscaleBlur> m_downscale;
-	UniquePtr<Taa> m_taa;
-	UniquePtr<Tm> m_tm;
+	UniquePtr<TemporalAA> m_temporalAA;
+	UniquePtr<Tonemapping> m_tonemapping;
 	UniquePtr<Ssao> m_ssao;
 	UniquePtr<Bloom> m_bloom;
-	UniquePtr<Pps> m_pps; ///< Postprocessing rendering stage
+	UniquePtr<FinalComposite> m_finalComposite; ///< Postprocessing rendering stage
 	UniquePtr<Dbg> m_dbg; ///< Debug stage.
 	/// @}
 

+ 4 - 4
src/anki/renderer/Sslf.cpp → src/anki/renderer/ScreenspaceLensFlare.cpp

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Sslf.h>
+#include <anki/renderer/ScreenspaceLensFlare.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/Bloom.h>
 #include <anki/misc/ConfigSet.h>
@@ -11,7 +11,7 @@
 namespace anki
 {
 
-Error Sslf::init(const ConfigSet& config)
+Error ScreenspaceLensFlare::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing screen space lens flare");
 
@@ -24,7 +24,7 @@ Error Sslf::init(const ConfigSet& config)
 	return err;
 }
 
-Error Sslf::initInternal(const ConfigSet& config)
+Error ScreenspaceLensFlare::initInternal(const ConfigSet& config)
 {
 	ANKI_CHECK(m_r->createShaderf("shaders/Sslf.frag.glsl",
 		m_frag,
@@ -39,7 +39,7 @@ Error Sslf::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-void Sslf::run(RenderingContext& ctx)
+void ScreenspaceLensFlare::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 

+ 2 - 2
src/anki/renderer/Sslf.h → src/anki/renderer/ScreenspaceLensFlare.h

@@ -14,10 +14,10 @@ namespace anki
 /// @{
 
 /// Screen space lens flare pass.
-class Sslf : public RenderingPass
+class ScreenspaceLensFlare : public RenderingPass
 {
 anki_internal:
-	Sslf(Renderer* r)
+	ScreenspaceLensFlare(Renderer* r)
 		: RenderingPass(r)
 	{
 	}

+ 59 - 54
src/anki/renderer/Sm.cpp → src/anki/renderer/ShadowMapping.cpp

@@ -3,7 +3,7 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Sm.h>
+#include <anki/renderer/ShadowMapping.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/core/App.h>
 #include <anki/core/Trace.h>
@@ -17,15 +17,15 @@
 namespace anki
 {
 
-const PixelFormat Sm::DEPTH_RT_PIXEL_FORMAT(ComponentFormat::D16, TransformFormat::UNORM);
+const PixelFormat ShadowMapping::DEPTH_RT_PIXEL_FORMAT(ComponentFormat::D16, TransformFormat::UNORM);
 
-Sm::~Sm()
+ShadowMapping::~ShadowMapping()
 {
 	m_spots.destroy(getAllocator());
 	m_omnis.destroy(getAllocator());
 }
 
-Error Sm::init(const ConfigSet& config)
+Error ShadowMapping::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing shadowmapping");
 
@@ -38,7 +38,7 @@ Error Sm::init(const ConfigSet& config)
 	return err;
 }
 
-Error Sm::initInternal(const ConfigSet& config)
+Error ShadowMapping::initInternal(const ConfigSet& config)
 {
 	m_poissonEnabled = config.getNumber("sm.poissonEnabled");
 	m_bilinearEnabled = config.getNumber("sm.bilinearEnabled");
@@ -110,7 +110,7 @@ Error Sm::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-void Sm::run(RenderingContext& ctx)
+void ShadowMapping::run(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_SM);
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
@@ -118,13 +118,13 @@ void Sm::run(RenderingContext& ctx)
 	const U threadCount = m_r->getThreadPool().getThreadsCount();
 
 	// Spot lights
-	for(U i = 0; i < ctx.m_sm.m_spots.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_spots.getSize(); ++i)
 	{
-		cmdb->beginRenderPass(ctx.m_sm.m_spotFramebuffers[i]);
+		cmdb->beginRenderPass(ctx.m_shadowMapping.m_spotFramebuffers[i]);
 		for(U j = 0; j < threadCount; ++j)
 		{
 			U idx = i * threadCount + j;
-			CommandBufferPtr& cmdb2 = ctx.m_sm.m_spotCommandBuffers[idx];
+			CommandBufferPtr& cmdb2 = ctx.m_shadowMapping.m_spotCommandBuffers[idx];
 			if(cmdb2.isCreated())
 			{
 				cmdb->pushSecondLevelCommandBuffer(cmdb2);
@@ -134,16 +134,16 @@ void Sm::run(RenderingContext& ctx)
 	}
 
 	// Omni lights
-	for(U i = 0; i < ctx.m_sm.m_omnis.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_omnis.getSize(); ++i)
 	{
 		for(U j = 0; j < 6; ++j)
 		{
-			cmdb->beginRenderPass(ctx.m_sm.m_omniFramebuffers[i][j]);
+			cmdb->beginRenderPass(ctx.m_shadowMapping.m_omniFramebuffers[i][j]);
 
 			for(U k = 0; k < threadCount; ++k)
 			{
 				U idx = i * threadCount * 6 + k * 6 + j;
-				CommandBufferPtr& cmdb2 = ctx.m_sm.m_omniCommandBuffers[idx];
+				CommandBufferPtr& cmdb2 = ctx.m_shadowMapping.m_omniCommandBuffers[idx];
 				if(cmdb2.isCreated())
 				{
 					cmdb->pushSecondLevelCommandBuffer(cmdb2);
@@ -157,7 +157,7 @@ void Sm::run(RenderingContext& ctx)
 }
 
 template<typename TShadowmap, typename TContainer>
-void Sm::bestCandidate(SceneNode& light, TContainer& arr, TShadowmap*& out)
+void ShadowMapping::bestCandidate(SceneNode& light, TContainer& arr, TShadowmap*& out)
 {
 	// Allready there
 	for(TShadowmap& sm : arr)
@@ -196,7 +196,7 @@ void Sm::bestCandidate(SceneNode& light, TContainer& arr, TShadowmap*& out)
 	out = sm;
 }
 
-Bool Sm::skip(SceneNode& light, ShadowmapBase& sm)
+Bool ShadowMapping::skip(SceneNode& light, ShadowmapBase& sm)
 {
 	MoveComponent* movc = light.tryGetComponent<MoveComponent>();
 
@@ -225,28 +225,28 @@ Bool Sm::skip(SceneNode& light, ShadowmapBase& sm)
 	return !shouldUpdate;
 }
 
-Error Sm::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
+Error ShadowMapping::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount) const
 {
 	ANKI_TRACE_START_EVENT(RENDER_SM);
 
-	for(U i = 0; i < ctx.m_sm.m_spots.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_spots.getSize(); ++i)
 	{
 		U idx = i * threadCount + threadId;
 
-		ANKI_CHECK(doSpotLight(*ctx.m_sm.m_spots[i],
-			ctx.m_sm.m_spotCommandBuffers[idx],
-			ctx.m_sm.m_spotFramebuffers[i],
+		ANKI_CHECK(doSpotLight(*ctx.m_shadowMapping.m_spots[i],
+			ctx.m_shadowMapping.m_spotCommandBuffers[idx],
+			ctx.m_shadowMapping.m_spotFramebuffers[i],
 			threadId,
 			threadCount));
 	}
 
-	for(U i = 0; i < ctx.m_sm.m_omnis.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_omnis.getSize(); ++i)
 	{
 		U idx = i * threadCount * 6 + threadId * 6 + 0;
 
-		ANKI_CHECK(doOmniLight(*ctx.m_sm.m_omnis[i],
-			&ctx.m_sm.m_omniCommandBuffers[idx],
-			ctx.m_sm.m_omniFramebuffers[i],
+		ANKI_CHECK(doOmniLight(*ctx.m_shadowMapping.m_omnis[i],
+			&ctx.m_shadowMapping.m_omniCommandBuffers[idx],
+			ctx.m_shadowMapping.m_omniFramebuffers[i],
 			threadId,
 			threadCount));
 	}
@@ -255,7 +255,8 @@ Error Sm::buildCommandBuffers(RenderingContext& ctx, U threadId, U threadCount)
 	return ErrorCode::NONE;
 }
 
-Error Sm::doSpotLight(SceneNode& light, CommandBufferPtr& cmdb, FramebufferPtr& fb, U threadId, U threadCount) const
+Error ShadowMapping::doSpotLight(
+	SceneNode& light, CommandBufferPtr& cmdb, FramebufferPtr& fb, U threadId, U threadCount) const
 {
 	FrustumComponent& frc = light.getComponent<FrustumComponent>();
 	VisibilityTestResults& vis = frc.getVisibilityTestResults();
@@ -298,7 +299,7 @@ Error Sm::doSpotLight(SceneNode& light, CommandBufferPtr& cmdb, FramebufferPtr&
 	return err;
 }
 
-Error Sm::doOmniLight(
+Error ShadowMapping::doOmniLight(
 	SceneNode& light, CommandBufferPtr cmdbs[], Array<FramebufferPtr, 6>& fbs, U threadId, U threadCount) const
 {
 	U frCount = 0;
@@ -346,7 +347,7 @@ Error Sm::doOmniLight(
 	return err;
 }
 
-void Sm::prepareBuildCommandBuffers(RenderingContext& ctx)
+void ShadowMapping::prepareBuildCommandBuffers(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_SM);
 
@@ -408,66 +409,70 @@ void Sm::prepareBuildCommandBuffers(RenderingContext& ctx)
 
 	if(spotCastersCount > 0)
 	{
-		ctx.m_sm.m_spots.create(spotCastersCount);
-		memcpy(&ctx.m_sm.m_spots[0], &spotCasters[0], sizeof(SceneNode*) * spotCastersCount);
+		ctx.m_shadowMapping.m_spots.create(spotCastersCount);
+		memcpy(&ctx.m_shadowMapping.m_spots[0], &spotCasters[0], sizeof(SceneNode*) * spotCastersCount);
 
-		ctx.m_sm.m_spotCommandBuffers.create(spotCastersCount * m_r->getThreadPool().getThreadsCount());
+		ctx.m_shadowMapping.m_spotCommandBuffers.create(spotCastersCount * m_r->getThreadPool().getThreadsCount());
 
-		ctx.m_sm.m_spotCacheIndices.create(spotCastersCount);
+		ctx.m_shadowMapping.m_spotCacheIndices.create(spotCastersCount);
 #if ANKI_EXTRA_CHECKS
-		memset(&ctx.m_sm.m_spotCacheIndices[0], 0xFF, sizeof(ctx.m_sm.m_spotCacheIndices[0]) * spotCastersCount);
+		memset(&ctx.m_shadowMapping.m_spotCacheIndices[0],
+			0xFF,
+			sizeof(ctx.m_shadowMapping.m_spotCacheIndices[0]) * spotCastersCount);
 #endif
 
-		ctx.m_sm.m_spotFramebuffers.create(spotCastersCount);
+		ctx.m_shadowMapping.m_spotFramebuffers.create(spotCastersCount);
 		for(U i = 0; i < spotCastersCount; ++i)
 		{
-			const LightComponent& lightc = ctx.m_sm.m_spots[i]->getComponent<LightComponent>();
+			const LightComponent& lightc = ctx.m_shadowMapping.m_spots[i]->getComponent<LightComponent>();
 			const U idx = lightc.getShadowMapIndex();
 
-			ctx.m_sm.m_spotFramebuffers[i] = m_spots[idx].m_fb;
-			ctx.m_sm.m_spotCacheIndices[i] = idx;
+			ctx.m_shadowMapping.m_spotFramebuffers[i] = m_spots[idx].m_fb;
+			ctx.m_shadowMapping.m_spotCacheIndices[i] = idx;
 		}
 	}
 
 	if(omniCastersCount > 0)
 	{
-		ctx.m_sm.m_omnis.create(omniCastersCount);
-		memcpy(&ctx.m_sm.m_omnis[0], &omniCasters[0], sizeof(SceneNode*) * omniCastersCount);
+		ctx.m_shadowMapping.m_omnis.create(omniCastersCount);
+		memcpy(&ctx.m_shadowMapping.m_omnis[0], &omniCasters[0], sizeof(SceneNode*) * omniCastersCount);
 
-		ctx.m_sm.m_omniCommandBuffers.create(omniCastersCount * 6 * m_r->getThreadPool().getThreadsCount());
+		ctx.m_shadowMapping.m_omniCommandBuffers.create(omniCastersCount * 6 * m_r->getThreadPool().getThreadsCount());
 
-		ctx.m_sm.m_omniCacheIndices.create(omniCastersCount);
+		ctx.m_shadowMapping.m_omniCacheIndices.create(omniCastersCount);
 #if ANKI_EXTRA_CHECKS
-		memset(&ctx.m_sm.m_omniCacheIndices[0], 0xFF, sizeof(ctx.m_sm.m_omniCacheIndices[0]) * omniCastersCount);
+		memset(&ctx.m_shadowMapping.m_omniCacheIndices[0],
+			0xFF,
+			sizeof(ctx.m_shadowMapping.m_omniCacheIndices[0]) * omniCastersCount);
 #endif
 
-		ctx.m_sm.m_omniFramebuffers.create(omniCastersCount);
+		ctx.m_shadowMapping.m_omniFramebuffers.create(omniCastersCount);
 		for(U i = 0; i < omniCastersCount; ++i)
 		{
-			const LightComponent& lightc = ctx.m_sm.m_omnis[i]->getComponent<LightComponent>();
+			const LightComponent& lightc = ctx.m_shadowMapping.m_omnis[i]->getComponent<LightComponent>();
 			const U idx = lightc.getShadowMapIndex();
 
 			for(U j = 0; j < 6; ++j)
 			{
-				ctx.m_sm.m_omniFramebuffers[i][j] = m_omnis[idx].m_fb[j];
+				ctx.m_shadowMapping.m_omniFramebuffers[i][j] = m_omnis[idx].m_fb[j];
 			}
 
-			ctx.m_sm.m_omniCacheIndices[i] = idx;
+			ctx.m_shadowMapping.m_omniCacheIndices[i] = idx;
 		}
 	}
 
 	ANKI_TRACE_STOP_EVENT(RENDER_SM);
 }
 
-void Sm::setPreRunBarriers(RenderingContext& ctx)
+void ShadowMapping::setPreRunBarriers(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_SM);
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 
 	// Spot lights
-	for(U i = 0; i < ctx.m_sm.m_spotCacheIndices.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_spotCacheIndices.getSize(); ++i)
 	{
-		U layer = ctx.m_sm.m_spotCacheIndices[i];
+		U layer = ctx.m_shadowMapping.m_spotCacheIndices[i];
 
 		cmdb->setTextureSurfaceBarrier(m_spotTexArray,
 			TextureUsageBit::NONE,
@@ -476,11 +481,11 @@ void Sm::setPreRunBarriers(RenderingContext& ctx)
 	}
 
 	// Omni lights
-	for(U i = 0; i < ctx.m_sm.m_omniCacheIndices.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_omniCacheIndices.getSize(); ++i)
 	{
 		for(U j = 0; j < 6; ++j)
 		{
-			U layer = ctx.m_sm.m_omniCacheIndices[i];
+			U layer = ctx.m_shadowMapping.m_omniCacheIndices[i];
 
 			cmdb->setTextureSurfaceBarrier(m_omniTexArray,
 				TextureUsageBit::NONE,
@@ -492,15 +497,15 @@ void Sm::setPreRunBarriers(RenderingContext& ctx)
 	ANKI_TRACE_STOP_EVENT(RENDER_SM);
 }
 
-void Sm::setPostRunBarriers(RenderingContext& ctx)
+void ShadowMapping::setPostRunBarriers(RenderingContext& ctx)
 {
 	ANKI_TRACE_START_EVENT(RENDER_SM);
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 
 	// Spot lights
-	for(U i = 0; i < ctx.m_sm.m_spotCacheIndices.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_spotCacheIndices.getSize(); ++i)
 	{
-		U layer = ctx.m_sm.m_spotCacheIndices[i];
+		U layer = ctx.m_shadowMapping.m_spotCacheIndices[i];
 
 		cmdb->setTextureSurfaceBarrier(m_spotTexArray,
 			TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,
@@ -509,11 +514,11 @@ void Sm::setPostRunBarriers(RenderingContext& ctx)
 	}
 
 	// Omni lights
-	for(U i = 0; i < ctx.m_sm.m_omniCacheIndices.getSize(); ++i)
+	for(U i = 0; i < ctx.m_shadowMapping.m_omniCacheIndices.getSize(); ++i)
 	{
 		for(U j = 0; j < 6; ++j)
 		{
-			U layer = ctx.m_sm.m_omniCacheIndices[i];
+			U layer = ctx.m_shadowMapping.m_omniCacheIndices[i];
 
 			cmdb->setTextureSurfaceBarrier(m_omniTexArray,
 				TextureUsageBit::FRAMEBUFFER_ATTACHMENT_READ_WRITE,

+ 3 - 3
src/anki/renderer/Sm.h → src/anki/renderer/ShadowMapping.h

@@ -20,7 +20,7 @@ class SceneNode;
 /// @{
 
 /// Shadowmapping pass
-class Sm : public RenderingPass
+class ShadowMapping : public RenderingPass
 {
 anki_internal:
 	static const PixelFormat DEPTH_RT_PIXEL_FORMAT;
@@ -31,12 +31,12 @@ anki_internal:
 	TexturePtr m_spotTexArray;
 	TexturePtr m_omniTexArray;
 
-	Sm(Renderer* r)
+	ShadowMapping(Renderer* r)
 		: RenderingPass(r)
 	{
 	}
 
-	~Sm();
+	~ShadowMapping();
 
 	ANKI_USE_RESULT Error init(const ConfigSet& initializer);
 

+ 2 - 2
src/anki/renderer/Ssao.cpp

@@ -5,7 +5,7 @@
 
 #include <anki/renderer/Ssao.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
+#include <anki/renderer/GBuffer.h>
 #include <anki/renderer/DepthDownscale.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/util/Functions.h>
@@ -56,7 +56,7 @@ void SsaoMain::run(RenderingContext& ctx)
 	cmdb->bindShaderProgram(m_grProg);
 
 	cmdb->bindTexture(0, 0, m_r->getDepthDownscale().m_qd.m_depthRt);
-	cmdb->bindTextureAndSampler(0, 1, m_r->getMs().m_rt2, m_r->getLinearSampler());
+	cmdb->bindTextureAndSampler(0, 1, m_r->getGBuffer().m_rt2, m_r->getLinearSampler());
 	cmdb->bindTexture(0, 2, m_noiseTex->getGrTexture());
 	cmdb->bindTexture(0, 3, m_ssao->m_rt[(m_r->getFrameCount() + 1) & 1]);
 

+ 14 - 14
src/anki/renderer/Taa.cpp → src/anki/renderer/TemporalAA.cpp

@@ -3,24 +3,24 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Taa.h>
+#include <anki/renderer/TemporalAA.h>
 #include <anki/renderer/Renderer.h>
-#include <anki/renderer/Ms.h>
-#include <anki/renderer/Is.h>
+#include <anki/renderer/GBuffer.h>
+#include <anki/renderer/LightShading.h>
 
 namespace anki
 {
 
-Taa::Taa(Renderer* r)
+TemporalAA::TemporalAA(Renderer* r)
 	: RenderingPass(r)
 {
 }
 
-Taa::~Taa()
+TemporalAA::~TemporalAA()
 {
 }
 
-Error Taa::init(const ConfigSet& config)
+Error TemporalAA::init(const ConfigSet& config)
 {
 	ANKI_R_LOGI("Initializing TAA");
 	Error err = initInternal(config);
@@ -33,7 +33,7 @@ Error Taa::init(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-Error Taa::initInternal(const ConfigSet& config)
+Error TemporalAA::initInternal(const ConfigSet& config)
 {
 	ANKI_CHECK(m_r->getResourceManager().loadResource("programs/TemporalAAResolve.ankiprog", m_prog));
 	const ShaderProgramResourceVariant* variant;
@@ -44,7 +44,7 @@ Error Taa::initInternal(const ConfigSet& config)
 	{
 		m_rts[i] = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_r->getWidth(),
 			m_r->getHeight(),
-			IS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+			LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
 			1,
@@ -60,7 +60,7 @@ Error Taa::initInternal(const ConfigSet& config)
 	return ErrorCode::NONE;
 }
 
-void Taa::setPreRunBarriers(RenderingContext& ctx)
+void TemporalAA::setPreRunBarriers(RenderingContext& ctx)
 {
 	ctx.m_commandBuffer->setTextureSurfaceBarrier(m_rts[m_r->getFrameCount() & 1],
 		TextureUsageBit::NONE,
@@ -68,7 +68,7 @@ void Taa::setPreRunBarriers(RenderingContext& ctx)
 		TextureSurfaceInfo(0, 0, 0, 0));
 }
 
-void Taa::run(RenderingContext& ctx)
+void TemporalAA::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 
@@ -76,8 +76,8 @@ void Taa::run(RenderingContext& ctx)
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 
 	cmdb->bindShaderProgram(m_grProg);
-	cmdb->bindTextureAndSampler(0, 0, m_r->getMs().m_depthRt, m_r->getLinearSampler());
-	cmdb->bindTextureAndSampler(0, 1, m_r->getIs().getRt(), m_r->getLinearSampler());
+	cmdb->bindTextureAndSampler(0, 0, m_r->getGBuffer().m_depthRt, m_r->getLinearSampler());
+	cmdb->bindTextureAndSampler(0, 1, m_r->getLightShading().getRt(), m_r->getLinearSampler());
 	cmdb->informTextureCurrentUsage(m_rts[(m_r->getFrameCount() + 1) & 1], TextureUsageBit::SAMPLED_FRAGMENT);
 	cmdb->bindTextureAndSampler(0, 2, m_rts[(m_r->getFrameCount() + 1) & 1], m_r->getLinearSampler());
 
@@ -88,7 +88,7 @@ void Taa::run(RenderingContext& ctx)
 	cmdb->endRenderPass();
 }
 
-void Taa::setPostRunBarriers(RenderingContext& ctx)
+void TemporalAA::setPostRunBarriers(RenderingContext& ctx)
 {
 	ctx.m_commandBuffer->setTextureSurfaceBarrier(m_rts[m_r->getFrameCount() & 1],
 		TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
@@ -96,7 +96,7 @@ void Taa::setPostRunBarriers(RenderingContext& ctx)
 		TextureSurfaceInfo(0, 0, 0, 0));
 }
 
-TexturePtr Taa::getRt() const
+TexturePtr TemporalAA::getRt() const
 {
 	return m_rts[m_r->getFrameCount() & 1];
 }

+ 3 - 3
src/anki/renderer/Taa.h → src/anki/renderer/TemporalAA.h

@@ -14,12 +14,12 @@ namespace anki
 /// @{
 
 /// Temporal AA resolve.
-class Taa : public RenderingPass
+class TemporalAA : public RenderingPass
 {
 public:
-	Taa(Renderer* r);
+	TemporalAA(Renderer* r);
 
-	~Taa();
+	~TemporalAA();
 
 	TexturePtr getRt() const;
 

+ 4 - 4
src/anki/renderer/Tm.cpp → src/anki/renderer/Tonemapping.cpp

@@ -3,14 +3,14 @@
 // Code licensed under the BSD License.
 // http://www.anki3d.org/LICENSE
 
-#include <anki/renderer/Tm.h>
+#include <anki/renderer/Tonemapping.h>
 #include <anki/renderer/DownscaleBlur.h>
 #include <anki/renderer/Renderer.h>
 
 namespace anki
 {
 
-Error Tm::init(const ConfigSet& cfg)
+Error Tonemapping::init(const ConfigSet& cfg)
 {
 	ANKI_R_LOGI("Initializing tonemapping");
 	Error err = initInternal(cfg);
@@ -22,7 +22,7 @@ Error Tm::init(const ConfigSet& cfg)
 	return err;
 }
 
-Error Tm::initInternal(const ConfigSet& initializer)
+Error Tonemapping::initInternal(const ConfigSet& initializer)
 {
 	// Create shader
 	ANKI_CHECK(m_r->createShaderf("shaders/TmAverageLuminance.comp.glsl",
@@ -58,7 +58,7 @@ Error Tm::initInternal(const ConfigSet& initializer)
 	return ErrorCode::NONE;
 }
 
-void Tm::run(RenderingContext& ctx)
+void Tonemapping::run(RenderingContext& ctx)
 {
 	CommandBufferPtr& cmdb = ctx.m_commandBuffer;
 	cmdb->bindShaderProgram(m_prog);

+ 2 - 2
src/anki/renderer/Tm.h → src/anki/renderer/Tonemapping.h

@@ -14,12 +14,12 @@ namespace anki
 /// @{
 
 /// Tonemapping.
-class Tm : public RenderingPass
+class Tonemapping : public RenderingPass
 {
 anki_internal:
 	BufferPtr m_luminanceBuff;
 
-	Tm(Renderer* r)
+	Tonemapping(Renderer* r)
 		: RenderingPass(r)
 	{
 	}

+ 14 - 14
src/anki/renderer/Volumetric.cpp

@@ -6,8 +6,8 @@
 #include <anki/renderer/Volumetric.h>
 #include <anki/renderer/Renderer.h>
 #include <anki/renderer/DepthDownscale.h>
-#include <anki/renderer/Sm.h>
-#include <anki/renderer/Is.h>
+#include <anki/renderer/ShadowMapping.h>
+#include <anki/renderer/LightShading.h>
 #include <anki/renderer/LightBin.h>
 #include <anki/scene/FrustumComponent.h>
 
@@ -24,7 +24,7 @@ Error VolumetricMain::init(const ConfigSet& config)
 		// RT
 		TextureInitInfo rtInit = m_r->create2DRenderTargetInitInfo(m_vol->m_width,
 			m_vol->m_height,
-			IS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+			LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 			TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 			SamplingFilter::LINEAR,
 			1,
@@ -49,9 +49,9 @@ Error VolumetricMain::init(const ConfigSet& config)
 	ShaderProgramResourceConstantValueInitList<3> consts(m_prog);
 	consts.add("FB_SIZE", UVec2(m_vol->m_width, m_vol->m_height))
 		.add("CLUSTER_COUNT",
-			UVec3(m_r->getIs().getLightBin().getClusterer().getClusterCountX(),
-				m_r->getIs().getLightBin().getClusterer().getClusterCountY(),
-				m_r->getIs().getLightBin().getClusterer().getClusterCountZ()))
+			UVec3(m_r->getLightShading().getLightBin().getClusterer().getClusterCountX(),
+				m_r->getLightShading().getLightBin().getClusterer().getClusterCountY(),
+				m_r->getLightShading().getLightBin().getClusterer().getClusterCountZ()))
 		.add("NOISE_MAP_SIZE", U32(m_noiseTex->getWidth()));
 
 	const ShaderProgramResourceVariant* variant;
@@ -88,12 +88,12 @@ void VolumetricMain::run(RenderingContext& ctx)
 	TexturePtr& history = m_rt[(m_r->getFrameCount() + 1) & 1];
 	cmdb->informTextureCurrentUsage(history, TextureUsageBit::SAMPLED_FRAGMENT);
 	cmdb->bindTexture(0, 2, history);
-	cmdb->bindTexture(0, 3, m_r->getSm().m_spotTexArray);
-	cmdb->bindTexture(0, 4, m_r->getSm().m_omniTexArray);
+	cmdb->bindTexture(0, 3, m_r->getShadowMapping().m_spotTexArray);
+	cmdb->bindTexture(0, 4, m_r->getShadowMapping().m_omniTexArray);
 
-	bindUniforms(cmdb, 0, 0, ctx.m_is.m_commonToken);
-	bindUniforms(cmdb, 0, 1, ctx.m_is.m_pointLightsToken);
-	bindUniforms(cmdb, 0, 2, ctx.m_is.m_spotLightsToken);
+	bindUniforms(cmdb, 0, 0, ctx.m_lightShading.m_commonToken);
+	bindUniforms(cmdb, 0, 1, ctx.m_lightShading.m_pointLightsToken);
+	bindUniforms(cmdb, 0, 2, ctx.m_lightShading.m_spotLightsToken);
 
 	struct Unis
 	{
@@ -113,8 +113,8 @@ void VolumetricMain::run(RenderingContext& ctx)
 	uniforms->m_fogParticleColorPad1 = Vec4(m_fogParticleColor, 0.0);
 	uniforms->m_prevViewProjMatMulInvViewProjMat = ctx.m_prevViewProjMat * ctx.m_viewProjMat.getInverse();
 
-	bindStorage(cmdb, 0, 0, ctx.m_is.m_clustersToken);
-	bindStorage(cmdb, 0, 1, ctx.m_is.m_lightIndicesToken);
+	bindStorage(cmdb, 0, 0, ctx.m_lightShading.m_clustersToken);
+	bindStorage(cmdb, 0, 1, ctx.m_lightShading.m_lightIndicesToken);
 
 	cmdb->bindShaderProgram(m_grProg);
 
@@ -136,7 +136,7 @@ Error VolumetricHBlur::init(const ConfigSet& config)
 	// Create RTs
 	m_rt = m_r->createAndClearRenderTarget(m_r->create2DRenderTargetInitInfo(m_vol->m_width,
 		m_vol->m_height,
-		IS_COLOR_ATTACHMENT_PIXEL_FORMAT,
+		LIGHT_SHADING_COLOR_ATTACHMENT_PIXEL_FORMAT,
 		TextureUsageBit::SAMPLED_FRAGMENT | TextureUsageBit::FRAMEBUFFER_ATTACHMENT_WRITE,
 		SamplingFilter::LINEAR,
 		1,

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

@@ -61,7 +61,7 @@ void ModelPatch::getRenderingDataSub(
 		attribs[1].m_format = PixelFormat(ComponentFormat::R16G16, TransformFormat::FLOAT);
 		attribs[1].m_relativeOffset = sizeof(Vec3);
 
-		if(key.m_pass == Pass::MS_FS)
+		if(key.m_pass == Pass::GB_FS)
 		{
 			attribs[2].m_bufferBinding = 0;
 			attribs[2].m_format = PixelFormat(ComponentFormat::R10G10B10A2, TransformFormat::SNORM);

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

@@ -200,7 +200,7 @@ void ParticleEmitterResource::getRenderingInfo(U lod, ShaderProgramPtr& prog) co
 {
 	lod = min<U>(lod, m_lodCount - 1);
 
-	RenderingKey key(Pass::MS_FS, lod, 1);
+	RenderingKey key(Pass::GB_FS, lod, 1);
 	const MaterialVariant& variant = m_material->getOrCreateVariant(key);
 	prog = variant.getShaderProgram();
 }

+ 2 - 2
src/anki/resource/RenderingKey.h

@@ -13,7 +13,7 @@ namespace anki
 /// The AnKi passes visible to materials.
 enum class Pass : U8
 {
-	MS_FS, ///< MS or FS
+	GB_FS, ///< GBuffer or forward shading.
 	SM,
 	COUNT
 };
@@ -36,7 +36,7 @@ public:
 	}
 
 	RenderingKey()
-		: RenderingKey(Pass::MS_FS, 0, 1)
+		: RenderingKey(Pass::GB_FS, 0, 1)
 	{
 	}
 

+ 2 - 2
src/anki/resource/TextureResource.cpp

@@ -217,7 +217,7 @@ Error TextureResource::load(const ResourceFilename& filename)
 			break;
 #if ANKI_GL == ANKI_GL_DESKTOP
 		case ImageLoader::DataCompression::S3TC:
-			init.m_format.m_components = ComponentFormat::R8G8B8_S3TC;
+			init.m_format.m_components = ComponentFormat::R8G8B8_BC1;
 			break;
 #else
 		case ImageLoader::DataCompression::ETC:
@@ -237,7 +237,7 @@ Error TextureResource::load(const ResourceFilename& filename)
 			break;
 #if ANKI_GL == ANKI_GL_DESKTOP
 		case ImageLoader::DataCompression::S3TC:
-			init.m_format.m_components = ComponentFormat::R8G8B8A8_S3TC;
+			init.m_format.m_components = ComponentFormat::R8G8B8A8_BC3;
 			break;
 #else
 		case ImageLoader::DataCompression::ETC:

+ 1 - 1
src/anki/scene/ReflectionProbe.cpp

@@ -9,7 +9,7 @@
 #include <anki/scene/FrustumComponent.h>
 #include <anki/scene/SceneGraph.h>
 #include <anki/scene/SceneGraph.h>
-#include <anki/renderer/Is.h>
+#include <anki/renderer/LightShading.h>
 
 namespace anki
 {

+ 1 - 1
tools/scene/ExporterMaterial.cpp

@@ -8,7 +8,7 @@
 
 const char* MATERIAL_TEMPLATE = R"(<?xml version="1.0" encoding="UTF-8" ?>
 <!-- This file is auto generated by ExporterMaterial.cpp -->
-<material shaderProgram="programs/MsGeneric.ankiprog">
+<material shaderProgram="programs/GBufferGeneric.ankiprog">
 	
 	<mutators>
 		<mutator name="DIFFUSE_TEX" value="%diffTexMutator%"/>