OSDN Git Service

r300g: enable AA optimizations for the RGBA16F format
authorMarek Olšák <maraeo@gmail.com>
Tue, 15 Jan 2013 20:41:34 +0000 (21:41 +0100)
committerMarek Olšák <maraeo@gmail.com>
Mon, 21 Jan 2013 16:00:51 +0000 (17:00 +0100)
src/gallium/drivers/r300/r300_emit.c
src/gallium/drivers/r300/r300_state.c
src/gallium/drivers/r300/r300_texture_desc.c

index b3dc2a0..93f710c 100644 (file)
@@ -427,6 +427,11 @@ void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
             OUT_CS_REG(R300_RB3D_CMASK_OFFSET0, 0);
             OUT_CS_REG(R300_RB3D_CMASK_PITCH0, surf->pitch_cmask);
             OUT_CS_REG(R300_RB3D_COLOR_CLEAR_VALUE, r300->color_clear_value);
+            if (r300->screen->caps.is_r500 && r300->screen->info.drm_minor >= 29) {
+                OUT_CS_REG_SEQ(R500_RB3D_COLOR_CLEAR_VALUE_AR, 2);
+                OUT_CS(r300->color_clear_value_ar);
+                OUT_CS(r300->color_clear_value_gb);
+            }
         }
     }
 
index fa256aa..e5d9beb 100644 (file)
@@ -827,6 +827,9 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
 
     if (r300->cmask_in_use) {
         r300->fb_state.size += 6;
+        if (r300->screen->caps.is_r500 && r300->screen->info.drm_minor >= 29) {
+            r300->fb_state.size += 3;
+        }
     }
 
     /* The size of the rest of atoms stays the same. */
index 46f07e2..889b8e8 100644 (file)
@@ -423,7 +423,9 @@ static void r300_setup_cmask_properties(struct r300_screen *screen,
         return;
     }
 
-    if (tex->b.b.format == PIPE_FORMAT_R16G16B16A16_FLOAT) {
+    /* FP16 AA needs R500 and a fairly new DRM. */
+    if (tex->b.b.format == PIPE_FORMAT_R16G16B16A16_FLOAT &&
+        (!screen->caps.is_r500 || screen->info.drm_minor < 29)) {
         return;
     }