summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_rasterizer.cpp
diff options
context:
space:
mode:
authorbunnei <bunneidev@gmail.com>2020-06-13 19:48:27 +0200
committerGitHub <noreply@github.com>2020-06-13 19:48:27 +0200
commitc2ea1e1bcb88f8e307e54cf588829a516b40258e (patch)
tree3975cb756ef9d289cc13f3f6dc2a302dacc2c758 /src/video_core/renderer_opengl/gl_rasterizer.cpp
parentMerge pull request #3986 from ReinUsesLisp/shader-cache (diff)
parentshader/texture: Join separate image and sampler pairs offline (diff)
downloadyuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar.gz
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar.bz2
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar.lz
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar.xz
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.tar.zst
yuzu-c2ea1e1bcb88f8e307e54cf588829a516b40258e.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_rasterizer.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp16
1 files changed, 14 insertions, 2 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index a48cee1e5..121af9718 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -66,10 +66,22 @@ constexpr std::size_t NumSupportedVertexAttributes = 16;
template <typename Engine, typename Entry>
Tegra::Texture::FullTextureInfo GetTextureInfo(const Engine& engine, const Entry& entry,
ShaderType shader_type, std::size_t index = 0) {
+ if constexpr (std::is_same_v<Entry, SamplerEntry>) {
+ if (entry.is_separated) {
+ const u32 buffer_1 = entry.buffer;
+ const u32 buffer_2 = entry.secondary_buffer;
+ const u32 offset_1 = entry.offset;
+ const u32 offset_2 = entry.secondary_offset;
+ const u32 handle_1 = engine.AccessConstBuffer32(shader_type, buffer_1, offset_1);
+ const u32 handle_2 = engine.AccessConstBuffer32(shader_type, buffer_2, offset_2);
+ return engine.GetTextureInfo(handle_1 | handle_2);
+ }
+ }
if (entry.is_bindless) {
- const auto tex_handle = engine.AccessConstBuffer32(shader_type, entry.buffer, entry.offset);
- return engine.GetTextureInfo(tex_handle);
+ const u32 handle = engine.AccessConstBuffer32(shader_type, entry.buffer, entry.offset);
+ return engine.GetTextureInfo(handle);
}
+
const auto& gpu_profile = engine.AccessGuestDriverProfile();
const u32 offset = entry.offset + static_cast<u32>(index * gpu_profile.GetTextureHandlerSize());
if constexpr (std::is_same_v<Engine, Tegra::Engines::Maxwell3D>) {