fmt1(VK_FORMAT_R4G4B4A4_UNORM_PACK16, ISL_FORMAT_A4B4G4R4_UNORM),
swiz_fmt1(VK_FORMAT_B4G4R4A4_UNORM_PACK16, ISL_FORMAT_A4B4G4R4_UNORM, BGRA),
fmt1(VK_FORMAT_R5G6B5_UNORM_PACK16, ISL_FORMAT_B5G6R5_UNORM),
- swiz_fmt1(VK_FORMAT_B5G6R5_UNORM_PACK16, ISL_FORMAT_B5G6R5_UNORM, BGRA),
+ fmt_unsupported(VK_FORMAT_B5G6R5_UNORM_PACK16),
fmt1(VK_FORMAT_R5G5B5A1_UNORM_PACK16, ISL_FORMAT_A1B5G5R5_UNORM),
fmt_unsupported(VK_FORMAT_B5G5R5A1_UNORM_PACK16),
fmt1(VK_FORMAT_A1R5G5B5_UNORM_PACK16, ISL_FORMAT_B5G5R5A1_UNORM),
if (aspect & (VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT)) {
assert(vk_format_aspects(vk_format) &
(VK_IMAGE_ASPECT_DEPTH_BIT | VK_IMAGE_ASPECT_STENCIL_BIT));
+
+ /* There's no reason why we strictly can't support depth or stencil with
+ * modifiers but there's also no reason why we should.
+ */
+ if (tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT)
+ return unsupported;
+
return plane_format;
}
if (!util_is_power_of_two_or_zero(isl_layout->bpb))
return unsupported;
- if (vk_format_is_depth_or_stencil(vk_format))
- return unsupported;
-
if (isl_format_is_compressed(plane_format.isl_format))
return unsupported;
}
flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_BIT;
if (base_isl_format == ISL_FORMAT_R32_SINT ||
- base_isl_format == ISL_FORMAT_R32_UINT)
+ base_isl_format == ISL_FORMAT_R32_UINT ||
+ base_isl_format == ISL_FORMAT_R32_FLOAT)
flags |= VK_FORMAT_FEATURE_STORAGE_IMAGE_ATOMIC_BIT;
if (flags) {
static void
get_wsi_format_modifier_properties_list(const struct anv_physical_device *physical_device,
VkFormat vk_format,
- struct wsi_format_modifier_properties_list *list)
+ VkDrmFormatModifierPropertiesListEXT *list)
{
const struct anv_format *anv_format = anv_get_format(vk_format);
- VK_OUTARRAY_MAKE(out, list->modifier_properties, &list->modifier_count);
+ VK_OUTARRAY_MAKE(out, list->pDrmFormatModifierProperties,
+ &list->drmFormatModifierCount);
/* This is a simplified list where all the modifiers are available */
assert(vk_format == VK_FORMAT_B8G8R8_SRGB ||
continue;
vk_outarray_append(&out, mod_props) {
- mod_props->modifier = modifiers[i];
+ mod_props->drmFormatModifier = modifiers[i];
if (isl_drm_modifier_has_aux(modifiers[i]))
- mod_props->modifier_plane_count = 2;
+ mod_props->drmFormatModifierPlaneCount = 2;
else
- mod_props->modifier_plane_count = anv_format->n_planes;
+ mod_props->drmFormatModifierPlaneCount = anv_format->n_planes;
}
}
}
vk_foreach_struct(ext, pFormatProperties->pNext) {
/* Use unsigned since some cases are not in the VkStructureType enum. */
switch ((unsigned)ext->sType) {
- case VK_STRUCTURE_TYPE_WSI_FORMAT_MODIFIER_PROPERTIES_LIST_MESA:
+ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
get_wsi_format_modifier_properties_list(physical_device, format,
(void *)ext);
break;
external_props->externalMemoryProperties = android_image_props;
break;
}
- /* fallthrough if ahw not supported */
+ /* fallthrough - if ahw not supported */
default:
/* From the Vulkan 1.0.42 spec:
*
* vkGetPhysicalDeviceImageFormatProperties2 returns
* VK_ERROR_FORMAT_NOT_SUPPORTED.
*/
- result = vk_errorf(physical_device->instance, physical_device,
- VK_ERROR_FORMAT_NOT_SUPPORTED,
- "unsupported VkExternalMemoryTypeFlagBits 0x%x",
- external_info->handleType);
+ result = vk_errorfi(physical_device->instance, physical_device,
+ VK_ERROR_FORMAT_NOT_SUPPORTED,
+ "unsupported VkExternalMemoryTypeFlagBits 0x%x",
+ external_info->handleType);
goto fail;
}
}
assert(pCreateInfo->sType == VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO);
- conversion = vk_alloc2(&device->alloc, pAllocator, sizeof(*conversion), 8,
+ conversion = vk_alloc2(&device->vk.alloc, pAllocator, sizeof(*conversion), 8,
VK_SYSTEM_ALLOCATION_SCOPE_OBJECT);
if (!conversion)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
memset(conversion, 0, sizeof(*conversion));
+ vk_object_base_init(&device->vk, &conversion->base,
+ VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION);
conversion->format = anv_get_format(pCreateInfo->format);
conversion->ycbcr_model = pCreateInfo->ycbcrModel;
conversion->ycbcr_range = pCreateInfo->ycbcrRange;
if (!conversion)
return;
- vk_free2(&device->alloc, pAllocator, conversion);
+ vk_object_base_finish(&conversion->base);
+ vk_free2(&device->vk.alloc, pAllocator, conversion);
}