Browse Source

Fixed framebuffer RW example.

Branimir Karadžić 6 years ago
parent
commit
078ca46e6f
32 changed files with 48 additions and 45 deletions
  1. 4 4
      examples/21-deferred/common.sh
  2. 32 29
      examples/21-deferred/deferred.cpp
  3. 2 2
      examples/21-deferred/fs_deferred_clear_uav.sc
  4. 2 2
      examples/21-deferred/fs_deferred_light.sc
  5. 2 2
      examples/21-deferred/fs_deferred_light_ta.sc
  6. 6 6
      examples/21-deferred/fs_deferred_light_uav.sc
  7. BIN
      examples/runtime/shaders/dx11/fs_deferred_clear_uav.bin
  8. BIN
      examples/runtime/shaders/dx11/fs_deferred_combine.bin
  9. BIN
      examples/runtime/shaders/dx11/fs_deferred_debug.bin
  10. BIN
      examples/runtime/shaders/dx11/fs_deferred_debug_line.bin
  11. BIN
      examples/runtime/shaders/dx11/fs_deferred_geom.bin
  12. BIN
      examples/runtime/shaders/dx11/fs_deferred_light.bin
  13. BIN
      examples/runtime/shaders/dx11/fs_deferred_light_ta.bin
  14. BIN
      examples/runtime/shaders/dx11/fs_deferred_light_uav.bin
  15. BIN
      examples/runtime/shaders/dx11/vs_deferred_combine.bin
  16. BIN
      examples/runtime/shaders/dx11/vs_deferred_debug.bin
  17. BIN
      examples/runtime/shaders/dx11/vs_deferred_debug_line.bin
  18. BIN
      examples/runtime/shaders/dx11/vs_deferred_geom.bin
  19. BIN
      examples/runtime/shaders/dx11/vs_deferred_light.bin
  20. BIN
      examples/runtime/shaders/glsl/fs_deferred_clear_uav.bin
  21. BIN
      examples/runtime/shaders/glsl/fs_deferred_combine.bin
  22. BIN
      examples/runtime/shaders/glsl/fs_deferred_debug.bin
  23. BIN
      examples/runtime/shaders/glsl/fs_deferred_debug_line.bin
  24. BIN
      examples/runtime/shaders/glsl/fs_deferred_geom.bin
  25. BIN
      examples/runtime/shaders/glsl/fs_deferred_light.bin
  26. BIN
      examples/runtime/shaders/glsl/fs_deferred_light_ta.bin
  27. BIN
      examples/runtime/shaders/glsl/fs_deferred_light_uav.bin
  28. BIN
      examples/runtime/shaders/glsl/vs_deferred_combine.bin
  29. BIN
      examples/runtime/shaders/glsl/vs_deferred_debug.bin
  30. BIN
      examples/runtime/shaders/glsl/vs_deferred_debug_line.bin
  31. BIN
      examples/runtime/shaders/glsl/vs_deferred_geom.bin
  32. BIN
      examples/runtime/shaders/glsl/vs_deferred_light.bin

+ 4 - 4
examples/21-deferred/common.sh

@@ -47,11 +47,11 @@ vec3 calcLight(vec3 _wpos, vec3 _normal, vec3 _view, vec3 _lightPos, float _ligh
 
 
 float toClipSpaceDepth(float _depthTextureZ)
 float toClipSpaceDepth(float _depthTextureZ)
 {
 {
-#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
-	return _depthTextureZ;
-#else
+#if BGFX_SHADER_LANGUAGE_GLSL
 	return _depthTextureZ * 2.0 - 1.0;
 	return _depthTextureZ * 2.0 - 1.0;
-#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#else
+	return _depthTextureZ;
+#endif // BGFX_SHADER_LANGUAGE_GLSL
 }
 }
 
 
 vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos)
 vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos)

+ 32 - 29
examples/21-deferred/deferred.cpp

