summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit.cpp
diff options
context:
space:
mode:
authorAlexey Panteleev <alpanteleev@nvidia.com>2022-05-18 10:57:37 -0700
committerGitHub <noreply@github.com>2022-05-18 10:57:37 -0700
commit69cb6e8f300d77e74bd2c7dfe15d12e10b38f512 (patch)
treec2d23f2883acb28407106a096b55c64111f098b1 /source/slang/slang-emit.cpp
parent1148564b9cdbbc8fec4fbecf65b0af60aa6af344 (diff)
Support for querying which parameters are used in emitted code (#2239)
See https://github.com/shader-slang/slang/issues/2213
Diffstat (limited to 'source/slang/slang-emit.cpp')
-rw-r--r--source/slang/slang-emit.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/source/slang/slang-emit.cpp b/source/slang/slang-emit.cpp
index d231acf14..a128644d3 100644
--- a/source/slang/slang-emit.cpp
+++ b/source/slang/slang-emit.cpp
@@ -25,6 +25,7 @@
#include "slang-ir-lower-tuple-types.h"
#include "slang-ir-lower-bit-cast.h"
#include "slang-ir-lower-reinterpret.h"
+#include "slang-ir-metadata.h"
#include "slang-ir-optix-entry-point-uniforms.h"
#include "slang-ir-restructure.h"
#include "slang-ir-restructure-scoping.h"
@@ -818,11 +819,15 @@ Result linkAndOptimizeIR(
#endif
validateIRModuleIfEnabled(codeGenContext, irModule);
+ outLinkedIR.metadata = new PostEmitMetadata();
+ collectMetadata(irModule, *outLinkedIR.metadata);
+
return SLANG_OK;
}
SlangResult CodeGenContext::emitEntryPointsSourceFromIR(
- String& outSource)
+ String& outSource,
+ RefPtr<PostEmitMetadata>& outMetadata)
{
outSource = String();
@@ -927,6 +932,8 @@ SlangResult CodeGenContext::emitEntryPointsSourceFromIR(
auto irModule = linkedIR.module;
+ outMetadata = linkedIR.metadata;
+
// After all of the required optimization and legalization
// passes have been performed, we can emit target code from
// the IR module.
@@ -1007,7 +1014,8 @@ SlangResult emitSPIRVFromIR(
SlangResult emitSPIRVForEntryPointsDirectly(
CodeGenContext* codeGenContext,
- List<uint8_t>& spirvOut)
+ List<uint8_t>& spirvOut,
+ RefPtr<PostEmitMetadata>& outMetadata)
{
// Outside because we want to keep IR in scope whilst we are processing emits
LinkedIR linkedIR;
@@ -1022,6 +1030,8 @@ SlangResult emitSPIRVForEntryPointsDirectly(
emitSPIRVFromIR(codeGenContext, irModule, irEntryPoints, spirvOut);
+ outMetadata = linkedIR.metadata;
+
return SLANG_OK;
}