mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-02-09 20:40:28 +01:00
tu: Merge depth/stencil draw states
This removes more draw states that are commonly set together. We still have a separate draw state for RB_DEPTH_CNTL, because it depends on other things like the attachment state and depth clamp and it would be more difficult for layers like zink to use a combined depth/stencil state. Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25076>
This commit is contained in:
parent
3a1f7c61b6
commit
979cf7bac0
2 changed files with 57 additions and 125 deletions
|
|
@ -4321,31 +4321,26 @@ tu6_emit_rast(struct tu_cs *cs,
|
|||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_ds_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_TEST_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_WRITE_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_COMPARE_OP,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_BOUNDS_TEST_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_TEST_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_OP,
|
||||
MESA_VK_DYNAMIC_RS_DEPTH_CLAMP_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_COMPARE_MASK,
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_WRITE_MASK,
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_REFERENCE,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_BOUNDS_TEST_BOUNDS,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_ds_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds,
|
||||
const struct vk_render_pass_state *rp,
|
||||
const struct vk_rasterization_state *rs)
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
return 4;
|
||||
return 11;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_ds(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds,
|
||||
const struct vk_render_pass_state *rp,
|
||||
const struct vk_rasterization_state *rs)
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCIL_CONTROL(
|
||||
.stencil_enable = ds->stencil.test_enable,
|
||||
|
|
@ -4360,6 +4355,48 @@ tu6_emit_ds(struct tu_cs *cs,
|
|||
.zpass_bf = tu6_stencil_op((VkStencilOp)ds->stencil.back.op.pass),
|
||||
.zfail_bf = tu6_stencil_op((VkStencilOp)ds->stencil.back.op.depth_fail)));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILMASK(
|
||||
.mask = ds->stencil.front.compare_mask,
|
||||
.bfmask = ds->stencil.back.compare_mask));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILWRMASK(
|
||||
.wrmask = ds->stencil.front.write_mask,
|
||||
.bfwrmask = ds->stencil.back.write_mask));
|
||||
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILREF(
|
||||
.ref = ds->stencil.front.reference,
|
||||
.bfref = ds->stencil.back.reference));
|
||||
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_Z_BOUNDS_MIN(ds->depth.bounds_test.min),
|
||||
A6XX_RB_Z_BOUNDS_MAX(ds->depth.bounds_test.max));
|
||||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_rb_depth_cntl_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_TEST_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_WRITE_ENABLE,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_COMPARE_OP,
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_BOUNDS_TEST_ENABLE,
|
||||
MESA_VK_DYNAMIC_RS_DEPTH_CLAMP_ENABLE,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_rb_depth_cntl_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds,
|
||||
const struct vk_render_pass_state *rp,
|
||||
const struct vk_rasterization_state *rs)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_rb_depth_cntl(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds,
|
||||
const struct vk_render_pass_state *rp,
|
||||
const struct vk_rasterization_state *rs)
|
||||
{
|
||||
if (rp->attachment_aspects & VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||
bool depth_test = ds->depth.test_enable;
|
||||
enum adreno_compare_func zfunc = tu6_compare_func(ds->depth.compare_op);
|
||||
|
|
@ -4390,94 +4427,6 @@ tu6_emit_ds(struct tu_cs *cs,
|
|||
}
|
||||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_depth_bounds_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_DEPTH_BOUNDS_TEST_BOUNDS,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_depth_bounds_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_depth_bounds(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
tu_cs_emit_regs(cs,
|
||||
A6XX_RB_Z_BOUNDS_MIN(ds->depth.bounds_test.min),
|
||||
A6XX_RB_Z_BOUNDS_MAX(ds->depth.bounds_test.max));
|
||||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_stencil_compare_mask_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_COMPARE_MASK,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_stencil_compare_mask_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_stencil_compare_mask(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILMASK(
|
||||
.mask = ds->stencil.front.compare_mask,
|
||||
.bfmask = ds->stencil.back.compare_mask));
|
||||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_stencil_write_mask_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_WRITE_MASK,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_stencil_write_mask_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_stencil_write_mask(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILWRMASK(
|
||||
.wrmask = ds->stencil.front.write_mask,
|
||||
.bfwrmask = ds->stencil.back.write_mask));
|
||||
}
|
||||
|
||||
static const enum mesa_vk_dynamic_graphics_state tu_stencil_reference_state[] = {
|
||||
MESA_VK_DYNAMIC_DS_STENCIL_REFERENCE,
|
||||
};
|
||||
|
||||
template <chip CHIP>
|
||||
static unsigned
|
||||
tu6_stencil_reference_size(struct tu_device *dev,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
template <chip CHIP>
|
||||
static void
|
||||
tu6_emit_stencil_reference(struct tu_cs *cs,
|
||||
const struct vk_depth_stencil_state *ds)
|
||||
{
|
||||
tu_cs_emit_regs(cs, A6XX_RB_STENCILREF(
|
||||
.ref = ds->stencil.front.reference,
|
||||
.bfref = ds->stencil.back.reference));
|
||||
}
|
||||
|
||||
static inline bool
|
||||
emit_pipeline_state(BITSET_WORD *keep, BITSET_WORD *remove,
|
||||
BITSET_WORD *pipeline_set,
|
||||
|
|
@ -4623,21 +4572,13 @@ tu_pipeline_builder_emit_state(struct tu_pipeline_builder *builder,
|
|||
builder->graphics_state.vp,
|
||||
builder->graphics_state.rp->view_mask != 0,
|
||||
pipeline->program.per_view_viewport);
|
||||
DRAW_STATE_COND(ds, TU_DYNAMIC_STATE_DS,
|
||||
DRAW_STATE(ds, TU_DYNAMIC_STATE_DS,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE_COND(rb_depth_cntl, TU_DYNAMIC_STATE_RB_DEPTH_CNTL,
|
||||
attachments_valid,
|
||||
builder->graphics_state.ds,
|
||||
builder->graphics_state.rp,
|
||||
builder->graphics_state.rs);
|
||||
DRAW_STATE(depth_bounds, TU_DYNAMIC_STATE_DEPTH_BOUNDS,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE(depth_bounds, TU_DYNAMIC_STATE_DEPTH_BOUNDS,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE(stencil_compare_mask, TU_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE(stencil_write_mask, TU_DYNAMIC_STATE_STENCIL_WRITE_MASK,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE(stencil_reference, TU_DYNAMIC_STATE_STENCIL_REFERENCE,
|
||||
builder->graphics_state.ds);
|
||||
DRAW_STATE_COND(patch_control_points,
|
||||
TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS,
|
||||
pipeline_contains_all_shader_state(pipeline),
|
||||
|
|
@ -4811,19 +4752,13 @@ tu_emit_draw_state(struct tu_cmd_buffer *cmd)
|
|||
&cmd->vk.dynamic_graphics_state.vp,
|
||||
cmd->state.vk_rp.view_mask != 0,
|
||||
cmd->state.per_view_viewport);
|
||||
DRAW_STATE_COND(ds, TU_DYNAMIC_STATE_DS,
|
||||
DRAW_STATE(ds, TU_DYNAMIC_STATE_DS,
|
||||
&cmd->vk.dynamic_graphics_state.ds);
|
||||
DRAW_STATE_COND(rb_depth_cntl, TU_DYNAMIC_STATE_RB_DEPTH_CNTL,
|
||||
cmd->state.dirty & TU_CMD_DIRTY_SUBPASS,
|
||||
&cmd->vk.dynamic_graphics_state.ds,
|
||||
&cmd->state.vk_rp,
|
||||
&cmd->vk.dynamic_graphics_state.rs);
|
||||
DRAW_STATE(depth_bounds, TU_DYNAMIC_STATE_DEPTH_BOUNDS,
|
||||
&cmd->vk.dynamic_graphics_state.ds);
|
||||
DRAW_STATE(stencil_compare_mask, TU_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
|
||||
&cmd->vk.dynamic_graphics_state.ds);
|
||||
DRAW_STATE(stencil_write_mask, TU_DYNAMIC_STATE_STENCIL_WRITE_MASK,
|
||||
&cmd->vk.dynamic_graphics_state.ds);
|
||||
DRAW_STATE(stencil_reference, TU_DYNAMIC_STATE_STENCIL_REFERENCE,
|
||||
&cmd->vk.dynamic_graphics_state.ds);
|
||||
DRAW_STATE_COND(patch_control_points,
|
||||
TU_DYNAMIC_STATE_PATCH_CONTROL_POINTS,
|
||||
cmd->state.dirty & TU_CMD_DIRTY_PIPELINE,
|
||||
|
|
|
|||
|
|
@ -24,12 +24,9 @@ enum tu_dynamic_state
|
|||
TU_DYNAMIC_STATE_RAST,
|
||||
TU_DYNAMIC_STATE_DEPTH_BIAS,
|
||||
TU_DYNAMIC_STATE_BLEND_CONSTANTS,
|
||||
TU_DYNAMIC_STATE_DEPTH_BOUNDS,
|
||||
TU_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
|
||||
TU_DYNAMIC_STATE_STENCIL_WRITE_MASK,
|
||||
TU_DYNAMIC_STATE_STENCIL_REFERENCE,
|
||||
TU_DYNAMIC_STATE_SAMPLE_LOCATIONS,
|
||||
TU_DYNAMIC_STATE_DS,
|
||||
TU_DYNAMIC_STATE_RB_DEPTH_CNTL,
|
||||
TU_DYNAMIC_STATE_SAMPLE_LOCATIONS,
|
||||
TU_DYNAMIC_STATE_VB_STRIDE,
|
||||
TU_DYNAMIC_STATE_BLEND,
|
||||
TU_DYNAMIC_STATE_VERTEX_INPUT,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue