struct radv_color_buffer_info *cb,
struct radv_image_view *iview,
VkImageLayout layout,
- bool in_render_loop)
+ bool in_render_loop,
+ bool disable_dcc)
{
bool is_vi = cmd_buffer->device->physical_device->rad_info.chip_class >= GFX8;
uint32_t cb_color_info = cb->cb_color_info;
if (!radv_layout_dcc_compressed(cmd_buffer->device, image, layout, in_render_loop,
radv_image_queue_family_mask(image,
cmd_buffer->queue_family_index,
- cmd_buffer->queue_family_index))) {
+ cmd_buffer->queue_family_index)) ||
+ disable_dcc) {
cb_color_info &= C_028C70_DCC_ENABLE;
}
assert(iview->aspect_mask & (VK_IMAGE_ASPECT_COLOR_BIT | VK_IMAGE_ASPECT_PLANE_0_BIT |
VK_IMAGE_ASPECT_PLANE_1_BIT | VK_IMAGE_ASPECT_PLANE_2_BIT));
- radv_emit_fb_color_state(cmd_buffer, i, &cmd_buffer->state.attachments[idx].cb, iview, layout, in_render_loop);
+ radv_emit_fb_color_state(cmd_buffer, i, &cmd_buffer->state.attachments[idx].cb, iview, layout,
+ in_render_loop, cmd_buffer->state.attachments[idx].disable_dcc);
radv_load_color_clear_metadata(cmd_buffer, iview, i);
}
static VkResult
radv_cmd_state_setup_attachments(struct radv_cmd_buffer *cmd_buffer,
struct radv_render_pass *pass,
- const VkRenderPassBeginInfo *info)
+ const VkRenderPassBeginInfo *info,
+ const struct radv_extra_render_pass_begin_info *extra)
{
struct radv_cmd_state *state = &cmd_buffer->state;
const struct VkRenderPassAttachmentBeginInfo *attachment_info = NULL;
state->attachments[i].current_layout = att->initial_layout;
state->attachments[i].current_in_render_loop = false;
state->attachments[i].current_stencil_layout = att->stencil_initial_layout;
+ state->attachments[i].disable_dcc = extra && extra->disable_dcc;
state->attachments[i].sample_location.count = 0;
struct radv_image_view *iview;
&cmd_buffer->state.pass->subpasses[pBeginInfo->pInheritanceInfo->subpass];
if (cmd_buffer->state.framebuffer) {
- result = radv_cmd_state_setup_attachments(cmd_buffer, cmd_buffer->state.pass, NULL);
+ result = radv_cmd_state_setup_attachments(cmd_buffer, cmd_buffer->state.pass, NULL, NULL);
if (result != VK_SUCCESS)
return result;
}
void
radv_cmd_buffer_begin_render_pass(struct radv_cmd_buffer *cmd_buffer,
- const VkRenderPassBeginInfo *pRenderPassBegin)
+ const VkRenderPassBeginInfo *pRenderPassBegin,
+ const struct radv_extra_render_pass_begin_info *extra_info)
{
RADV_FROM_HANDLE(radv_render_pass, pass, pRenderPassBegin->renderPass);
RADV_FROM_HANDLE(radv_framebuffer, framebuffer, pRenderPassBegin->framebuffer);
cmd_buffer->state.pass = pass;
cmd_buffer->state.render_area = pRenderPassBegin->renderArea;
- result = radv_cmd_state_setup_attachments(cmd_buffer, pass, pRenderPassBegin);
+ result = radv_cmd_state_setup_attachments(cmd_buffer, pass, pRenderPassBegin, extra_info);
if (result != VK_SUCCESS)
return;
{
RADV_FROM_HANDLE(radv_cmd_buffer, cmd_buffer, commandBuffer);
- radv_cmd_buffer_begin_render_pass(cmd_buffer, pRenderPassBegin);
+ radv_cmd_buffer_begin_render_pass(cmd_buffer, pRenderPassBegin, NULL);
radv_cmd_buffer_begin_subpass(cmd_buffer, 0);
}