diff options
| author | 2020-06-01 15:35:44 -0400 | |
|---|---|---|
| committer | 2020-06-01 15:35:44 -0400 | |
| commit | 74f2e5f1a460e8f429cc41032bd680548d3b1f46 (patch) | |
| tree | 54ea1e72aa49f22e85de18b21b56b95ff4559634 /src | |
| parent | gl_shader_decompiler: Fix geometry shader outputs for Intel drivers (diff) | |
| download | yuzu-74f2e5f1a460e8f429cc41032bd680548d3b1f46.tar.gz yuzu-74f2e5f1a460e8f429cc41032bd680548d3b1f46.tar.xz yuzu-74f2e5f1a460e8f429cc41032bd680548d3b1f46.zip | |
gl_shader_decompiler: Declare gl_Layer and gl_ViewportIndex within gl_PerVertex for vertex and tessellation shaders
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp index f5a592490..2c818f406 100644 --- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp +++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp | |||
| @@ -619,6 +619,21 @@ private: | |||
| 619 | } | 619 | } |
| 620 | } | 620 | } |
| 621 | 621 | ||
| 622 | if (stage != ShaderType::Geometry && | ||
| 623 | (stage != ShaderType::Vertex || device.HasVertexViewportLayer())) { | ||
| 624 | if (ir.UsesLayer()) { | ||
| 625 | code.AddLine("int gl_Layer;"); | ||
| 626 | } | ||
| 627 | if (ir.UsesViewportIndex()) { | ||
| 628 | code.AddLine("int gl_ViewportIndex;"); | ||
| 629 | } | ||
| 630 | } else if ((ir.UsesLayer() || ir.UsesViewportIndex()) && stage == ShaderType::Vertex && | ||
| 631 | !device.HasVertexViewportLayer()) { | ||
| 632 | LOG_ERROR( | ||
| 633 | Render_OpenGL, | ||
| 634 | "GL_ARB_shader_viewport_layer_array is not available and its required by a shader"); | ||
| 635 | } | ||
| 636 | |||
| 622 | if (ir.UsesPointSize()) { | 637 | if (ir.UsesPointSize()) { |
| 623 | code.AddLine("float gl_PointSize;"); | 638 | code.AddLine("float gl_PointSize;"); |
| 624 | } | 639 | } |
| @@ -635,18 +650,13 @@ private: | |||
| 635 | code.AddLine("}};"); | 650 | code.AddLine("}};"); |
| 636 | code.AddNewLine(); | 651 | code.AddNewLine(); |
| 637 | 652 | ||
| 638 | if (stage != ShaderType::Vertex || device.HasVertexViewportLayer()) { | 653 | if (stage == ShaderType::Geometry) { |
| 639 | if (ir.UsesLayer()) { | 654 | if (ir.UsesLayer()) { |
| 640 | code.AddLine("out int gl_Layer;"); | 655 | code.AddLine("out int gl_Layer;"); |
| 641 | } | 656 | } |
| 642 | if (ir.UsesViewportIndex()) { | 657 | if (ir.UsesViewportIndex()) { |
| 643 | code.AddLine("out int gl_ViewportIndex;"); | 658 | code.AddLine("out int gl_ViewportIndex;"); |
| 644 | } | 659 | } |
| 645 | } else if ((ir.UsesLayer() || ir.UsesViewportIndex()) && stage == ShaderType::Vertex && | ||
| 646 | !device.HasVertexViewportLayer()) { | ||
| 647 | LOG_ERROR( | ||
| 648 | Render_OpenGL, | ||
| 649 | "GL_ARB_shader_viewport_layer_array is not available and its required by a shader"); | ||
| 650 | } | 660 | } |
| 651 | code.AddNewLine(); | 661 | code.AddNewLine(); |
| 652 | } | 662 | } |