@@ -12,11 +12,11 @@
 namespace
 namespace
 {
 {
 
 
-#define RENDER_PASS_GEOMETRY_ID       0
-#define RENDER_PASS_LIGHT_ID          1
-#define RENDER_PASS_COMBINE_ID        2
-#define RENDER_PASS_DEBUG_LIGHTS_ID   3
-#define RENDER_PASS_DEBUG_GBUFFER_ID  4
+constexpr bgfx::ViewId kRenderPassGeometry     = 0;
+constexpr bgfx::ViewId kRenderPassLight        = 1;
+constexpr bgfx::ViewId kRenderPassCombine      = 2;
+constexpr bgfx::ViewId kRenderPassDebugLights  = 3;
+constexpr bgfx::ViewId kRenderPassDebugGBuffer = 4;
 
 
 static float s_texelHalf = 0.0f;
 static float s_texelHalf = 0.0f;
 
 
@@ -225,7 +225,7 @@ public:
 		bgfx::setPaletteColor(1, UINT32_C(0x303030ff) );
 		bgfx::setPaletteColor(1, UINT32_C(0x303030ff) );
 
 
 		// Set geometry pass view clear state.
 		// Set geometry pass view clear state.
-		bgfx::setViewClear(RENDER_PASS_GEOMETRY_ID
+		bgfx::setViewClear(kRenderPassGeometry
 				, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
 				, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
 				, 1.0f
 				, 1.0f
 				, 0
 				, 0
@@ -233,7 +233,7 @@ public:
 				);
 				);
 
 
 		// Set light pass view clear state.
 		// Set light pass view clear state.
-		bgfx::setViewClear(RENDER_PASS_LIGHT_ID
+		bgfx::setViewClear(kRenderPassLight
 				, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
 				, BGFX_CLEAR_COLOR|BGFX_CLEAR_DEPTH
 				, 1.0f
 				, 1.0f
 				, 0
 				, 0
@@ -561,19 +561,19 @@ public:
 				float vp[16];
 				float vp[16];
 				float invMvp[16];
 				float invMvp[16];
 				{
 				{
-					bgfx::setViewRect(RENDER_PASS_GEOMETRY_ID,      0, 0, uint16_t(m_width), uint16_t(m_height) );
-					bgfx::setViewRect(RENDER_PASS_LIGHT_ID,         0, 0, uint16_t(m_width), uint16_t(m_height) );
-					bgfx::setViewRect(RENDER_PASS_COMBINE_ID,       0, 0, uint16_t(m_width), uint16_t(m_height) );
-					bgfx::setViewRect(RENDER_PASS_DEBUG_LIGHTS_ID,  0, 0, uint16_t(m_width), uint16_t(m_height) );
-					bgfx::setViewRect(RENDER_PASS_DEBUG_GBUFFER_ID, 0, 0, uint16_t(m_width), uint16_t(m_height) );
+					bgfx::setViewRect(kRenderPassGeometry,      0, 0, uint16_t(m_width), uint16_t(m_height) );
+					bgfx::setViewRect(kRenderPassLight,         0, 0, uint16_t(m_width), uint16_t(m_height) );
+					bgfx::setViewRect(kRenderPassCombine,       0, 0, uint16_t(m_width), uint16_t(m_height) );
+					bgfx::setViewRect(kRenderPassDebugLights,  0, 0, uint16_t(m_width), uint16_t(m_height) );
+					bgfx::setViewRect(kRenderPassDebugGBuffer, 0, 0, uint16_t(m_width), uint16_t(m_height) );
 
 
-					bgfx::setViewFrameBuffer(RENDER_PASS_LIGHT_ID, m_lightBuffer);
+					bgfx::setViewFrameBuffer(kRenderPassLight, m_lightBuffer);
 
 
 					float proj[16];
 					float proj[16];
 					bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, m_caps->homogeneousDepth);
 					bx::mtxProj(proj, 60.0f, float(m_width)/float(m_height), 0.1f, 100.0f, m_caps->homogeneousDepth);
 
 
-					bgfx::setViewFrameBuffer(RENDER_PASS_GEOMETRY_ID, m_gbuffer);
-					bgfx::setViewTransform(RENDER_PASS_GEOMETRY_ID, view, proj);
+					bgfx::setViewFrameBuffer(kRenderPassGeometry, m_gbuffer);
+					bgfx::setViewTransform(kRenderPassGeometry, view, proj);
 
 
 					bx::mtxMul(vp, view, proj);
 					bx::mtxMul(vp, view, proj);
 					bx::mtxInverse(invMvp, vp);
 					bx::mtxInverse(invMvp, vp);
@@ -581,16 +581,16 @@ public:
 					const bgfx::Caps* caps = bgfx::getCaps();
 					const bgfx::Caps* caps = bgfx::getCaps();
 
 
 					bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
 					bx::mtxOrtho(proj, 0.0f, 1.0f, 1.0f, 0.0f, 0.0f, 100.0f, 0.0f, caps->homogeneousDepth);
-					bgfx::setViewTransform(RENDER_PASS_LIGHT_ID,   NULL, proj);
-					bgfx::setViewTransform(RENDER_PASS_COMBINE_ID, NULL, proj);
+					bgfx::setViewTransform(kRenderPassLight,   NULL, proj);
+					bgfx::setViewTransform(kRenderPassCombine, NULL, proj);
 
 
 					const float aspectRatio = float(m_height)/float(m_width);
 					const float aspectRatio = float(m_height)/float(m_width);
 					const float size = 10.0f;
 					const float size = 10.0f;
 					bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
 					bx::mtxOrtho(proj, -size, size, size*aspectRatio, -size*aspectRatio, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
-					bgfx::setViewTransform(RENDER_PASS_DEBUG_GBUFFER_ID, NULL, proj);
+					bgfx::setViewTransform(kRenderPassDebugGBuffer, NULL, proj);
 
 
 					bx::mtxOrtho(proj, 0.0f, (float)m_width, 0.0f, (float)m_height, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
 					bx::mtxOrtho(proj, 0.0f, (float)m_width, 0.0f, (float)m_height, 0.0f, 1000.0f, 0.0f, caps->homogeneousDepth);
-					bgfx::setViewTransform(RENDER_PASS_DEBUG_LIGHTS_ID, NULL, proj);
+					bgfx::setViewTransform(kRenderPassDebugLights, NULL, proj);
 				}
 				}
 
 
 				const uint32_t dim = 11;
 				const uint32_t dim = 11;
@@ -635,7 +635,7 @@ public:
 							);
 							);
 
 
 						// Submit primitive for rendering to view 0.
 						// Submit primitive for rendering to view 0.
-						bgfx::submit(RENDER_PASS_GEOMETRY_ID, m_geomProgram);
+						bgfx::submit(kRenderPassGeometry, m_geomProgram);
 					}
 					}
 				}
 				}
 
 
