summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_opengl
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/renderer_opengl')
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp19
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp12
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.h3
3 files changed, 14 insertions, 20 deletions
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index 43032e9a7..35fc094a8 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -973,10 +973,9 @@ TextureBufferUsage RasterizerOpenGL::SetupDrawTextures(Maxwell::ShaderStage stag
973 if (!entry.IsBindless()) { 973 if (!entry.IsBindless()) {
974 return maxwell3d.GetStageTexture(stage, entry.GetOffset()); 974 return maxwell3d.GetStageTexture(stage, entry.GetOffset());
975 } 975 }
976 const auto cbuf = entry.GetBindlessCBuf(); 976 const auto shader_type = static_cast<Tegra::Engines::ShaderType>(stage);
977 Tegra::Texture::TextureHandle tex_handle; 977 const Tegra::Texture::TextureHandle tex_handle =
978 Tegra::Engines::ShaderType shader_type = static_cast<Tegra::Engines::ShaderType>(stage); 978 maxwell3d.AccessConstBuffer32(shader_type, entry.GetBuffer(), entry.GetOffset());
979 tex_handle.raw = maxwell3d.AccessConstBuffer32(shader_type, cbuf.first, cbuf.second);
980 return maxwell3d.GetTextureInfo(tex_handle); 979 return maxwell3d.GetTextureInfo(tex_handle);
981 }(); 980 }();
982 981
@@ -1004,10 +1003,8 @@ TextureBufferUsage RasterizerOpenGL::SetupComputeTextures(const Shader& kernel)
1004 if (!entry.IsBindless()) { 1003 if (!entry.IsBindless()) {
1005 return compute.GetTexture(entry.GetOffset()); 1004 return compute.GetTexture(entry.GetOffset());
1006 } 1005 }
1007 const auto cbuf = entry.GetBindlessCBuf(); 1006 const Tegra::Texture::TextureHandle tex_handle = compute.AccessConstBuffer32(
1008 Tegra::Texture::TextureHandle tex_handle; 1007 Tegra::Engines::ShaderType::Compute, entry.GetBuffer(), entry.GetOffset());
1009 tex_handle.raw = compute.AccessConstBuffer32(Tegra::Engines::ShaderType::Compute,
1010 cbuf.first, cbuf.second);
1011 return compute.GetTextureInfo(tex_handle); 1008 return compute.GetTextureInfo(tex_handle);
1012 }(); 1009 }();
1013 1010
@@ -1050,10 +1047,8 @@ void RasterizerOpenGL::SetupComputeImages(const Shader& shader) {
1050 if (!entry.IsBindless()) { 1047 if (!entry.IsBindless()) {
1051 return compute.GetTexture(entry.GetOffset()).tic; 1048 return compute.GetTexture(entry.GetOffset()).tic;
1052 } 1049 }
1053 const auto cbuf = entry.GetBindlessCBuf(); 1050 const Tegra::Texture::TextureHandle tex_handle = compute.AccessConstBuffer32(
1054 Tegra::Texture::TextureHandle tex_handle; 1051 Tegra::Engines::ShaderType::Compute, entry.GetBuffer(), entry.GetOffset());
1055 tex_handle.raw = compute.AccessConstBuffer32(Tegra::Engines::ShaderType::Compute,
1056 cbuf.first, cbuf.second);
1057 return compute.GetTextureInfo(tex_handle).tic; 1052 return compute.GetTextureInfo(tex_handle).tic;
1058 }(); 1053 }();
1059 SetupImage(bindpoint, tic, entry); 1054 SetupImage(bindpoint, tic, entry);
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index 030550c53..92ee8459e 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -735,7 +735,7 @@ private:
735 735
736 void DeclareImages() { 736 void DeclareImages() {
737 const auto& images{ir.GetImages()}; 737 const auto& images{ir.GetImages()};
738 for (const auto& [offset, image] : images) { 738 for (const auto& image : images) {
739 std::string qualifier = "coherent volatile"; 739 std::string qualifier = "coherent volatile";
740 if (image.IsRead() && !image.IsWritten()) { 740 if (image.IsRead() && !image.IsWritten()) {
741 qualifier += " readonly"; 741 qualifier += " readonly";
@@ -2466,16 +2466,16 @@ ShaderEntries GetEntries(const VideoCommon::Shader::ShaderIR& ir) {
2466 entries.const_buffers.emplace_back(cbuf.second.GetMaxOffset(), cbuf.second.IsIndirect(), 2466 entries.const_buffers.emplace_back(cbuf.second.GetMaxOffset(), cbuf.second.IsIndirect(),
2467 cbuf.first); 2467 cbuf.first);
2468 } 2468 }
2469 for (const auto& [base, usage] : ir.GetGlobalMemory()) {
2470 entries.global_memory_entries.emplace_back(base.cbuf_index, base.cbuf_offset, usage.is_read,
2471 usage.is_written);
2472 }
2469 for (const auto& sampler : ir.GetSamplers()) { 2473 for (const auto& sampler : ir.GetSamplers()) {
2470 entries.samplers.emplace_back(sampler); 2474 entries.samplers.emplace_back(sampler);
2471 } 2475 }
2472 for (const auto& [offset, image] : ir.GetImages()) { 2476 for (const auto& image : ir.GetImages()) {
2473 entries.images.emplace_back(image); 2477 entries.images.emplace_back(image);
2474 } 2478 }
2475 for (const auto& [base, usage] : ir.GetGlobalMemory()) {
2476 entries.global_memory_entries.emplace_back(base.cbuf_index, base.cbuf_offset, usage.is_read,
2477 usage.is_written);
2478 }
2479 entries.clip_distances = ir.GetClipDistances(); 2479 entries.clip_distances = ir.GetClipDistances();
2480 entries.shader_length = ir.GetLength(); 2480 entries.shader_length = ir.GetLength();
2481 return entries; 2481 return entries;
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.h b/src/video_core/renderer_opengl/gl_shader_decompiler.h
index fead2a51e..b1e75e6cc 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.h
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.h
@@ -82,10 +82,9 @@ private:
82 82
83struct ShaderEntries { 83struct ShaderEntries {
84 std::vector<ConstBufferEntry> const_buffers; 84 std::vector<ConstBufferEntry> const_buffers;
85 std::vector<GlobalMemoryEntry> global_memory_entries;
85 std::vector<SamplerEntry> samplers; 86 std::vector<SamplerEntry> samplers;
86 std::vector<SamplerEntry> bindless_samplers;
87 std::vector<ImageEntry> images; 87 std::vector<ImageEntry> images;
88 std::vector<GlobalMemoryEntry> global_memory_entries;
89 std::array<bool, Maxwell::NumClipDistances> clip_distances{}; 88 std::array<bool, Maxwell::NumClipDistances> clip_distances{};
90 std::size_t shader_length{}; 89 std::size_t shader_length{};
91}; 90};