summaryrefslogtreecommitdiff
path: root/slang.h
diff options
context:
space:
mode:
authorTim Foley <tfoleyNV@users.noreply.github.com>2017-10-16 13:12:11 -0700
committerGitHub <noreply@github.com>2017-10-16 13:12:11 -0700
commitf12c2552b3f494cbc8245edb90b32b93ca8a1539 (patch)
tree4cd08ad6037067dc70844a4a847fb3228e0176ee /slang.h
parent3e3e2473bf85365593629bd1f6f070d11f0b8ab2 (diff)
Implement notion of a "container format" (#213)
The big addition here is that the Slang "bytecode" is no longer treated as just a "code generation target" (`CodeGenTarget`) akin to DX bytecode (DXBC) or SPIR-V, but instead is a `ContainerFormat` that can be used to emit all the results of a compile request (well, currently just the IR-as-BC, but the intention is there). Getting to this goal involved some prior checkins that eliminated bogus "targets" that weren't really akin to SPIR-V or DXBC: `-target slang-ir-asm` and `-target reflection-json`. Those targets were really in place to support testing, and so they've been made more explicit testing/debug options. This change eliminates `-target slang-ir` and instead tries to allow the user to specify `-o foo.slang-module` as an output file name, that indicates the intention to output a "container" file that will wrap up all the generated code. I've also gone ahead and generalized the existing `-target` option so that we are actually building up a *list* of code generation targets. This is largely just a cleanup, since it forces code to be more aware of when it is doing something target-specific vs. target independent. For example, reflection layout information lives on a requested target, and not on the compile request as a whole, and similarly output code is per-target, per-entry-point. As a cleanup, I eliminated support for per-translation-unit output. This was vestigial code from back when I used to try and do HLSL generation for a whole translation unit instead of per-entry-point (which turned out to be a lot of complexity for little gain), and it was only being used in the `hello` example and the `render-test` test fixture - in both cases fixing it up was easy enough. I've stubbed out the old `spGetTranslationUnitSource` API, but haven't removed it yet.
Diffstat (limited to 'slang.h')
-rw-r--r--slang.h39
1 files changed, 38 insertions, 1 deletions
diff --git a/slang.h b/slang.h
index 231ef7472..ff79d698b 100644
--- a/slang.h
+++ b/slang.h
@@ -89,7 +89,20 @@ extern "C"
SLANG_SPIRV_ASM,
SLANG_DXBC,
SLANG_DXBC_ASM,
- SLANG_IR,
+ };
+
+ /* A "container format" describes the way that the outputs
+ for multiple files, entry points, targets, etc. should be
+ combined into a single artifact for output. */
+ typedef int SlangContainerFormat;
+ enum
+ {
+ /* Don't generate a container. */
+ SLANG_CONTAINER_FORMAT_NONE,
+
+ /* Generate a container in the `.slang-module` format,
+ which includes reflection information, compiled kernels, etc. */
+ SLANG_CONTAINER_FORMAT_SLANG_MODULE,
};
typedef int SlangPassThrough;
@@ -231,6 +244,20 @@ extern "C"
SlangCompileRequest* request,
int target);
+ /*!
+ @brief Add a code-generation target to be used.
+ */
+ SLANG_API void spAddCodeGenTarget(
+ SlangCompileRequest* request,
+ SlangCompileTarget target);
+
+ /*!
+ @brief Set the container format to be used for binary output.
+ */
+ SLANG_API void spSetOutputContainerFormat(
+ SlangCompileRequest* request,
+ SlangContainerFormat format);
+
SLANG_API void spSetPassThrough(
SlangCompileRequest* request,
SlangPassThrough passThrough);
@@ -389,6 +416,16 @@ extern "C"
int entryPointIndex,
size_t* outSize);
+ /** Get the output bytecode associated with an entire compile request.
+
+ The lifetime of the output pointer is the same as `request`.
+ */
+ SLANG_API void const* spGetCompileRequestCode(
+ SlangCompileRequest* request,
+ size_t* outSize);
+
+
+
typedef struct SlangVM SlangVM;
typedef struct SlangVMModule SlangVMModule;
typedef struct SlangVMFunc SlangVMFunc;