summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEllie Hermaszewska <ellieh@nvidia.com>2023-08-22 12:10:10 +0800
committerGitHub <noreply@github.com>2023-08-22 12:10:10 +0800
commit9d7c9b98702df8b6f77ed5eac833111e6925b08f (patch)
treea4336caa7d39beef2d1263a081a40f1d72784f7e
parentbd6dbaf7c3ea720b4ed39904fe08878f9dcbd947 (diff)
color spirv-val output (#3132)
* s/invalid code/todo * comment debug disassembled spirv * more convenient spirv-val output * color spirv-val output
-rw-r--r--source/slang/hlsl.meta.slang5
-rw-r--r--source/slang/slang-spirv-val.cpp8
2 files changed, 9 insertions, 4 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 3dcdc6c54..cfc2bc3a5 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -926,8 +926,9 @@ __generic<T : __BuiltinType, let N : int>
__target_intrinsic(hlsl)
__target_intrinsic(glsl, "all(bvec$N0($0))")
__target_intrinsic(spirv, boolean(T), "OpAll resultType resultId _0")
-__target_intrinsic(spirv, integral(T), "%c = OpINotEqual resultType resultId _0 const(,0); OpAll resultType resultId %c")
-__target_intrinsic(spirv, floating(T), "%c = OpFUnordNotEqual resultType resultId _0 const(,0); OpAll resultType resultId %c")
+// TODO: correct resultType in here
+// __target_intrinsic(spirv, integral(T), "%c = OpINotEqual {vector<bool,N>} resultId _0 const(,0); OpAll resultType resultId %c")
+// __target_intrinsic(spirv, floating(T), "%c = OpFUnordNotEqual {vector<bool,N>} resultId _0 const(,0); OpAll resultType resultId %c")
[__readNone]
bool all(vector<T,N> x)
{
diff --git a/source/slang/slang-spirv-val.cpp b/source/slang/slang-spirv-val.cpp
index 29a4b8617..d41f0e8cc 100644
--- a/source/slang/slang-spirv-val.cpp
+++ b/source/slang/slang-spirv-val.cpp
@@ -8,6 +8,8 @@ static SlangResult disassembleSPIRV(const List<uint8_t>& spirv, String& outErr,
// Set up our process
CommandLine commandLine;
commandLine.m_executableLocation.setName("spirv-dis");
+ commandLine.addArg("--comment");
+ commandLine.addArg("--color");
RefPtr<Process> p;
// If we failed to even start the process, then validation isn't available
@@ -75,9 +77,9 @@ SlangResult debugValidateSPIRV(const List<uint8_t>& spirv)
fwrite(outData.getBuffer(), outData.getCount(), 1, stderr);
outData.clear();
SLANG_RETURN_ON_FAIL(StreamUtil::readAll(err, 0, outData));
- fwrite(outData.getBuffer(), outData.getCount(), 1, stderr);
- const auto ret = p->getReturnValue();
+ // If we failed, dump the spirv first.
+ const auto ret = p->getReturnValue();
if(ret != 0)
{
String spirvDisErr;
@@ -87,6 +89,8 @@ SlangResult debugValidateSPIRV(const List<uint8_t>& spirv)
fwrite(spirvDis.getBuffer(), spirvDis.getLength(), 1, stderr);
}
+ fwrite(outData.getBuffer(), outData.getCount(), 1, stderr);
+
return ret == 0 ? SLANG_OK : SLANG_FAIL;
}