summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2013-01-15 21:41:34 +0100
committerMarek Olšák <[email protected]>2013-01-21 17:00:51 +0100
commitb7cb6552981e7a655782092c1d66e46ce1ab155e (patch)
tree2fab9235f8540cf57b8fd58228c4757a623239d6
parent6f6112a2b982462667ba36a6f3ba381558780e8a (diff)
r300g: enable AA optimizations for the RGBA16F format
-rw-r--r--src/gallium/drivers/r300/r300_emit.c5
-rw-r--r--src/gallium/drivers/r300/r300_state.c3
-rw-r--r--src/gallium/drivers/r300/r300_texture_desc.c4
3 files changed, 11 insertions, 1 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index b3dc2a041be..93f710c6e5c 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -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);
+ }
}
}
diff --git a/src/gallium/drivers/r300/r300_state.c b/src/gallium/drivers/r300/r300_state.c
index fa256aa2c55..e5d9bebb2c9 100644
--- a/src/gallium/drivers/r300/r300_state.c
+++ b/src/gallium/drivers/r300/r300_state.c
@@ -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. */
diff --git a/src/gallium/drivers/r300/r300_texture_desc.c b/src/gallium/drivers/r300/r300_texture_desc.c
index 46f07e2c522..889b8e8b155 100644
--- a/src/gallium/drivers/r300/r300_texture_desc.c
+++ b/src/gallium/drivers/r300/r300_texture_desc.c
@@ -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;
}