diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/drivers/r300/r300_emit.c | 5 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_state.c | 3 | ||||
-rw-r--r-- | src/gallium/drivers/r300/r300_texture_desc.c | 4 |
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; } |