i965: Use gl_vertex_format in brw_vertex_element.
authorMathias Fröhlich <mathias.froehlich@web.de>
Tue, 11 Dec 2018 17:45:43 +0000 (18:45 +0100)
committerMarge Bot <eric+marge@anholt.net>
Tue, 10 Mar 2020 14:28:37 +0000 (14:28 +0000)
State upload needs to cope with the vertex format
rather than with the full attribute data.

Reviewed-by: Matt Turner <mattst88@gmail.com>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Mathias Fröhlich <Mathias.Froehlich@web.de>
Tested-by: Marge Bot <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/308>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/308>

src/mesa/drivers/dri/i965/brw_context.h
src/mesa/drivers/dri/i965/brw_draw_upload.c
src/mesa/drivers/dri/i965/genX_state_upload.c

index 586f926fb184d6925b89f426ec755b0887ec41e2..05933af443081706eff6c5fdf96e2d8f423e919e 100644 (file)
@@ -446,7 +446,7 @@ struct brw_vertex_buffer {
    GLuint step_rate;
 };
 struct brw_vertex_element {
-   const struct gl_array_attributes *glattrib;
+   const struct gl_vertex_format *glformat;
 
    int buffer;
    bool is_dual_slot;
index ee581fc9696c5f56979bb84c883686485f15dff1..e87e077561448df6488c57d533b1f64ea0f11238 100644 (file)
@@ -518,7 +518,7 @@ brw_prepare_vertices(struct brw_context *brw)
          vertex_range_end = MAX2(vertex_range_end, rel_end);
 
          struct brw_vertex_element *input = &brw->vb.inputs[attr];
-         input->glattrib = glattrib;
+         input->glformat = &glattrib->Format;
          input->buffer = j;
          input->is_dual_slot = (vp->DualSlotInputs & BITFIELD64_BIT(attr)) != 0;
          input->offset = rel_offset;
@@ -607,7 +607,7 @@ brw_prepare_vertices(struct brw_context *brw)
          vertex_range_end = MAX2(vertex_range_end, rel_end);
 
          struct brw_vertex_element *input = &brw->vb.inputs[attr];
-         input->glattrib = glattrib;
+         input->glformat = &glattrib->Format;
          input->buffer = j;
          input->is_dual_slot = (vp->DualSlotInputs & BITFIELD64_BIT(attr)) != 0;
          input->offset = rel_offset;
@@ -663,7 +663,7 @@ brw_prepare_vertices(struct brw_context *brw)
             memset(cursor + size, 0, alignment - size);
 
          struct brw_vertex_element *input = &brw->vb.inputs[attr];
-         input->glattrib = glattrib;
+         input->glformat = &glattrib->Format;
          input->buffer = j;
          input->is_dual_slot = (vp->DualSlotInputs & BITFIELD64_BIT(attr)) != 0;
          input->offset = cursor - data;
index 0bd124011f494c283e9a581f4efcb57a008ec1d3..a3738e635112507cba09e0369f08524a6de3ef7e 100644 (file)
@@ -532,8 +532,7 @@ genX(emit_vertices)(struct brw_context *brw)
     */
    for (unsigned i = 0; i < brw->vb.nr_enabled; i++) {
       struct brw_vertex_element *input = brw->vb.enabled[i];
-      const struct gl_array_attributes *glattrib = input->glattrib;
-      uint32_t format = brw_get_vertex_surface_type(brw, &glattrib->Format);
+      uint32_t format = brw_get_vertex_surface_type(brw, input->glformat);
 
       if (uploads_needed(format, input->is_dual_slot) > 1)
          nr_elements++;
@@ -625,8 +624,8 @@ genX(emit_vertices)(struct brw_context *brw)
    unsigned i;
    for (i = 0; i < brw->vb.nr_enabled; i++) {
       const struct brw_vertex_element *input = brw->vb.enabled[i];
-      const struct gl_array_attributes *glattrib = input->glattrib;
-      uint32_t format = brw_get_vertex_surface_type(brw, &glattrib->Format);
+      const struct gl_vertex_format *glformat = input->glformat;
+      uint32_t format = brw_get_vertex_surface_type(brw, glformat);
       uint32_t comp0 = VFCOMP_STORE_SRC;
       uint32_t comp1 = VFCOMP_STORE_SRC;
       uint32_t comp2 = VFCOMP_STORE_SRC;
@@ -667,18 +666,17 @@ genX(emit_vertices)(struct brw_context *brw)
           * entry. */
          const unsigned offset = input->offset + c * 16;
 
-         const struct gl_array_attributes *glattrib = input->glattrib;
          const int size = (GEN_GEN < 8 && is_passthru_format(format)) ?
-            upload_format_size(upload_format) : glattrib->Format.Size;
+            upload_format_size(upload_format) : glformat->Size;
 
          switch (size) {
             case 0: comp0 = VFCOMP_STORE_0;
             case 1: comp1 = VFCOMP_STORE_0;
             case 2: comp2 = VFCOMP_STORE_0;
             case 3:
-               if (GEN_GEN >= 8 && glattrib->Format.Doubles) {
+               if (GEN_GEN >= 8 && glformat->Doubles) {
                   comp3 = VFCOMP_STORE_0;
-               } else if (glattrib->Format.Integer) {
+               } else if (glformat->Integer) {
                   comp3 = VFCOMP_STORE_1_INT;
                } else {
                   comp3 = VFCOMP_STORE_1_FP;
@@ -703,7 +701,7 @@ genX(emit_vertices)(struct brw_context *brw)
           *     to be specified as VFCOMP_STORE_0 in order to output a 256-bit
           *     vertex element."
           */
-         if (glattrib->Format.Doubles && !input->is_dual_slot) {
+         if (glformat->Doubles && !input->is_dual_slot) {
             /* Store vertex elements which correspond to double and dvec2 vertex
              * shader inputs as 128-bit vertex elements, instead of 256-bits.
              */
@@ -789,8 +787,8 @@ genX(emit_vertices)(struct brw_context *brw)
 
 #if GEN_GEN >= 6
    if (gen6_edgeflag_input) {
-      const struct gl_array_attributes *glattrib = gen6_edgeflag_input->glattrib;
-      const uint32_t format = brw_get_vertex_surface_type(brw, &glattrib->Format);
+      const struct gl_vertex_format *glformat = gen6_edgeflag_input->glformat;
+      const uint32_t format = brw_get_vertex_surface_type(brw, glformat);
 
       struct GENX(VERTEX_ELEMENT_STATE) elem_state = {
          .Valid = true,