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");