summaryrefslogtreecommitdiff
path: root/source/slang/slang-emit-glsl.cpp
diff options
context:
space:
mode:
authorjsmall-nvidia <jsmall@nvidia.com>2019-10-04 09:46:03 -0400
committerGitHub <noreply@github.com>2019-10-04 09:46:03 -0400
commit7c8527d20e433c3a10736136d31e4cd882a3baaa (patch)
tree44032051a4d76c8773b8a503dae14d9c8c9e786d /source/slang/slang-emit-glsl.cpp
parent0bc7d9b0aeb77c40befeb3618240a065374216a1 (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.cpp25
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");
}