// DriConf options specific to radeonsi
DRI_CONF_SECTION_PERFORMANCE
DRI_CONF_RADEONSI_ENABLE_SISCHED("false")
+ DRI_CONF_RADEONSI_ASSUME_NO_Z_FIGHTS("false")
DRI_CONF_SECTION_END
sscreen->has_out_of_order_rast = sscreen->b.chip_class >= VI &&
sscreen->b.info.max_se >= 2 &&
!(sscreen->b.debug_flags & DBG_NO_OUT_OF_ORDER);
+ sscreen->assume_no_z_fights =
+ driQueryOptionb(config->options, "radeonsi_assume_no_z_fights");
sscreen->has_msaa_sample_loc_bug = (sscreen->b.family >= CHIP_POLARIS10 &&
sscreen->b.family <= CHIP_POLARIS12) ||
sscreen->b.family == CHIP_VEGA10 ||
bool has_distributed_tess;
bool has_draw_indirect_multi;
bool has_out_of_order_rast;
+ bool assume_no_z_fights;
bool has_msaa_sample_loc_bug;
bool dpbb_allowed;
bool dfsm_allowed;
static void *si_create_dsa_state(struct pipe_context *ctx,
const struct pipe_depth_stencil_alpha_state *state)
{
+ struct si_context *sctx = (struct si_context *)ctx;
struct si_state_dsa *dsa = CALLOC_STRUCT(si_state_dsa);
struct si_pm4_state *pm4 = &dsa->pm4;
unsigned db_depth_control;
(state->depth.func == PIPE_FUNC_ALWAYS ||
state->depth.func == PIPE_FUNC_NEVER);
- const bool assume_no_z_fights = false;
-
dsa->order_invariance[1].pass_last =
- assume_no_z_fights && !dsa->stencil_write_enabled &&
+ sctx->screen->assume_no_z_fights &&
+ !dsa->stencil_write_enabled &&
dsa->depth_write_enabled && zfunc_is_ordered;
dsa->order_invariance[0].pass_last =
- assume_no_z_fights &&
+ sctx->screen->assume_no_z_fights &&
dsa->depth_write_enabled && zfunc_is_ordered;
return dsa;
DRI_CONF_OPT_BEGIN_B(radeonsi_enable_sisched, def) \
DRI_CONF_DESC(en,gettext("Use the LLVM sisched option for shader compiles")) \
DRI_CONF_OPT_END
+
+#define DRI_CONF_RADEONSI_ASSUME_NO_Z_FIGHTS(def) \
+DRI_CONF_OPT_BEGIN_B(radeonsi_assume_no_z_fights, def) \
+ DRI_CONF_DESC(en,gettext("Assume no Z fights (enables aggressive out-of-order rasterization to improve performance; may cause rendering errors)")) \
+DRI_CONF_OPT_END