diff options
| author | Tim Foley <tfoleyNV@users.noreply.github.com> | 2017-10-16 13:12:11 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-10-16 13:12:11 -0700 |
| commit | f12c2552b3f494cbc8245edb90b32b93ca8a1539 (patch) | |
| tree | 4cd08ad6037067dc70844a4a847fb3228e0176ee /source/slang/ir.h | |
| parent | 3e3e2473bf85365593629bd1f6f070d11f0b8ab2 (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 'source/slang/ir.h')
| -rw-r--r-- | source/slang/ir.h | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/source/slang/ir.h b/source/slang/ir.h index 4fd165c33..ecc77dbc4 100644 --- a/source/slang/ir.h +++ b/source/slang/ir.h @@ -97,10 +97,7 @@ enum IRDecorationOp : uint16_t { kIRDecorationOp_HighLevelDecl, kIRDecorationOp_Layout, - kIRDecorationOp_EntryPoint, - kIRDecorationOp_ComputeThreadGroupSize, kIRDecorationOp_LoopControl, - kIRDecorationOp_MangledName, }; // A "decoration" that gets applied to an instruction. @@ -291,6 +288,11 @@ struct IRGlobalValue : IRValue { IRModule* parentModule; + // The mangled name, for a symbol that should have linkage, + // or which might have multiple declarations. + String mangledName; + + IRGlobalValue* nextGlobalValue; IRGlobalValue* prevGlobalValue; @@ -319,10 +321,6 @@ struct IRFunc : IRGlobalValue // The type of the IR-level function IRFuncType* getType() { return (IRFuncType*) type.Ptr(); } - // The mangled name, for a function - // that should have linkage. - String mangledName; - // Any generic parameters this function has List<RefPtr<Decl>> genericParams; @@ -367,14 +365,6 @@ void printSlangIRAssembly(StringBuilder& builder, IRModule* module); String getSlangIRAssembly(IRModule* module); void dumpIR(IRModule* module); - -// IR transformations - -// Transform shader entry points so that they conform to GLSL rules. -void legalizeEntryPointsForGLSL( - Session* session, - IRModule* module); - } |
