Browse Source

Move SSAO to the new program resource

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
46320bf5e2
4 changed files with 47 additions and 27 deletions
  1. 31 11
      programs/Ssao.ankiprog
  2. 1 1
      programs/TemporalAAResolve.ankiprog
  3. 13 13
      src/anki/renderer/Ssao.cpp
  4. 2 2
      src/anki/renderer/Ssao.h

+ 31 - 11
shaders/Ssao.frag.glsl → programs/Ssao.ankiprog

@@ -1,17 +1,32 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
-// SSAO fragment shader
+<!-- 
+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="NOISE_MAP_SIZE" type="uint" const="1"/>
+				<input name="FB_SIZE" type="uvec2" const="1"/>
+				<input name="RADIUS" type="float" const="1"/>
+				<input name="BIAS" type="float" const="1"/>
+				<input name="STRENGTH" type="float" const="1"/>
+				<input name="HISTORY_FEEDBACK" type="float" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Common.glsl"
 #include "shaders/Pack.glsl"
 #include "shaders/Functions.glsl"
 
-const float BIAS = 0.3;
-const float STRENGTH = 3.0;
-const float HISTORY_FEEDBACK = 1.0 / 8.0;
-
 layout(location = 0) in vec2 in_uv;
 
 layout(location = 0) out float out_color;
@@ -42,7 +57,7 @@ vec3 readNormal(in vec2 uv)
 // Read the noise tex
 vec3 readRandom(in vec2 uv)
 {
-	const vec2 tmp = vec2(float(WIDTH) / float(NOISE_MAP_SIZE), float(HEIGHT) / float(NOISE_MAP_SIZE));
+	const vec2 tmp = vec2(float(FB_SIZE.x) / float(NOISE_MAP_SIZE), float(FB_SIZE.y) / float(NOISE_MAP_SIZE));
 	vec3 r = texture(u_noiseMap, vec3(tmp * uv, u_noiseLayer)).rgb;
 	return r;
 }
@@ -125,3 +140,8 @@ void main(void)
 	// Blend
 	out_color = mix(prevSsao, ssao, historyFeedback);
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>
+

+ 1 - 1
programs/TemporalAAResolve.ankiprog

@@ -91,4 +91,4 @@ void main()
 			]]></source>
 		</shader>
 	</shaders>
-</shaderProgram>	
+</shaderProgram>

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

@@ -52,18 +52,18 @@ Error SsaoMain::init(const ConfigSet& config)
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_noiseTex));
 
 	// Shader
-	ANKI_CHECK(m_r->createShaderf("shaders/Ssao.frag.glsl",
-		m_frag,
-		"#define NOISE_MAP_SIZE %u\n"
-		"#define WIDTH %u\n"
-		"#define HEIGHT %u\n"
-		"#define RADIUS float(%f)\n",
-		m_noiseTex->getWidth(),
-		m_ssao->m_width,
-		m_ssao->m_height,
-		HEMISPHERE_RADIUS));
-
-	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
+	ANKI_CHECK(getResourceManager().loadResource("programs/Ssao.ankiprog", m_prog));
+	
+	ShaderProgramResourceConstantValues<6> consts(m_prog);
+	consts.add("NOISE_MAP_SIZE", U32(m_noiseTex->getWidth()))
+		.add("FB_SIZE", UVec2(m_ssao->m_width, m_ssao->m_height))
+		.add("RADIUS", F32(HEMISPHERE_RADIUS))
+		.add("BIAS", F32(0.3))
+		.add("STRENGTH", F32(3.0))
+		.add("HISTORY_FEEDBACK", F32(1.0f / 8.0f));
+	const ShaderProgramResourceVariant* variant;
+	m_prog->getOrCreateVariant(consts.m_constantValues, variant);
+	m_grProg = variant->getProgram();
 
 	return ErrorCode::NONE;
 }
@@ -82,7 +82,7 @@ void SsaoMain::run(RenderingContext& ctx)
 
 	cmdb->beginRenderPass(m_fb[m_r->getFrameCount() & 1]);
 	cmdb->setViewport(0, 0, m_ssao->m_width, m_ssao->m_height);
-	cmdb->bindShaderProgram(m_prog);
+	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());

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

@@ -52,8 +52,8 @@ private:
 
 	Array<TexturePtr, 2> m_rt;
 	Array<FramebufferPtr, 2> m_fb;
-	ShaderResourcePtr m_frag;
-	ShaderProgramPtr m_prog;
+	ShaderProgramResourcePtr m_prog;
+	ShaderProgramPtr m_grProg;
 	TextureResourcePtr m_noiseTex;
 };