radv: simplify radv_bind_dynamic_state() slightly
This adds RADV_CMP_COPY to compact copies. Based on ANV. Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17649>
This commit is contained in:
committed by
Marge Bot
parent
18e9ba3e3b
commit
d4b8abe511
@@ -158,20 +158,6 @@ radv_bind_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_dy
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_LINE_WIDTH) {
|
||||
if (dest->line_width != src->line_width) {
|
||||
dest->line_width = src->line_width;
|
||||
dest_mask |= RADV_DYNAMIC_LINE_WIDTH;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_BIAS) {
|
||||
if (memcmp(&dest->depth_bias, &src->depth_bias, sizeof(src->depth_bias))) {
|
||||
dest->depth_bias = src->depth_bias;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_BIAS;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_BLEND_CONSTANTS) {
|
||||
if (memcmp(&dest->blend_constants, &src->blend_constants, sizeof(src->blend_constants))) {
|
||||
typed_memcpy(dest->blend_constants, src->blend_constants, 4);
|
||||
@@ -179,37 +165,6 @@ radv_bind_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_dy
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_BOUNDS) {
|
||||
if (memcmp(&dest->depth_bounds, &src->depth_bounds, sizeof(src->depth_bounds))) {
|
||||
dest->depth_bounds = src->depth_bounds;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_BOUNDS;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_STENCIL_COMPARE_MASK) {
|
||||
if (memcmp(&dest->stencil_compare_mask, &src->stencil_compare_mask,
|
||||
sizeof(src->stencil_compare_mask))) {
|
||||
dest->stencil_compare_mask = src->stencil_compare_mask;
|
||||
dest_mask |= RADV_DYNAMIC_STENCIL_COMPARE_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_STENCIL_WRITE_MASK) {
|
||||
if (memcmp(&dest->stencil_write_mask, &src->stencil_write_mask,
|
||||
sizeof(src->stencil_write_mask))) {
|
||||
dest->stencil_write_mask = src->stencil_write_mask;
|
||||
dest_mask |= RADV_DYNAMIC_STENCIL_WRITE_MASK;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_STENCIL_REFERENCE) {
|
||||
if (memcmp(&dest->stencil_reference, &src->stencil_reference,
|
||||
sizeof(src->stencil_reference))) {
|
||||
dest->stencil_reference = src->stencil_reference;
|
||||
dest_mask |= RADV_DYNAMIC_STENCIL_REFERENCE;
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DISCARD_RECTANGLE) {
|
||||
if (memcmp(&dest->discard_rectangle.rectangles, &src->discard_rectangle.rectangles,
|
||||
src->discard_rectangle.count * sizeof(VkRect2D))) {
|
||||
@@ -233,118 +188,69 @@ radv_bind_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_dy
|
||||
}
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_LINE_STIPPLE) {
|
||||
if (memcmp(&dest->line_stipple, &src->line_stipple, sizeof(src->line_stipple))) {
|
||||
dest->line_stipple = src->line_stipple;
|
||||
dest_mask |= RADV_DYNAMIC_LINE_STIPPLE;
|
||||
}
|
||||
#define RADV_CMP_COPY(field, flag) \
|
||||
if (copy_mask & flag) { \
|
||||
if (dest->field != src->field) { \
|
||||
dest->field = src->field; \
|
||||
dest_mask |= flag; \
|
||||
} \
|
||||
}
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_CULL_MODE) {
|
||||
if (dest->cull_mode != src->cull_mode) {
|
||||
dest->cull_mode = src->cull_mode;
|
||||
dest_mask |= RADV_DYNAMIC_CULL_MODE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(line_width, RADV_DYNAMIC_LINE_WIDTH);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_FRONT_FACE) {
|
||||
if (dest->front_face != src->front_face) {
|
||||
dest->front_face = src->front_face;
|
||||
dest_mask |= RADV_DYNAMIC_FRONT_FACE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(depth_bias.bias, RADV_DYNAMIC_DEPTH_BIAS);
|
||||
RADV_CMP_COPY(depth_bias.clamp, RADV_DYNAMIC_DEPTH_BIAS);
|
||||
RADV_CMP_COPY(depth_bias.slope, RADV_DYNAMIC_DEPTH_BIAS);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_PRIMITIVE_TOPOLOGY) {
|
||||
if (dest->primitive_topology != src->primitive_topology) {
|
||||
dest->primitive_topology = src->primitive_topology;
|
||||
dest_mask |= RADV_DYNAMIC_PRIMITIVE_TOPOLOGY;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(depth_bounds.min, RADV_DYNAMIC_DEPTH_BOUNDS);
|
||||
RADV_CMP_COPY(depth_bounds.max, RADV_DYNAMIC_DEPTH_BOUNDS);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_TEST_ENABLE) {
|
||||
if (dest->depth_test_enable != src->depth_test_enable) {
|
||||
dest->depth_test_enable = src->depth_test_enable;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_TEST_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(stencil_compare_mask.front, RADV_DYNAMIC_STENCIL_COMPARE_MASK);
|
||||
RADV_CMP_COPY(stencil_compare_mask.back, RADV_DYNAMIC_STENCIL_COMPARE_MASK);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_WRITE_ENABLE) {
|
||||
if (dest->depth_write_enable != src->depth_write_enable) {
|
||||
dest->depth_write_enable = src->depth_write_enable;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_WRITE_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(stencil_write_mask.front, RADV_DYNAMIC_STENCIL_WRITE_MASK);
|
||||
RADV_CMP_COPY(stencil_write_mask.back, RADV_DYNAMIC_STENCIL_WRITE_MASK);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_COMPARE_OP) {
|
||||
if (dest->depth_compare_op != src->depth_compare_op) {
|
||||
dest->depth_compare_op = src->depth_compare_op;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_COMPARE_OP;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(stencil_reference.front, RADV_DYNAMIC_STENCIL_REFERENCE);
|
||||
RADV_CMP_COPY(stencil_reference.back, RADV_DYNAMIC_STENCIL_REFERENCE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE) {
|
||||
if (dest->depth_bounds_test_enable != src->depth_bounds_test_enable) {
|
||||
dest->depth_bounds_test_enable = src->depth_bounds_test_enable;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(line_stipple.factor, RADV_DYNAMIC_LINE_STIPPLE);
|
||||
RADV_CMP_COPY(line_stipple.pattern, RADV_DYNAMIC_LINE_STIPPLE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_STENCIL_TEST_ENABLE) {
|
||||
if (dest->stencil_test_enable != src->stencil_test_enable) {
|
||||
dest->stencil_test_enable = src->stencil_test_enable;
|
||||
dest_mask |= RADV_DYNAMIC_STENCIL_TEST_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(cull_mode, RADV_DYNAMIC_CULL_MODE);
|
||||
RADV_CMP_COPY(front_face, RADV_DYNAMIC_FRONT_FACE);
|
||||
RADV_CMP_COPY(primitive_topology, RADV_DYNAMIC_PRIMITIVE_TOPOLOGY);
|
||||
RADV_CMP_COPY(depth_test_enable, RADV_DYNAMIC_DEPTH_TEST_ENABLE);
|
||||
RADV_CMP_COPY(depth_write_enable, RADV_DYNAMIC_DEPTH_WRITE_ENABLE);
|
||||
RADV_CMP_COPY(depth_compare_op, RADV_DYNAMIC_DEPTH_COMPARE_OP);
|
||||
RADV_CMP_COPY(depth_bounds_test_enable, RADV_DYNAMIC_DEPTH_BOUNDS_TEST_ENABLE);
|
||||
RADV_CMP_COPY(stencil_test_enable, RADV_DYNAMIC_STENCIL_TEST_ENABLE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_STENCIL_OP) {
|
||||
if (memcmp(&dest->stencil_op, &src->stencil_op, sizeof(src->stencil_op))) {
|
||||
dest->stencil_op = src->stencil_op;
|
||||
dest_mask |= RADV_DYNAMIC_STENCIL_OP;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(stencil_op.front.fail_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.front.pass_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.front.depth_fail_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.front.compare_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.back.fail_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.back.pass_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.back.depth_fail_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
RADV_CMP_COPY(stencil_op.back.compare_op, RADV_DYNAMIC_STENCIL_OP);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_FRAGMENT_SHADING_RATE) {
|
||||
if (memcmp(&dest->fragment_shading_rate, &src->fragment_shading_rate,
|
||||
sizeof(src->fragment_shading_rate))) {
|
||||
dest->fragment_shading_rate = src->fragment_shading_rate;
|
||||
dest_mask |= RADV_DYNAMIC_FRAGMENT_SHADING_RATE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(fragment_shading_rate.size.width, RADV_DYNAMIC_FRAGMENT_SHADING_RATE);
|
||||
RADV_CMP_COPY(fragment_shading_rate.size.height, RADV_DYNAMIC_FRAGMENT_SHADING_RATE);
|
||||
RADV_CMP_COPY(fragment_shading_rate.combiner_ops[0], RADV_DYNAMIC_FRAGMENT_SHADING_RATE);
|
||||
RADV_CMP_COPY(fragment_shading_rate.combiner_ops[1], RADV_DYNAMIC_FRAGMENT_SHADING_RATE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_DEPTH_BIAS_ENABLE) {
|
||||
if (dest->depth_bias_enable != src->depth_bias_enable) {
|
||||
dest->depth_bias_enable = src->depth_bias_enable;
|
||||
dest_mask |= RADV_DYNAMIC_DEPTH_BIAS_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(depth_bias_enable, RADV_DYNAMIC_DEPTH_BIAS_ENABLE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_PRIMITIVE_RESTART_ENABLE) {
|
||||
if (dest->primitive_restart_enable != src->primitive_restart_enable) {
|
||||
dest->primitive_restart_enable = src->primitive_restart_enable;
|
||||
dest_mask |= RADV_DYNAMIC_PRIMITIVE_RESTART_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(primitive_restart_enable, RADV_DYNAMIC_PRIMITIVE_RESTART_ENABLE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE) {
|
||||
if (dest->rasterizer_discard_enable != src->rasterizer_discard_enable) {
|
||||
dest->rasterizer_discard_enable = src->rasterizer_discard_enable;
|
||||
dest_mask |= RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(rasterizer_discard_enable, RADV_DYNAMIC_RASTERIZER_DISCARD_ENABLE);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_LOGIC_OP) {
|
||||
if (dest->logic_op != src->logic_op) {
|
||||
dest->logic_op = src->logic_op;
|
||||
dest_mask |= RADV_DYNAMIC_LOGIC_OP;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(logic_op, RADV_DYNAMIC_LOGIC_OP);
|
||||
|
||||
if (copy_mask & RADV_DYNAMIC_COLOR_WRITE_ENABLE) {
|
||||
if (dest->color_write_enable != src->color_write_enable) {
|
||||
dest->color_write_enable = src->color_write_enable;
|
||||
dest_mask |= RADV_DYNAMIC_COLOR_WRITE_ENABLE;
|
||||
}
|
||||
}
|
||||
RADV_CMP_COPY(color_write_enable, RADV_DYNAMIC_COLOR_WRITE_ENABLE);
|
||||
|
||||
#undef RADV_CMP_COPY
|
||||
|
||||
cmd_buffer->state.dirty |= dest_mask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user