summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_state.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2018-09-27 02:52:31 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2018-09-28 07:04:22 +0200
commitb8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3 (patch)
treeea9bab0a098dbb7edec15ae3dc5d69874c3d8db4 /src/video_core/renderer_opengl/gl_state.cpp
parentMerge pull request #1399 from lioncash/sched (diff)
downloadyuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.gz
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.bz2
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.lz
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.xz
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.tar.zst
yuzu-b8f1506aa5e5eb25bfd82f4e0818f1c2c1e6bcb3.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_state.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_state.cpp24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/video_core/renderer_opengl/gl_state.cpp b/src/video_core/renderer_opengl/gl_state.cpp
index e5173e20a..e494b3f16 100644
--- a/src/video_core/renderer_opengl/gl_state.cpp
+++ b/src/video_core/renderer_opengl/gl_state.cpp
@@ -205,9 +205,6 @@ void OpenGLState::Apply() const {
glActiveTexture(TextureUnits::MaxwellTexture(static_cast<int>(i)).Enum());
glBindTexture(texture_unit.target, texture_unit.texture);
}
- if (texture_unit.sampler != cur_state_texture_unit.sampler) {
- glBindSampler(static_cast<GLuint>(i), texture_unit.sampler);
- }
// Update the texture swizzle
if (texture_unit.swizzle.r != cur_state_texture_unit.swizzle.r ||
texture_unit.swizzle.g != cur_state_texture_unit.swizzle.g ||
@@ -219,6 +216,27 @@ void OpenGLState::Apply() const {
}
}
+ // Samplers
+ {
+ bool has_delta{};
+ std::size_t first{}, last{};
+ std::array<GLuint, Tegra::Engines::Maxwell3D::Regs::NumTextureSamplers> samplers;
+ for (std::size_t i = 0; i < std::size(samplers); ++i) {
+ samplers[i] = texture_units[i].sampler;
+ if (samplers[i] != cur_state.texture_units[i].sampler) {
+ if (!has_delta) {
+ first = i;
+ has_delta = true;
+ }
+ last = i;
+ }
+ }
+ if (has_delta) {
+ glBindSamplers(static_cast<GLuint>(first), static_cast<GLsizei>(last - first + 1),
+ samplers.data());
+ }
+ }
+
// Framebuffer
if (draw.read_framebuffer != cur_state.draw.read_framebuffer) {
glBindFramebuffer(GL_READ_FRAMEBUFFER, draw.read_framebuffer);