summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPankaj Mistry <63069047+pmistryNV@users.noreply.github.com>2023-12-30 17:30:33 -0800
committerGitHub <noreply@github.com>2023-12-30 17:30:33 -0800
commitf1f5e60ac541811b33172be78415474087b37571 (patch)
treec28bd7101429c38ef651354e4630d98f0b879913
parentbe06998c5153f7f9731f3a322ede4cf9e58e4b3d (diff)
Fix the intrinsic expansion of ObjectToWorld3x4 in spirv_asm. Data type (#3428)
-rw-r--r--source/slang/hlsl.meta.slang4
-rw-r--r--source/slang/slang-emit.cpp8
-rw-r--r--source/slang/slang-spirv-val.cpp2
-rw-r--r--source/slang/slang-spirv-val.h1
4 files changed, 12 insertions, 3 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 2c5f384a3..b88b861ed 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -9569,7 +9569,7 @@ float3x4 ObjectToWorld3x4()
case GL_NV_ray_tracing: __intrinsic_asm "transpose(gl_ObjectToWorldNV)";
case spirv:
return spirv_asm {
- %mat = OpLoad builtin(ObjectToWorldKHR:float4x3);
+ %mat:$$float4x3 = OpLoad builtin(ObjectToWorldKHR:float4x3);
result:$$float3x4 = OpTranspose %mat;
};
}
@@ -9584,7 +9584,7 @@ float3x4 WorldToObject3x4()
case GL_NV_ray_tracing: __intrinsic_asm "transpose(gl_WorldToObjectNV)";
case spirv:
return spirv_asm {
- %mat = OpLoad builtin(WorldToObjectKHR:float4x3);
+ %mat:$$float4x3 = OpLoad builtin(WorldToObjectKHR:float4x3);
result:$$float3x4 = OpTranspose %mat;
};
}
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index 4edf45759..aa436a796 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -91,6 +91,7 @@
#include "slang-emit-cuda.h"
#include "slang-emit-torch.h"
+#include "slang-spirv-val.h"
#include "../compiler-core/slang-artifact-desc-util.h"
#include "../compiler-core/slang-artifact-util.h"
#include "../compiler-core/slang-artifact-impl.h"
@@ -1292,6 +1293,13 @@ SlangResult emitSPIRVForEntryPointsDirectly(
auto artifact = ArtifactUtil::createArtifactForCompileTarget(asExternal(codeGenContext->getTargetFormat()));
artifact->addRepresentationUnknown(ListBlob::moveCreate(spirv));
+#if 0
+ // Dump the unoptimized SPIRV after lowering from slang IR -> SPIRV
+ String err; String dis;
+ disassembleSPIRV(spirv, err, dis);
+ printf("%s", dis.begin());
+#endif
+
IDownstreamCompiler* compiler = codeGenContext->getSession()->getOrLoadDownstreamCompiler(
PassThroughMode::SpirvOpt, codeGenContext->getSink());
if (compiler)
diff --git a/source/slang/slang-spirv-val.cpp b/source/slang/slang-spirv-val.cpp
index e62564cc4..8b638da94 100644
--- a/source/slang/slang-spirv-val.cpp
+++ b/source/slang/slang-spirv-val.cpp
@@ -3,7 +3,7 @@
namespace Slang
{
-static SlangResult disassembleSPIRV(const List<uint8_t>& spirv, String& outErr, String& outDis)
+SlangResult disassembleSPIRV(const List<uint8_t>& spirv, String& outErr, String& outDis)
{
// Set up our process
CommandLine commandLine;
diff --git a/source/slang/slang-spirv-val.h b/source/slang/slang-spirv-val.h
index 08e08b373..7ee55693a 100644
--- a/source/slang/slang-spirv-val.h
+++ b/source/slang/slang-spirv-val.h
@@ -6,5 +6,6 @@
namespace Slang
{
SlangResult debugValidateSPIRV(const List<uint8_t>& spirv);
+SlangResult disassembleSPIRV(const List<uint8_t>& spirv, String& outErr, String& outDis);
}