mirror of
				https://git.suyu.dev/suyu/suyu
				synced 2025-11-04 00:49:02 -06:00 
			
		
		
		
	gl_shader_decompiler: Fix geometry shader outputs for Intel drivers
On Intel's proprietary drivers, gl_Layer and gl_ViewportIndex are not allowed members of gl_PerVertex block, causing the shader to fail to compile. Fix this by declaring these variables outside of gl_PerVertex.
This commit is contained in:
		@@ -618,19 +618,6 @@ private:
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        if (stage != ShaderType::Vertex || device.HasVertexViewportLayer()) {
 | 
			
		||||
            if (ir.UsesLayer()) {
 | 
			
		||||
                code.AddLine("int gl_Layer;");
 | 
			
		||||
            }
 | 
			
		||||
            if (ir.UsesViewportIndex()) {
 | 
			
		||||
                code.AddLine("int gl_ViewportIndex;");
 | 
			
		||||
            }
 | 
			
		||||
        } else if ((ir.UsesLayer() || ir.UsesViewportIndex()) && stage == ShaderType::Vertex &&
 | 
			
		||||
                   !device.HasVertexViewportLayer()) {
 | 
			
		||||
            LOG_ERROR(
 | 
			
		||||
                Render_OpenGL,
 | 
			
		||||
                "GL_ARB_shader_viewport_layer_array is not available and its required by a shader");
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (ir.UsesPointSize()) {
 | 
			
		||||
            code.AddLine("float gl_PointSize;");
 | 
			
		||||
@@ -647,6 +634,21 @@ private:
 | 
			
		||||
        --code.scope;
 | 
			
		||||
        code.AddLine("}};");
 | 
			
		||||
        code.AddNewLine();
 | 
			
		||||
 | 
			
		||||
        if (stage != ShaderType::Vertex || device.HasVertexViewportLayer()) {
 | 
			
		||||
            if (ir.UsesLayer()) {
 | 
			
		||||
                code.AddLine("out int gl_Layer;");
 | 
			
		||||
            }
 | 
			
		||||
            if (ir.UsesViewportIndex()) {
 | 
			
		||||
                code.AddLine("out int gl_ViewportIndex;");
 | 
			
		||||
            }
 | 
			
		||||
        } else if ((ir.UsesLayer() || ir.UsesViewportIndex()) && stage == ShaderType::Vertex &&
 | 
			
		||||
                   !device.HasVertexViewportLayer()) {
 | 
			
		||||
            LOG_ERROR(
 | 
			
		||||
                Render_OpenGL,
 | 
			
		||||
                "GL_ARB_shader_viewport_layer_array is not available and its required by a shader");
 | 
			
		||||
        }
 | 
			
		||||
        code.AddNewLine();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    void DeclareRegisters() {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user