summaryrefslogtreecommitdiffstats
path: root/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2019-09-06 04:26:05 +0200
committerReinUsesLisp <reinuseslisp@airmail.cc>2019-09-06 04:26:05 +0200
commit1f43e5296fcd2debaea672fd9740d2f07223406b (patch)
tree382d7a0f82949a825755c38363c8aaf33bc47e98 /src/video_core/renderer_opengl/gl_shader_decompiler.cpp
parenttexture_cache: Minor changes (diff)
downloadyuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar.gz
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar.bz2
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar.lz
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar.xz
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.tar.zst
yuzu-1f43e5296fcd2debaea672fd9740d2f07223406b.zip
Diffstat (limited to 'src/video_core/renderer_opengl/gl_shader_decompiler.cpp')
-rw-r--r--src/video_core/renderer_opengl/gl_shader_decompiler.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
index a5cc1a86f..6edb2ca38 100644
--- a/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
+++ b/src/video_core/renderer_opengl/gl_shader_decompiler.cpp
@@ -389,11 +389,10 @@ public:
for (const auto& sampler : ir.GetSamplers()) {
entries.samplers.emplace_back(sampler);
}
- for (const auto& image : ir.GetImages()) {
+ for (const auto& [offset, image] : ir.GetImages()) {
entries.images.emplace_back(image);
}
- for (const auto& gmem_pair : ir.GetGlobalMemory()) {
- const auto& [base, usage] = gmem_pair;
+ for (const auto& [base, usage] : ir.GetGlobalMemory()) {
entries.global_memory_entries.emplace_back(base.cbuf_index, base.cbuf_offset,
usage.is_read, usage.is_written);
}
@@ -706,7 +705,7 @@ private:
void DeclareImages() {
const auto& images{ir.GetImages()};
- for (const auto& image : images) {
+ for (const auto& [offset, image] : images) {
const std::string image_type = [&]() {
switch (image.GetType()) {
case Tegra::Shader::ImageType::Texture1D:
@@ -726,9 +725,16 @@ private:
return "image1D";
}
}();
- code.AddLine("layout (binding = IMAGE_BINDING_{}) coherent volatile writeonly uniform "
+ std::string qualifier = "coherent volatile";
+ if (image.IsRead() && !image.IsWritten()) {
+ qualifier += " readonly";
+ } else if (image.IsWritten() && !image.IsRead()) {
+ qualifier += " writeonly";
+ }
+
+ code.AddLine("layout (binding = IMAGE_BINDING_{}) {} uniform "
"{} {};",
- image.GetIndex(), image_type, GetImage(image));
+ image.GetIndex(), qualifier, image_type, GetImage(image));
}
if (!images.empty()) {
code.AddNewLine();