spirv: Remove dependencies on Environment when generating SPIR-V
This commit is contained in:
		| @@ -126,12 +126,12 @@ Id DefineMain(EmitContext& ctx, IR::Program& program) { | ||||
|     return main; | ||||
| } | ||||
|  | ||||
| void DefineEntryPoint(Environment& env, const IR::Program& program, EmitContext& ctx, Id main) { | ||||
| void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) { | ||||
|     const std::span interfaces(ctx.interfaces.data(), ctx.interfaces.size()); | ||||
|     spv::ExecutionModel execution_model{}; | ||||
|     switch (program.stage) { | ||||
|     case Shader::Stage::Compute: { | ||||
|         const std::array<u32, 3> workgroup_size{env.WorkgroupSize()}; | ||||
|         const std::array<u32, 3> workgroup_size{program.workgroup_size}; | ||||
|         execution_model = spv::ExecutionModel::GLCompute; | ||||
|         ctx.AddExecutionMode(main, spv::ExecutionMode::LocalSize, workgroup_size[0], | ||||
|                              workgroup_size[1], workgroup_size[2]); | ||||
| @@ -148,7 +148,7 @@ void DefineEntryPoint(Environment& env, const IR::Program& program, EmitContext& | ||||
|         } | ||||
|         break; | ||||
|     default: | ||||
|         throw NotImplementedException("Stage {}", env.ShaderStage()); | ||||
|         throw NotImplementedException("Stage {}", program.stage); | ||||
|     } | ||||
|     ctx.AddEntryPoint(execution_model, main, "main", interfaces); | ||||
| } | ||||
| @@ -267,11 +267,10 @@ Id PhiArgDef(EmitContext& ctx, IR::Inst* inst, size_t index) { | ||||
| } | ||||
| } // Anonymous namespace | ||||
|  | ||||
| std::vector<u32> EmitSPIRV(const Profile& profile, Environment& env, IR::Program& program, | ||||
|                            u32& binding) { | ||||
| std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, u32& binding) { | ||||
|     EmitContext ctx{profile, program, binding}; | ||||
|     const Id main{DefineMain(ctx, program)}; | ||||
|     DefineEntryPoint(env, program, ctx, main); | ||||
|     DefineEntryPoint(program, ctx, main); | ||||
|     if (profile.support_float_controls) { | ||||
|         ctx.AddExtension("SPV_KHR_float_controls"); | ||||
|         SetupDenormControl(profile, program, ctx, main); | ||||
|   | ||||
| @@ -8,15 +8,14 @@ | ||||
|  | ||||
| #include "common/common_types.h" | ||||
| #include "shader_recompiler/backend/spirv/emit_context.h" | ||||
| #include "shader_recompiler/environment.h" | ||||
| #include "shader_recompiler/frontend/ir/microinstruction.h" | ||||
| #include "shader_recompiler/frontend/ir/program.h" | ||||
| #include "shader_recompiler/profile.h" | ||||
|  | ||||
| namespace Shader::Backend::SPIRV { | ||||
|  | ||||
| [[nodiscard]] std::vector<u32> EmitSPIRV(const Profile& profile, Environment& env, | ||||
|                                          IR::Program& program, u32& binding); | ||||
| [[nodiscard]] std::vector<u32> EmitSPIRV(const Profile& profile, IR::Program& program, | ||||
|                                          u32& binding); | ||||
|  | ||||
| // Microinstruction emitters | ||||
| Id EmitPhi(EmitContext& ctx, IR::Inst* inst); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user