@@ -647,7 +647,7 @@ public:
 						| BGFX_STATE_WRITE_RGB
 						| BGFX_STATE_WRITE_RGB
 						| BGFX_STATE_WRITE_A
 						| BGFX_STATE_WRITE_A
 						);
 						);
-					bgfx::submit(RENDER_PASS_LIGHT_ID, m_clearUavProgram);
+					bgfx::submit(kRenderPassLight, m_clearUavProgram);
 				}
 				}
 
 
 				// Draw lights into light buffer.
 				// Draw lights into light buffer.
@@ -744,7 +744,7 @@ public:
 									| BGFX_STATE_PT_LINES
 									| BGFX_STATE_PT_LINES
 									| BGFX_STATE_BLEND_ALPHA
 									| BGFX_STATE_BLEND_ALPHA
 									);
 									);
-								bgfx::submit(RENDER_PASS_DEBUG_LIGHTS_ID, m_lineProgram);
+								bgfx::submit(kRenderPassDebugLights, m_lineProgram);
 							}
 							}
 						}
 						}
 
 
@@ -771,17 +771,20 @@ public:
 							| BGFX_STATE_BLEND_ADD
 							| BGFX_STATE_BLEND_ADD
 							);
 							);
 						screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft);
 						screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft);
-						if (bgfx::isValid(m_lightTaProgram) && m_useTArray)
+
+						if (bgfx::isValid(m_lightTaProgram)
+						&&  m_useTArray)
 						{
 						{
-							bgfx::submit(RENDER_PASS_LIGHT_ID, m_lightTaProgram);
+							bgfx::submit(kRenderPassLight, m_lightTaProgram);
 						}
 						}
