diff --git a/Data/Sys/Shaders/16bit.glsl b/Data/Sys/Shaders/16bit.glsl
index f7d8170ebe8..edff1d5e3ce 100644
--- a/Data/Sys/Shaders/16bit.glsl
+++ b/Data/Sys/Shaders/16bit.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/32bit.glsl b/Data/Sys/Shaders/32bit.glsl
index 1a9594f19c1..ed8fb890c58 100644
--- a/Data/Sys/Shaders/32bit.glsl
+++ b/Data/Sys/Shaders/32bit.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/FXAA.glsl b/Data/Sys/Shaders/FXAA.glsl
index afcbe5e47d3..60d072cdaaf 100644
--- a/Data/Sys/Shaders/FXAA.glsl
+++ b/Data/Sys/Shaders/FXAA.glsl
@@ -12,7 +12,7 @@
// 0. You just DO WHAT THE FUCK YOU WANT TO.
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/README.txt b/Data/Sys/Shaders/README.txt
index 6913f9d0996..acb7d226153 100644
--- a/Data/Sys/Shaders/README.txt
+++ b/Data/Sys/Shaders/README.txt
@@ -1,5 +1,5 @@
//dummy shader:
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
@@ -15,4 +15,4 @@ For best results, turn Wordwrap formatting on...
The shaders shown in the dropdown box in the video plugin configuration window are kept in the directory named User/Data/Shaders. They are linked in to the dolphin source from the repository at . See for more details on the way shaders work.
This file will hopefully hold more content in future...
-*/
\ No newline at end of file
+*/
diff --git a/Data/Sys/Shaders/acidmetal.glsl b/Data/Sys/Shaders/acidmetal.glsl
index b34626b7096..6e976f00935 100644
--- a/Data/Sys/Shaders/acidmetal.glsl
+++ b/Data/Sys/Shaders/acidmetal.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/acidtrip.glsl b/Data/Sys/Shaders/acidtrip.glsl
index ff40955626e..172e281b527 100644
--- a/Data/Sys/Shaders/acidtrip.glsl
+++ b/Data/Sys/Shaders/acidtrip.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/acidtrip2.glsl b/Data/Sys/Shaders/acidtrip2.glsl
index 0fbc3d51356..332de035f6c 100644
--- a/Data/Sys/Shaders/acidtrip2.glsl
+++ b/Data/Sys/Shaders/acidtrip2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/asciiart.glsl b/Data/Sys/Shaders/asciiart.glsl
index f9f5ab77884..089d2168394 100644
--- a/Data/Sys/Shaders/asciiart.glsl
+++ b/Data/Sys/Shaders/asciiart.glsl
@@ -1,6 +1,6 @@
// textures
-uniform sampler2D samp8;
-uniform sampler2D samp9;
+SAMPLER_BINDING(8) uniform sampler2D samp8;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
const int char_width = 8;
const int char_height = 13;
diff --git a/Data/Sys/Shaders/auto_toon.glsl b/Data/Sys/Shaders/auto_toon.glsl
index a4efa8433a4..8046ae2b1db 100644
--- a/Data/Sys/Shaders/auto_toon.glsl
+++ b/Data/Sys/Shaders/auto_toon.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/auto_toon2.glsl b/Data/Sys/Shaders/auto_toon2.glsl
index b2abceb9ad1..574cce87c0e 100644
--- a/Data/Sys/Shaders/auto_toon2.glsl
+++ b/Data/Sys/Shaders/auto_toon2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/bad_bloom.glsl b/Data/Sys/Shaders/bad_bloom.glsl
index 4e0c96afa60..2aa2ff992ef 100644
--- a/Data/Sys/Shaders/bad_bloom.glsl
+++ b/Data/Sys/Shaders/bad_bloom.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/brighten.glsl b/Data/Sys/Shaders/brighten.glsl
index 41cdd556722..75f3b684e66 100644
--- a/Data/Sys/Shaders/brighten.glsl
+++ b/Data/Sys/Shaders/brighten.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/chrismas.glsl b/Data/Sys/Shaders/chrismas.glsl
index c01536a3329..158cf67e52d 100644
--- a/Data/Sys/Shaders/chrismas.glsl
+++ b/Data/Sys/Shaders/chrismas.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/cool1.glsl b/Data/Sys/Shaders/cool1.glsl
index 6c1b7d58758..ef16147edac 100644
--- a/Data/Sys/Shaders/cool1.glsl
+++ b/Data/Sys/Shaders/cool1.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/darkerbrighter.glsl b/Data/Sys/Shaders/darkerbrighter.glsl
index 291ede4d3e3..3c6045a887e 100644
--- a/Data/Sys/Shaders/darkerbrighter.glsl
+++ b/Data/Sys/Shaders/darkerbrighter.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/emboss.glsl b/Data/Sys/Shaders/emboss.glsl
index 7b9b2212a47..325c4cd8a5c 100644
--- a/Data/Sys/Shaders/emboss.glsl
+++ b/Data/Sys/Shaders/emboss.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/fire.glsl b/Data/Sys/Shaders/fire.glsl
index 106a4ef5217..ea2595b0477 100644
--- a/Data/Sys/Shaders/fire.glsl
+++ b/Data/Sys/Shaders/fire.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/fire2.glsl b/Data/Sys/Shaders/fire2.glsl
index f8f7e7a92bb..2ca04ec529f 100644
--- a/Data/Sys/Shaders/fire2.glsl
+++ b/Data/Sys/Shaders/fire2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/firewater.glsl b/Data/Sys/Shaders/firewater.glsl
index b21e9db87df..20cf927bc94 100644
--- a/Data/Sys/Shaders/firewater.glsl
+++ b/Data/Sys/Shaders/firewater.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/grayscale.glsl b/Data/Sys/Shaders/grayscale.glsl
index 7a828f0a118..1c3658f00f6 100644
--- a/Data/Sys/Shaders/grayscale.glsl
+++ b/Data/Sys/Shaders/grayscale.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/grayscale2.glsl b/Data/Sys/Shaders/grayscale2.glsl
index d9ef25a4161..7e8f09e064b 100644
--- a/Data/Sys/Shaders/grayscale2.glsl
+++ b/Data/Sys/Shaders/grayscale2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/invert.glsl b/Data/Sys/Shaders/invert.glsl
index 67c5dee9978..01e840c6e63 100644
--- a/Data/Sys/Shaders/invert.glsl
+++ b/Data/Sys/Shaders/invert.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/invert_blue.glsl b/Data/Sys/Shaders/invert_blue.glsl
index aa4eeea43a1..081027ff75b 100644
--- a/Data/Sys/Shaders/invert_blue.glsl
+++ b/Data/Sys/Shaders/invert_blue.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/invertedoutline.glsl b/Data/Sys/Shaders/invertedoutline.glsl
index 70363ddbbdf..b5b29731b97 100644
--- a/Data/Sys/Shaders/invertedoutline.glsl
+++ b/Data/Sys/Shaders/invertedoutline.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/mad_world.glsl b/Data/Sys/Shaders/mad_world.glsl
index 63e46ecc394..1aff5223a20 100644
--- a/Data/Sys/Shaders/mad_world.glsl
+++ b/Data/Sys/Shaders/mad_world.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/nightvision.glsl b/Data/Sys/Shaders/nightvision.glsl
index 42f0fe441e7..0756b818122 100644
--- a/Data/Sys/Shaders/nightvision.glsl
+++ b/Data/Sys/Shaders/nightvision.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/nightvision2.glsl b/Data/Sys/Shaders/nightvision2.glsl
index 3f5910c46b5..cec3e82d72d 100644
--- a/Data/Sys/Shaders/nightvision2.glsl
+++ b/Data/Sys/Shaders/nightvision2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/nightvision2scanlines.glsl b/Data/Sys/Shaders/nightvision2scanlines.glsl
index f0b63687adb..7006429314b 100644
--- a/Data/Sys/Shaders/nightvision2scanlines.glsl
+++ b/Data/Sys/Shaders/nightvision2scanlines.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/posterize.glsl b/Data/Sys/Shaders/posterize.glsl
index f09563014a5..6b41c8332f2 100644
--- a/Data/Sys/Shaders/posterize.glsl
+++ b/Data/Sys/Shaders/posterize.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/posterize2.glsl b/Data/Sys/Shaders/posterize2.glsl
index b2c47533a15..782bf32d9d9 100644
--- a/Data/Sys/Shaders/posterize2.glsl
+++ b/Data/Sys/Shaders/posterize2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/primarycolors.glsl b/Data/Sys/Shaders/primarycolors.glsl
index 29ae0ac2000..ee62fc46f50 100644
--- a/Data/Sys/Shaders/primarycolors.glsl
+++ b/Data/Sys/Shaders/primarycolors.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/sepia.glsl b/Data/Sys/Shaders/sepia.glsl
index 83ac0b1e378..77d2414908b 100644
--- a/Data/Sys/Shaders/sepia.glsl
+++ b/Data/Sys/Shaders/sepia.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/sketchy.glsl b/Data/Sys/Shaders/sketchy.glsl
index a91e4041081..024593f719a 100644
--- a/Data/Sys/Shaders/sketchy.glsl
+++ b/Data/Sys/Shaders/sketchy.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/spookey1.glsl b/Data/Sys/Shaders/spookey1.glsl
index 6a25d57e5e9..249e2d06dc4 100644
--- a/Data/Sys/Shaders/spookey1.glsl
+++ b/Data/Sys/Shaders/spookey1.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/spookey2.glsl b/Data/Sys/Shaders/spookey2.glsl
index 9a56bd21a14..34299ccc1dc 100644
--- a/Data/Sys/Shaders/spookey2.glsl
+++ b/Data/Sys/Shaders/spookey2.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/stereoscopic.glsl b/Data/Sys/Shaders/stereoscopic.glsl
index f37a246e558..7c97313c8f4 100644
--- a/Data/Sys/Shaders/stereoscopic.glsl
+++ b/Data/Sys/Shaders/stereoscopic.glsl
@@ -1,7 +1,7 @@
// Omega's 3D Stereoscopic filtering
// TODO: Need depth info!
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/stereoscopic2.glsl b/Data/Sys/Shaders/stereoscopic2.glsl
index f7370c7d5fd..4fb8f5df113 100644
--- a/Data/Sys/Shaders/stereoscopic2.glsl
+++ b/Data/Sys/Shaders/stereoscopic2.glsl
@@ -1,7 +1,7 @@
// Omega's 3D Stereoscopic filtering (Amber/Blue)
// TODO: Need depth info!
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/sunset.glsl b/Data/Sys/Shaders/sunset.glsl
index 33201cf2ba9..b2a793c84d1 100644
--- a/Data/Sys/Shaders/sunset.glsl
+++ b/Data/Sys/Shaders/sunset.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/swap_RGB_BGR.glsl b/Data/Sys/Shaders/swap_RGB_BGR.glsl
index 011411700a6..69c84614516 100644
--- a/Data/Sys/Shaders/swap_RGB_BGR.glsl
+++ b/Data/Sys/Shaders/swap_RGB_BGR.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/swap_RGB_BRG.glsl b/Data/Sys/Shaders/swap_RGB_BRG.glsl
index 82fe665b124..a9ec859b9f4 100644
--- a/Data/Sys/Shaders/swap_RGB_BRG.glsl
+++ b/Data/Sys/Shaders/swap_RGB_BRG.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/swap_RGB_GBR.glsl b/Data/Sys/Shaders/swap_RGB_GBR.glsl
index 5884ccd0ab0..bde5b517663 100644
--- a/Data/Sys/Shaders/swap_RGB_GBR.glsl
+++ b/Data/Sys/Shaders/swap_RGB_GBR.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/swap_RGB_GRB.glsl b/Data/Sys/Shaders/swap_RGB_GRB.glsl
index 26a4c14f8d8..19cd3b0e418 100644
--- a/Data/Sys/Shaders/swap_RGB_GRB.glsl
+++ b/Data/Sys/Shaders/swap_RGB_GRB.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/swap_RGB_RBG.glsl b/Data/Sys/Shaders/swap_RGB_RBG.glsl
index 8e735a7337a..c003436fffb 100644
--- a/Data/Sys/Shaders/swap_RGB_RBG.glsl
+++ b/Data/Sys/Shaders/swap_RGB_RBG.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Data/Sys/Shaders/toxic.glsl b/Data/Sys/Shaders/toxic.glsl
index be3a0bb7051..ab31e4c5f13 100644
--- a/Data/Sys/Shaders/toxic.glsl
+++ b/Data/Sys/Shaders/toxic.glsl
@@ -1,4 +1,4 @@
-uniform sampler2D samp9;
+SAMPLER_BINDING(9) uniform sampler2D samp9;
out vec4 ocol0;
in vec2 uv0;
diff --git a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
index cb21fc382f3..62f112af2e7 100644
--- a/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
+++ b/Source/Core/VideoBackends/OGL/FramebufferManager.cpp
@@ -169,7 +169,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
{
// non-msaa, so just fetch the pixel
sampler =
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"vec4 sampleEFB(ivec2 pos) {\n"
" return texelFetch(samp9, pos, 0);\n"
"}\n";
@@ -180,7 +180,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
// This will lead to sample shading, but it's the only way to not loose
// the values of each sample.
sampler =
- "uniform sampler2DMS samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2DMS samp9;\n"
"vec4 sampleEFB(ivec2 pos) {\n"
" return texelFetch(samp9, pos, gl_SampleID);\n"
"}\n";
@@ -191,7 +191,7 @@ FramebufferManager::FramebufferManager(int targetWidth, int targetHeight, int ms
std::stringstream samples;
samples << m_msaaSamples;
sampler =
- "uniform sampler2DMS samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2DMS samp9;\n"
"vec4 sampleEFB(ivec2 pos) {\n"
" vec4 color = vec4(0.0, 0.0, 0.0, 0.0);\n"
" for(int i=0; i<" + samples.str() + "; i++)\n"
diff --git a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
index 99f3ad54857..768663f56ae 100644
--- a/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
+++ b/Source/Core/VideoBackends/OGL/ProgramShaderCache.cpp
@@ -61,12 +61,12 @@ static std::string GetGLSLVersionString()
void SHADER::SetProgramVariables()
{
- // glsl shader must be bind to set samplers
- Bind();
-
- // Bind UBO
+ // Bind UBO and texture samplers
if (!g_ActiveConfig.backend_info.bSupportsBindingLayout)
{
+ // glsl shader must be bind to set samplers if we don't support binding layout
+ Bind();
+
GLint PSBlock_id = glGetUniformBlockIndex(glprogid, "PSBlock");
GLint VSBlock_id = glGetUniformBlockIndex(glprogid, "VSBlock");
@@ -74,20 +74,19 @@ void SHADER::SetProgramVariables()
glUniformBlockBinding(glprogid, PSBlock_id, 1);
if (VSBlock_id != -1)
glUniformBlockBinding(glprogid, VSBlock_id, 2);
+
+ // Bind Texture Sampler
+ for (int a = 0; a <= 9; ++a)
+ {
+ char name[8];
+ snprintf(name, 8, "samp%d", a);
+
+ // Still need to get sampler locations since we aren't binding them statically in the shaders
+ int loc = glGetUniformLocation(glprogid, name);
+ if (loc != -1)
+ glUniform1i(loc, a);
+ }
}
-
- // Bind Texture Sampler
- for (int a = 0; a <= 9; ++a)
- {
- char name[8];
- snprintf(name, 8, "samp%d", a);
-
- // Still need to get sampler locations since we aren't binding them statically in the shaders
- int loc = glGetUniformLocation(glprogid, name);
- if (loc != -1)
- glUniform1i(loc, a);
- }
-
}
void SHADER::SetProgramBindings()
@@ -479,6 +478,7 @@ void ProgramShaderCache::CreateHeader ( void )
"%s\n" // 420pack
"%s\n" // msaa
"%s\n" // sample shading
+ "%s\n" // Sampler binding
// Precision defines for GLSL ES
"%s\n"
@@ -509,6 +509,7 @@ void ProgramShaderCache::CreateHeader ( void )
, (g_ActiveConfig.backend_info.bSupportsBindingLayout && v < GLSLES_310) ? "#extension GL_ARB_shading_language_420pack : enable" : ""
, (g_ogl_config.bSupportsMSAA && v < GLSL_150) ? "#extension GL_ARB_texture_multisample : enable" : ""
, (g_ogl_config.bSupportSampleShading) ? "#extension GL_ARB_sample_shading : enable" : ""
+ , g_ActiveConfig.backend_info.bSupportsBindingLayout ? "#define SAMPLER_BINDING(x) layout(binding = x)" : "#define SAMPLER_BINDING(x)"
, v>=GLSLES_300 ? "precision highp float;" : ""
, v>=GLSLES_300 ? "precision highp int;" : ""
diff --git a/Source/Core/VideoBackends/OGL/RasterFont.cpp b/Source/Core/VideoBackends/OGL/RasterFont.cpp
index d281f9a5540..7d96e03ab86 100644
--- a/Source/Core/VideoBackends/OGL/RasterFont.cpp
+++ b/Source/Core/VideoBackends/OGL/RasterFont.cpp
@@ -124,7 +124,7 @@ static const char *s_vertexShaderSrc =
"}\n";
static const char *s_fragmentShaderSrc =
- "uniform sampler2D samp8;\n"
+ "SAMPLER_BINDING(8) uniform sampler2D samp8;\n"
"uniform vec4 color;\n"
"in vec2 uv0;\n"
"out vec4 ocol0;\n"
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp
index 198ffda1694..8b38fca25c8 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp
@@ -346,7 +346,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo
TextureCache::TextureCache()
{
const char *pColorMatrixProg =
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"uniform vec4 colmat[7];\n"
"in vec2 uv0;\n"
"out vec4 ocol0;\n"
@@ -358,7 +358,7 @@ TextureCache::TextureCache()
"}\n";
const char *pDepthMatrixProg =
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"uniform vec4 colmat[5];\n"
"in vec2 uv0;\n"
"out vec4 ocol0;\n"
@@ -372,7 +372,7 @@ TextureCache::TextureCache()
const char *VProgram =
"out vec2 uv0;\n"
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"uniform vec4 copy_position;\n" // left, top, right, bottom
"void main()\n"
"{\n"
diff --git a/Source/Core/VideoBackends/OGL/TextureConverter.cpp b/Source/Core/VideoBackends/OGL/TextureConverter.cpp
index 055a1e6d7cc..73819698223 100644
--- a/Source/Core/VideoBackends/OGL/TextureConverter.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureConverter.cpp
@@ -72,7 +72,7 @@ static void CreatePrograms()
const char *VProgramRgbToYuyv =
"out vec2 uv0;\n"
"uniform vec4 copy_position;\n" // left, top, right, bottom
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"void main()\n"
"{\n"
" vec2 rawpos = vec2(gl_VertexID&1, gl_VertexID&2);\n"
@@ -80,7 +80,7 @@ static void CreatePrograms()
" uv0 = mix(copy_position.xy, copy_position.zw, rawpos) / vec2(textureSize(samp9, 0));\n"
"}\n";
const char *FProgramRgbToYuyv =
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"in vec2 uv0;\n"
"out vec4 ocol0;\n"
"void main()\n"
@@ -111,7 +111,7 @@ static void CreatePrograms()
" gl_Position = vec4(rawpos*2.0-1.0, 0.0, 1.0);\n"
"}\n";
const char *FProgramYuyvToRgb =
- "uniform sampler2D samp9;\n"
+ "SAMPLER_BINDING(9) uniform sampler2D samp9;\n"
"in vec2 uv0;\n"
"out vec4 ocol0;\n"
"void main()\n"
diff --git a/Source/Core/VideoCommon/PixelShaderGen.cpp b/Source/Core/VideoCommon/PixelShaderGen.cpp
index 630d998e245..8e90713fd01 100644
--- a/Source/Core/VideoCommon/PixelShaderGen.cpp
+++ b/Source/Core/VideoCommon/PixelShaderGen.cpp
@@ -204,7 +204,7 @@ static inline void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_T
{
// Declare samplers
for (int i = 0; i < 8; ++i)
- out.Write("uniform sampler2D samp%d;\n", i);
+ out.Write("SAMPLER_BINDING(%d) uniform sampler2D samp%d;\n", i, i);
}
else // D3D
{
diff --git a/Source/Core/VideoCommon/TextureConversionShader.cpp b/Source/Core/VideoCommon/TextureConversionShader.cpp
index ad4dd6f1f61..76e49ce4649 100644
--- a/Source/Core/VideoCommon/TextureConversionShader.cpp
+++ b/Source/Core/VideoCommon/TextureConversionShader.cpp
@@ -70,7 +70,7 @@ static void WriteSwizzler(char*& p, u32 format, API_TYPE ApiType)
if (ApiType == API_OPENGL)
{
WRITE(p, "#define samp0 samp9\n");
- WRITE(p, "uniform sampler2D samp0;\n");
+ WRITE(p, "SAMPLER_BINDING(9) uniform sampler2D samp0;\n");
WRITE(p, " out vec4 ocol0;\n");
WRITE(p, "void main()\n");