r300g: fix warnings
[mesa.git] / src / gallium / drivers / r300 / r300_screen.c
index 497e24b7605bd9427447467283002b61adafb591..cad99ca8453abe756419d7a14a6e10c717603322 100644 (file)
@@ -30,6 +30,7 @@
 #include "r300_screen_buffer.h"
 #include "r300_state_inlines.h"
 #include "r300_winsys.h"
+#include "r300_public.h"
 
 /* Return the identifier behind whom the brave coders responsible for this
  * amalgamation of code, sweat, and duct tape, routinely obscure their names.
@@ -206,6 +207,8 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
             return 1; /* XXX guessed */
         case PIPE_CAP_MAX_VS_PREDS:
             return is_r500 ? 4 : 0; /* XXX guessed. */
+        case PIPE_CAP_GEOMETRY_SHADER4:
+            return 0;
 
         default:
             fprintf(stderr, "r300: Implementation error: Bad param %d\n",
@@ -269,15 +272,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. */
@@ -319,6 +331,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;
 }
 
@@ -366,7 +384,7 @@ static int r300_fence_finish(struct pipe_screen *screen,
     return 0; /* 0 == success */
 }
 
-struct pipe_screen* r300_create_screen(struct r300_winsys_screen *rws)
+struct pipe_screen* r300_screen_create(struct r300_winsys_screen *rws)
 {
     struct r300_screen *r300screen = CALLOC_STRUCT(r300_screen);