radv: Implement VK_EXT_image_view_min_lod

Signed-off-by: Joshua Ashton <joshua@froggi.es>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13820>
This commit is contained in:
Joshua Ashton 2021-07-06 15:01:10 +01:00 committed by Marge Bot
parent d0f217ad80
commit 68ec867181
4 changed files with 18 additions and 2 deletions

View File

@ -531,6 +531,7 @@ Khronos extensions that are not part of any Vulkan version:
VK_EXT_global_priority_query DONE (radv)
VK_EXT_image_drm_format_modifier DONE (anv, radv/gfx9+, tu, vn)
VK_EXT_image_robustness DONE (anv, radv)
VK_EXT_image_view_min_lod DONE (radv)
VK_EXT_index_type_uint8 DONE (anv, lvp, radv/gfx8+, v3dv, tu)
VK_EXT_inline_uniform_block DONE (anv, radv)
VK_EXT_line_rasterization DONE (anv, lvp, radv, tu)

View File

@ -1 +1,2 @@
lavapipe KHR_dynamic_rendering
radv EXT_image_view_min_lod

View File

@ -491,6 +491,7 @@ radv_physical_device_get_supported_extensions(const struct radv_physical_device
.EXT_host_query_reset = true,
.EXT_image_drm_format_modifier = device->rad_info.chip_class >= GFX9,
.EXT_image_robustness = true,
.EXT_image_view_min_lod = true,
.EXT_index_type_uint8 = device->rad_info.chip_class >= GFX8,
.EXT_inline_uniform_block = true,
.EXT_line_rasterization = true,
@ -1630,6 +1631,12 @@ radv_GetPhysicalDeviceFeatures2(VkPhysicalDevice physicalDevice,
features->vertexInputDynamicState = true;
break;
}
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT: {
VkPhysicalDeviceImageViewMinLodFeaturesEXT *features =
(VkPhysicalDeviceImageViewMinLodFeaturesEXT *)ext;
features->minLod = true;
break;
}
default:
break;
}

View File

@ -1934,6 +1934,13 @@ radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
RADV_FROM_HANDLE(radv_image, image, pCreateInfo->image);
const VkImageSubresourceRange *range = &pCreateInfo->subresourceRange;
uint32_t plane_count = 1;
float min_lod = 0.0f;
const struct VkImageViewMinLodCreateInfoEXT *min_lod_info =
vk_find_struct_const(pCreateInfo->pNext, IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT);
if (min_lod_info)
min_lod = min_lod_info->minLod;
vk_object_base_init(&device->vk, &iview->base, VK_OBJECT_TYPE_IMAGE_VIEW);
@ -2063,10 +2070,10 @@ radv_image_view_init(struct radv_image_view *iview, struct radv_device *device,
bool enable_compression = extra_create_info ? extra_create_info->enable_compression : false;
for (unsigned i = 0; i < plane_count; ++i) {
VkFormat format = vk_format_get_plane_format(iview->vk_format, i);
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, 0.0f, false,
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, false,
disable_compression, enable_compression, iview->plane_id + i,
i);
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, 0.0f, true,
radv_image_view_make_descriptor(iview, device, format, &pCreateInfo->components, min_lod, true,
disable_compression, enable_compression, iview->plane_id + i,
i);
}