[Mesa-dev] [RFC PATCH v1 24/30] RFC: anv: Support VkPhysicalDeviceImageDrmFormatModifierInfoEXT
Jason Ekstrand
jason at jlekstrand.net
Wed Nov 8 00:55:39 UTC 2017
One other comment (that I don't know what patch to make it on): I think we
want to disallow the MUTABLE_FORMAT create bit with at least the CCS
modifier. Also, the CCS modifier needs to only be usable with
CCS-supported formats. You may have already thought of those two things
but I wanted to get it out of my brain.
--Jason
On Tue, Nov 7, 2017 at 12:38 PM, Jason Ekstrand <jason at jlekstrand.net>
wrote:
>
>
> On Tue, Nov 7, 2017 at 6:48 AM, Chad Versace <chadversary at chromium.org>
> wrote:
>
>> Incremental implementation of VK_EXT_image_drm_format_modifier.
>> ---
>> src/intel/vulkan/anv_formats.c | 45 ++++++++++++++++++++++++++++++
>> +++++++-----
>> 1 file changed, 40 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/intel/vulkan/anv_formats.c
>> b/src/intel/vulkan/anv_formats.c
>> index dc46fdb5425..d6eeb9d1c45 100644
>> --- a/src/intel/vulkan/anv_formats.c
>> +++ b/src/intel/vulkan/anv_formats.c
>> @@ -813,6 +813,7 @@ static VkResult
>> anv_get_image_format_properties(
>> struct anv_physical_device *physical_device,
>> const VkPhysicalDeviceImageFormatInfo2KHR *info,
>> + const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *drm_info,
>> VkImageFormatProperties *pImageFormatProperties,
>> VkSamplerYcbcrConversionImageFormatPropertiesKHR
>> *pYcbcrImageFormatProperties)
>> {
>> @@ -826,14 +827,34 @@ anv_get_image_format_properties(
>> if (format == NULL)
>> goto unsupported;
>>
>> + uint64_t drm_format_mod = DRM_FORMAT_MOD_INVALID;
>> + if (drm_info) {
>> + assert(info->tiling == VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT);
>> + drm_format_mod = drm_info->drmFormatModifier;
>> + }
>> +
>> VkFormatFeatureFlags format_feature_flags =
>> get_image_format_features(devinfo, info->format, format,
>> info->tiling,
>> - DRM_FORMAT_MOD_INVALID);
>> + drm_format_mod);
>> +
>> + /* The core Vulkan spec places strict constraints on the image
>> capabilities
>> + * advertised here. For example, the core spec requires that
>> + * maxMipLevels == log2(maxWidth) + 1
>> + * when tiling is VK_IMAGE_TILING_OPTIMAL; and requires that
>> + * maxExtent >= VkPhysicalDeviceLimits::maxImageDimension${N}D.
>> + * However, the VK_EXT_image_drm_format_modifier specification
>> grants the
>> + * implementation the freedom to further restrict the image
>> capabilities
>> + * when tiling is VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT.
>>
>
> How about adding one extra paragraph here saying that we choose to only
> support "simple" 2D images.
>
>
>> + */
>>
>> switch (info->type) {
>> default:
>> unreachable("bad VkImageType");
>> case VK_IMAGE_TYPE_1D:
>> + /* We reject 1D images with modifiers due to FUD */
>>
>
> We could support 1D but meh. Just use a texture buffer instead.
>
>
>> + if (drm_info)
>> + goto unsupported;
>> +
>> maxExtent.width = 16384;
>> maxExtent.height = 1;
>> maxExtent.depth = 1;
>> @@ -848,10 +869,20 @@ anv_get_image_format_properties(
>> maxExtent.width = 16384;
>> maxExtent.height = 16384;
>> maxExtent.depth = 1;
>> - maxMipLevels = 15; /* log2(maxWidth) + 1 */
>> - maxArraySize = 2048;
>> +
>> + if (drm_info) {
>> + maxMipLevels = 1;
>> + maxArraySize = 1;
>> + } else {
>> + maxMipLevels = 15; /* log2(maxWidth) + 1 */
>> + maxArraySize = 2048;
>> + }
>> break;
>> case VK_IMAGE_TYPE_3D:
>> + /* We reject 3D images with modifiers due to FUD */
>>
>
> I have neither uncertainty nor doubt, but I do have a very healthy helping
> of fear. :-) Let's just go with a global comment above and drop the ones
> that make us look like cowards. :-P
>
>
>> + if (drm_info)
>> + goto unsupported;
>> +
>> maxExtent.width = 2048;
>> maxExtent.height = 2048;
>> maxExtent.depth = 2048;
>> @@ -976,7 +1007,7 @@ VkResult anv_GetPhysicalDeviceImageFormatProperties(
>> .flags = createFlags,
>> };
>>
>> - return anv_get_image_format_properties(physical_device, &info,
>> + return anv_get_image_format_properties(physical_device, &info, NULL,
>> pImageFormatProperties, NULL);
>> }
>>
>> @@ -1009,6 +1040,7 @@ VkResult anv_GetPhysicalDeviceImageForm
>> atProperties2KHR(
>> {
>> ANV_FROM_HANDLE(anv_physical_device, physical_device,
>> physicalDevice);
>> const VkPhysicalDeviceExternalImageFormatInfoKHR *external_info =
>> NULL;
>> + const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *drm_info = NULL;
>> VkExternalImageFormatPropertiesKHR *external_props = NULL;
>> VkSamplerYcbcrConversionImageFormatPropertiesKHR *ycbcr_props = NULL;
>> VkResult result;
>> @@ -1019,6 +1051,9 @@ VkResult anv_GetPhysicalDeviceImageForm
>> atProperties2KHR(
>> case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO
>> _KHR:
>> external_info = (const void *) s;
>> break;
>> + case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_
>> INFO_EXT:
>> + drm_info = (const void *) s;
>> + break;
>> default:
>> anv_debug_ignored_stype(s->sType);
>> break;
>> @@ -1041,7 +1076,7 @@ VkResult anv_GetPhysicalDeviceImageForm
>> atProperties2KHR(
>> }
>>
>> result = anv_get_image_format_properties(physical_device, base_info,
>> - &base_props->imageFormatProperties, ycbcr_props);
>> + drm_info, &base_props->imageFormatProperties,
>> ycbcr_props);
>> if (result != VK_SUCCESS)
>> goto fail;
>>
>> --
>> 2.13.0
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20171107/18beaa43/attachment-0001.html>
More information about the mesa-dev
mailing list