radv: set SAMPLE_RATE to the number of samples of the current fb
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com> Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
This commit is contained in:
@@ -1180,15 +1180,18 @@ void radv_set_db_count_control(struct radv_cmd_buffer *cmd_buffer)
|
||||
db_count_control = S_028004_ZPASS_INCREMENT_DISABLE(1);
|
||||
}
|
||||
} else {
|
||||
const struct radv_subpass *subpass = cmd_buffer->state.subpass;
|
||||
uint32_t sample_rate = subpass ? util_logbase2(subpass->max_sample_count) : 0;
|
||||
|
||||
if (cmd_buffer->device->physical_device->rad_info.chip_class >= CIK) {
|
||||
db_count_control = S_028004_PERFECT_ZPASS_COUNTS(1) |
|
||||
S_028004_SAMPLE_RATE(0) | /* TODO: set this to the number of samples of the current framebuffer */
|
||||
S_028004_SAMPLE_RATE(sample_rate) |
|
||||
S_028004_ZPASS_ENABLE(1) |
|
||||
S_028004_SLICE_EVEN_ENABLE(1) |
|
||||
S_028004_SLICE_ODD_ENABLE(1);
|
||||
} else {
|
||||
db_count_control = S_028004_PERFECT_ZPASS_COUNTS(1) |
|
||||
S_028004_SAMPLE_RATE(0); /* TODO: set this to the number of samples of the current framebuffer */
|
||||
S_028004_SAMPLE_RATE(sample_rate);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -106,6 +106,7 @@ VkResult radv_CreateRenderPass(
|
||||
p = pass->subpass_attachments;
|
||||
for (uint32_t i = 0; i < pCreateInfo->subpassCount; i++) {
|
||||
const VkSubpassDescription *desc = &pCreateInfo->pSubpasses[i];
|
||||
uint32_t color_sample_count = 1, depth_sample_count = 1;
|
||||
struct radv_subpass *subpass = &pass->subpasses[i];
|
||||
|
||||
subpass->input_count = desc->inputAttachmentCount;
|
||||
@@ -132,8 +133,10 @@ VkResult radv_CreateRenderPass(
|
||||
for (uint32_t j = 0; j < desc->colorAttachmentCount; j++) {
|
||||
subpass->color_attachments[j]
|
||||
= desc->pColorAttachments[j];
|
||||
if (desc->pColorAttachments[j].attachment != VK_ATTACHMENT_UNUSED)
|
||||
if (desc->pColorAttachments[j].attachment != VK_ATTACHMENT_UNUSED) {
|
||||
pass->attachments[desc->pColorAttachments[j].attachment].view_mask |= subpass->view_mask;
|
||||
color_sample_count = pCreateInfo->pAttachments[desc->pColorAttachments[j].attachment].samples;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,11 +159,16 @@ VkResult radv_CreateRenderPass(
|
||||
if (desc->pDepthStencilAttachment) {
|
||||
subpass->depth_stencil_attachment =
|
||||
*desc->pDepthStencilAttachment;
|
||||
if (desc->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED)
|
||||
if (desc->pDepthStencilAttachment->attachment != VK_ATTACHMENT_UNUSED) {
|
||||
pass->attachments[desc->pDepthStencilAttachment->attachment].view_mask |= subpass->view_mask;
|
||||
depth_sample_count = pCreateInfo->pAttachments[desc->pDepthStencilAttachment->attachment].samples;
|
||||
}
|
||||
} else {
|
||||
subpass->depth_stencil_attachment.attachment = VK_ATTACHMENT_UNUSED;
|
||||
}
|
||||
|
||||
subpass->max_sample_count = MAX2(color_sample_count,
|
||||
depth_sample_count);
|
||||
}
|
||||
|
||||
for (unsigned i = 0; i < pCreateInfo->dependencyCount; ++i) {
|
||||
|
||||
@@ -1586,6 +1586,7 @@ struct radv_subpass {
|
||||
struct radv_subpass_barrier start_barrier;
|
||||
|
||||
uint32_t view_mask;
|
||||
VkSampleCountFlagBits max_sample_count;
|
||||
};
|
||||
|
||||
struct radv_render_pass_attachment {
|
||||
|
||||
Reference in New Issue
Block a user