From: Tapani Pälli Date: Tue, 28 Mar 2023 16:07:22 +0000 (+0300) Subject: anv: use primitive ID override when shader does not supply it X-Git-Tag: upstream/23.3.3~10942 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ca4ec49b0e0f51a3245c924ab50379673f11abfb;p=platform%2Fupstream%2Fmesa.git anv: use primitive ID override when shader does not supply it Patch moves over this fix from iris driver. Fixes following test on DG2: dEQP-VK.rasterization.culling.primitive_id Cc: mesa-stable Signed-off-by: Tapani Pälli Reviewed-by: Ivan Briano [v1] Reviewed-by: Lionel Landwerlin Part-of: --- diff --git a/src/intel/vulkan/genX_pipeline.c b/src/intel/vulkan/genX_pipeline.c index 6223f0d..68c5eb9 100644 --- a/src/intel/vulkan/genX_pipeline.c +++ b/src/intel/vulkan/genX_pipeline.c @@ -512,6 +512,19 @@ emit_3dstate_sbe(struct anv_graphics_pipeline *pipeline) sbe.VertexURBEntryReadLength = DIV_ROUND_UP(max_source_attr + 1, 2); sbe.ForceVertexURBEntryReadOffset = true; sbe.ForceVertexURBEntryReadLength = true; + + /* Ask the hardware to supply PrimitiveID if the fragment shader + * reads it but a previous stage didn't write one. + */ + if ((wm_prog_data->inputs & VARYING_BIT_PRIMITIVE_ID) && + fs_input_map->varying_to_slot[VARYING_SLOT_PRIMITIVE_ID] == -1) { + sbe.PrimitiveIDOverrideAttributeSelect = + wm_prog_data->urb_setup[VARYING_SLOT_PRIMITIVE_ID]; + sbe.PrimitiveIDOverrideComponentX = true; + sbe.PrimitiveIDOverrideComponentY = true; + sbe.PrimitiveIDOverrideComponentZ = true; + sbe.PrimitiveIDOverrideComponentW = true; + } } else { assert(anv_pipeline_is_mesh(pipeline)); #if GFX_VERx10 >= 125