diff options
author | ReinUsesLisp <reinuseslisp@airmail.cc> | 2021-04-12 19:41:22 -0300 |
---|---|---|
committer | ameerj <52414509+ameerj@users.noreply.github.com> | 2021-07-22 21:51:27 -0400 |
commit | f263760c5a3aff771123b32b15677e1f7a089640 (patch) | |
tree | 3d9c41ce708beb8a76f28ceee1c9ebb25108a471 /src/shader_recompiler/frontend/maxwell/program.cpp | |
parent | a6cef71cc0b03f929f1bc97152b302562f46bc53 (diff) |
shader: Implement geometry shaders
Diffstat (limited to 'src/shader_recompiler/frontend/maxwell/program.cpp')
-rw-r--r-- | src/shader_recompiler/frontend/maxwell/program.cpp | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/src/shader_recompiler/frontend/maxwell/program.cpp b/src/shader_recompiler/frontend/maxwell/program.cpp index aaf2a74a7b..ab67446c80 100644 --- a/src/shader_recompiler/frontend/maxwell/program.cpp +++ b/src/shader_recompiler/frontend/maxwell/program.cpp @@ -69,9 +69,20 @@ IR::Program TranslateProgram(ObjectPool<IR::Inst>& inst_pool, ObjectPool<IR::Blo program.post_order_blocks = PostOrder(program.blocks); program.stage = env.ShaderStage(); program.local_memory_size = env.LocalMemorySize(); - if (program.stage == Stage::Compute) { + switch (program.stage) { + case Stage::Geometry: { + const ProgramHeader& sph{env.SPH()}; + program.output_topology = sph.common3.output_topology; + program.output_vertices = sph.common4.max_output_vertices; + program.invocations = sph.common2.threads_per_input_primitive; + break; + } + case Stage::Compute: program.workgroup_size = env.WorkgroupSize(); program.shared_memory_size = env.SharedMemorySize(); + break; + default: + break; } RemoveUnreachableBlocks(program); |