From: Danylo Piliaiev Date: Thu, 14 Oct 2021 18:01:16 +0000 (+0300) Subject: turnip: implement vk_dont_care_as_load workaround X-Git-Tag: upstream/22.3.5~16513 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=ebca227db15b8642be51f2dbefbad804c948c7dc;p=platform%2Fupstream%2Fmesa.git turnip: implement vk_dont_care_as_load workaround Signed-off-by: Danylo Piliaiev Part-of: --- diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c index fddfce1..0811259 100644 --- a/src/freedreno/vulkan/tu_device.c +++ b/src/freedreno/vulkan/tu_device.c @@ -319,6 +319,7 @@ static const struct debug_control tu_debug_options[] = { { "perfc", TU_DEBUG_PERFC }, { "flushall", TU_DEBUG_FLUSHALL }, { "syncdraw", TU_DEBUG_SYNCDRAW }, + { "dontcare_as_load", TU_DEBUG_DONT_CARE_AS_LOAD }, { NULL, 0 } }; @@ -339,6 +340,7 @@ static const driOptionDescription tu_dri_options[] = { DRI_CONF_SECTION_DEBUG DRI_CONF_VK_WSI_FORCE_BGRA8_UNORM_FIRST(false) + DRI_CONF_VK_DONT_CARE_AS_LOAD(false) DRI_CONF_SECTION_END }; @@ -350,6 +352,9 @@ tu_init_dri_options(struct tu_instance *instance) driParseConfigFiles(&instance->dri_options, &instance->available_dri_options, 0, "turnip", NULL, NULL, instance->vk.app_info.app_name, instance->vk.app_info.app_version, instance->vk.app_info.engine_name, instance->vk.app_info.engine_version); + + if (driQueryOptionb(&instance->dri_options, "vk_dont_care_as_load")) + instance->debug_flags |= TU_DEBUG_DONT_CARE_AS_LOAD; } VKAPI_ATTR VkResult VKAPI_CALL diff --git a/src/freedreno/vulkan/tu_pass.c b/src/freedreno/vulkan/tu_pass.c index d7bb483..c9a6325 100644 --- a/src/freedreno/vulkan/tu_pass.c +++ b/src/freedreno/vulkan/tu_pass.c @@ -662,9 +662,19 @@ tu_CreateRenderPass2(VkDevice _device, att->cpp = vk_format_get_blocksize(att->format) * att->samples; att->gmem_offset = -1; + VkAttachmentLoadOp loadOp = pCreateInfo->pAttachments[i].loadOp; + VkAttachmentLoadOp stencilLoadOp = pCreateInfo->pAttachments[i].stencilLoadOp; + + if (device->instance->debug_flags & TU_DEBUG_DONT_CARE_AS_LOAD) { + if (loadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) + loadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + if (stencilLoadOp == VK_ATTACHMENT_LOAD_OP_DONT_CARE) + stencilLoadOp = VK_ATTACHMENT_LOAD_OP_LOAD; + } + attachment_set_ops(att, - pCreateInfo->pAttachments[i].loadOp, - pCreateInfo->pAttachments[i].stencilLoadOp, + loadOp, + stencilLoadOp, pCreateInfo->pAttachments[i].storeOp, pCreateInfo->pAttachments[i].stencilStoreOp); } diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h index dcfba82..7c73940 100644 --- a/src/freedreno/vulkan/tu_private.h +++ b/src/freedreno/vulkan/tu_private.h @@ -239,6 +239,7 @@ enum tu_debug_flags TU_DEBUG_PERFC = 1 << 9, TU_DEBUG_FLUSHALL = 1 << 10, TU_DEBUG_SYNCDRAW = 1 << 11, + TU_DEBUG_DONT_CARE_AS_LOAD = 1 << 12, }; struct tu_instance