diff options
Diffstat (limited to 'src/mesa/drivers/dri/i965/gen6_cc.c')
-rw-r--r-- | src/mesa/drivers/dri/i965/gen6_cc.c | 23 |
1 files changed, 18 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/gen6_cc.c b/src/mesa/drivers/dri/i965/gen6_cc.c index e4ec1707f09..466ef4312c3 100644 --- a/src/mesa/drivers/dri/i965/gen6_cc.c +++ b/src/mesa/drivers/dri/i965/gen6_cc.c @@ -39,6 +39,7 @@ static void gen6_upload_blend_state(struct brw_context *brw) { bool is_buffer_zero_integer_format = false; + struct intel_context *intel = &brw->intel; struct gl_context *ctx = &brw->intel.ctx; struct gen6_blend_state *blend; int b; @@ -223,7 +224,20 @@ gen6_upload_blend_state(struct brw_context *brw) } } - brw->state.dirty.cache |= CACHE_NEW_BLEND_STATE; + /* Point the GPU at the new indirect state. */ + if (intel->gen == 6) { + BEGIN_BATCH(4); + OUT_BATCH(_3DSTATE_CC_STATE_POINTERS << 16 | (4 - 2)); + OUT_BATCH(brw->cc.blend_state_offset | 1); + OUT_BATCH(0); + OUT_BATCH(0); + ADVANCE_BATCH(); + } else { + BEGIN_BATCH(2); + OUT_BATCH(_3DSTATE_BLEND_STATE_POINTERS << 16 | (2 - 2)); + OUT_BATCH(brw->cc.blend_state_offset | 1); + ADVANCE_BATCH(); + } } const struct brw_tracked_state gen6_blend_state = { @@ -231,7 +245,7 @@ const struct brw_tracked_state gen6_blend_state = { .mesa = (_NEW_COLOR | _NEW_BUFFERS | _NEW_MULTISAMPLE), - .brw = BRW_NEW_BATCH, + .brw = BRW_NEW_BATCH | BRW_NEW_STATE_BASE_ADDRESS, .cache = 0, }, .emit = gen6_upload_blend_state, @@ -279,7 +293,7 @@ static void upload_cc_state_pointers(struct brw_context *brw) BEGIN_BATCH(4); OUT_BATCH(_3DSTATE_CC_STATE_POINTERS << 16 | (4 - 2)); - OUT_BATCH(brw->cc.blend_state_offset | 1); + OUT_BATCH(0); OUT_BATCH(brw->cc.depth_stencil_state_offset | 1); OUT_BATCH(brw->cc.state_offset | 1); ADVANCE_BATCH(); @@ -290,8 +304,7 @@ const struct brw_tracked_state gen6_cc_state_pointers = { .mesa = 0, .brw = (BRW_NEW_BATCH | BRW_NEW_STATE_BASE_ADDRESS), - .cache = (CACHE_NEW_BLEND_STATE | - CACHE_NEW_COLOR_CALC_STATE | + .cache = (CACHE_NEW_COLOR_CALC_STATE | CACHE_NEW_DEPTH_STENCIL_STATE) }, .emit = upload_cc_state_pointers, |