From 68ec86718125ea54c77191f38e62754e82d3826b Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Tue, 6 Jul 2021 15:01:10 +0100 Subject: [PATCH] radv: Implement VK_EXT_image_view_min_lod Signed-off-by: Joshua Ashton Reviewed-by: Samuel Pitoiset Part-of: --- docs/features.txt | 1 + docs/relnotes/new_features.txt | 1 + src/amd/vulkan/radv_device.c | 7 +++++++ src/amd/vulkan/radv_image.c | 11 +++++++++-- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/docs/features.txt b/docs/features.txt index 0d86c70..1515e3b 100644 --- a/docs/features.txt +++ b/docs/features.txt @@ -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) diff --git a/docs/relnotes/new_features.txt b/docs/relnotes/new_features.txt index f65a894..d13a66f 100644 --- a/docs/relnotes/new_features.txt +++ b/docs/relnotes/new_features.txt @@ -1 +1,2 @@ lavapipe KHR_dynamic_rendering +radv EXT_image_view_min_lod diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index a20fa0f..039c792 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -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; } diff --git a/src/amd/vulkan/radv_image.c b/src/amd/vulkan/radv_image.c index 18f1c27..69bfa19 100644 --- a/src/amd/vulkan/radv_image.c +++ b/src/amd/vulkan/radv_image.c @@ -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); } -- 2.7.4