On Monday, April 24, 2017 3:19:13 PM PDT Rafael Antognolli wrote: [snip] > diff --git a/src/mesa/drivers/dri/i965/genX_state_upload.c > b/src/mesa/drivers/dri/i965/genX_state_upload.c > index b9e207d..ff28cf5 100644 > --- a/src/mesa/drivers/dri/i965/genX_state_upload.c > +++ b/src/mesa/drivers/dri/i965/genX_state_upload.c > @@ -30,6 +30,9 @@ > #include "brw_state.h" > > #include "intel_batchbuffer.h" > +#include "intel_fbo.h" > + > +#include "main/stencil.h" > > UNUSED static void * > emit_dwords(struct brw_context *brw, unsigned n) > @@ -98,9 +101,9 @@ __gen_combine_address(struct brw_context *brw, void > *location, > _dw + 1; /* Array starts at dw[1] */ \ > }) > > -#define brw_state_emit(brw, cmd, aub, align, offset, name) \ > +#define brw_state_emit(brw, cmd, align, offset, name) \ > for (struct cmd name = { 0, }, \ > - *_dst = brw_state_batch(brw, aub,_brw_cmd_length(cmd) * 4, \ > + *_dst = brw_state_batch(brw, _brw_cmd_length(cmd) * 4, \ > align, offset); \ > __builtin_expect(_dst != NULL, 1); \ > _brw_cmd_pack(cmd)(brw, (void *)_dst, &name), \
Thus hunk should go in patch 15. > @@ -108,9 +111,105 @@ __gen_combine_address(struct brw_context *brw, void > *location, > > /* ---------------------------------------------------------------------- */ > > +#if GEN_GEN >= 6 > > /* ---------------------------------------------------------------------- */ > > +static void > +genX(upload_depth_stencil_state)(struct brw_context *brw) > +{ > + struct gl_context *ctx = &brw->ctx; > + > + /* _NEW_BUFFERS */ > + struct intel_renderbuffer *depth_irb = > + intel_get_renderbuffer(ctx->DrawBuffer, BUFFER_DEPTH); > + > + /* _NEW_DEPTH */ > + struct gl_depthbuffer_attrib *depth = &ctx->Depth; > + > + /* _NEW_STENCIL */ > + struct gl_stencil_attrib *stencil = &ctx->Stencil; > + const int b = stencil->_BackFace; > + > +#if GEN_GEN >= 8 > + brw_batch_emit(brw, GENX(3DSTATE_WM_DEPTH_STENCIL), wmds) { > +#else > + uint32_t ds_offset; > + brw_state_emit(brw, GENX(DEPTH_STENCIL_STATE), 64, &ds_offset, wmds) { > +#endif > + if (depth->Test && depth_irb) { > + wmds.DepthTestEnable = true; > + wmds.DepthBufferWriteEnable = brw_depth_writes_enabled(brw); > + wmds.DepthTestFunction = intel_translate_compare_func(depth->Func); > + } > + > + if (stencil->_Enabled) { > + wmds.StencilTestEnable = true; > + wmds.StencilWriteMask = stencil->WriteMask[0] & 0xff; > + wmds.StencilTestMask = stencil->ValueMask[0] & 0xff; > + > + wmds.StencilTestFunction = > + intel_translate_compare_func(stencil->Function[0]); > + wmds.StencilFailOp = > + intel_translate_stencil_op(stencil->FailFunc[0]); > + wmds.StencilPassDepthPassOp = > + intel_translate_stencil_op(stencil->ZPassFunc[0]); > + wmds.StencilPassDepthFailOp = > + intel_translate_stencil_op(stencil->ZFailFunc[0]); > + > + wmds.StencilBufferWriteEnable = stencil->_WriteEnabled; > + > + if (stencil->_TestTwoSide) { > + wmds.DoubleSidedStencilEnable = true; > + wmds.BackfaceStencilWriteMask = stencil->WriteMask[b] & 0xff; > + wmds.BackfaceStencilTestMask = stencil->ValueMask[b] & 0xff; > + > + wmds.BackfaceStencilTestFunction = > + intel_translate_compare_func(stencil->Function[b]); > + wmds.BackfaceStencilFailOp = > + intel_translate_stencil_op(stencil->FailFunc[b]); > + wmds.BackfaceStencilPassDepthPassOp = > + intel_translate_stencil_op(stencil->ZPassFunc[b]); > + wmds.BackfaceStencilPassDepthFailOp = > + intel_translate_stencil_op(stencil->ZFailFunc[b]); > + } > + > +#if GEN_GEN >= 9 > + wmds.StencilReferenceValue = _mesa_get_stencil_ref(ctx, 0); > + wmds.BackfaceStencilReferenceValue = _mesa_get_stencil_ref(ctx, b); > +#endif > + } > + } > + > +#if GEN_GEN == 6 > + brw_batch_emit(brw, GENX(3DSTATE_CC_STATE_POINTERS), ptr) { > + ptr.PointertoDEPTH_STENCIL_STATE = ds_offset; > + ptr.DEPTH_STENCIL_STATEChange = true; > + } > +#elif GEN_GEN == 7 > + brw_batch_emit(brw, GENX(3DSTATE_DEPTH_STENCIL_STATE_POINTERS), ptr) { > + ptr.PointertoDEPTH_STENCIL_STATE = ds_offset; > + } > +#endif > +} > + > +static const struct brw_tracked_state genX(depth_stencil_state) = { > + .dirty = { > + .mesa = _NEW_BUFFERS | > + _NEW_DEPTH | > + _NEW_STENCIL, > + .brw = BRW_NEW_BLORP | > + (GEN_GEN >= 8 ? BRW_NEW_CONTEXT > + : BRW_NEW_BLORP | > + BRW_NEW_STATE_BASE_ADDRESS), I made a mistake here, I wrote BRW_NEW_BLORP twice instead of BRW_NEW_BATCH. It should be: .brw = BRW_NEW_BLORP | (GEN_GEN >= 8 ? BRW_NEW_CONTEXT : BRW_NEW_BATCH | BRW_NEW_STATE_BASE_ADDRESS), Otherwise this patch looks good to me.
signature.asc
Description: This is a digitally signed message part.
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev