summaryrefslogtreecommitdiffstats
path: root/source/slang/slang-stdlib-textures.cpp
diff options
context:
space:
mode:
authorYong He <yonghe@outlook.com>2023-09-21 10:39:19 -0700
committerGitHub <noreply@github.com>2023-09-21 10:39:19 -0700
commitaf8ce68e9fd7b6255b6e4e9e9524a285497116dc (patch)
treee2dfffbacb63dd47f9af538103c8192f1d105162 /source/slang/slang-stdlib-textures.cpp
parent85d40ed62f5ef6d38a0f898b7bd452cca0f65a5b (diff)
Misc SPIRV fixes. (#3220)
Co-authored-by: Yong He <yhe@nvidia.com>
Diffstat (limited to 'source/slang/slang-stdlib-textures.cpp')
-rw-r--r--source/slang/slang-stdlib-textures.cpp19
1 files changed, 15 insertions, 4 deletions
diff --git a/source/slang/slang-stdlib-textures.cpp b/source/slang/slang-stdlib-textures.cpp
index bec3a7155..76ca51380 100644
--- a/source/slang/slang-stdlib-textures.cpp
+++ b/source/slang/slang-stdlib-textures.cpp
@@ -543,12 +543,23 @@ void TextureTypeInfo::writeQueryFunctions()
}
}
-static String spirvReadIntrinsic()
+static String spirvReadIntrinsic(SlangResourceAccess access)
{
StringBuilder spirvBuilder;
const char* i = " ";
- spirvBuilder << i << "%sampled : __sampledType(T) = OpImageRead $this $location;\n";
- spirvBuilder << i << "__truncate $$T result __sampledType(T) %sampled;";
+ switch (access)
+ {
+ case SLANG_RESOURCE_ACCESS_NONE:
+ case SLANG_RESOURCE_ACCESS_READ:
+ spirvBuilder << i << "%sampled : __sampledType(T) = OpImageFetch $this $location;\n";
+ spirvBuilder << i << "__truncate $$T result __sampledType(T) %sampled;";
+ break;
+
+ default:
+ spirvBuilder << i << "%sampled : __sampledType(T) = OpImageRead $this $location;\n";
+ spirvBuilder << i << "__truncate $$T result __sampledType(T) %sampled;";
+ break;
+ }
return spirvBuilder;
}
@@ -663,7 +674,7 @@ void TextureTypeInfo::writeSubscriptFunctions()
"operator[]",
"get",
glslBuilder,
- spirvReadIntrinsic(),
+ spirvReadIntrinsic(access),
cudaBuilder
);