Mesa (main): turnip: implement vk_dont_care_as_load workaround
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Mon Oct 18 18:07:58 UTC 2021
Module: Mesa
Branch: main
Commit: ebca227db15b8642be51f2dbefbad804c948c7dc
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=ebca227db15b8642be51f2dbefbad804c948c7dc
Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date: Thu Oct 14 21:01:16 2021 +0300
turnip: implement vk_dont_care_as_load workaround
Signed-off-by: Danylo Piliaiev <dpiliaiev at igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13367>
---
src/freedreno/vulkan/tu_device.c | 5 +++++
src/freedreno/vulkan/tu_pass.c | 14 ++++++++++++--
src/freedreno/vulkan/tu_private.h | 1 +
3 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/src/freedreno/vulkan/tu_device.c b/src/freedreno/vulkan/tu_device.c
index fddfce140d7..0811259dd47 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 d7bb48374fb..c9a6325ea42 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 dcfba82e8f5..7c73940eeaf 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
More information about the mesa-commit
mailing list