nvc0: Handle user mapped vertex buffer for edgeflag
authorMaarten Lankhorst <maarten.lankhorst@canonical.com>
Tue, 18 Mar 2014 13:47:40 +0000 (14:47 +0100)
committerMaarten Lankhorst <maarten.lankhorst@canonical.com>
Tue, 18 Mar 2014 13:51:06 +0000 (14:51 +0100)
Handle mapping edgeflag data similar to the code around it.
This fixes a crash in piglit test gl-2.0-edgeflag.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
src/gallium/drivers/nouveau/nvc0/nvc0_vbo_translate.c

index 51e751cfa578d840aa21b144fea8333194bee24f..952828a75fc19b7b5b2c31ee9289adfe1f48af6f 100644 (file)
@@ -98,11 +98,16 @@ nvc0_push_map_edgeflag(struct push_context *ctx, struct nvc0_context *nvc0,
    struct pipe_vertex_element *ve = &nvc0->vertex->element[attr].pipe;
    struct pipe_vertex_buffer *vb = &nvc0->vtxbuf[ve->vertex_buffer_index];
    struct nv04_resource *buf = nv04_resource(vb->buffer);
-   unsigned offset = vb->buffer_offset + ve->src_offset;
 
    ctx->edgeflag.stride = vb->stride;
-   ctx->edgeflag.data = nouveau_resource_map_offset(&nvc0->base,
+   if (buf) {
+      unsigned offset = vb->buffer_offset + ve->src_offset;
+      ctx->edgeflag.data = nouveau_resource_map_offset(&nvc0->base,
                            buf, offset, NOUVEAU_BO_RD);
+   } else {
+      ctx->edgeflag.data = (const uint8_t *)vb->user_buffer + ve->src_offset;
+   }
+
    if (index_bias)
       ctx->edgeflag.data += (intptr_t)index_bias * vb->stride;
 }