anv: Add clear_supported to anv_layout_to_aux_state
This will be used for an MCS workaround. Cc: mesa-stable Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8755>
This commit is contained in:
parent
b3eb87aa65
commit
608c131638
|
@ -2167,6 +2167,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
vk_image_layout_to_usage_flags(layout, aspect) & image_aspect_usage;
|
vk_image_layout_to_usage_flags(layout, aspect) & image_aspect_usage;
|
||||||
|
|
||||||
bool aux_supported = true;
|
bool aux_supported = true;
|
||||||
|
bool clear_supported = isl_aux_usage_has_fast_clears(aux_usage);
|
||||||
|
|
||||||
if ((usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) && !read_only) {
|
if ((usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) && !read_only) {
|
||||||
/* This image could be used as both an input attachment and a render
|
/* This image could be used as both an input attachment and a render
|
||||||
|
@ -2178,24 +2179,31 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
*
|
*
|
||||||
* TODO: Should we be disabling this in more cases?
|
* TODO: Should we be disabling this in more cases?
|
||||||
*/
|
*/
|
||||||
if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT)
|
if (aspect == VK_IMAGE_ASPECT_DEPTH_BIT) {
|
||||||
aux_supported = false;
|
aux_supported = false;
|
||||||
|
clear_supported = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usage & VK_IMAGE_USAGE_STORAGE_BIT)
|
if (usage & VK_IMAGE_USAGE_STORAGE_BIT) {
|
||||||
aux_supported = false;
|
aux_supported = false;
|
||||||
|
clear_supported = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
|
if (usage & (VK_IMAGE_USAGE_TRANSFER_SRC_BIT |
|
||||||
VK_IMAGE_USAGE_SAMPLED_BIT |
|
VK_IMAGE_USAGE_SAMPLED_BIT |
|
||||||
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
|
VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)) {
|
||||||
switch (aux_usage) {
|
switch (aux_usage) {
|
||||||
case ISL_AUX_USAGE_HIZ:
|
case ISL_AUX_USAGE_HIZ:
|
||||||
if (!anv_can_sample_with_hiz(devinfo, image))
|
if (!anv_can_sample_with_hiz(devinfo, image)) {
|
||||||
aux_supported = false;
|
aux_supported = false;
|
||||||
|
clear_supported = false;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISL_AUX_USAGE_HIZ_CCS:
|
case ISL_AUX_USAGE_HIZ_CCS:
|
||||||
aux_supported = false;
|
aux_supported = false;
|
||||||
|
clear_supported = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISL_AUX_USAGE_HIZ_CCS_WT:
|
case ISL_AUX_USAGE_HIZ_CCS_WT:
|
||||||
|
@ -2203,6 +2211,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
|
|
||||||
case ISL_AUX_USAGE_CCS_D:
|
case ISL_AUX_USAGE_CCS_D:
|
||||||
aux_supported = false;
|
aux_supported = false;
|
||||||
|
clear_supported = false;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ISL_AUX_USAGE_CCS_E:
|
case ISL_AUX_USAGE_CCS_E:
|
||||||
|
@ -2220,6 +2229,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
case ISL_AUX_USAGE_HIZ_CCS:
|
case ISL_AUX_USAGE_HIZ_CCS:
|
||||||
case ISL_AUX_USAGE_HIZ_CCS_WT:
|
case ISL_AUX_USAGE_HIZ_CCS_WT:
|
||||||
if (aux_supported) {
|
if (aux_supported) {
|
||||||
|
assert(clear_supported);
|
||||||
return ISL_AUX_STATE_COMPRESSED_CLEAR;
|
return ISL_AUX_STATE_COMPRESSED_CLEAR;
|
||||||
} else if (read_only) {
|
} else if (read_only) {
|
||||||
return ISL_AUX_STATE_RESOLVED;
|
return ISL_AUX_STATE_RESOLVED;
|
||||||
|
@ -2231,6 +2241,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
/* We only support clear in exactly one state */
|
/* We only support clear in exactly one state */
|
||||||
if (layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) {
|
if (layout == VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL) {
|
||||||
assert(aux_supported);
|
assert(aux_supported);
|
||||||
|
assert(clear_supported);
|
||||||
return ISL_AUX_STATE_PARTIAL_CLEAR;
|
return ISL_AUX_STATE_PARTIAL_CLEAR;
|
||||||
} else {
|
} else {
|
||||||
return ISL_AUX_STATE_PASS_THROUGH;
|
return ISL_AUX_STATE_PASS_THROUGH;
|
||||||
|
@ -2239,6 +2250,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
case ISL_AUX_USAGE_CCS_E:
|
case ISL_AUX_USAGE_CCS_E:
|
||||||
case ISL_AUX_USAGE_MCS:
|
case ISL_AUX_USAGE_MCS:
|
||||||
if (aux_supported) {
|
if (aux_supported) {
|
||||||
|
assert(clear_supported);
|
||||||
return ISL_AUX_STATE_COMPRESSED_CLEAR;
|
return ISL_AUX_STATE_COMPRESSED_CLEAR;
|
||||||
} else {
|
} else {
|
||||||
return ISL_AUX_STATE_PASS_THROUGH;
|
return ISL_AUX_STATE_PASS_THROUGH;
|
||||||
|
@ -2246,6 +2258,7 @@ anv_layout_to_aux_state(const struct intel_device_info * const devinfo,
|
||||||
|
|
||||||
case ISL_AUX_USAGE_STC_CCS:
|
case ISL_AUX_USAGE_STC_CCS:
|
||||||
assert(aux_supported);
|
assert(aux_supported);
|
||||||
|
assert(!clear_supported);
|
||||||
return ISL_AUX_STATE_COMPRESSED_NO_CLEAR;
|
return ISL_AUX_STATE_COMPRESSED_NO_CLEAR;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
Loading…
Reference in New Issue