Merge branch 'gallium-drm-driver-drescriptor'
[mesa.git] / src / gallium / drivers / r300 / r300_screen.c
index fd522b84e1a2017c985c2632586f6b472a348cab..5bba55906c3a7df9f0396f7d0c9d21d8b2258906 100644 (file)
@@ -270,15 +270,24 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
                             format == PIPE_FORMAT_R16G16B16_FLOAT ||
                             format == PIPE_FORMAT_R16G16B16A16_FLOAT;
 
-    if (target >= PIPE_MAX_TEXTURE_TYPES) {
-        fprintf(stderr, "r300: Implementation error: Received bogus texture "
-            "target %d in %s\n", target, __FUNCTION__);
-        return FALSE;
+    switch (sample_count) {
+        case 0:
+        case 1:
+            break;
+        case 2:
+        case 3:
+        case 4:
+        case 6:
+            if (usage != PIPE_BIND_RENDER_TARGET ||
+                !util_format_is_rgba8_variant(
+                    util_format_description(format))) {
+                return FALSE;
+            }
+            break;
+        default:
+            return FALSE;
     }
 
-   if (sample_count > 1)
-      return FALSE;
-
     /* Check sampler format support. */
     if ((usage & PIPE_BIND_SAMPLER_VIEW) &&
         /* Z24 cannot be sampled from on non-r5xx. */
@@ -320,6 +329,12 @@ static boolean r300_is_format_supported(struct pipe_screen* screen,
         retval |= PIPE_BIND_VERTEX_BUFFER;
     }
 
+    /* Transfers are always supported. */
+    if (usage & PIPE_BIND_TRANSFER_READ)
+        retval |= PIPE_BIND_TRANSFER_READ;
+    if (usage & PIPE_BIND_TRANSFER_WRITE)
+        retval |= PIPE_BIND_TRANSFER_WRITE;
+
     return retval == usage;
 }