diff --git a/source/blender/gpu/opengl/gl_shader.cc b/source/blender/gpu/opengl/gl_shader.cc index baf2104003a..73b3a68ea3e 100644 --- a/source/blender/gpu/opengl/gl_shader.cc +++ b/source/blender/gpu/opengl/gl_shader.cc @@ -957,12 +957,6 @@ std::string GLShader::workaround_geometry_shader_source_create( ss << "void main()\n"; ss << "{\n"; - if (do_layer_workaround) { - ss << " gl_Layer = gpu_Layer[0];\n"; - } - if (do_viewport_workaround) { - ss << " gl_ViewportIndex = gpu_ViewportIndex[0];\n"; - } if (do_barycentric_workaround) { ss << " gpu_pos[0] = gl_in[0].gl_Position;\n"; ss << " gpu_pos[1] = gl_in[1].gl_Position;\n"; @@ -980,6 +974,12 @@ std::string GLShader::workaround_geometry_shader_source_create( ss << " vec3(" << int(i == 0) << ", " << int(i == 1) << ", " << int(i == 2) << ");\n"; } ss << " gl_Position = gl_in[" << i << "].gl_Position;\n"; + if (do_layer_workaround) { + ss << " gl_Layer = gpu_Layer[" << i << "];\n"; + } + if (do_viewport_workaround) { + ss << " gl_ViewportIndex = gpu_ViewportIndex[" << i << "];\n"; + } ss << " EmitVertex();\n"; } ss << "}\n"; diff --git a/source/blender/gpu/vulkan/vk_shader.cc b/source/blender/gpu/vulkan/vk_shader.cc index abecee872f7..aff98388dce 100644 --- a/source/blender/gpu/vulkan/vk_shader.cc +++ b/source/blender/gpu/vulkan/vk_shader.cc @@ -1168,12 +1168,6 @@ std::string VKShader::workaround_geometry_shader_source_create( ss << "void main()\n"; ss << "{\n"; - if (do_layer_workaround) { - ss << " gl_Layer = gpu_Layer[0];\n"; - } - if (do_viewport_workaround) { - ss << " gl_ViewportIndex = gpu_ViewportIndex[0];\n"; - } for (auto i : IndexRange(3)) { for (StageInterfaceInfo *iface : info_modified.vertex_out_interfaces_) { for (auto &inout : iface->inouts) { @@ -1186,6 +1180,12 @@ std::string VKShader::workaround_geometry_shader_source_create( ss << " vec3(" << int(i == 0) << ", " << int(i == 1) << ", " << int(i == 2) << ");\n"; } ss << " gl_Position = gl_in[" << i << "].gl_Position;\n"; + if (do_layer_workaround) { + ss << " gl_Layer = gpu_Layer[" << i << "];\n"; + } + if (do_viewport_workaround) { + ss << " gl_ViewportIndex = gpu_ViewportIndex[" << i << "];\n"; + } ss << " gpu_EmitVertex();\n"; } ss << "}\n";