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:
},
&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) {
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);
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;
}
radv_meta_restore(&saved_state, cmd_buffer);
- cmd_buffer->state.predicating = old_predicating;
cmd_buffer->state.flush_bits |= post_flush;
}
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
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
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
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
slice_array++;
}
- /* Restore conditional rendering. */
- cmd_buffer->state.predicating = old_predicating;
-
radv_meta_restore(&saved_state, cmd_buffer);
}
}
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
slice_array++;
}
- /* Restore conditional rendering. */
- cmd_buffer->state.predicating = old_predicating;
-
radv_meta_restore(&saved_state, cmd_buffer);
}
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:
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
}
}
- /* Restore conditional rendering. */
- cmd_buffer->state.predicating = old_predicating;
-
radv_meta_restore(&saved_state, cmd_buffer);
}
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;
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);
}
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);
}
}
- 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;
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);