summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2020-04-02 19:52:12 -0400
committerGitHub <noreply@github.com>2020-04-02 23:52:12 +0000
commitc5db04b8ba72d14d6bf2e20abf9c1b8d8466abc6 (patch)
treee7c9f8138126b96a0c703ccbe1c54ccf1f4c9714 /source
parent00e1dba744dc8d09bc59d0a46f18076e3704c566 (diff)
Fix WaveGetLaneIndex for glsl (#1306)
* Fix typo in stdlib around WaveGetLaneIndex and WaveGetLaneCount * Reorder emit so #extensions come before layout * Added wave-get-lane-index.slang test.
Diffstat (limited to 'source')
-rw-r--r--source/slang/hlsl.meta.slang4
-rw-r--r--source/slang/slang-emit.cpp16
2 files changed, 11 insertions, 9 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index f82f7b5f4..483c2299f 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -2659,13 +2659,13 @@ uint WaveActiveCountBits(bool value);
__glsl_extension(GL_KHR_shader_subgroup_basic)
__spirv_version(1.3)
-__target_intrinsic(glsl, "gl_SubgroupSize")
+__target_intrinsic(glsl, "(gl_SubgroupSize)")
__target_intrinsic(cuda, "(warpSize)")
uint WaveGetLaneCount();
__glsl_extension(GL_KHR_shader_subgroup_basic)
__spirv_version(1.3)
-__target_intrinsic(glsl, "gl_SubgroupInvocationID")
+__target_intrinsic(glsl, "(gl_SubgroupInvocationID)")
__target_intrinsic(cuda, "_getLaneId()")
uint WaveGetLaneIndex();
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index e613f5462..3caef0a9f 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -641,6 +641,15 @@ SlangResult emitEntryPointSourceFromIR(
// There may be global-scope modifiers that we should emit now
sourceEmitter->emitPreprocessorDirectives();
+ RefObject* extensionTracker = sourceEmitter->getExtensionTracker();
+
+ if (auto glslExtensionTracker = as<GLSLExtensionTracker>(extensionTracker))
+ {
+ StringBuilder builder;
+ glslExtensionTracker->appendExtensionRequireLines(builder);
+ sourceWriter.emit(builder.getUnownedSlice());
+ }
+
sourceEmitter->emitLayoutDirectives(targetRequest);
String prefix = sourceWriter.getContent();
@@ -648,13 +657,6 @@ SlangResult emitEntryPointSourceFromIR(
StringBuilder finalResultBuilder;
finalResultBuilder << prefix;
- RefObject* extensionTracker = sourceEmitter->getExtensionTracker();
-
- if (auto glslExtensionTracker = as<GLSLExtensionTracker>(extensionTracker))
- {
- glslExtensionTracker->appendExtensionRequireLines(finalResultBuilder);
- }
-
finalResultBuilder << code;
// Write out the result