summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/GeometryShaderGen.cpp
diff options
context:
space:
mode:
authorRyan Houdek <Sonicadvance1@gmail.com>2016-03-07 18:05:52 -0600
committerRyan Houdek <Sonicadvance1@gmail.com>2016-03-09 09:11:00 -0600
commit3ab7806e242d631f2fb034a23f354764ef6b9ee9 (patch)
tree84cc4e7fe076c067e8b2e767ac9a6ebc739e4833 /Source/Core/VideoCommon/GeometryShaderGen.cpp
parent370e91d4c028c7dbfe44d7416daddb0f85c76ff5 (diff)
Workaround OS X video driver bug #24983074
OS X's shader compiler has a bug with interface blocks where interface block members don't properly inherit the layout qualifier from the interface block. Work around this limitation by explicitly stating the layout qualifier on both the interface block and every single member inside of that block.
Diffstat (limited to 'Source/Core/VideoCommon/GeometryShaderGen.cpp')
-rw-r--r--Source/Core/VideoCommon/GeometryShaderGen.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/Source/Core/VideoCommon/GeometryShaderGen.cpp b/Source/Core/VideoCommon/GeometryShaderGen.cpp
index 057e697ed8..de76557d5e 100644
--- a/Source/Core/VideoCommon/GeometryShaderGen.cpp
+++ b/Source/Core/VideoCommon/GeometryShaderGen.cpp
@@ -82,7 +82,7 @@ static T GenerateGeometryShader(u32 primitive_type, API_TYPE ApiType)
uid_data->pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
out.Write("struct VS_OUTPUT {\n");
- GenerateVSOutputMembers<T>(out, ApiType);
+ GenerateVSOutputMembers<T>(out, ApiType, "");
out.Write("};\n");
if (ApiType == API_OPENGL)
@@ -90,15 +90,16 @@ static T GenerateGeometryShader(u32 primitive_type, API_TYPE ApiType)
if (g_ActiveConfig.backend_info.bSupportsGSInstancing)
out.Write("#define InstanceID gl_InvocationID\n");
+ out.Write("// The interface block qualifier is duplicated to its member due to Apple OS X bug 24983074\n");
out.Write("in VertexData {\n");
- GenerateVSOutputMembers<T>(out, ApiType, GetInterpolationQualifier(ApiType, true, true));
+ GenerateVSOutputMembers<T>(out, ApiType, "in", GetInterpolationQualifier());
out.Write("} vs[%d];\n", vertex_in);
out.Write("out VertexData {\n");
- GenerateVSOutputMembers<T>(out, ApiType, GetInterpolationQualifier(ApiType, false, true));
+ GenerateVSOutputMembers<T>(out, ApiType, "out", GetInterpolationQualifier());
if (g_ActiveConfig.iStereoMode > 0)
- out.Write("\tflat int layer;\n");
+ out.Write("\tflat out int layer;\n");
out.Write("} ps;\n");