Mesa (main): broadcom/compiler: handle compact input arrays for geometry shaders

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Mon Jul 12 07:56:03 UTC 2021


Module: Mesa
Branch: main
Commit: e1a24a0047739284f0cafec40045e82cdde7d5a3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=e1a24a0047739284f0cafec40045e82cdde7d5a3

Author: Iago Toral Quiroga <itoral at igalia.com>
Date:   Wed Jul  7 10:54:57 2021 +0200

broadcom/compiler: handle compact input arrays for geometry shaders

Clip distance arrays will come as compact array variables, so we need
to handle them as such, like we did for vertex inputs.

Fixes:
dEQP-VK.clipping.user_defined.clip_distance.vert_geom.{1,2,3,4}

Reviewed-by: Alejandro Piñeiro <apinheiro at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11783>

---

 src/broadcom/compiler/nir_to_vir.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/broadcom/compiler/nir_to_vir.c b/src/broadcom/compiler/nir_to_vir.c
index 67846aac2fe..91c2d256785 100644
--- a/src/broadcom/compiler/nir_to_vir.c
+++ b/src/broadcom/compiler/nir_to_vir.c
@@ -2048,13 +2048,26 @@ ntq_setup_gs_inputs(struct v3d_compile *c)
                  * in the input primitive, but here we only care about the
                  * per-vertex input type.
                  */
-                const struct glsl_type *type = glsl_without_array(var->type);
+                assert(glsl_type_is_array(var->type));
+                const struct glsl_type *type = glsl_get_array_element(var->type);
                 unsigned array_len = MAX2(glsl_get_length(type), 1);
                 unsigned loc = var->data.driver_location;
 
                 resize_qreg_array(c, &c->inputs, &c->inputs_array_size,
                                   (loc + array_len) * 4);
 
+                if (var->data.compact) {
+                        for (unsigned j = 0; j < array_len; j++) {
+                                unsigned input_idx = c->num_inputs++;
+                                unsigned loc_frac = var->data.location_frac + j;
+                                unsigned loc = var->data.location + loc_frac / 4;
+                                unsigned comp = loc_frac % 4;
+                                c->input_slots[input_idx] =
+                                        v3d_slot_from_slot_and_component(loc, comp);
+                        }
+                       continue;
+                }
+
                 for (unsigned j = 0; j < array_len; j++) {
                         unsigned num_elements = glsl_get_vector_elements(type);
                         for (unsigned k = 0; k < num_elements; k++) {



More information about the mesa-commit mailing list