From eddde3e6c8d8ea37a724e66dbc82b432ae63df96 Mon Sep 17 00:00:00 2001 From: Stenzek Date: Sat, 20 Apr 2019 23:44:33 +1000 Subject: 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. --- .../Core/VideoCommon/TextureConversionShader.cpp | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) (limited to 'Source/Core/VideoCommon/TextureConversionShader.cpp') diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp index 29c7cccc1b..69a42e26d5 100644 --- a/Source/Core/VideoCommon/TextureConversionShader.cpp +++ b/Source/Core/VideoCommon/TextureConversionShader.cpp @@ -72,7 +72,16 @@ static void WriteHeader(char*& p, APIType ApiType) WRITE(p, " float2 clamp_tb;\n"); WRITE(p, " float3 filter_coefficients;\n"); WRITE(p, "};\n"); - WRITE(p, "VARYING_LOCATION(0) in float3 v_tex0;\n"); + if (g_ActiveConfig.backend_info.bSupportsGeometryShaders) + { + WRITE(p, "VARYING_LOCATION(0) in VertexData {\n"); + WRITE(p, " float3 v_tex0;\n"); + WRITE(p, "};\n"); + } + else + { + WRITE(p, "VARYING_LOCATION(0) in float3 v_tex0;\n"); + } WRITE(p, "SAMPLER_BINDING(0) uniform sampler2DArray samp0;\n"); WRITE(p, "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\n"); } @@ -1510,7 +1519,16 @@ float4 DecodePixel(int val) } else { - ss << "VARYING_LOCATION(0) in float3 v_tex0;\n"; + if (g_ActiveConfig.backend_info.bSupportsGeometryShaders) + { + ss << "VARYING_LOCATION(0) in VertexData {\n"; + ss << " float3 v_tex0;\n"; + ss << "};\n"; + } + else + { + ss << "VARYING_LOCATION(0) in float3 v_tex0;\n"; + } ss << "FRAGMENT_OUTPUT_LOCATION(0) out float4 ocol0;\n"; ss << "void main() {\n"; ss << " float3 coords = v_tex0;\n"; -- cgit v1.2.3