brw: layout patch in VUE in position independent way

Only if required. I somehow misunderstood that those would need to be
independent too, not just the vertex slots.

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Fixes: 8dee4813b0 ("brw: add ability to compute VUE map for separate tcs/tes")
Acked-by: Mike Blumenkrantz <michael.blumenkrantz@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37251>
This commit is contained in:
Lionel Landwerlin
2025-09-09 13:50:12 +03:00
committed by Marge Bot
parent 73383fe7ef
commit 8e93e7cd72
2 changed files with 7 additions and 6 deletions
@@ -670,6 +670,5 @@ wayland-dEQP-EGL.functional.resize.surface_size.stretch_width,Fail
# shader objects #13839
KHR-GL46.separable_programs_tf.tessellation_active,Fail
spec@arb_fragment_program@fog-modes,Crash
spec@arb_separate_shader_objects@mix-and-match-tcs-tes,Fail
spec@arb_occlusion_query@occlusion_query_meta_fragments,Fail
spec@arb_occlusion_query@occlusion_query_meta_save,Fail
+7 -5
View File
@@ -352,12 +352,14 @@ brw_compute_tess_vue_map(struct intel_vue_map *vue_map,
assign_vue_slot(vue_map, VARYING_SLOT_TESS_LEVEL_OUTER, slot++);
/* first assign per-patch varyings */
while (patch_slots != 0) {
const int varying = ffsll(patch_slots) - 1;
if (vue_map->varying_to_slot[varying + VARYING_SLOT_PATCH0] == -1) {
assign_vue_slot(vue_map, varying + VARYING_SLOT_PATCH0, slot++);
const int first_patch_slot = slot;
u_foreach_bit64(patch, patch_slots) {
if (separate) {
slot = first_patch_slot + patch;
assign_vue_slot(vue_map, VARYING_SLOT_PATCH0 + patch, slot++);
} else {
assign_vue_slot(vue_map, VARYING_SLOT_PATCH0 + patch, slot++);
}
patch_slots &= ~BITFIELD64_BIT(varying);
}
/* apparently, including the patch header... */