OSDN Git Service

r600g: only set the index type if drawing is indexed
authorMarek Olšák <maraeo@gmail.com>
Wed, 18 Jul 2012 04:13:34 +0000 (06:13 +0200)
committerMarek Olšák <maraeo@gmail.com>
Wed, 18 Jul 2012 04:25:37 +0000 (06:25 +0200)
src/gallium/drivers/r600/r600_state_common.c

index d114093..d3d0983 100644 (file)
@@ -1089,13 +1089,14 @@ void r600_draw_vbo(struct pipe_context *ctx, const struct pipe_draw_info *dinfo)
        }
 
        /* draw packet */
-       cs->buf[cs->cdw++] = PKT3(PKT3_INDEX_TYPE, 0, rctx->predicate_drawing);
-       cs->buf[cs->cdw++] = ib.index_size == 4 ?
-                               (VGT_INDEX_32 | (R600_BIG_ENDIAN ? VGT_DMA_SWAP_32_BIT : 0)) :
-                               (VGT_INDEX_16 | (R600_BIG_ENDIAN ? VGT_DMA_SWAP_16_BIT : 0));
        cs->buf[cs->cdw++] = PKT3(PKT3_NUM_INSTANCES, 0, rctx->predicate_drawing);
        cs->buf[cs->cdw++] = info.instance_count;
        if (info.indexed) {
+               cs->buf[cs->cdw++] = PKT3(PKT3_INDEX_TYPE, 0, rctx->predicate_drawing);
+               cs->buf[cs->cdw++] = ib.index_size == 4 ?
+                                       (VGT_INDEX_32 | (R600_BIG_ENDIAN ? VGT_DMA_SWAP_32_BIT : 0)) :
+                                       (VGT_INDEX_16 | (R600_BIG_ENDIAN ? VGT_DMA_SWAP_16_BIT : 0));
+
                va = r600_resource_va(ctx->screen, ib.buffer);
                va += ib.offset;
                cs->buf[cs->cdw++] = PKT3(PKT3_DRAW_INDEX, 3, rctx->predicate_drawing);