shader: Implement PIXLD.MY_INDEX
This commit is contained in:
		| @@ -998,6 +998,9 @@ void EmitContext::DefineInputs(const Info& info) { | ||||
|     if (info.uses_invocation_id) { | ||||
|         invocation_id = DefineInput(*this, U32[1], false, spv::BuiltIn::InvocationId); | ||||
|     } | ||||
|     if (info.uses_sample_id) { | ||||
|         sample_id = DefineInput(*this, U32[1], false, spv::BuiltIn::SampleId); | ||||
|     } | ||||
|     if (info.uses_is_helper_invocation) { | ||||
|         is_helper_invocation = DefineInput(*this, U1, false, spv::BuiltIn::HelperInvocation); | ||||
|     } | ||||
|   | ||||
| @@ -149,6 +149,7 @@ public: | ||||
|     Id workgroup_id{}; | ||||
|     Id local_invocation_id{}; | ||||
|     Id invocation_id{}; | ||||
|     Id sample_id{}; | ||||
|     Id is_helper_invocation{}; | ||||
|     Id subgroup_local_invocation_id{}; | ||||
|     Id subgroup_mask_eq{}; | ||||
|   | ||||
| @@ -335,6 +335,9 @@ void SetupCapabilities(const Profile& profile, const Info& info, EmitContext& ct | ||||
|     if (info.uses_typeless_image_writes) { | ||||
|         ctx.AddCapability(spv::Capability::StorageImageWriteWithoutFormat); | ||||
|     } | ||||
|     if (info.uses_sample_id) { | ||||
|         ctx.AddCapability(spv::Capability::SampleRateShading); | ||||
|     } | ||||
|     if (!ctx.profile.xfb_varyings.empty()) { | ||||
|         ctx.AddCapability(spv::Capability::TransformFeedback); | ||||
|     } | ||||
|   | ||||
| @@ -70,6 +70,7 @@ void EmitSetOFlag(EmitContext& ctx); | ||||
| Id EmitWorkgroupId(EmitContext& ctx); | ||||
| Id EmitLocalInvocationId(EmitContext& ctx); | ||||
| Id EmitInvocationId(EmitContext& ctx); | ||||
| Id EmitSampleId(EmitContext& ctx); | ||||
| Id EmitIsHelperInvocation(EmitContext& ctx); | ||||
| Id EmitLoadLocal(EmitContext& ctx, Id word_offset); | ||||
| void EmitWriteLocal(EmitContext& ctx, Id word_offset, Id value); | ||||
|   | ||||
| @@ -391,6 +391,10 @@ Id EmitInvocationId(EmitContext& ctx) { | ||||
|     return ctx.OpLoad(ctx.U32[1], ctx.invocation_id); | ||||
| } | ||||
|  | ||||
| Id EmitSampleId(EmitContext& ctx) { | ||||
|     return ctx.OpLoad(ctx.U32[1], ctx.sample_id); | ||||
| } | ||||
|  | ||||
| Id EmitIsHelperInvocation(EmitContext& ctx) { | ||||
|     return ctx.OpLoad(ctx.U1, ctx.is_helper_invocation); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user