summaryrefslogtreecommitdiff
path: root/src/gallium/drivers/r300/r300_emit.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gallium/drivers/r300/r300_emit.c')
-rw-r--r--src/gallium/drivers/r300/r300_emit.c31
1 files changed, 21 insertions, 10 deletions
diff --git a/src/gallium/drivers/r300/r300_emit.c b/src/gallium/drivers/r300/r300_emit.c
index dd6cc4d4f84..2a03e5a70f1 100644
--- a/src/gallium/drivers/r300/r300_emit.c
+++ b/src/gallium/drivers/r300/r300_emit.c
@@ -295,6 +295,26 @@ void r300_emit_gpu_flush(struct r300_context *r300, unsigned size, void *state)
END_CS;
}
+void r300_emit_aa_state(struct r300_context *r300, unsigned size, void *state)
+{
+ struct r300_aa_state *aa = (struct r300_aa_state*)state;
+ CS_LOCALS(r300);
+
+ BEGIN_CS(size);
+ OUT_CS_REG(R300_GB_AA_CONFIG, aa->aa_config);
+
+ if (aa->dest) {
+ OUT_CS_REG_SEQ(R300_RB3D_AARESOLVE_OFFSET, 1);
+ OUT_CS_RELOC(aa->dest->buffer, aa->dest->offset, 0, aa->dest->domain, 0);
+
+ OUT_CS_REG_SEQ(R300_RB3D_AARESOLVE_PITCH, 1);
+ OUT_CS_RELOC(aa->dest->buffer, aa->dest->pitch, 0, aa->dest->domain, 0);
+ }
+
+ OUT_CS_REG(R300_RB3D_AARESOLVE_CTL, aa->aaresolve_ctl);
+ END_CS;
+}
+
void r300_emit_fb_state(struct r300_context* r300, unsigned size, void* state)
{
struct pipe_framebuffer_state* fb = (struct pipe_framebuffer_state*)state;
@@ -511,7 +531,7 @@ void r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state)
struct r300_rs_state* rs = state;
struct pipe_framebuffer_state* fb = r300->fb_state.state;
float scale, offset;
- unsigned mspos0, mspos1, aa_config;
+ unsigned mspos0, mspos1;
CS_LOCALS(r300);
BEGIN_CS(size);
@@ -520,26 +540,21 @@ void r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state)
/* Multisampling. Depends on framebuffer sample count. */
if (r300->rws->get_value(r300->rws, R300_VID_DRM_2_3_0)) {
if (fb->nr_cbufs && fb->cbufs[0]->texture->nr_samples > 1) {
- aa_config = R300_GB_AA_CONFIG_AA_ENABLE;
/* Subsample placement. These may not be optimal. */
switch (fb->cbufs[0]->texture->nr_samples) {
case 2:
- aa_config |= R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_2;
mspos0 = 0x33996633;
mspos1 = 0x6666663;
break;
case 3:
- aa_config |= R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_3;
mspos0 = 0x33936933;
mspos1 = 0x6666663;
break;
case 4:
- aa_config |= R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_4;
mspos0 = 0x33939933;
mspos1 = 0x3966663;
break;
case 6:
- aa_config |= R300_GB_AA_CONFIG_NUM_AA_SUBSAMPLES_6;
mspos0 = 0x22a2aa22;
mspos1 = 0x2a65672;
break;
@@ -553,14 +568,10 @@ void r300_emit_rs_state(struct r300_context* r300, unsigned size, void* state)
OUT_CS_REG_SEQ(R300_GB_MSPOS0, 2);
OUT_CS(mspos0);
OUT_CS(mspos1);
-
- OUT_CS_REG(R300_GB_AA_CONFIG, aa_config);
} else {
OUT_CS_REG_SEQ(R300_GB_MSPOS0, 2);
OUT_CS(rs->multisample_position_0);
OUT_CS(rs->multisample_position_1);
-
- OUT_CS_REG(R300_GB_AA_CONFIG, rs->antialiasing_config);
}
}