ilo: trust vertex element count more
authorChia-I Wu <olvaffe@gmail.com>
Sat, 13 Sep 2014 16:15:20 +0000 (00:15 +0800)
committerChia-I Wu <olvaffe@gmail.com>
Sat, 13 Sep 2014 16:30:33 +0000 (00:30 +0800)
We might run into ve->count == 0 and last_velement_edgeflag == true in
gen6_3DSTATE_VERTEX_ELEMENTS() when the state tracker sets an invalid
combination of VS and VE (does not seem to happen with st/mesa).  Do not
assume ve->count is positive when last_velement_edgeflag is true.

Reported by Coverity.

Signed-off-by: Chia-I Wu <olvaffe@gmail.com>
src/gallium/drivers/ilo/ilo_builder_3d_top.h

index e742f63d69812aa5dbd6a22388dc485afda81b8e..4e3dcff3c037f6f2a1c1a4f2a1ffd771c87402d7 100644 (file)
@@ -537,7 +537,7 @@ gen6_3DSTATE_VERTEX_ELEMENTS(struct ilo_builder *builder,
       dw += 2;
    }
 
-   if (last_velement_edgeflag) {
+   if (last_velement_edgeflag && ve->count) {
       struct ilo_ve_cso edgeflag;
 
       for (i = 0; i < ve->count - 1; i++)
@@ -546,8 +546,7 @@ gen6_3DSTATE_VERTEX_ELEMENTS(struct ilo_builder *builder,
       edgeflag = ve->cso[i];
       ve_set_cso_edgeflag(builder->dev, &edgeflag);
       memcpy(&dw[2 * i], edgeflag.payload, sizeof(edgeflag.payload));
-   }
-   else {
+   } else {
       for (i = 0; i < ve->count; i++)
          memcpy(&dw[2 * i], ve->cso[i].payload, sizeof(ve->cso[i].payload));
    }