emit_spirv: Add Xfb execution mode when transform feedback is used
Fixes Transform Feedback on Vulkan AMD drivers.
This commit is contained in:
		| @@ -387,6 +387,14 @@ void SetupSignedNanCapabilities(const Profile& profile, const IR::Program& progr | ||||
|     } | ||||
| } | ||||
|  | ||||
| void SetupTransformFeedbackCapabilities(EmitContext& ctx, Id main_func) { | ||||
|     if (ctx.runtime_info.xfb_varyings.empty()) { | ||||
|         return; | ||||
|     } | ||||
|     ctx.AddCapability(spv::Capability::TransformFeedback); | ||||
|     ctx.AddExecutionMode(main_func, spv::ExecutionMode::Xfb); | ||||
| } | ||||
|  | ||||
| void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ctx) { | ||||
|     if (info.uses_sampled_1d) { | ||||
|         ctx.AddCapability(spv::Capability::Sampled1D); | ||||
| @@ -442,9 +450,6 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct | ||||
|     if (info.uses_sample_id) { | ||||
|         ctx.AddCapability(spv::Capability::SampleRateShading); | ||||
|     } | ||||
|     if (!ctx.runtime_info.xfb_varyings.empty()) { | ||||
|         ctx.AddCapability(spv::Capability::TransformFeedback); | ||||
|     } | ||||
|     if (info.uses_derivatives) { | ||||
|         ctx.AddCapability(spv::Capability::DerivativeControl); | ||||
|     } | ||||
| @@ -484,6 +489,7 @@ std::vector<u32> EmitSPIRV(const Profile& profile, const RuntimeInfo& runtime_in | ||||
|         SetupSignedNanCapabilities(profile, program, ctx, main); | ||||
|     } | ||||
|     SetupCapabilities(profile, program.info, ctx); | ||||
|     SetupTransformFeedbackCapabilities(ctx, main); | ||||
|     PatchPhiNodes(program, ctx); | ||||
|     return ctx.Assemble(); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user