r300: check if blitting for given format is supported earlier
authorMaciej Cencora <m.cencora@gmail.com>
Sat, 16 Jan 2010 21:44:30 +0000 (22:44 +0100)
committerMaciej Cencora <m.cencora@gmail.com>
Tue, 19 Jan 2010 22:38:33 +0000 (23:38 +0100)
Prevents failing assertions at later stage.

src/mesa/drivers/dri/r300/r300_blit.c

index 4f89a3147240eedd8dc1938e2cafaeac10d37d0f..99068886b7fc2f26f3557fe66a76ddb1cc29ed3a 100644 (file)
@@ -494,6 +494,27 @@ static void emit_cb_setup(struct r300_context *r300,
     END_BATCH();
 }
 
+static unsigned is_blit_supported(gl_format dst_format)
+{
+    switch (dst_format) {
+        case MESA_FORMAT_RGB565:
+        case MESA_FORMAT_ARGB1555:
+        case MESA_FORMAT_RGBA8888:
+        case MESA_FORMAT_RGBA8888_REV:
+        case MESA_FORMAT_ARGB8888:
+        case MESA_FORMAT_ARGB8888_REV:
+        case MESA_FORMAT_XRGB8888:
+            break;
+        default:
+            return 0;
+    }
+
+    if (_mesa_get_format_bits(dst_format, GL_DEPTH_BITS) > 0)
+        return 0;
+
+    return 1;
+}
+
 /**
  * Copy a region of [@a width x @a height] pixels from source buffer
  * to destination buffer.
@@ -541,7 +562,7 @@ unsigned r300_blit(GLcontext *ctx,
 {
     r300ContextPtr r300 = R300_CONTEXT(ctx);
 
-    if (_mesa_get_format_bits(src_mesaformat, GL_DEPTH_BITS) > 0)
+    if (!is_blit_supported(dst_mesaformat))
         return 0;
 
     /* Make sure that colorbuffer has even width - hw limitation */