diff options
Diffstat (limited to 'src/video_core/renderer_opengl')
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 19 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_decompiler.h | 3 |
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 | ||
| 83 | struct ShaderEntries { | 83 | struct 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 | }; |