svga: add max DMA size check in svga_winsys_buffer_create()
authorBrian Paul <brianp@vmware.com>
Fri, 11 Feb 2011 18:56:44 +0000 (11:56 -0700)
committerBrian Paul <brianp@vmware.com>
Fri, 11 Feb 2011 18:56:45 +0000 (11:56 -0700)
This fixes a problem when trying to use large (2K x 2K) texture
images.  We'll DMA the image in chunks.

Patch written by Jose.

src/gallium/drivers/svga/svga_resource_buffer_upload.c

index 765d2f34082f33ff34b18c9804e2dcc86a998df0..fdc0329f6c9daaf2886d4dde7b47a9680120eb8c 100644 (file)
@@ -40,6 +40,9 @@
 #include "svga_debug.h"
 
 
+#define MAX_DMA_SIZE (8 * 1024 * 1024)
+
+
 /**
  * Allocate a winsys_buffer (ie. DMA, aka GMR memory).
  *
@@ -57,6 +60,13 @@ svga_winsys_buffer_create( struct svga_context *svga,
    struct svga_winsys_screen *sws = svgascreen->sws;
    struct svga_winsys_buffer *buf;
    
+   /* XXX this shouldn't be a hard-coded number; it should be queried
+    * somehow.
+    */
+   if (size > MAX_DMA_SIZE) {
+      return NULL;
+   }
+
    /* Just try */
    buf = sws->buffer_create(sws, alignment, usage, size);
    if(!buf) {