diff options
| author | 2021-05-21 02:12:32 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:33 -0400 | |
| commit | 9e7b6622c25aa858b96bf0f1c7f94223a2f449a2 (patch) | |
| tree | 48c62889aeb79d6f0f01a467ba0d1ac01dec512b /src/shader_recompiler/backend/spirv/emit_spirv.cpp | |
| parent | emit_glasm_context_get_and_set.cpp: Add missing semicolons (diff) | |
| download | yuzu-9e7b6622c25aa858b96bf0f1c7f94223a2f449a2.tar.gz yuzu-9e7b6622c25aa858b96bf0f1c7f94223a2f449a2.tar.xz yuzu-9e7b6622c25aa858b96bf0f1c7f94223a2f449a2.zip | |
shader: Split profile and runtime information in separate structs
Diffstat (limited to 'src/shader_recompiler/backend/spirv/emit_spirv.cpp')
| -rw-r--r-- | src/shader_recompiler/backend/spirv/emit_spirv.cpp | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/shader_recompiler/backend/spirv/emit_spirv.cpp b/src/shader_recompiler/backend/spirv/emit_spirv.cpp index 3e20ac3b9..cba420cda 100644 --- a/src/shader_recompiler/backend/spirv/emit_spirv.cpp +++ b/src/shader_recompiler/backend/spirv/emit_spirv.cpp | |||
| @@ -226,16 +226,17 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) { | |||
| 226 | case Stage::TessellationEval: | 226 | case Stage::TessellationEval: |
| 227 | execution_model = spv::ExecutionModel::TessellationEvaluation; | 227 | execution_model = spv::ExecutionModel::TessellationEvaluation; |
| 228 | ctx.AddCapability(spv::Capability::Tessellation); | 228 | ctx.AddCapability(spv::Capability::Tessellation); |
| 229 | ctx.AddExecutionMode(main, ExecutionMode(ctx.profile.tess_primitive)); | 229 | ctx.AddExecutionMode(main, ExecutionMode(ctx.runtime_info.tess_primitive)); |
| 230 | ctx.AddExecutionMode(main, ExecutionMode(ctx.profile.tess_spacing)); | 230 | ctx.AddExecutionMode(main, ExecutionMode(ctx.runtime_info.tess_spacing)); |
| 231 | ctx.AddExecutionMode(main, ctx.profile.tess_clockwise ? spv::ExecutionMode::VertexOrderCw | 231 | ctx.AddExecutionMode(main, ctx.runtime_info.tess_clockwise |
| 232 | : spv::ExecutionMode::VertexOrderCcw); | 232 | ? spv::ExecutionMode::VertexOrderCw |
| 233 | : spv::ExecutionMode::VertexOrderCcw); | ||
| 233 | break; | 234 | break; |
| 234 | case Stage::Geometry: | 235 | case Stage::Geometry: |
| 235 | execution_model = spv::ExecutionModel::Geometry; | 236 | execution_model = spv::ExecutionModel::Geometry; |
| 236 | ctx.AddCapability(spv::Capability::Geometry); | 237 | ctx.AddCapability(spv::Capability::Geometry); |
| 237 | ctx.AddCapability(spv::Capability::GeometryStreams); | 238 | ctx.AddCapability(spv::Capability::GeometryStreams); |
| 238 | switch (ctx.profile.input_topology) { | 239 | switch (ctx.runtime_info.input_topology) { |
| 239 | case InputTopology::Points: | 240 | case InputTopology::Points: |
| 240 | ctx.AddExecutionMode(main, spv::ExecutionMode::InputPoints); | 241 | ctx.AddExecutionMode(main, spv::ExecutionMode::InputPoints); |
| 241 | break; | 242 | break; |
| @@ -279,7 +280,7 @@ void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) { | |||
| 279 | if (program.info.stores_frag_depth) { | 280 | if (program.info.stores_frag_depth) { |
| 280 | ctx.AddExecutionMode(main, spv::ExecutionMode::DepthReplacing); | 281 | ctx.AddExecutionMode(main, spv::ExecutionMode::DepthReplacing); |
| 281 | } | 282 | } |
| 282 | if (ctx.profile.force_early_z) { | 283 | if (ctx.runtime_info.force_early_z) { |
| 283 | ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests); | 284 | ctx.AddExecutionMode(main, spv::ExecutionMode::EarlyFragmentTests); |
| 284 | } | 285 | } |
| 285 | break; | 286 | break; |
| @@ -402,7 +403,7 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct | |||
| 402 | if (info.uses_sample_id) { | 403 | if (info.uses_sample_id) { |
| 403 | ctx.AddCapability(spv::Capability::SampleRateShading); | 404 | ctx.AddCapability(spv::Capability::SampleRateShading); |
| 404 | } | 405 | } |
| 405 | if (!ctx.profile.xfb_varyings.empty()) { | 406 | if (!ctx.runtime_info.xfb_varyings.empty()) { |
| 406 | ctx.AddCapability(spv::Capability::TransformFeedback); | 407 | ctx.AddCapability(spv::Capability::TransformFeedback); |
| 407 | } | 408 | } |
| 408 | if (info.uses_derivatives) { | 409 | if (info.uses_derivatives) { |
| @@ -433,8 +434,9 @@ void PatchPhiNodes(IR::Program& program, EmitContext& ctx) { | |||
| 433 | } | 434 | } |
| 434 | } // Anonymous namespace | 435 | } // Anonymous namespace |
| 435 | 436 | ||
| 436 | std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, Bindings& binding) { | 437 | std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_info, |
| 437 | EmitContext ctx{profile, program, binding}; | 438 | IR::Program& program, Bindings& bindings) { |
| 439 | EmitContext ctx{profile, runtime_info, program, bindings}; | ||
| 438 | const Id main{DefineMain(ctx, program)}; | 440 | const Id main{DefineMain(ctx, program)}; |
| 439 | DefineEntryPoint(program, ctx, main); | 441 | DefineEntryPoint(program, ctx, main); |
| 440 | if (profile.support_float_controls) { | 442 | if (profile.support_float_controls) { |