nv50: make a working check for user memory vertex/index buffers
authorChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 20 Apr 2010 20:01:37 +0000 (22:01 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Tue, 20 Apr 2010 20:08:10 +0000 (22:08 +0200)
src/gallium/drivers/nv50/nv50_resource.h
src/gallium/drivers/nv50/nv50_vbo.c

index 6cf7662124b4d638891bdb76a6db479fd0656c82..f435a5892e51b96ea648f51fa80740caa5276612 100644 (file)
@@ -4,6 +4,8 @@
 
 #include "util/u_transfer.h"
 
+#include "nouveau/nouveau_winsys.h"
+
 struct pipe_resource;
 struct nouveau_bo;
 
@@ -49,6 +51,12 @@ struct nv50_resource *nv50_resource(struct pipe_resource *resource)
        return (struct nv50_resource *)resource;
 }
 
+/* is resource mapped into the GPU's address space (i.e. VRAM or GART) ? */
+static INLINE boolean
+nv50_resource_mapped_by_gpu(struct pipe_resource *resource)
+{
+   return nv50_resource(resource)->bo->handle;
+}
 
 void
 nv50_init_resource_functions(struct pipe_context *pcontext);
index 34719c956a0394c1208a51f0aa6f55755d3e3e4e..864cb09352a1d4f89b333ceea280af147816fbdd 100644 (file)
@@ -412,7 +412,7 @@ nv50_draw_elements_instanced(struct pipe_context *pipe,
        BEGIN_RING(chan, tesla, NV50TCL_VB_ELEMENT_BASE, 1);
        OUT_RING  (chan, indexBias);
 
-       if (!(indexBuffer->bind & PIPE_BIND_INDEX_BUFFER) || indexSize == 1) {
+       if (!nv50_resource_mapped_by_gpu(indexBuffer) || indexSize == 1) {
                nv50_draw_elements_inline(pipe, indexBuffer, indexSize,
                                          mode, start, count, startInstance,
                                          instanceCount);
@@ -565,7 +565,7 @@ nv50_vbo_validate(struct nv50_context *nv50)
 
        for (i = 0; i < nv50->vtxbuf_nr; i++) {
                if (nv50->vtxbuf[i].stride &&
-                   !(nv50->vtxbuf[i].buffer->bind & PIPE_BIND_VERTEX_BUFFER))
+                   !nv50_resource_mapped_by_gpu(nv50->vtxbuf[i].buffer))
                        nv50->vbo_fifo = 0xffff;
        }