shader_recompiler: Implement manual barycentric interpolation path (#1644)

* shader_recompiler: Implement manual barycentric interpolation path

* clang format

* emit_spirv: Fix typo

* emit_spirv: Simplify variable definition

* spirv_emit: clang format
This commit is contained in:
TheTurtle 2024-12-02 23:20:54 +02:00 committed by GitHub
parent fda4f06518
commit eb844b9b63
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 129 additions and 58 deletions

View file

@ -206,7 +206,7 @@ Id DefineMain(EmitContext& ctx, const IR::Program& program) {
return main;
}
void SetupCapabilities(const Info& info, EmitContext& ctx) {
void SetupCapabilities(const Info& info, const Profile& profile, EmitContext& ctx) {
ctx.AddCapability(spv::Capability::Image1D);
ctx.AddCapability(spv::Capability::Sampled1D);
ctx.AddCapability(spv::Capability::ImageQuery);
@ -251,6 +251,10 @@ void SetupCapabilities(const Info& info, EmitContext& ctx) {
if (info.stage == Stage::Geometry) {
ctx.AddCapability(spv::Capability::Geometry);
}
if (info.stage == Stage::Fragment && profile.needs_manual_interpolation) {
ctx.AddExtension("SPV_KHR_fragment_shader_barycentric");
ctx.AddCapability(spv::Capability::FragmentBarycentricKHR);
}
}
void DefineEntryPoint(const IR::Program& program, EmitContext& ctx, Id main) {
@ -342,7 +346,7 @@ std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_in
EmitContext ctx{profile, runtime_info, program.info, binding};
const Id main{DefineMain(ctx, program)};
DefineEntryPoint(program, ctx, main);
SetupCapabilities(program.info, ctx);
SetupCapabilities(program.info, profile, ctx);
SetupFloatMode(ctx, profile, runtime_info, main);
PatchPhiNodes(program, ctx);
binding.user_data += program.info.ud_mask.NumRegs();