summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorTim Foley <tim.foley.is@gmail.com>2017-07-10 19:45:21 -0700
committerGitHub <noreply@github.com>2017-07-10 19:45:21 -0700
commita923aff63a7b0d8847a50459361111347e3c527e (patch)
treee53bfd90d2b9e4b04d22f58548999a33b7944d46 /tools
parent5577e2d5e8bb374a00d9ecdd8e2c667ace546036 (diff)
parent22c7a4de0c3810fcfc1099843e42b315c366a7c5 (diff)
Merge pull request #67 from kyaoNV/spirv
SPIR-V Support
Diffstat (limited to 'tools')
-rw-r--r--tools/glslang/glslang.cpp35
-rw-r--r--tools/glslang/glslang.h4
2 files changed, 24 insertions, 15 deletions
diff --git a/tools/glslang/glslang.cpp b/tools/glslang/glslang.cpp
index cf563faff..f07937b97 100644
--- a/tools/glslang/glslang.cpp
+++ b/tools/glslang/glslang.cpp
@@ -51,21 +51,23 @@ 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());
+ std::string str((char const*)data, size);
+ OutputDebugStringA(str.c_str());
}
}
@@ -73,7 +75,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 +163,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(unsigned int), 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);