diff options
| author | Kai-Hwa Yao <kyao@nvidia.com> | 2017-07-09 22:58:41 -0700 |
|---|---|---|
| committer | Kai-Hwa Yao <kyao@nvidia.com> | 2017-07-10 17:49:35 -0700 |
| commit | 4bb88c4a45707fb88150aa7952b4c9b9f55b1749 (patch) | |
| tree | 2a57ac12e56a8e2f20d20fae3c4b340e39557410 /tools | |
| parent | 5577e2d5e8bb374a00d9ecdd8e2c667ace546036 (diff) | |
Allow glslang wrapper to output regular SPIRV before disassembly
Diffstat (limited to 'tools')
| -rw-r--r-- | tools/glslang/glslang.cpp | 34 | ||||
| -rw-r--r-- | tools/glslang/glslang.h | 4 |
2 files changed, 23 insertions, 15 deletions
diff --git a/tools/glslang/glslang.cpp b/tools/glslang/glslang.cpp index cf563faff..fb697675e 100644 --- a/tools/glslang/glslang.cpp +++ b/tools/glslang/glslang.cpp @@ -51,21 +51,22 @@ static TBuiltInResource gResources = }; static void dump( - std::string const& text, - glslang_OutputFunc outputFunc, - void* outputUserData, - FILE* fallbackStream) + void const* data, + size_t size, + glslang_OutputFunc outputFunc, + void* outputUserData, + FILE* fallbackStream) { if( outputFunc ) { - outputFunc(text.c_str(), outputUserData); + outputFunc(data, size, outputUserData); } else { - fprintf(fallbackStream, "%s", text.c_str()); + fwrite(data, 1, size, fallbackStream); // also output it for debug purposes - OutputDebugStringA(text.c_str()); + OutputDebugStringA((char const*)data); } } @@ -73,7 +74,7 @@ static void dumpDiagnostics( glslang_CompileRequest* request, std::string const& log) { - dump(log, request->diagnosticFunc, request->diagnosticUserData, stderr); + dump(log.c_str(), log.length(), request->diagnosticFunc, request->diagnosticUserData, stderr); } extern "C" @@ -161,14 +162,19 @@ int glslang_compile(glslang_CompileRequest* request) dumpDiagnostics(request, logger.getAllMessages()); - std::stringstream spirvAsmStream; - - spv::Disassemble(spirvAsmStream, spirv); - - dump(spirvAsmStream.str(), request->outputFunc, request->outputUserData, stdout); + if (request->disassembleResult) + { + std::stringstream spirvAsmStream; + spv::Disassemble(spirvAsmStream, spirv); + std::string result = spirvAsmStream.str(); + dump(result.c_str(), result.length(), request->outputFunc, request->outputUserData, stdout); + } + else + { + dump(spirv.data(), spirv.size() * sizeof(spirv[0]), request->outputFunc, request->outputUserData, stdout); + } } - glslang::FinalizeProcess(); return 0; diff --git a/tools/glslang/glslang.h b/tools/glslang/glslang.h index 73c8a978e..8686f019e 100644 --- a/tools/glslang/glslang.h +++ b/tools/glslang/glslang.h @@ -2,7 +2,7 @@ #ifndef GLSLANG_H_INCLUDED #define GLSLANG_H_INCLUDED -typedef void (*glslang_OutputFunc)(char const* text, void* userData); +typedef void (*glslang_OutputFunc)(void const* data, size_t size, void* userData); struct glslang_CompileRequest { @@ -16,6 +16,8 @@ struct glslang_CompileRequest void* outputUserData; int slangStage; + + bool disassembleResult; }; typedef int (*glslang_CompileFunc)(glslang_CompileRequest* request); |
