summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
diff options
context:
space:
mode:
authorStenzek <stenzek@gmail.com>2016-08-13 00:40:18 +1000
committerStenzek <stenzek@gmail.com>2016-10-01 01:09:11 +1000
commitd9c034e8ccaad6db870df765e01d5963af84c9c5 (patch)
tree275437c1e1377e691087655f5f306f154c109154 /Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
parentf3cdc6433cba253fa4485cd7e27025c31410ed0c (diff)
ShaderGen: Specify attribute/output locations/bindings explicitly
This also shifts the SSBO index from index 3 to index 0.
Diffstat (limited to 'Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index ca622f7eb0..599f783cef 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -554,7 +554,8 @@ void ProgramShaderCache::CreateHeader()
"%s\n" // early-z
"%s\n" // 420pack
"%s\n" // msaa
- "%s\n" // Sampler binding
+ "%s\n" // Input/output/sampler binding
+ "%s\n" // Varying location
"%s\n" // storage buffer
"%s\n" // shader5
"%s\n" // SSAA
@@ -595,9 +596,23 @@ void ProgramShaderCache::CreateHeader()
(g_ogl_config.bSupportsMSAA && v < GLSL_150) ?
"#extension GL_ARB_texture_multisample : enable" :
"",
+ // Attribute and fragment output bindings are still done via glBindAttribLocation and
+ // glBindFragDataLocation. In the future this could be moved to the layout qualifier
+ // in GLSL, but requires verification of GL_ARB_explicit_attrib_location.
g_ActiveConfig.backend_info.bSupportsBindingLayout ?
- "#define SAMPLER_BINDING(x) layout(binding = x)" :
- "#define SAMPLER_BINDING(x)",
+ "#define ATTRIBUTE_LOCATION(x)\n"
+ "#define FRAGMENT_OUTPUT_LOCATION(x)\n"
+ "#define FRAGMENT_OUTPUT_LOCATION_INDEXED(x, y)\n"
+ "#define UBO_BINDING(packing, x) layout(packing, binding = x)\n"
+ "#define SAMPLER_BINDING(x) layout(binding = x)\n"
+ "#define SSBO_BINDING(x) layout(binding = x)\n" :
+ "#define ATTRIBUTE_LOCATION(x)\n"
+ "#define FRAGMENT_OUTPUT_LOCATION(x)\n"
+ "#define FRAGMENT_OUTPUT_LOCATION_INDEXED(x, y)\n"
+ "#define UBO_BINDING(packing, x) layout(packing)\n"
+ "#define SAMPLER_BINDING(x)\n",
+ // Input/output blocks are matched by name during program linking
+ "#define VARYING_LOCATION(x)\n",
!is_glsles && g_ActiveConfig.backend_info.bSupportsBBox ?
"#extension GL_ARB_shader_storage_buffer_object : enable" :
"",