diff options
| author | Stenzek <stenzek@gmail.com> | 2019-04-20 23:44:33 +1000 |
|---|---|---|
| committer | Stenzek <stenzek@gmail.com> | 2019-04-20 23:44:33 +1000 |
| commit | eddde3e6c8d8ea37a724e66dbc82b432ae63df96 (patch) | |
| tree | a11582e26fbd5060c1d9ab2abbaecb2a7af1e451 /Source/Core/VideoCommon/TextureConverterShaderGen.cpp | |
| parent | 4b1adab7856cb2dd28418a1d748a0e8cebf94a2f (diff) | |
ShaderGen: Use interface blocks when geometry shaders are supported
We don't use explicit locations in OpenGL currently, so this breaks
when we use alternative names in the geometry shaders.
Diffstat (limited to 'Source/Core/VideoCommon/TextureConverterShaderGen.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/TextureConverterShaderGen.cpp | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/Source/Core/VideoCommon/TextureConverterShaderGen.cpp b/Source/Core/VideoCommon/TextureConverterShaderGen.cpp index 15de7ba9a7..df46254d91 100644 --- a/Source/Core/VideoCommon/TextureConverterShaderGen.cpp +++ b/Source/Core/VideoCommon/TextureConverterShaderGen.cpp @@ -67,8 +67,17 @@ ShaderCode GenerateVertexShader(APIType api_type) } else if (api_type == APIType::OpenGL || api_type == APIType::Vulkan) { - out.Write("VARYING_LOCATION(0) out float3 v_tex0;\n" - "#define id gl_VertexID\n" + if (g_ActiveConfig.backend_info.bSupportsGeometryShaders) + { + out.Write("VARYING_LOCATION(0) out VertexData {\n"); + out.Write(" float3 v_tex0;\n"); + out.Write("};\n"); + } + else + { + out.Write("VARYING_LOCATION(0) out float3 v_tex0;\n"); + } + out.Write("#define id gl_VertexID\n" "#define opos gl_Position\n" "void main() {\n"); } @@ -112,8 +121,17 @@ ShaderCode GeneratePixelShader(APIType api_type, const UidData* uid_data) "clamp_tb.x, clamp_tb.y), %s));\n" "}\n", mono_depth ? "0.0" : "uv.z"); - out.Write("VARYING_LOCATION(0) in vec3 v_tex0;\n" - "FRAGMENT_OUTPUT_LOCATION(0) out vec4 ocol0;" + if (g_ActiveConfig.backend_info.bSupportsGeometryShaders) + { + out.Write("VARYING_LOCATION(0) in VertexData {\n"); + out.Write(" float3 v_tex0;\n"); + out.Write("};\n"); + } + else + { + out.Write("VARYING_LOCATION(0) in vec3 v_tex0;\n"); + } + out.Write("FRAGMENT_OUTPUT_LOCATION(0) out vec4 ocol0;" "void main()\n{\n"); } |
