Mesa (main): radv: use radv_dynamic_state for saving/restoring meta operations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Tue Apr 5 08:12:31 UTC 2022
Module: Mesa
Branch: main
Commit: edc09beccc280c2921611026f3a17948e60d82d5
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=edc09beccc280c2921611026f3a17948e60d82d5
Author: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Date: Mon Apr 4 08:11:40 2022 +0200
radv: use radv_dynamic_state for saving/restoring meta operations
Instead of duplicating every fields.
Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
Reviewed-By: Mike Blumenkrantz <michael.blumenkrantz at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/15729>
---
src/amd/vulkan/radv_meta.c | 192 ++++++++++++++++++++++-----------------------
src/amd/vulkan/radv_meta.h | 81 +------------------
2 files changed, 97 insertions(+), 176 deletions(-)
diff --git a/src/amd/vulkan/radv_meta.c b/src/amd/vulkan/radv_meta.c
index ae23f5d5b70..7211e80789a 100644
--- a/src/amd/vulkan/radv_meta.c
+++ b/src/amd/vulkan/radv_meta.c
@@ -84,88 +84,88 @@ radv_meta_save(struct radv_meta_saved_state *state, struct radv_cmd_buffer *cmd_
state->old_pipeline = cmd_buffer->state.pipeline;
/* Save all viewports. */
- state->viewport.count = cmd_buffer->state.dynamic.viewport.count;
- typed_memcpy(state->viewport.viewports, cmd_buffer->state.dynamic.viewport.viewports,
+ state->dynamic.viewport.count = cmd_buffer->state.dynamic.viewport.count;
+ typed_memcpy(state->dynamic.viewport.viewports, cmd_buffer->state.dynamic.viewport.viewports,
MAX_VIEWPORTS);
- typed_memcpy(state->viewport.xform, cmd_buffer->state.dynamic.viewport.xform,
+ typed_memcpy(state->dynamic.viewport.xform, cmd_buffer->state.dynamic.viewport.xform,
MAX_VIEWPORTS);
/* Save all scissors. */
- state->scissor.count = cmd_buffer->state.dynamic.scissor.count;
- typed_memcpy(state->scissor.scissors, cmd_buffer->state.dynamic.scissor.scissors,
+ state->dynamic.scissor.count = cmd_buffer->state.dynamic.scissor.count;
+ typed_memcpy(state->dynamic.scissor.scissors, cmd_buffer->state.dynamic.scissor.scissors,
MAX_SCISSORS);
- state->line_stipple.factor = cmd_buffer->state.dynamic.line_stipple.factor;
- state->line_stipple.pattern = cmd_buffer->state.dynamic.line_stipple.pattern;
+ state->dynamic.line_stipple.factor = cmd_buffer->state.dynamic.line_stipple.factor;
+ state->dynamic.line_stipple.pattern = cmd_buffer->state.dynamic.line_stipple.pattern;
- state->cull_mode = cmd_buffer->state.dynamic.cull_mode;
- state->front_face = cmd_buffer->state.dynamic.front_face;
+ state->dynamic.cull_mode = cmd_buffer->state.dynamic.cull_mode;
+ state->dynamic.front_face = cmd_buffer->state.dynamic.front_face;
- state->primitive_topology = cmd_buffer->state.dynamic.primitive_topology;
+ state->dynamic.primitive_topology = cmd_buffer->state.dynamic.primitive_topology;
- state->depth_test_enable = cmd_buffer->state.dynamic.depth_test_enable;
- state->depth_write_enable = cmd_buffer->state.dynamic.depth_write_enable;
- state->depth_compare_op = cmd_buffer->state.dynamic.depth_compare_op;
- state->depth_bounds_test_enable = cmd_buffer->state.dynamic.depth_bounds_test_enable;
- state->stencil_test_enable = cmd_buffer->state.dynamic.stencil_test_enable;
+ state->dynamic.depth_test_enable = cmd_buffer->state.dynamic.depth_test_enable;
+ state->dynamic.depth_write_enable = cmd_buffer->state.dynamic.depth_write_enable;
+ state->dynamic.depth_compare_op = cmd_buffer->state.dynamic.depth_compare_op;
+ state->dynamic.depth_bounds_test_enable = cmd_buffer->state.dynamic.depth_bounds_test_enable;
+ state->dynamic.stencil_test_enable = cmd_buffer->state.dynamic.stencil_test_enable;
- state->stencil_op.front.compare_op = cmd_buffer->state.dynamic.stencil_op.front.compare_op;
- state->stencil_op.front.fail_op = cmd_buffer->state.dynamic.stencil_op.front.fail_op;
- state->stencil_op.front.pass_op = cmd_buffer->state.dynamic.stencil_op.front.pass_op;
- state->stencil_op.front.depth_fail_op =
+ state->dynamic.stencil_op.front.compare_op = cmd_buffer->state.dynamic.stencil_op.front.compare_op;
+ state->dynamic.stencil_op.front.fail_op = cmd_buffer->state.dynamic.stencil_op.front.fail_op;
+ state->dynamic.stencil_op.front.pass_op = cmd_buffer->state.dynamic.stencil_op.front.pass_op;
+ state->dynamic.stencil_op.front.depth_fail_op =
cmd_buffer->state.dynamic.stencil_op.front.depth_fail_op;
- state->stencil_op.back.compare_op = cmd_buffer->state.dynamic.stencil_op.back.compare_op;
- state->stencil_op.back.fail_op = cmd_buffer->state.dynamic.stencil_op.back.fail_op;
- state->stencil_op.back.pass_op = cmd_buffer->state.dynamic.stencil_op.back.pass_op;
- state->stencil_op.back.depth_fail_op =
+ state->dynamic.stencil_op.back.compare_op = cmd_buffer->state.dynamic.stencil_op.back.compare_op;
+ state->dynamic.stencil_op.back.fail_op = cmd_buffer->state.dynamic.stencil_op.back.fail_op;
+ state->dynamic.stencil_op.back.pass_op = cmd_buffer->state.dynamic.stencil_op.back.pass_op;
+ state->dynamic.stencil_op.back.depth_fail_op =
cmd_buffer->state.dynamic.stencil_op.back.depth_fail_op;
- state->line_width = cmd_buffer->state.dynamic.line_width;
+ state->dynamic.line_width = cmd_buffer->state.dynamic.line_width;
- state->depth_bias.bias = cmd_buffer->state.dynamic.depth_bias.bias;
- state->depth_bias.clamp = cmd_buffer->state.dynamic.depth_bias.clamp;
- state->depth_bias.slope = cmd_buffer->state.dynamic.depth_bias.slope;
+ state->dynamic.depth_bias.bias = cmd_buffer->state.dynamic.depth_bias.bias;
+ state->dynamic.depth_bias.clamp = cmd_buffer->state.dynamic.depth_bias.clamp;
+ state->dynamic.depth_bias.slope = cmd_buffer->state.dynamic.depth_bias.slope;
- memcpy(state->blend_constants, cmd_buffer->state.dynamic.blend_constants,
- sizeof(state->blend_constants));
+ memcpy(state->dynamic.blend_constants, cmd_buffer->state.dynamic.blend_constants,
+ sizeof(state->dynamic.blend_constants));
- state->depth_bounds.min = cmd_buffer->state.dynamic.depth_bounds.min;
- state->depth_bounds.max = cmd_buffer->state.dynamic.depth_bounds.max;
+ state->dynamic.depth_bounds.min = cmd_buffer->state.dynamic.depth_bounds.min;
+ state->dynamic.depth_bounds.max = cmd_buffer->state.dynamic.depth_bounds.max;
- state->stencil_compare_mask.front = cmd_buffer->state.dynamic.stencil_compare_mask.front;
- state->stencil_compare_mask.back = cmd_buffer->state.dynamic.stencil_compare_mask.back;
+ state->dynamic.stencil_compare_mask.front = cmd_buffer->state.dynamic.stencil_compare_mask.front;
+ state->dynamic.stencil_compare_mask.back = cmd_buffer->state.dynamic.stencil_compare_mask.back;
- state->stencil_write_mask.front = cmd_buffer->state.dynamic.stencil_write_mask.front;
- state->stencil_write_mask.back = cmd_buffer->state.dynamic.stencil_write_mask.back;
+ state->dynamic.stencil_write_mask.front = cmd_buffer->state.dynamic.stencil_write_mask.front;
+ state->dynamic.stencil_write_mask.back = cmd_buffer->state.dynamic.stencil_write_mask.back;
- state->stencil_reference.front = cmd_buffer->state.dynamic.stencil_reference.front;
- state->stencil_reference.back = cmd_buffer->state.dynamic.stencil_reference.back;
+ state->dynamic.stencil_reference.front = cmd_buffer->state.dynamic.stencil_reference.front;
+ state->dynamic.stencil_reference.back = cmd_buffer->state.dynamic.stencil_reference.back;
- state->fragment_shading_rate.size = cmd_buffer->state.dynamic.fragment_shading_rate.size;
- state->fragment_shading_rate.combiner_ops[0] =
+ state->dynamic.fragment_shading_rate.size = cmd_buffer->state.dynamic.fragment_shading_rate.size;
+ state->dynamic.fragment_shading_rate.combiner_ops[0] =
cmd_buffer->state.dynamic.fragment_shading_rate.combiner_ops[0];
- state->fragment_shading_rate.combiner_ops[1] =
+ state->dynamic.fragment_shading_rate.combiner_ops[1] =
cmd_buffer->state.dynamic.fragment_shading_rate.combiner_ops[1];
- state->depth_bias_enable = cmd_buffer->state.dynamic.depth_bias_enable;
+ state->dynamic.depth_bias_enable = cmd_buffer->state.dynamic.depth_bias_enable;
- state->primitive_restart_enable = cmd_buffer->state.dynamic.primitive_restart_enable;
+ state->dynamic.primitive_restart_enable = cmd_buffer->state.dynamic.primitive_restart_enable;
- state->rasterizer_discard_enable = cmd_buffer->state.dynamic.rasterizer_discard_enable;
+ state->dynamic.rasterizer_discard_enable = cmd_buffer->state.dynamic.rasterizer_discard_enable;
- state->logic_op = cmd_buffer->state.dynamic.logic_op;
+ state->dynamic.logic_op = cmd_buffer->state.dynamic.logic_op;
- state->color_write_enable = cmd_buffer->state.dynamic.color_write_enable;
+ state->dynamic.color_write_enable = cmd_buffer->state.dynamic.color_write_enable;
- state->discard_rectangle.count = cmd_buffer->state.dynamic.discard_rectangle.count;
- typed_memcpy(state->discard_rectangle.rectangles,
+ state->dynamic.discard_rectangle.count = cmd_buffer->state.dynamic.discard_rectangle.count;
+ typed_memcpy(state->dynamic.discard_rectangle.rectangles,
cmd_buffer->state.dynamic.discard_rectangle.rectangles,
MAX_DISCARD_RECTANGLES);
}
if (state->flags & RADV_META_SAVE_SAMPLE_LOCATIONS) {
- typed_memcpy(&state->sample_location, &cmd_buffer->state.dynamic.sample_location, 1);
+ typed_memcpy(&state->dynamic.sample_location, &cmd_buffer->state.dynamic.sample_location, 1);
}
if (state->flags & RADV_META_SAVE_COMPUTE_PIPELINE) {
@@ -209,83 +209,83 @@ radv_meta_restore(const struct radv_meta_saved_state *state, struct radv_cmd_buf
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_PIPELINE;
/* Restore all viewports. */
- cmd_buffer->state.dynamic.viewport.count = state->viewport.count;
- typed_memcpy(cmd_buffer->state.dynamic.viewport.viewports, state->viewport.viewports,
+ cmd_buffer->state.dynamic.viewport.count = state->dynamic.viewport.count;
+ typed_memcpy(cmd_buffer->state.dynamic.viewport.viewports, state->dynamic.viewport.viewports,
MAX_VIEWPORTS);
- typed_memcpy(cmd_buffer->state.dynamic.viewport.xform, state->viewport.xform,
+ typed_memcpy(cmd_buffer->state.dynamic.viewport.xform, state->dynamic.viewport.xform,
MAX_VIEWPORTS);
/* Restore all scissors. */
- cmd_buffer->state.dynamic.scissor.count = state->scissor.count;
- typed_memcpy(cmd_buffer->state.dynamic.scissor.scissors, state->scissor.scissors,
+ cmd_buffer->state.dynamic.scissor.count = state->dynamic.scissor.count;
+ typed_memcpy(cmd_buffer->state.dynamic.scissor.scissors, state->dynamic.scissor.scissors,
MAX_SCISSORS);
- cmd_buffer->state.dynamic.line_stipple.factor = state->line_stipple.factor;
- cmd_buffer->state.dynamic.line_stipple.pattern = state->line_stipple.pattern;
+ cmd_buffer->state.dynamic.line_stipple.factor = state->dynamic.line_stipple.factor;
+ cmd_buffer->state.dynamic.line_stipple.pattern = state->dynamic.line_stipple.pattern;
- cmd_buffer->state.dynamic.cull_mode = state->cull_mode;
- cmd_buffer->state.dynamic.front_face = state->front_face;
+ cmd_buffer->state.dynamic.cull_mode = state->dynamic.cull_mode;
+ cmd_buffer->state.dynamic.front_face = state->dynamic.front_face;
- cmd_buffer->state.dynamic.primitive_topology = state->primitive_topology;
+ cmd_buffer->state.dynamic.primitive_topology = state->dynamic.primitive_topology;
- cmd_buffer->state.dynamic.depth_test_enable = state->depth_test_enable;
- cmd_buffer->state.dynamic.depth_write_enable = state->depth_write_enable;
- cmd_buffer->state.dynamic.depth_compare_op = state->depth_compare_op;
- cmd_buffer->state.dynamic.depth_bounds_test_enable = state->depth_bounds_test_enable;
- cmd_buffer->state.dynamic.stencil_test_enable = state->stencil_test_enable;
+ cmd_buffer->state.dynamic.depth_test_enable = state->dynamic.depth_test_enable;
+ cmd_buffer->state.dynamic.depth_write_enable = state->dynamic.depth_write_enable;
+ cmd_buffer->state.dynamic.depth_compare_op = state->dynamic.depth_compare_op;
+ cmd_buffer->state.dynamic.depth_bounds_test_enable = state->dynamic.depth_bounds_test_enable;
+ cmd_buffer->state.dynamic.stencil_test_enable = state->dynamic.stencil_test_enable;
- cmd_buffer->state.dynamic.stencil_op.front.compare_op = state->stencil_op.front.compare_op;
- cmd_buffer->state.dynamic.stencil_op.front.fail_op = state->stencil_op.front.fail_op;
- cmd_buffer->state.dynamic.stencil_op.front.pass_op = state->stencil_op.front.pass_op;
+ cmd_buffer->state.dynamic.stencil_op.front.compare_op = state->dynamic.stencil_op.front.compare_op;
+ cmd_buffer->state.dynamic.stencil_op.front.fail_op = state->dynamic.stencil_op.front.fail_op;
+ cmd_buffer->state.dynamic.stencil_op.front.pass_op = state->dynamic.stencil_op.front.pass_op;
cmd_buffer->state.dynamic.stencil_op.front.depth_fail_op =
- state->stencil_op.front.depth_fail_op;
+ state->dynamic.stencil_op.front.depth_fail_op;
- cmd_buffer->state.dynamic.stencil_op.back.compare_op = state->stencil_op.back.compare_op;
- cmd_buffer->state.dynamic.stencil_op.back.fail_op = state->stencil_op.back.fail_op;
- cmd_buffer->state.dynamic.stencil_op.back.pass_op = state->stencil_op.back.pass_op;
+ cmd_buffer->state.dynamic.stencil_op.back.compare_op = state->dynamic.stencil_op.back.compare_op;
+ cmd_buffer->state.dynamic.stencil_op.back.fail_op = state->dynamic.stencil_op.back.fail_op;
+ cmd_buffer->state.dynamic.stencil_op.back.pass_op = state->dynamic.stencil_op.back.pass_op;
cmd_buffer->state.dynamic.stencil_op.back.depth_fail_op =
- state->stencil_op.back.depth_fail_op;
+ state->dynamic.stencil_op.back.depth_fail_op;
- cmd_buffer->state.dynamic.line_width = state->line_width;
+ cmd_buffer->state.dynamic.line_width = state->dynamic.line_width;
- cmd_buffer->state.dynamic.depth_bias.bias = state->depth_bias.bias;
- cmd_buffer->state.dynamic.depth_bias.clamp = state->depth_bias.clamp;
- cmd_buffer->state.dynamic.depth_bias.slope = state->depth_bias.slope;
+ cmd_buffer->state.dynamic.depth_bias.bias = state->dynamic.depth_bias.bias;
+ cmd_buffer->state.dynamic.depth_bias.clamp = state->dynamic.depth_bias.clamp;
+ cmd_buffer->state.dynamic.depth_bias.slope = state->dynamic.depth_bias.slope;
- memcpy(cmd_buffer->state.dynamic.blend_constants, state->blend_constants,
- sizeof(state->blend_constants));
+ memcpy(cmd_buffer->state.dynamic.blend_constants, state->dynamic.blend_constants,
+ sizeof(state->dynamic.blend_constants));
- cmd_buffer->state.dynamic.depth_bounds.min = state->depth_bounds.min;
- cmd_buffer->state.dynamic.depth_bounds.max = state->depth_bounds.max;
+ cmd_buffer->state.dynamic.depth_bounds.min = state->dynamic.depth_bounds.min;
+ cmd_buffer->state.dynamic.depth_bounds.max = state->dynamic.depth_bounds.max;
- cmd_buffer->state.dynamic.stencil_compare_mask.front = state->stencil_compare_mask.front;
- cmd_buffer->state.dynamic.stencil_compare_mask.back = state->stencil_compare_mask.back;
+ cmd_buffer->state.dynamic.stencil_compare_mask.front = state->dynamic.stencil_compare_mask.front;
+ cmd_buffer->state.dynamic.stencil_compare_mask.back = state->dynamic.stencil_compare_mask.back;
- cmd_buffer->state.dynamic.stencil_write_mask.front = state->stencil_write_mask.front;
- cmd_buffer->state.dynamic.stencil_write_mask.back = state->stencil_write_mask.back;
+ cmd_buffer->state.dynamic.stencil_write_mask.front = state->dynamic.stencil_write_mask.front;
+ cmd_buffer->state.dynamic.stencil_write_mask.back = state->dynamic.stencil_write_mask.back;
- cmd_buffer->state.dynamic.stencil_reference.front = state->stencil_reference.front;
- cmd_buffer->state.dynamic.stencil_reference.back = state->stencil_reference.back;
+ cmd_buffer->state.dynamic.stencil_reference.front = state->dynamic.stencil_reference.front;
+ cmd_buffer->state.dynamic.stencil_reference.back = state->dynamic.stencil_reference.back;
- cmd_buffer->state.dynamic.fragment_shading_rate.size = state->fragment_shading_rate.size;
+ cmd_buffer->state.dynamic.fragment_shading_rate.size = state->dynamic.fragment_shading_rate.size;
cmd_buffer->state.dynamic.fragment_shading_rate.combiner_ops[0] =
- state->fragment_shading_rate.combiner_ops[0];
+ state->dynamic.fragment_shading_rate.combiner_ops[0];
cmd_buffer->state.dynamic.fragment_shading_rate.combiner_ops[1] =
- state->fragment_shading_rate.combiner_ops[1];
+ state->dynamic.fragment_shading_rate.combiner_ops[1];
- cmd_buffer->state.dynamic.depth_bias_enable = state->depth_bias_enable;
+ cmd_buffer->state.dynamic.depth_bias_enable = state->dynamic.depth_bias_enable;
- cmd_buffer->state.dynamic.primitive_restart_enable = state->primitive_restart_enable;
+ cmd_buffer->state.dynamic.primitive_restart_enable = state->dynamic.primitive_restart_enable;
- cmd_buffer->state.dynamic.rasterizer_discard_enable = state->rasterizer_discard_enable;
+ cmd_buffer->state.dynamic.rasterizer_discard_enable = state->dynamic.rasterizer_discard_enable;
- cmd_buffer->state.dynamic.logic_op = state->logic_op;
+ cmd_buffer->state.dynamic.logic_op = state->dynamic.logic_op;
- cmd_buffer->state.dynamic.color_write_enable = state->color_write_enable;
+ cmd_buffer->state.dynamic.color_write_enable = state->dynamic.color_write_enable;
- cmd_buffer->state.dynamic.discard_rectangle.count = state->discard_rectangle.count;
+ cmd_buffer->state.dynamic.discard_rectangle.count = state->dynamic.discard_rectangle.count;
typed_memcpy(cmd_buffer->state.dynamic.discard_rectangle.rectangles,
- state->discard_rectangle.rectangles,
+ state->dynamic.discard_rectangle.rectangles,
MAX_DISCARD_RECTANGLES);
cmd_buffer->state.dirty |=
@@ -307,7 +307,7 @@ radv_meta_restore(const struct radv_meta_saved_state *state, struct radv_cmd_buf
if (state->flags & RADV_META_SAVE_SAMPLE_LOCATIONS) {
typed_memcpy(&cmd_buffer->state.dynamic.sample_location.locations,
- &state->sample_location.locations, 1);
+ &state->dynamic.sample_location.locations, 1);
cmd_buffer->state.dirty |= RADV_CMD_DIRTY_DYNAMIC_SAMPLE_LOCATIONS;
}
diff --git a/src/amd/vulkan/radv_meta.h b/src/amd/vulkan/radv_meta.h
index d48025bd6ce..854cd37766c 100644
--- a/src/amd/vulkan/radv_meta.h
+++ b/src/amd/vulkan/radv_meta.h
@@ -47,9 +47,7 @@ struct radv_meta_saved_state {
struct radv_descriptor_set *old_descriptor_set0;
struct radv_pipeline *old_pipeline;
- struct radv_viewport_state viewport;
- struct radv_scissor_state scissor;
- struct radv_sample_locations_state sample_location;
+ struct radv_dynamic_state dynamic;
char push_constants[MAX_PUSH_CONSTANTS_SIZE];
@@ -58,83 +56,6 @@ struct radv_meta_saved_state {
struct radv_attachment_state *attachments;
struct vk_framebuffer *framebuffer;
VkRect2D render_area;
-
- VkCullModeFlags cull_mode;
- VkFrontFace front_face;
-
- unsigned primitive_topology;
-
- bool depth_test_enable;
- bool depth_write_enable;
- unsigned depth_compare_op;
- bool depth_bounds_test_enable;
- bool stencil_test_enable;
-
- struct {
- uint32_t front;
- uint32_t back;
- } stencil_write_mask;
-
- struct {
- struct {
- VkStencilOp fail_op;
- VkStencilOp pass_op;
- VkStencilOp depth_fail_op;
- VkCompareOp compare_op;
- } front;
-
- struct {
- VkStencilOp fail_op;
- VkStencilOp pass_op;
- VkStencilOp depth_fail_op;
- VkCompareOp compare_op;
- } back;
- } stencil_op;
-
- struct {
- uint32_t front;
- uint32_t back;
- } stencil_reference;
-
- struct {
- VkExtent2D size;
- VkFragmentShadingRateCombinerOpKHR combiner_ops[2];
- } fragment_shading_rate;
-
- bool depth_bias_enable;
- bool primitive_restart_enable;
- bool rasterizer_discard_enable;
-
- unsigned logic_op;
-
- uint32_t color_write_enable;
-
- float line_width;
-
- struct {
- float bias;
- float clamp;
- float slope;
- } depth_bias;
-
- float blend_constants[4];
-
- struct {
- float min;
- float max;
- } depth_bounds;
-
- struct {
- uint32_t front;
- uint32_t back;
- } stencil_compare_mask;
-
- struct radv_discard_rectangle_state discard_rectangle;
-
- struct {
- uint32_t factor;
- uint16_t pattern;
- } line_stipple;
};
VkResult radv_device_init_meta_clear_state(struct radv_device *device, bool on_demand);
More information about the mesa-commit
mailing list