radv: Use RADV_META_SUSPEND_PREDICATING
Signed-off-by: Konstantin Seurer <konstantin.seurer@gmail.com> Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/17625>
This commit is contained in:

committed by
Marge Bot

parent
fdeca2ca0b
commit
b06e5535c0
@@ -457,7 +457,6 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
const VkImageSubresourceLayers *dst_res = ®ion->dstSubresource;
|
||||
struct radv_device *device = cmd_buffer->device;
|
||||
struct radv_meta_saved_state saved_state;
|
||||
bool old_predicating;
|
||||
VkSampler sampler;
|
||||
|
||||
/* From the Vulkan 1.0 spec:
|
||||
@@ -479,15 +478,12 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
},
|
||||
&cmd_buffer->pool->vk.alloc, &sampler);
|
||||
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
/* VK_EXT_conditional_rendering says that blit commands should not be
|
||||
* affected by conditional rendering.
|
||||
*/
|
||||
old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS |
|
||||
RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
unsigned dst_start, dst_end;
|
||||
if (dst_image->vk.image_type == VK_IMAGE_TYPE_3D) {
|
||||
@@ -602,9 +598,6 @@ blit_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
radv_image_view_finish(&src_iview);
|
||||
}
|
||||
|
||||
/* Restore conditional rendering. */
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
|
||||
radv_DestroySampler(radv_device_to_handle(device), sampler, &cmd_buffer->pool->vk.alloc);
|
||||
|
@@ -2000,11 +2000,9 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer)
|
||||
return;
|
||||
|
||||
/* Subpass clear should not be affected by conditional rendering. */
|
||||
bool old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS);
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
for (uint32_t i = 0; i < cmd_state->subpass->color_count; ++i) {
|
||||
uint32_t a = cmd_state->subpass->color_attachments[i].attachment;
|
||||
@@ -2051,7 +2049,6 @@ radv_cmd_buffer_clear_subpass(struct radv_cmd_buffer *cmd_buffer)
|
||||
}
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
cmd_buffer->state.flush_bits |= post_flush;
|
||||
}
|
||||
|
||||
@@ -2319,27 +2316,23 @@ radv_CmdClearColorImage(VkCommandBuffer commandBuffer, VkImage image_h, VkImageL
|
||||
struct radv_meta_saved_state saved_state;
|
||||
bool cs;
|
||||
|
||||
/* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */
|
||||
bool old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
|
||||
cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE ||
|
||||
!radv_image_is_renderable(cmd_buffer->device, image);
|
||||
|
||||
if (cs) {
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
} else {
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS);
|
||||
}
|
||||
/* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering.
|
||||
*/
|
||||
enum radv_meta_save_flags save_flags = RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING;
|
||||
if (cs)
|
||||
save_flags |= RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_DESCRIPTORS;
|
||||
else
|
||||
save_flags |= RADV_META_SAVE_GRAPHICS_PIPELINE;
|
||||
|
||||
radv_meta_save(&saved_state, cmd_buffer, save_flags);
|
||||
|
||||
radv_cmd_clear_image(cmd_buffer, image, imageLayout, (const VkClearValue *)pColor, rangeCount,
|
||||
pRanges, cs);
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
@@ -2353,17 +2346,14 @@ radv_CmdClearDepthStencilImage(VkCommandBuffer commandBuffer, VkImage image_h,
|
||||
struct radv_meta_saved_state saved_state;
|
||||
|
||||
/* Clear commands (except vkCmdClearAttachments) should not be affected by conditional rendering. */
|
||||
bool old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS);
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_GRAPHICS_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
radv_cmd_clear_image(cmd_buffer, image, imageLayout, (const VkClearValue *)pDepthStencil,
|
||||
rangeCount, pRanges, false);
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
}
|
||||
|
||||
VKAPI_ATTR void VKAPI_CALL
|
||||
|
@@ -90,7 +90,6 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
|
||||
const VkBufferImageCopy2 *region)
|
||||
{
|
||||
struct radv_meta_saved_state saved_state;
|
||||
bool old_predicating;
|
||||
bool cs;
|
||||
|
||||
/* The Vulkan 1.0 spec says "dstImage must have a sample count equal to
|
||||
@@ -101,15 +100,13 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
|
||||
cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE ||
|
||||
!radv_image_is_renderable(cmd_buffer->device, image);
|
||||
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
(cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) |
|
||||
RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
/* VK_EXT_conditional_rendering says that copy commands should not be
|
||||
* affected by conditional rendering.
|
||||
*/
|
||||
old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
(cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) |
|
||||
RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS |
|
||||
RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
/**
|
||||
* From the Vulkan 1.0.6 spec: 18.3 Copying Data Between Images
|
||||
@@ -195,9 +192,6 @@ copy_buffer_to_image(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
|
||||
slice_array++;
|
||||
}
|
||||
|
||||
/* Restore conditional rendering. */
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
}
|
||||
|
||||
@@ -250,17 +244,13 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
|
||||
}
|
||||
|
||||
struct radv_meta_saved_state saved_state;
|
||||
bool old_predicating;
|
||||
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
/* VK_EXT_conditional_rendering says that copy commands should not be
|
||||
* affected by conditional rendering.
|
||||
*/
|
||||
old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS |
|
||||
RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
/**
|
||||
* From the Vulkan 1.0.6 spec: 18.3 Copying Data Between Images
|
||||
@@ -341,9 +331,6 @@ copy_image_to_buffer(struct radv_cmd_buffer *cmd_buffer, struct radv_buffer *buf
|
||||
slice_array++;
|
||||
}
|
||||
|
||||
/* Restore conditional rendering. */
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
}
|
||||
|
||||
@@ -368,7 +355,6 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
VkImageLayout dst_image_layout, const VkImageCopy2 *region)
|
||||
{
|
||||
struct radv_meta_saved_state saved_state;
|
||||
bool old_predicating;
|
||||
bool cs;
|
||||
|
||||
/* From the Vulkan 1.0 spec:
|
||||
@@ -381,15 +367,13 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
cs = cmd_buffer->qf == RADV_QUEUE_COMPUTE ||
|
||||
!radv_image_is_renderable(cmd_buffer->device, dst_image);
|
||||
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
(cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) |
|
||||
RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
/* VK_EXT_conditional_rendering says that copy commands should not be
|
||||
* affected by conditional rendering.
|
||||
*/
|
||||
old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
(cs ? RADV_META_SAVE_COMPUTE_PIPELINE : RADV_META_SAVE_GRAPHICS_PIPELINE) |
|
||||
RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS |
|
||||
RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
if (cs) {
|
||||
/* For partial copies, HTILE should be decompressed before copying because the metadata is
|
||||
@@ -571,9 +555,6 @@ copy_image(struct radv_cmd_buffer *cmd_buffer, struct radv_image *src_image,
|
||||
}
|
||||
}
|
||||
|
||||
/* Restore conditional rendering. */
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
}
|
||||
|
||||
|
@@ -720,12 +720,9 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
|
||||
VkOffset3D offset, VkExtent3D extent)
|
||||
{
|
||||
struct radv_meta_saved_state saved_state;
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
bool old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS |
|
||||
RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
uint32_t base_slice = radv_meta_get_iview_layer(image, subresource, &offset);
|
||||
uint32_t slice_count = image->vk.image_type == VK_IMAGE_TYPE_3D ? extent.depth : subresource->layerCount;
|
||||
@@ -797,6 +794,5 @@ radv_meta_decode_etc(struct radv_cmd_buffer *cmd_buffer, struct radv_image *imag
|
||||
radv_image_view_finish(&src_iview);
|
||||
radv_image_view_finish(&dest_iview);
|
||||
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
radv_meta_restore(&saved_state, cmd_buffer);
|
||||
}
|
||||
|
@@ -973,7 +973,6 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline,
|
||||
struct radv_device *device = cmd_buffer->device;
|
||||
struct radv_meta_saved_state saved_state;
|
||||
struct radv_buffer src_buffer, dst_buffer;
|
||||
bool old_predicating;
|
||||
|
||||
if (!*pipeline) {
|
||||
VkResult ret = radv_device_init_meta_query_state_internal(device);
|
||||
@@ -983,15 +982,12 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline,
|
||||
}
|
||||
}
|
||||
|
||||
radv_meta_save(
|
||||
&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS | RADV_META_SAVE_DESCRIPTORS);
|
||||
|
||||
/* VK_EXT_conditional_rendering says that copy commands should not be
|
||||
* affected by conditional rendering.
|
||||
*/
|
||||
old_predicating = cmd_buffer->state.predicating;
|
||||
cmd_buffer->state.predicating = false;
|
||||
radv_meta_save(&saved_state, cmd_buffer,
|
||||
RADV_META_SAVE_COMPUTE_PIPELINE | RADV_META_SAVE_CONSTANTS |
|
||||
RADV_META_SAVE_DESCRIPTORS | RADV_META_SUSPEND_PREDICATING);
|
||||
|
||||
uint64_t src_buffer_size = MAX2(src_stride * count, avail_offset + 4 * count - src_offset);
|
||||
uint64_t dst_buffer_size = dst_stride * (count - 1) + dst_size;
|
||||
@@ -1054,9 +1050,6 @@ radv_query_shader(struct radv_cmd_buffer *cmd_buffer, VkPipeline *pipeline,
|
||||
cmd_buffer->active_query_flush_bits |=
|
||||
RADV_CMD_FLAG_CS_PARTIAL_FLUSH | RADV_CMD_FLAG_INV_L2 | RADV_CMD_FLAG_INV_VCACHE;
|
||||
|
||||
/* Restore conditional rendering. */
|
||||
cmd_buffer->state.predicating = old_predicating;
|
||||
|
||||
radv_buffer_finish(&src_buffer);
|
||||
radv_buffer_finish(&dst_buffer);
|
||||
|
||||
|
Reference in New Issue
Block a user