radv: only allow cmask/dcc on exclusive or concurrent with graphics queue.
Otherwise we don't get the barriers to flush dcc etc. Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl> Signed-off-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
parent
a4d1eb443e
commit
1814df7ea7
|
@ -674,7 +674,7 @@ radv_image_create(VkDevice _device,
|
||||||
RADV_FROM_HANDLE(radv_device, device, _device);
|
RADV_FROM_HANDLE(radv_device, device, _device);
|
||||||
const VkImageCreateInfo *pCreateInfo = create_info->vk_info;
|
const VkImageCreateInfo *pCreateInfo = create_info->vk_info;
|
||||||
struct radv_image *image = NULL;
|
struct radv_image *image = NULL;
|
||||||
|
bool can_cmask_dcc = false;
|
||||||
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO);
|
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO);
|
||||||
|
|
||||||
radv_assert(pCreateInfo->mipLevels > 0);
|
radv_assert(pCreateInfo->mipLevels > 0);
|
||||||
|
@ -712,15 +712,18 @@ radv_image_create(VkDevice _device,
|
||||||
image->size = image->surface.bo_size;
|
image->size = image->surface.bo_size;
|
||||||
image->alignment = image->surface.bo_alignment;
|
image->alignment = image->surface.bo_alignment;
|
||||||
|
|
||||||
|
if (image->exclusive || (image->queue_family_mask & 1) == 1)
|
||||||
|
can_cmask_dcc = true;
|
||||||
|
|
||||||
if ((pCreateInfo->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) &&
|
if ((pCreateInfo->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) &&
|
||||||
image->surface.dcc_size)
|
image->surface.dcc_size && can_cmask_dcc)
|
||||||
radv_image_alloc_dcc(device, image);
|
radv_image_alloc_dcc(device, image);
|
||||||
else
|
else
|
||||||
image->surface.dcc_size = 0;
|
image->surface.dcc_size = 0;
|
||||||
|
|
||||||
if ((pCreateInfo->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) &&
|
if ((pCreateInfo->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT) &&
|
||||||
pCreateInfo->mipLevels == 1 &&
|
pCreateInfo->mipLevels == 1 &&
|
||||||
!image->surface.dcc_size && image->extent.depth == 1)
|
!image->surface.dcc_size && image->extent.depth == 1 && can_cmask_dcc)
|
||||||
radv_image_alloc_cmask(device, image);
|
radv_image_alloc_cmask(device, image);
|
||||||
if (image->samples > 1 && vk_format_is_color(pCreateInfo->format)) {
|
if (image->samples > 1 && vk_format_is_color(pCreateInfo->format)) {
|
||||||
radv_image_alloc_fmask(device, image);
|
radv_image_alloc_fmask(device, image);
|
||||||
|
|
Loading…
Reference in New Issue