mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-20 07:20:10 +01:00
lavapipe: Support VkDrmFormatModifierPropertiesList2EXT
This change add support VkDrmFormatModifierPropertiesList2EXT to lavapipe driver. Previously VkDrmFormatModifierPropertiesListExt is already supported and returns a list with one element but VkDrmFormatModifierPropertiesList2EXT returns a empty list. A lack of VkDrmFormatModifierPropertiesList2EXT becomes an issue especially when the Vulkan Validation layers is enabled, it internally uses VkDrmFormatModifierPropertiesList2EXT to confirm the drmFormatModifierTilingFeatures is compatible to VkImageUsageFlagBits. Without this patch it detects that the image is not compatible and outputs warnings. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/14414 Reviewed-by: Dave Airlie <airlied@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/38822>
This commit is contained in:
parent
0574bfd5f4
commit
f56e70f230
1 changed files with 31 additions and 10 deletions
|
|
@ -247,17 +247,38 @@ VKAPI_ATTR void VKAPI_CALL lvp_GetPhysicalDeviceFormatProperties2(
|
||||||
perf->optimal = VK_FALSE;
|
perf->optimal = VK_FALSE;
|
||||||
|
|
||||||
#if DETECT_OS_LINUX
|
#if DETECT_OS_LINUX
|
||||||
VkDrmFormatModifierPropertiesListEXT *modlist = (void*)vk_find_struct_const(pFormatProperties->pNext, DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT);
|
vk_foreach_struct(ext, pFormatProperties->pNext) {
|
||||||
if (modlist) {
|
switch ((unsigned)ext->sType) {
|
||||||
modlist->drmFormatModifierCount = 0;
|
case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT: {
|
||||||
if (pFormatProperties->formatProperties.optimalTilingFeatures) {
|
struct VkDrmFormatModifierPropertiesListEXT *modlist = (void *)ext;
|
||||||
modlist->drmFormatModifierCount = 1;
|
modlist->drmFormatModifierCount = 0;
|
||||||
VkDrmFormatModifierPropertiesEXT *mods = &modlist->pDrmFormatModifierProperties[0];
|
if (pFormatProperties->formatProperties.optimalTilingFeatures) {
|
||||||
if (mods) {
|
modlist->drmFormatModifierCount = 1;
|
||||||
mods->drmFormatModifier = DRM_FORMAT_MOD_LINEAR;
|
VkDrmFormatModifierPropertiesEXT *mods = &modlist->pDrmFormatModifierProperties[0];
|
||||||
mods->drmFormatModifierPlaneCount = util_format_get_num_planes(lvp_vk_format_to_pipe_format(format));
|
if (mods) {
|
||||||
mods->drmFormatModifierTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures;
|
mods->drmFormatModifier = DRM_FORMAT_MOD_LINEAR;
|
||||||
|
mods->drmFormatModifierPlaneCount = util_format_get_num_planes(lvp_vk_format_to_pipe_format(format));
|
||||||
|
mods->drmFormatModifierTilingFeatures = pFormatProperties->formatProperties.optimalTilingFeatures;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT: {
|
||||||
|
struct VkDrmFormatModifierPropertiesList2EXT *modlist = (void *)ext;
|
||||||
|
modlist->drmFormatModifierCount = 0;
|
||||||
|
if (format_props.optimalTilingFeatures) {
|
||||||
|
modlist->drmFormatModifierCount = 1;
|
||||||
|
VkDrmFormatModifierProperties2EXT *mods = &modlist->pDrmFormatModifierProperties[0];
|
||||||
|
if (mods) {
|
||||||
|
mods->drmFormatModifier = DRM_FORMAT_MOD_LINEAR;
|
||||||
|
mods->drmFormatModifierPlaneCount = util_format_get_num_planes(lvp_vk_format_to_pipe_format(format));
|
||||||
|
mods->drmFormatModifierTilingFeatures = format_props.optimalTilingFeatures;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue