radv: use vk_dynamic_graphics_state for the discard rectangles state

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20314>
This commit is contained in:
Samuel Pitoiset
2022-12-14 09:23:09 +01:00
committed by Marge Bot
parent 104a564920
commit 3bc248e564
3 changed files with 12 additions and 21 deletions

View File

@@ -152,7 +152,7 @@ radv_bind_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_dy
uint64_t copy_mask = src->mask;
uint64_t dest_mask = 0;
dest->discard_rectangle.count = src->discard_rectangle.count;
dest->vk.dr.rectangle_count = src->vk.dr.rectangle_count;
dest->sample_location.count = src->sample_location.count;
if (copy_mask & RADV_DYNAMIC_VIEWPORT) {
@@ -190,10 +190,9 @@ radv_bind_dynamic_state(struct radv_cmd_buffer *cmd_buffer, const struct radv_dy
}
if (copy_mask & RADV_DYNAMIC_DISCARD_RECTANGLE) {
if (memcmp(&dest->discard_rectangle.rectangles, &src->discard_rectangle.rectangles,
src->discard_rectangle.count * sizeof(VkRect2D))) {
typed_memcpy(dest->discard_rectangle.rectangles, src->discard_rectangle.rectangles,
src->discard_rectangle.count);
if (memcmp(&dest->vk.dr.rectangles, &src->vk.dr.rectangles,
src->vk.dr.rectangle_count * sizeof(VkRect2D))) {
typed_memcpy(dest->vk.dr.rectangles, src->vk.dr.rectangles, src->vk.dr.rectangle_count);
dest_mask |= RADV_DYNAMIC_DISCARD_RECTANGLE;
}
}
@@ -2079,13 +2078,13 @@ radv_emit_discard_rectangle(struct radv_cmd_buffer *cmd_buffer)
{
const struct radv_dynamic_state *d = &cmd_buffer->state.dynamic;
if (!d->discard_rectangle.count)
if (!d->vk.dr.rectangle_count)
return;
radeon_set_context_reg_seq(cmd_buffer->cs, R_028210_PA_SC_CLIPRECT_0_TL,
d->discard_rectangle.count * 2);
for (unsigned i = 0; i < d->discard_rectangle.count; ++i) {
VkRect2D rect = d->discard_rectangle.rectangles[i];
d->vk.dr.rectangle_count * 2);
for (unsigned i = 0; i < d->vk.dr.rectangle_count; ++i) {
VkRect2D rect = d->vk.dr.rectangles[i];
radeon_emit(cmd_buffer->cs, S_028210_TL_X(rect.offset.x) | S_028210_TL_Y(rect.offset.y));
radeon_emit(cmd_buffer->cs, S_028214_BR_X(rect.offset.x + rect.extent.width) |
S_028214_BR_Y(rect.offset.y + rect.extent.height));
@@ -6308,8 +6307,8 @@ radv_CmdSetDiscardRectangleEXT(VkCommandBuffer commandBuffer, uint32_t firstDisc
assert(firstDiscardRectangle < MAX_DISCARD_RECTANGLES);
assert(total_count >= 1 && total_count <= MAX_DISCARD_RECTANGLES);
typed_memcpy(&state->dynamic.discard_rectangle.rectangles[firstDiscardRectangle],
pDiscardRectangles, discardRectangleCount);
typed_memcpy(&state->dynamic.vk.dr.rectangles[firstDiscardRectangle], pDiscardRectangles,
discardRectangleCount);
state->dirty |= RADV_CMD_DIRTY_DYNAMIC_DISCARD_RECTANGLE;
}

View File

@@ -1637,10 +1637,9 @@ radv_pipeline_init_dynamic_state(struct radv_graphics_pipeline *pipeline,
}
if (needed_states & RADV_DYNAMIC_DISCARD_RECTANGLE) {
dynamic->discard_rectangle.count = state->dr->rectangle_count;
dynamic->vk.dr.rectangle_count = state->dr->rectangle_count;
if (states & RADV_DYNAMIC_DISCARD_RECTANGLE) {
typed_memcpy(dynamic->discard_rectangle.rectangles, state->dr->rectangles,
state->dr->rectangle_count);
typed_memcpy(dynamic->vk.dr.rectangles, state->dr->rectangles, state->dr->rectangle_count);
}
}

View File

@@ -1298,11 +1298,6 @@ struct radv_streamout_state {
bool streamout_enabled;
};
struct radv_discard_rectangle_state {
uint32_t count;
VkRect2D rectangles[MAX_DISCARD_RECTANGLES];
};
struct radv_sample_locations_state {
VkSampleCountFlagBits per_pixel;
VkExtent2D grid_size;
@@ -1372,8 +1367,6 @@ struct radv_dynamic_state {
uint32_t back;
} stencil_reference;
struct radv_discard_rectangle_state discard_rectangle;
struct radv_sample_locations_state sample_location;
struct {