#include "main/stencil.h"
#include "intel_batchbuffer.h"
-static void
-brw_upload_cc_vp(struct brw_context *brw)
-{
- struct gl_context *ctx = &brw->ctx;
- struct brw_cc_viewport *ccv;
-
- ccv = brw_state_batch(brw, AUB_TRACE_CC_VP_STATE,
- sizeof(*ccv) * ctx->Const.MaxViewports, 32,
- &brw->cc.vp_offset);
-
- /* _NEW_TRANSFORM */
- for (unsigned i = 0; i < ctx->Const.MaxViewports; i++) {
- if (ctx->Transform.DepthClamp) {
- /* _NEW_VIEWPORT */
- ccv[i].min_depth = MIN2(ctx->ViewportArray[i].Near,
- ctx->ViewportArray[i].Far);
- ccv[i].max_depth = MAX2(ctx->ViewportArray[i].Near,
- ctx->ViewportArray[i].Far);
- } else {
- ccv[i].min_depth = 0.0;
- ccv[i].max_depth = 1.0;
- }
- }
-
- if (brw->gen >= 7) {
- BEGIN_BATCH(2);
- OUT_BATCH(_3DSTATE_VIEWPORT_STATE_POINTERS_CC << 16 | (2 - 2));
- OUT_BATCH(brw->cc.vp_offset);
- ADVANCE_BATCH();
- } else {
- brw->state.dirty.brw |= BRW_NEW_CC_VP;
- }
-}
-
-const struct brw_tracked_state brw_cc_vp = {
- .dirty = {
- .mesa = _NEW_TRANSFORM |
- _NEW_VIEWPORT,
- .brw = BRW_NEW_BATCH,
- },
- .emit = brw_upload_cc_vp
-};
-
/**
* Modify blend function to force destination alpha to 1.0
*
struct gl_context *ctx = &brw->ctx;
struct brw_cc_unit_state *cc;
- cc = brw_state_batch(brw, AUB_TRACE_CC_STATE,
- sizeof(*cc), 64, &brw->cc.state_offset);
+ cc = brw_state_batch(brw, sizeof(*cc), 64, &brw->cc.state_offset);
memset(cc, 0, sizeof(*cc));
/* _NEW_STENCIL | _NEW_BUFFERS */
if (ctx->Color.ColorLogicOpEnabled && ctx->Color.LogicOp != GL_COPY) {
cc->cc2.logicop_enable = 1;
cc->cc5.logicop_func = intel_translate_logic_op(ctx->Color.LogicOp);
- } else if (ctx->Color.BlendEnabled) {
+ } else if (ctx->Color.BlendEnabled && !ctx->Color._AdvancedBlendMode) {
GLenum eqRGB = ctx->Color.Blend[0].EquationRGB;
GLenum eqA = ctx->Color.Blend[0].EquationA;
GLenum srcRGB = ctx->Color.Blend[0].SrcRGB;
cc->cc2.depth_test = 1;
cc->cc2.depth_test_function =
intel_translate_compare_func(ctx->Depth.Func);
- cc->cc2.depth_write_enable = ctx->Depth.Mask;
+ cc->cc2.depth_write_enable = brw_depth_writes_enabled(brw);
}
- if (brw->stats_wm || unlikely(INTEL_DEBUG & DEBUG_STATS))
+ if (brw->stats_wm)
cc->cc5.statistics_enable = 1;
/* BRW_NEW_CC_VP */
cc->cc4.cc_viewport_state_offset = (brw->batch.bo->offset64 +
brw->cc.vp_offset) >> 5; /* reloc */
- brw->state.dirty.brw |= BRW_NEW_GEN4_UNIT_STATE;
+ brw->ctx.NewDriverState |= BRW_NEW_GEN4_UNIT_STATE;
/* Emit CC viewport relocation */
- drm_intel_bo_emit_reloc(brw->batch.bo,
- (brw->cc.state_offset +
- offsetof(struct brw_cc_unit_state, cc4)),
- brw->batch.bo, brw->cc.vp_offset,
- I915_GEM_DOMAIN_INSTRUCTION, 0);
+ brw_emit_reloc(&brw->batch,
+ (brw->cc.state_offset +
+ offsetof(struct brw_cc_unit_state, cc4)),
+ brw->batch.bo, brw->cc.vp_offset,
+ I915_GEM_DOMAIN_INSTRUCTION, 0);
}
const struct brw_tracked_state brw_cc_unit = {
_NEW_DEPTH |
_NEW_STENCIL,
.brw = BRW_NEW_BATCH |
+ BRW_NEW_BLORP |
BRW_NEW_CC_VP |
BRW_NEW_STATS_WM,
},
const struct brw_tracked_state brw_blend_constant_color = {
.dirty = {
.mesa = _NEW_COLOR,
- .brw = BRW_NEW_CONTEXT,
+ .brw = BRW_NEW_CONTEXT |
+ BRW_NEW_BLORP,
},
.emit = upload_blend_constant_color
};