Browse Source

Merge pull request #61850 from JFonS/fixx_taa_macos

Rémi Verschelde 3 years ago
parent
commit
b36447f6f0
1 changed files with 14 additions and 13 deletions
  1. 14 13
      servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl

+ 14 - 13
servers/rendering/renderer_rd/shaders/scene_forward_clustered.glsl

@@ -384,14 +384,13 @@ void main() {
 
 	instance_index_interp = instance_index;
 
-	SceneData scene_data = scene_data_block.data;
 	mat4 model_matrix = instances.data[instance_index].transform;
 #if defined(MOTION_VECTORS)
 	vertex_shader(instance_index, is_multimesh, scene_data_block.prev_data, instances.data[instance_index].prev_transform, prev_screen_position);
-	vertex_shader(instance_index, is_multimesh, scene_data, model_matrix, screen_position);
+	vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position);
 #else
 	vec4 screen_position;
-	vertex_shader(instance_index, is_multimesh, scene_data, model_matrix, screen_position);
+	vertex_shader(instance_index, is_multimesh, scene_data_block.data, model_matrix, screen_position);
 #endif
 }
 
@@ -630,15 +629,7 @@ uint cluster_get_range_clip_mask(uint i, uint z_min, uint z_max) {
 
 #endif //!MODE_RENDER DEPTH
 
-void main() {
-#ifdef MODE_DUAL_PARABOLOID
-
-	if (dp_clip > 0.0)
-		discard;
-#endif
-
-	SceneData scene_data = scene_data_block.data;
-	SceneData prev_scene_data = scene_data_block.prev_data;
+void fragment_shader(in SceneData scene_data) {
 	uint instance_index = instance_index_interp;
 
 	//lay out everything, whatever is unused is optimized away anyway
@@ -2048,7 +2039,7 @@ void main() {
 #endif //MODE_RENDER_DEPTH
 #ifdef MOTION_VECTORS
 	vec2 position_clip = (screen_position.xy / screen_position.w) - scene_data.taa_jitter;
-	vec2 prev_position_clip = (prev_screen_position.xy / prev_screen_position.w) - prev_scene_data.taa_jitter;
+	vec2 prev_position_clip = (prev_screen_position.xy / prev_screen_position.w) - scene_data_block.prev_data.taa_jitter;
 
 	vec2 position_uv = position_clip * vec2(0.5, 0.5);
 	vec2 prev_position_uv = prev_position_clip * vec2(0.5, 0.5);
@@ -2056,3 +2047,13 @@ void main() {
 	motion_vector = position_uv - prev_position_uv;
 #endif
 }
+
+void main() {
+#ifdef MODE_DUAL_PARABOLOID
+
+	if (dp_clip > 0.0)
+		discard;
+#endif
+
+	fragment_shader(scene_data_block.data);
+}