diff options
| author | Pankaj Mistry <63069047+pmistryNV@users.noreply.github.com> | 2023-12-30 17:30:33 -0800 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-12-30 17:30:33 -0800 |
| commit | f1f5e60ac541811b33172be78415474087b37571 (patch) | |
| tree | c28bd7101429c38ef651354e4630d98f0b879913 | |
| parent | be06998c5153f7f9731f3a322ede4cf9e58e4b3d (diff) | |
Fix the intrinsic expansion of ObjectToWorld3x4 in spirv_asm. Data type (#3428)
| -rw-r--r-- | source/slang/hlsl.meta.slang | 4 | ||||
| -rw-r--r-- | source/slang/slang-emit.cpp | 8 | ||||
| -rw-r--r-- | source/slang/slang-spirv-val.cpp | 2 | ||||
| -rw-r--r-- | source/slang/slang-spirv-val.h | 1 |
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); } |
