panvk: Enable KHR_format_feature_flags2 and use them
We need to enable this to use VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT and VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT. Signed-off-by: Ryan Mckeever <ryan.mckeever@collabora.com> Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com> Acked-by: Erik Faye-Lund <erik.faye-lund@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33787>
This commit is contained in:
@@ -486,7 +486,7 @@ Vulkan 1.3 -- all DONE: anv, lvp, nvk, radv, tu, vn, v3dv
|
|||||||
|
|
||||||
VK_KHR_copy_commands2 DONE (anv, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
|
VK_KHR_copy_commands2 DONE (anv, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
|
||||||
VK_KHR_dynamic_rendering DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
VK_KHR_dynamic_rendering DONE (anv, dzn, hasvk, lvp, nvk, panvk, radv, tu, v3dv, vn)
|
||||||
VK_KHR_format_feature_flags2 DONE (anv, hasvk, lvp, nvk, pvr, radv, tu, v3dv, vn)
|
VK_KHR_format_feature_flags2 DONE (anv, hasvk, lvp, nvk, panvk, pvr, radv, tu, v3dv, vn)
|
||||||
VK_KHR_maintenance4 DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn)
|
VK_KHR_maintenance4 DONE (anv, hasvk, lvp, nvk, radv, tu, v3dv, vn)
|
||||||
VK_KHR_shader_integer_dot_product DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn)
|
VK_KHR_shader_integer_dot_product DONE (anv, dzn, hasvk, lvp, nvk, radv, tu, v3dv, vn)
|
||||||
VK_KHR_shader_non_semantic_info DONE (anv, hasvk, nvk, panvk, radv, tu, v3dv, vn)
|
VK_KHR_shader_non_semantic_info DONE (anv, hasvk, nvk, panvk, radv, tu, v3dv, vn)
|
||||||
|
@@ -41,3 +41,4 @@ Mali G720 and G725 on Panfrost and panvk
|
|||||||
dualSrcBlend on panvk
|
dualSrcBlend on panvk
|
||||||
VK_KHR_dynamic_rendering_local_read on panvk
|
VK_KHR_dynamic_rendering_local_read on panvk
|
||||||
VK_EXT_subgroup_size_control on panvk/v10+
|
VK_EXT_subgroup_size_control on panvk/v10+
|
||||||
|
VK_KHR_format_feature_flags2 on panvk
|
||||||
|
@@ -231,6 +231,7 @@ get_device_extensions(const struct panvk_physical_device *device,
|
|||||||
.KHR_external_memory_fd = true,
|
.KHR_external_memory_fd = true,
|
||||||
.KHR_external_semaphore = true,
|
.KHR_external_semaphore = true,
|
||||||
.KHR_external_semaphore_fd = true,
|
.KHR_external_semaphore_fd = true,
|
||||||
|
.KHR_format_feature_flags2 = true,
|
||||||
.KHR_get_memory_requirements2 = true,
|
.KHR_get_memory_requirements2 = true,
|
||||||
.KHR_global_priority = true,
|
.KHR_global_priority = true,
|
||||||
.KHR_image_format_list = true,
|
.KHR_image_format_list = true,
|
||||||
@@ -1353,11 +1354,11 @@ format_is_supported(struct panvk_physical_device *physical_device,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkFormatFeatureFlags
|
static VkFormatFeatureFlags2
|
||||||
get_image_plane_format_features(struct panvk_physical_device *physical_device,
|
get_image_plane_format_features(struct panvk_physical_device *physical_device,
|
||||||
VkFormat format)
|
VkFormat format)
|
||||||
{
|
{
|
||||||
VkFormatFeatureFlags features = 0;
|
VkFormatFeatureFlags2 features = 0;
|
||||||
enum pipe_format pfmt = vk_format_to_pipe_format(format);
|
enum pipe_format pfmt = vk_format_to_pipe_format(format);
|
||||||
const struct panfrost_format fmt = physical_device->formats.all[pfmt];
|
const struct panfrost_format fmt = physical_device->formats.all[pfmt];
|
||||||
unsigned arch = pan_arch(physical_device->kmod.props.gpu_prod_id);
|
unsigned arch = pan_arch(physical_device->kmod.props.gpu_prod_id);
|
||||||
@@ -1366,22 +1367,22 @@ get_image_plane_format_features(struct panvk_physical_device *physical_device,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (fmt.bind & PAN_BIND_SAMPLER_VIEW) {
|
if (fmt.bind & PAN_BIND_SAMPLER_VIEW) {
|
||||||
features |= VK_FORMAT_FEATURE_TRANSFER_SRC_BIT |
|
features |= VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT |
|
||||||
VK_FORMAT_FEATURE_TRANSFER_DST_BIT |
|
VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT |
|
||||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
|
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT;
|
||||||
|
|
||||||
if (arch >= 10)
|
if (arch >= 10)
|
||||||
features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
features |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT;
|
||||||
|
|
||||||
/* Integer formats only support nearest filtering */
|
/* Integer formats only support nearest filtering */
|
||||||
if (!util_format_is_scaled(pfmt) && !util_format_is_pure_integer(pfmt))
|
if (!util_format_is_scaled(pfmt) && !util_format_is_pure_integer(pfmt))
|
||||||
features |= VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
features |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT;
|
||||||
|
|
||||||
features |= VK_FORMAT_FEATURE_BLIT_SRC_BIT;
|
features |= VK_FORMAT_FEATURE_2_BLIT_SRC_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fmt.bind & PAN_BIND_RENDER_TARGET) {
|
if (fmt.bind & PAN_BIND_RENDER_TARGET) {
|
||||||
features |= VK_FORMAT_FEATURE_BLIT_DST_BIT;
|
features |= VK_FORMAT_FEATURE_2_BLIT_DST_BIT;
|
||||||
|
|
||||||
/* SNORM rendering isn't working yet (nir_lower_blend bugs), disable for
|
/* SNORM rendering isn't working yet (nir_lower_blend bugs), disable for
|
||||||
* now.
|
* now.
|
||||||
@@ -1389,24 +1390,27 @@ get_image_plane_format_features(struct panvk_physical_device *physical_device,
|
|||||||
* XXX: Enable once fixed.
|
* XXX: Enable once fixed.
|
||||||
*/
|
*/
|
||||||
if (!util_format_is_snorm(pfmt)) {
|
if (!util_format_is_snorm(pfmt)) {
|
||||||
features |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
|
features |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT;
|
||||||
features |= VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT;
|
features |= VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fmt.bind & PAN_BIND_STORAGE_IMAGE)
|
if (fmt.bind & PAN_BIND_STORAGE_IMAGE)
|
||||||
features |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT;
|
||||||
|
|
||||||
if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT)
|
if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT)
|
||||||
features |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT;
|
||||||
|
|
||||||
if (fmt.bind & PAN_BIND_DEPTH_STENCIL)
|
if (fmt.bind & PAN_BIND_DEPTH_STENCIL)
|
||||||
features |= VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
|
features |= VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT;
|
||||||
|
|
||||||
|
if (vk_format_has_depth(format))
|
||||||
|
features |= VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT;
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkFormatFeatureFlags
|
static VkFormatFeatureFlags2
|
||||||
get_image_format_features(struct panvk_physical_device *physical_device,
|
get_image_format_features(struct panvk_physical_device *physical_device,
|
||||||
VkFormat format)
|
VkFormat format)
|
||||||
{
|
{
|
||||||
@@ -1427,7 +1431,7 @@ get_image_format_features(struct panvk_physical_device *physical_device,
|
|||||||
/* For multi-plane, we get the feature flags of each plane separately,
|
/* For multi-plane, we get the feature flags of each plane separately,
|
||||||
* then take their intersection as the overall format feature flags
|
* then take their intersection as the overall format feature flags
|
||||||
*/
|
*/
|
||||||
VkFormatFeatureFlags features = ~0u;
|
VkFormatFeatureFlags2 features = ~0ull;
|
||||||
bool cosited_chroma = false;
|
bool cosited_chroma = false;
|
||||||
for (uint8_t plane = 0; plane < ycbcr_info->n_planes; plane++) {
|
for (uint8_t plane = 0; plane < ycbcr_info->n_planes; plane++) {
|
||||||
const struct vk_format_ycbcr_plane *plane_info =
|
const struct vk_format_ycbcr_plane *plane_info =
|
||||||
@@ -1442,24 +1446,24 @@ get_image_format_features(struct panvk_physical_device *physical_device,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* Uh... We really should be able to sample from YCbCr */
|
/* Uh... We really should be able to sample from YCbCr */
|
||||||
assert(features & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT);
|
assert(features & VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT);
|
||||||
assert(features & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
|
assert(features & VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT);
|
||||||
|
|
||||||
/* Siting is handled in the YCbCr lowering pass. */
|
/* Siting is handled in the YCbCr lowering pass. */
|
||||||
features |= VK_FORMAT_FEATURE_MIDPOINT_CHROMA_SAMPLES_BIT;
|
features |= VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT;
|
||||||
if (cosited_chroma)
|
if (cosited_chroma)
|
||||||
features |= VK_FORMAT_FEATURE_COSITED_CHROMA_SAMPLES_BIT;
|
features |= VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT;
|
||||||
|
|
||||||
/* These aren't allowed for YCbCr formats */
|
/* These aren't allowed for YCbCr formats */
|
||||||
features &= ~(VK_FORMAT_FEATURE_BLIT_SRC_BIT |
|
features &= ~(VK_FORMAT_FEATURE_2_BLIT_SRC_BIT |
|
||||||
VK_FORMAT_FEATURE_BLIT_DST_BIT |
|
VK_FORMAT_FEATURE_2_BLIT_DST_BIT |
|
||||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT |
|
||||||
VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BLEND_BIT |
|
VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT |
|
||||||
VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT);
|
VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT);
|
||||||
|
|
||||||
/* This is supported on all YCbCr formats */
|
/* This is supported on all YCbCr formats */
|
||||||
features |=
|
features |=
|
||||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT;
|
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT;
|
||||||
|
|
||||||
if (ycbcr_info->n_planes > 1) {
|
if (ycbcr_info->n_planes > 1) {
|
||||||
/* DISJOINT_BIT implies that each plane has its own separate binding,
|
/* DISJOINT_BIT implies that each plane has its own separate binding,
|
||||||
@@ -1467,14 +1471,14 @@ get_image_format_features(struct panvk_physical_device *physical_device,
|
|||||||
* each have their own, separate filters, so these two bits make sense
|
* each have their own, separate filters, so these two bits make sense
|
||||||
* for multi-planar formats only.
|
* for multi-planar formats only.
|
||||||
*/
|
*/
|
||||||
features |= VK_FORMAT_FEATURE_DISJOINT_BIT |
|
features |= VK_FORMAT_FEATURE_2_DISJOINT_BIT |
|
||||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT;
|
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT;
|
||||||
}
|
}
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkFormatFeatureFlags
|
static VkFormatFeatureFlags2
|
||||||
get_image_format_sample_counts(struct panvk_physical_device *physical_device,
|
get_image_format_sample_counts(struct panvk_physical_device *physical_device,
|
||||||
VkFormat format)
|
VkFormat format)
|
||||||
{
|
{
|
||||||
@@ -1488,11 +1492,11 @@ get_image_format_sample_counts(struct panvk_physical_device *physical_device,
|
|||||||
return get_sample_counts(arch, max_tib_size, max_cbuf_atts, format_size);
|
return get_sample_counts(arch, max_tib_size, max_cbuf_atts, format_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VkFormatFeatureFlags
|
static VkFormatFeatureFlags2
|
||||||
get_buffer_format_features(struct panvk_physical_device *physical_device,
|
get_buffer_format_features(struct panvk_physical_device *physical_device,
|
||||||
VkFormat format)
|
VkFormat format)
|
||||||
{
|
{
|
||||||
VkFormatFeatureFlags features = 0;
|
VkFormatFeatureFlags2 features = 0;
|
||||||
enum pipe_format pfmt = vk_format_to_pipe_format(format);
|
enum pipe_format pfmt = vk_format_to_pipe_format(format);
|
||||||
const struct panfrost_format fmt = physical_device->formats.all[pfmt];
|
const struct panfrost_format fmt = physical_device->formats.all[pfmt];
|
||||||
|
|
||||||
@@ -1503,17 +1507,17 @@ get_buffer_format_features(struct panvk_physical_device *physical_device,
|
|||||||
* https://github.com/KhronosGroup/Vulkan-Docs/issues/2214).
|
* https://github.com/KhronosGroup/Vulkan-Docs/issues/2214).
|
||||||
*/
|
*/
|
||||||
if ((fmt.bind & PAN_BIND_VERTEX_BUFFER) && !util_format_is_srgb(pfmt))
|
if ((fmt.bind & PAN_BIND_VERTEX_BUFFER) && !util_format_is_srgb(pfmt))
|
||||||
features |= VK_FORMAT_FEATURE_VERTEX_BUFFER_BIT;
|
features |= VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT;
|
||||||
|
|
||||||
if ((fmt.bind & PAN_BIND_SAMPLER_VIEW) &&
|
if ((fmt.bind & PAN_BIND_SAMPLER_VIEW) &&
|
||||||
!util_format_is_depth_or_stencil(pfmt))
|
!util_format_is_depth_or_stencil(pfmt))
|
||||||
features |= VK_FORMAT_FEATURE_UNIFORM_TEXEL_BUFFER_BIT;
|
features |= VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT;
|
||||||
|
|
||||||
if (fmt.bind & PAN_BIND_STORAGE_IMAGE)
|
if (fmt.bind & PAN_BIND_STORAGE_IMAGE)
|
||||||
features |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT;
|
||||||
|
|
||||||
if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT)
|
if (pfmt == PIPE_FORMAT_R32_UINT || pfmt == PIPE_FORMAT_R32_SINT)
|
||||||
features |= VK_FORMAT_FEATURE_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
features |= VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT;
|
||||||
|
|
||||||
return features;
|
return features;
|
||||||
}
|
}
|
||||||
@@ -1525,9 +1529,9 @@ panvk_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
|
|||||||
{
|
{
|
||||||
VK_FROM_HANDLE(panvk_physical_device, physical_device, physicalDevice);
|
VK_FROM_HANDLE(panvk_physical_device, physical_device, physicalDevice);
|
||||||
|
|
||||||
VkFormatFeatureFlags tex =
|
VkFormatFeatureFlags2 tex =
|
||||||
get_image_format_features(physical_device, format);
|
get_image_format_features(physical_device, format);
|
||||||
VkFormatFeatureFlags buffer =
|
VkFormatFeatureFlags2 buffer =
|
||||||
get_buffer_format_features(physical_device, format);
|
get_buffer_format_features(physical_device, format);
|
||||||
|
|
||||||
pFormatProperties->formatProperties = (VkFormatProperties){
|
pFormatProperties->formatProperties = (VkFormatProperties){
|
||||||
@@ -1536,6 +1540,14 @@ panvk_GetPhysicalDeviceFormatProperties2(VkPhysicalDevice physicalDevice,
|
|||||||
.bufferFeatures = buffer,
|
.bufferFeatures = buffer,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
VkFormatProperties3 *formatProperties3 =
|
||||||
|
vk_find_struct(pFormatProperties->pNext, FORMAT_PROPERTIES_3);
|
||||||
|
if (formatProperties3) {
|
||||||
|
formatProperties3->linearTilingFeatures = tex;
|
||||||
|
formatProperties3->optimalTilingFeatures = tex;
|
||||||
|
formatProperties3->bufferFeatures = buffer;
|
||||||
|
}
|
||||||
|
|
||||||
VkDrmFormatModifierPropertiesListEXT *list = vk_find_struct(
|
VkDrmFormatModifierPropertiesListEXT *list = vk_find_struct(
|
||||||
pFormatProperties->pNext, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT);
|
pFormatProperties->pNext, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT);
|
||||||
if (list) {
|
if (list) {
|
||||||
@@ -1560,9 +1572,9 @@ static VkResult
|
|||||||
get_image_format_properties(struct panvk_physical_device *physical_device,
|
get_image_format_properties(struct panvk_physical_device *physical_device,
|
||||||
const VkPhysicalDeviceImageFormatInfo2 *info,
|
const VkPhysicalDeviceImageFormatInfo2 *info,
|
||||||
VkImageFormatProperties *pImageFormatProperties,
|
VkImageFormatProperties *pImageFormatProperties,
|
||||||
VkFormatFeatureFlags *p_feature_flags)
|
VkFormatFeatureFlags2 *p_feature_flags)
|
||||||
{
|
{
|
||||||
VkFormatFeatureFlags format_feature_flags;
|
VkFormatFeatureFlags2 format_feature_flags;
|
||||||
VkExtent3D maxExtent;
|
VkExtent3D maxExtent;
|
||||||
uint32_t maxMipLevels;
|
uint32_t maxMipLevels;
|
||||||
uint32_t maxArraySize;
|
uint32_t maxArraySize;
|
||||||
@@ -1656,8 +1668,8 @@ get_image_format_properties(struct panvk_physical_device *physical_device,
|
|||||||
if (info->tiling == VK_IMAGE_TILING_OPTIMAL &&
|
if (info->tiling == VK_IMAGE_TILING_OPTIMAL &&
|
||||||
info->type == VK_IMAGE_TYPE_2D && ycbcr_info == NULL &&
|
info->type == VK_IMAGE_TYPE_2D && ycbcr_info == NULL &&
|
||||||
(format_feature_flags &
|
(format_feature_flags &
|
||||||
(VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT |
|
(VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT |
|
||||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) &&
|
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT)) &&
|
||||||
!(info->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) &&
|
!(info->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT) &&
|
||||||
!(all_usage & VK_IMAGE_USAGE_STORAGE_BIT)) {
|
!(all_usage & VK_IMAGE_USAGE_STORAGE_BIT)) {
|
||||||
sampleCounts |=
|
sampleCounts |=
|
||||||
@@ -1677,13 +1689,13 @@ get_image_format_properties(struct panvk_physical_device *physical_device,
|
|||||||
*/
|
*/
|
||||||
if (!(info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT)) {
|
if (!(info->flags & VK_IMAGE_CREATE_EXTENDED_USAGE_BIT)) {
|
||||||
if (all_usage & VK_IMAGE_USAGE_SAMPLED_BIT) {
|
if (all_usage & VK_IMAGE_USAGE_SAMPLED_BIT) {
|
||||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT)) {
|
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT)) {
|
||||||
goto unsupported;
|
goto unsupported;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (all_usage & VK_IMAGE_USAGE_STORAGE_BIT) {
|
if (all_usage & VK_IMAGE_USAGE_STORAGE_BIT) {
|
||||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT)) {
|
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT)) {
|
||||||
goto unsupported;
|
goto unsupported;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1691,7 +1703,7 @@ get_image_format_properties(struct panvk_physical_device *physical_device,
|
|||||||
if (all_usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ||
|
if (all_usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT ||
|
||||||
((all_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) &&
|
((all_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) &&
|
||||||
!vk_format_is_depth_or_stencil(info->format))) {
|
!vk_format_is_depth_or_stencil(info->format))) {
|
||||||
if (!(format_feature_flags & VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT)) {
|
if (!(format_feature_flags & VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT)) {
|
||||||
goto unsupported;
|
goto unsupported;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1700,7 +1712,7 @@ get_image_format_properties(struct panvk_physical_device *physical_device,
|
|||||||
((all_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) &&
|
((all_usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT) &&
|
||||||
vk_format_is_depth_or_stencil(info->format))) {
|
vk_format_is_depth_or_stencil(info->format))) {
|
||||||
if (!(format_feature_flags &
|
if (!(format_feature_flags &
|
||||||
VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT)) {
|
||||||
goto unsupported;
|
goto unsupported;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1805,7 +1817,7 @@ panvk_GetPhysicalDeviceImageFormatProperties2(
|
|||||||
const VkPhysicalDeviceImageViewImageFormatInfoEXT *image_view_info = NULL;
|
const VkPhysicalDeviceImageViewImageFormatInfoEXT *image_view_info = NULL;
|
||||||
VkExternalImageFormatProperties *external_props = NULL;
|
VkExternalImageFormatProperties *external_props = NULL;
|
||||||
VkFilterCubicImageViewImageFormatPropertiesEXT *cubic_props = NULL;
|
VkFilterCubicImageViewImageFormatPropertiesEXT *cubic_props = NULL;
|
||||||
VkFormatFeatureFlags format_feature_flags;
|
VkFormatFeatureFlags2 format_feature_flags;
|
||||||
VkSamplerYcbcrConversionImageFormatProperties *ycbcr_props = NULL;
|
VkSamplerYcbcrConversionImageFormatProperties *ycbcr_props = NULL;
|
||||||
VkResult result;
|
VkResult result;
|
||||||
|
|
||||||
@@ -1879,7 +1891,7 @@ panvk_GetPhysicalDeviceImageFormatProperties2(
|
|||||||
if ((image_view_info->imageViewType == VK_IMAGE_VIEW_TYPE_2D ||
|
if ((image_view_info->imageViewType == VK_IMAGE_VIEW_TYPE_2D ||
|
||||||
image_view_info->imageViewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY) &&
|
image_view_info->imageViewType == VK_IMAGE_VIEW_TYPE_2D_ARRAY) &&
|
||||||
(format_feature_flags &
|
(format_feature_flags &
|
||||||
VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT)) {
|
VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT)) {
|
||||||
cubic_props->filterCubic = true;
|
cubic_props->filterCubic = true;
|
||||||
cubic_props->filterCubicMinmax = true;
|
cubic_props->filterCubicMinmax = true;
|
||||||
} else {
|
} else {
|
||||||
@@ -1899,7 +1911,7 @@ panvk_GetPhysicalDeviceImageFormatProperties2(
|
|||||||
*
|
*
|
||||||
* "If format is a multi-planar format, and if imageCreateFormatFeatures
|
* "If format is a multi-planar format, and if imageCreateFormatFeatures
|
||||||
* (as defined in Image Creation Limits) does not contain
|
* (as defined in Image Creation Limits) does not contain
|
||||||
* VK_FORMAT_FEATURE_DISJOINT_BIT, then flags must not contain
|
* VK_FORMAT_FEATURE_2_DISJOINT_BIT, then flags must not contain
|
||||||
* VK_IMAGE_CREATE_DISJOINT_BIT"
|
* VK_IMAGE_CREATE_DISJOINT_BIT"
|
||||||
*
|
*
|
||||||
* This is satisfied trivially because we support DISJOINT on all
|
* This is satisfied trivially because we support DISJOINT on all
|
||||||
|
Reference in New Issue
Block a user