From b7cb6552981e7a655782092c1d66e46ce1ab155e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Tue, 15 Jan 2013 21:41:34 +0100 Subject: [PATCH] r300g: enable AA optimizations for the RGBA16F format --- src/gallium/drivers/r300/r300_emit.c | 5 +++++ src/gallium/drivers/r300/r300_state.c | 3 +++ src/gallium/drivers/r300/r300_texture_desc.c | 4 +++- 3 files changed, 11 insertions(+), 1 deletion(-) 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; }