diff options
| author | jsmall-nvidia <jsmall@nvidia.com> | 2019-10-04 09:46:03 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2019-10-04 09:46:03 -0400 |
| commit | 7c8527d20e433c3a10736136d31e4cd882a3baaa (patch) | |
| tree | 44032051a4d76c8773b8a503dae14d9c8c9e786d /source/slang/slang-emit-glsl.cpp | |
| parent | 0bc7d9b0aeb77c40befeb3618240a065374216a1 (diff) | |
IR types for subset of Attributes (#1067)
* IROutputControlPointsDecoration
* IROutputTopologyDecoration
* IRPartitioningDecoration
* IRDomainDecoration
* Use IRPatchConstantDecoration alone for hlsl output.
* IRMaxVertexCountDecoration
* IRInstanceDecoration
* Removed _emitHLSLAttributeSingleString and _emitHLSLAttributeSingleInt
Removed GLSLBindingAttribute and just use NumThreadsAttribute
* Added IRNumThreadsDecoration.
* Added IRNumThreadsDecoration
* Fix build problem on x86.
Improve diagnostic text based on review.
Diffstat (limited to 'source/slang/slang-emit-glsl.cpp')
| -rw-r--r-- | source/slang/slang-emit-glsl.cpp | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/source/slang/slang-emit-glsl.cpp b/source/slang/slang-emit-glsl.cpp index a1c7b9170..e43d41d5c 100644 --- a/source/slang/slang-emit-glsl.cpp +++ b/source/slang/slang-emit-glsl.cpp @@ -661,20 +661,12 @@ void GLSLSourceEmitter::emitEntryPointAttributesImpl(IRFunc* irFunc, EntryPointL { case Stage::Compute: { - static const UInt kAxisCount = 3; - UInt sizeAlongAxis[kAxisCount]; - - // TODO: this is kind of gross because we are using a public - // reflection API function, rather than some kind of internal - // utility it forwards to... - spReflectionEntryPoint_getComputeThreadGroupSize( - (SlangReflectionEntryPoint*)entryPointLayout, - kAxisCount, - &sizeAlongAxis[0]); + Int sizeAlongAxis[kThreadGroupAxisCount]; + getComputeThreadGroupSize(irFunc, sizeAlongAxis); m_writer->emit("layout("); char const* axes[] = { "x", "y", "z" }; - for (int ii = 0; ii < 3; ++ii) + for (int ii = 0; ii < kThreadGroupAxisCount; ++ii) { if (ii != 0) m_writer->emit(", "); m_writer->emit("local_size_"); @@ -687,16 +679,19 @@ void GLSLSourceEmitter::emitEntryPointAttributesImpl(IRFunc* irFunc, EntryPointL break; case Stage::Geometry: { - if (auto attrib = entryPointLayout->getFuncDecl()->FindModifier<MaxVertexCountAttribute>()) + if (auto decor = irFunc->findDecoration<IRMaxVertexCountDecoration>()) { + auto count = GetIntVal(decor->getCount()); m_writer->emit("layout(max_vertices = "); - m_writer->emit(attrib->value); + m_writer->emit(Int(count)); m_writer->emit(") out;\n"); } - if (auto attrib = entryPointLayout->getFuncDecl()->FindModifier<InstanceAttribute>()) + + if (auto decor = irFunc->findDecoration<IRInstanceDecoration>()) { + auto count = GetIntVal(decor->getCount()); m_writer->emit("layout(invocations = "); - m_writer->emit(attrib->value); + m_writer->emit(Int(count)); m_writer->emit(") in;\n"); } |