-						else if (bgfx::isValid(m_lightUavProgram) && m_useUav)
+						else if (bgfx::isValid(m_lightUavProgram)
+							 &&  m_useUav)
 						{
 						{
-							bgfx::submit(RENDER_PASS_LIGHT_ID, m_lightUavProgram);
+							bgfx::submit(kRenderPassLight, m_lightUavProgram);
 						}
 						}
 						else
 						else
 						{
 						{
-							bgfx::submit(RENDER_PASS_LIGHT_ID, m_lightProgram);
+							bgfx::submit(kRenderPassLight, m_lightProgram);
 						}
 						}
 					}
 					}
 				}
 				}
@@ -794,7 +797,7 @@ public:
 					| BGFX_STATE_WRITE_A
 					| BGFX_STATE_WRITE_A
 					);
 					);
 				screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft);
 				screenSpaceQuad( (float)m_width, (float)m_height, s_texelHalf, m_caps->originBottomLeft);
-				bgfx::submit(RENDER_PASS_COMBINE_ID, m_combineProgram);
+				bgfx::submit(kRenderPassCombine, m_combineProgram);
 
 
 				if (m_showGBuffer)
 				if (m_showGBuffer)
 				{
 				{
@@ -815,7 +818,7 @@ public:
 						bgfx::setIndexBuffer(m_ibh, 0, 6);
 						bgfx::setIndexBuffer(m_ibh, 0, 6);
 						bgfx::setTexture(0, s_texColor, m_gbufferTex[ii]);
 						bgfx::setTexture(0, s_texColor, m_gbufferTex[ii]);
 						bgfx::setState(BGFX_STATE_WRITE_RGB);
 						bgfx::setState(BGFX_STATE_WRITE_RGB);
-						bgfx::submit(RENDER_PASS_DEBUG_GBUFFER_ID, m_debugProgram);
+						bgfx::submit(kRenderPassDebugGBuffer, m_debugProgram);
 					}
 					}
 				}
 				}
 			}
 			}

+ 2 - 2
examples/21-deferred/fs_deferred_clear_uav.sc

@@ -8,10 +8,10 @@ $input v_texcoord0
 #include "common.sh"
 #include "common.sh"
 #include <bgfx_compute.sh>
 #include <bgfx_compute.sh>
 
 
-IMAGE2D_RW(s_lights, rgba8, 1);
+FRAMEBUFFER_IMAGE2D_RW(s_light, rgba8, 0);
 
 
 void main()
 void main()
 {
 {
     ivec2 coord = ivec2(gl_FragCoord.xy);
     ivec2 coord = ivec2(gl_FragCoord.xy);
-    imageStore(s_lights, coord, vec4(0.0, 0.0, 0.0, 0.0));
+    imageStore(s_light, coord, vec4(0.0, 0.0, 0.0, 0.0));
 }
 }

+ 2 - 2
examples/21-deferred/fs_deferred_light.sc

@@ -21,9 +21,9 @@ void main()
 	float depth       = toClipSpaceDepth(deviceDepth);
 	float depth       = toClipSpaceDepth(deviceDepth);
 
 
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
-#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#if !BGFX_SHADER_LANGUAGE_GLSL
 	clip.y = -clip.y;
 	clip.y = -clip.y;
-#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#endif // !BGFX_SHADER_LANGUAGE_GLSL
 	vec3 wpos = clipToWorld(u_mtx, clip);
 	vec3 wpos = clipToWorld(u_mtx, clip);
 
 
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;

+ 2 - 2
examples/21-deferred/fs_deferred_light_ta.sc

@@ -21,9 +21,9 @@ void main()
 	float depth       = toClipSpaceDepth(deviceDepth);
 	float depth       = toClipSpaceDepth(deviceDepth);
 
 
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
-#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#if !BGFX_SHADER_LANGUAGE_GLSL
 	clip.y = -clip.y;
 	clip.y = -clip.y;
-#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#endif // !BGFX_SHADER_LANGUAGE_GLSL
 	vec3 wpos = clipToWorld(u_mtx, clip);
 	vec3 wpos = clipToWorld(u_mtx, clip);
 
 
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;

+ 6 - 6
examples/21-deferred/fs_deferred_light_uav.sc

@@ -11,7 +11,7 @@ $input v_texcoord0
 SAMPLER2D(s_normal, 0);
 SAMPLER2D(s_normal, 0);
 SAMPLER2D(s_depth,  1);
 SAMPLER2D(s_depth,  1);
 
 
-IMAGE2D_RW(s_lights, rgba8, 1);
+FRAMEBUFFER_IMAGE2D_RW(s_light, rgba8, 0);
 
 
 uniform vec4 u_lightPosRadius[1];
 uniform vec4 u_lightPosRadius[1];
 uniform vec4 u_lightRgbInnerR[1];
 uniform vec4 u_lightRgbInnerR[1];
@@ -24,17 +24,17 @@ void main()
 	float depth       = toClipSpaceDepth(deviceDepth);
 	float depth       = toClipSpaceDepth(deviceDepth);
 
 
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
 	vec3 clip = vec3(v_texcoord0 * 2.0 - 1.0, depth);
-#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#if !BGFX_SHADER_LANGUAGE_GLSL
 	clip.y = -clip.y;
 	clip.y = -clip.y;
-#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
+#endif // !BGFX_SHADER_LANGUAGE_GLSL
 	vec3 wpos = clipToWorld(u_mtx, clip);
 	vec3 wpos = clipToWorld(u_mtx, clip);
 
 
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;
 	vec3 view = mul(u_view, vec4(wpos, 0.0) ).xyz;
 	view = -normalize(view);
 	view = -normalize(view);
 
 
     ivec2 coord = ivec2(gl_FragCoord.xy);
     ivec2 coord = ivec2(gl_FragCoord.xy);
-    
+
 	vec3 lightColor = calcLight(wpos, normal, view, u_lightPosRadius[0].xyz, u_lightPosRadius[0].w, u_lightRgbInnerR[0].xyz, u_lightRgbInnerR[0].w);
 	vec3 lightColor = calcLight(wpos, normal, view, u_lightPosRadius[0].xyz, u_lightPosRadius[0].w, u_lightRgbInnerR[0].xyz, u_lightRgbInnerR[0].w);
-    vec4 color = imageLoad(s_lights, coord);
-    imageStore(s_lights, coord, color + vec4(toGamma(lightColor.xyz), 1.0));
+    vec4 color = imageLoad(s_light, coord);
+    imageStore(s_light, coord, color + vec4(toGamma(lightColor.xyz), 1.0));
 }
 }

BIN
examples/runtime/shaders/dx11/fs_deferred_clear_uav.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_combine.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_debug.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_debug_line.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_geom.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_light.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_light_ta.bin


BIN
examples/runtime/shaders/dx11/fs_deferred_light_uav.bin


BIN
examples/runtime/shaders/dx11/vs_deferred_combine.bin


BIN
examples/runtime/shaders/dx11/vs_deferred_debug.bin


BIN
examples/runtime/shaders/dx11/vs_deferred_debug_line.bin


BIN
examples/runtime/shaders/dx11/vs_deferred_geom.bin


BIN
examples/runtime/shaders/dx11/vs_deferred_light.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_clear_uav.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_combine.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_debug.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_debug_line.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_geom.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_light.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_light_ta.bin


BIN
examples/runtime/shaders/glsl/fs_deferred_light_uav.bin


BIN
examples/runtime/shaders/glsl/vs_deferred_combine.bin


BIN
examples/runtime/shaders/glsl/vs_deferred_debug.bin


BIN
examples/runtime/shaders/glsl/vs_deferred_debug_line.bin


BIN
examples/runtime/shaders/glsl/vs_deferred_geom.bin


BIN
examples/runtime/shaders/glsl/vs_deferred_light.bin