Browse Source

Metal: Read gl_ViewIndex for multi-view subpasses

This is necessary to ensure the SpvCapabilityMultiView is included in
the SPIR-V, informing downstream transpilers, like Metal, that it should
enable multi-view capabilities in the generated Metal shader source.
Stuart Carnie 2 weeks ago
parent
commit
90c9134875
1 changed files with 5 additions and 0 deletions
  1. 5 0
      servers/rendering/renderer_rd/shaders/effects/tonemap.glsl

+ 5 - 0
servers/rendering/renderer_rd/shaders/effects/tonemap.glsl

@@ -834,6 +834,11 @@ vec3 screen_space_dither(vec2 frag_coord, float bit_alignment_diviser) {
 void main() {
 #ifdef SUBPASS
 	// SUBPASS and USE_MULTIVIEW can be combined but in that case we're already reading from the correct layer
+#ifdef USE_MULTIVIEW
+	// In order to ensure the `SpvCapabilityMultiView` is included in the SPIR-V capabilities, gl_ViewIndex must
+	// be read in the shader. Without this, transpilation to Metal fails to include the multi-view variant.
+	uint vi = ViewIndex;
+#endif
 	vec4 color = subpassLoad(input_color);
 #elif defined(USE_MULTIVIEW)
 	vec4 color = textureLod(source_color, vec3(uv_interp, ViewIndex), 0.0f);