On Fri, Oct 07, 2016 at 09:41:05PM -0700, Jason Ekstrand wrote: > This should now set the pipeline up properly for doing depth and/or stencil > clears by plumbing through depth/stencil test values.
If you like you could also say that color calculator state is now emitted also for blorp operations without actual shader (no prog_data). Patches 2-7 are: Reviewed-by: Topi Pohjolainen <topi.pohjolai...@intel.com> > > Signed-off-by: Jason Ekstrand <ja...@jlekstrand.net> > --- > src/intel/blorp/blorp_genX_exec.h | 56 > +++++++++++++++++++++++++++++++-------- > src/intel/blorp/blorp_priv.h | 1 + > 2 files changed, 46 insertions(+), 11 deletions(-) > > diff --git a/src/intel/blorp/blorp_genX_exec.h > b/src/intel/blorp/blorp_genX_exec.h > index 6bbabcf..d72965e 100644 > --- a/src/intel/blorp/blorp_genX_exec.h > +++ b/src/intel/blorp/blorp_genX_exec.h > @@ -868,11 +868,17 @@ static uint32_t > blorp_emit_color_calc_state(struct blorp_batch *batch, > const struct blorp_params *params) > { > + struct GENX(COLOR_CALC_STATE) cc = { 0 }; > + > +#if GEN_GEN <= 8 > + cc.StencilReferenceValue = params->stencil_ref; > +#endif > + > uint32_t offset; > void *state = blorp_alloc_dynamic_state(batch, AUB_TRACE_CC_STATE, > GENX(COLOR_CALC_STATE_length) * 4, > 64, &offset); > - memset(state, 0, GENX(COLOR_CALC_STATE_length) * 4); > + GENX(COLOR_CALC_STATE_pack)(NULL, state, &cc); > > #if GEN_GEN >= 7 > blorp_emit(batch, GENX(3DSTATE_CC_STATE_POINTERS), sp) { > @@ -898,16 +904,44 @@ blorp_emit_depth_stencil_state(struct blorp_batch > *batch, > struct GENX(DEPTH_STENCIL_STATE) ds = { 0 }; > #endif > > - ds.DepthBufferWriteEnable = params->depth.addr.buffer != NULL; > + if (params->depth.addr.buffer) { > + ds.DepthBufferWriteEnable = true; > > - /* See the following sections of the Sandy Bridge PRM, Volume 1, Part2: > - * - 7.5.3.1 Depth Buffer Clear > - * - 7.5.3.2 Depth Buffer Resolve > - * - 7.5.3.3 Hierarchical Depth Buffer Resolve > - */ > - if (params->hiz_op == BLORP_HIZ_OP_DEPTH_RESOLVE) { > - ds.DepthTestEnable = true; > - ds.DepthTestFunction = COMPAREFUNCTION_NEVER; > + switch (params->hiz_op) { > + case BLORP_HIZ_OP_NONE: > + ds.DepthTestEnable = true; > + ds.DepthTestFunction = COMPAREFUNCTION_ALWAYS; > + break; > + > + /* See the following sections of the Sandy Bridge PRM, Volume 2, Part1: > + * - 7.5.3.1 Depth Buffer Clear > + * - 7.5.3.2 Depth Buffer Resolve > + * - 7.5.3.3 Hierarchical Depth Buffer Resolve > + */ > + case BLORP_HIZ_OP_DEPTH_RESOLVE: > + ds.DepthTestEnable = true; > + ds.DepthTestFunction = COMPAREFUNCTION_NEVER; > + break; > + > + case BLORP_HIZ_OP_DEPTH_CLEAR: > + case BLORP_HIZ_OP_HIZ_RESOLVE: > + ds.DepthTestEnable = false; > + break; > + } > + } > + > + if (params->stencil.addr.buffer) { > + ds.StencilBufferWriteEnable = true; > + ds.StencilTestEnable = true; > + ds.DoubleSidedStencilEnable = false; > + > + ds.StencilTestFunction = COMPAREFUNCTION_ALWAYS; > + ds.StencilPassDepthPassOp = STENCILOP_REPLACE; > + > + ds.StencilWriteMask = 0xff; > +#if GEN_GEN >= 9 > + ds.StencilReferenceValue = params->stencil_ref; > +#endif > } > > #if GEN_GEN >= 8 > @@ -1163,8 +1197,8 @@ blorp_exec(struct blorp_batch *batch, const struct > blorp_params *params) > > if (params->wm_prog_data) { > blend_state_offset = blorp_emit_blend_state(batch, params); > - color_calc_state_offset = blorp_emit_color_calc_state(batch, params); > } > + color_calc_state_offset = blorp_emit_color_calc_state(batch, params); > depth_stencil_state_offset = blorp_emit_depth_stencil_state(batch, > params); > > #if GEN_GEN <= 6 > diff --git a/src/intel/blorp/blorp_priv.h b/src/intel/blorp/blorp_priv.h > index 82a7bef..e9f0124 100644 > --- a/src/intel/blorp/blorp_priv.h > +++ b/src/intel/blorp/blorp_priv.h > @@ -180,6 +180,7 @@ struct blorp_params > uint32_t x1; > uint32_t y1; > float z; > + uint8_t stencil_ref; > struct brw_blorp_surface_info depth; > struct brw_blorp_surface_info stencil; > uint32_t depth_format; > -- > 2.5.0.400.gff86faf > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev