On Thursday 21 December 2017, Topi Pohjolainen wrote:
> CC: Fredrik Hoeglund <fred...@kde.org>
> 
> Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com>
> ---
>  tests/spec/ext_memory_object/common.c    | 24 ++++++++++++++++++++++++
>  tests/spec/ext_memory_object/common.h    |  4 ++++
>  tests/spec/ext_memory_object/vk_common.c | 15 +++++++++++++++
>  tests/spec/ext_memory_object/vk_common.h |  3 +++
>  4 files changed, 46 insertions(+)
> 
> diff --git a/tests/spec/ext_memory_object/common.c 
> b/tests/spec/ext_memory_object/common.c
> index 2a7c0ba31..709f1c132 100644
> --- a/tests/spec/ext_memory_object/common.c
> +++ b/tests/spec/ext_memory_object/common.c
> @@ -141,3 +141,27 @@ create_tex_from_vk_dev_mem(const struct tex_layout 
> *layout,
>               assert(!"Invalid target");
>       }
>  }
> +
> +bool
> +is_layout_supported(struct vk_core *core,
> +                 const struct vk_image_layout *layout)
> +{
> +     const VkPhysicalDeviceImageFormatInfo2KHR info = {
> +             .sType = 
> VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR,
> +             .format = layout->src_format,
> +             .type = vk_get_image_type(layout->h, layout->z),
> +             .tiling = layout->src_tiling,
> +             .usage = VK_IMAGE_USAGE_SAMPLED_BIT |
> +                      VK_IMAGE_USAGE_TRANSFER_SRC_BIT,
> +     };

You also need to include a VkPhysicalDeviceExternalImageFormatInfoKHR
struct in pNext here.

> +     VkImageFormatProperties2KHR props = {
> +             .sType = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR
> +     };

And a VkExternalImageFormatPropertiesKHR struct here.

This function should only return true if
externalMemoryProperties.externalMemoryFeatures has
VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT_KHR set.

The features to check for should probably be passed in a parameter though.

> +     PFN_vkGetPhysicalDeviceImageFormatProperties2KHR
> +             vk_phys_dev_img_fmt_prop_2_khr =
> +                     vk_get_proc_addr_for_phys_dev_image_format_prop(
> +                             core->dev);
> +
> +     return vk_phys_dev_img_fmt_prop_2_khr(
> +                     core->phys_dev, &info, &props) == VK_SUCCESS;
> +}
> diff --git a/tests/spec/ext_memory_object/common.h 
> b/tests/spec/ext_memory_object/common.h
> index 240c305e8..dac536377 100644
> --- a/tests/spec/ext_memory_object/common.h
> +++ b/tests/spec/ext_memory_object/common.h
> @@ -44,4 +44,8 @@ void
>  create_tex_from_vk_dev_mem(const struct tex_layout *layout,
>                          GLuint mem_obj, unsigned offset, GLuint *tex);
>  
> +bool
> +is_layout_supported(struct vk_core *core,
> +                 const struct vk_image_layout *layout);
> +
>  #endif
> diff --git a/tests/spec/ext_memory_object/vk_common.c 
> b/tests/spec/ext_memory_object/vk_common.c
> index ba12bff07..48b33006e 100644
> --- a/tests/spec/ext_memory_object/vk_common.c
> +++ b/tests/spec/ext_memory_object/vk_common.c
> @@ -596,6 +596,21 @@ vk_get_proc_addr_for_mem_fd(VkDevice dev)
>       return get_fd;
>  }
>  
> +PFN_vkGetPhysicalDeviceImageFormatProperties2KHR
> +vk_get_proc_addr_for_phys_dev_image_format_prop(VkDevice dev)
> +{
> +     static PFN_vkGetPhysicalDeviceImageFormatProperties2KHR
> +             get_prop = NULL;
> +
> +     if (get_prop == NULL)
> +             get_prop = (PFN_vkGetPhysicalDeviceImageFormatProperties2KHR)
> +                     vkGetDeviceProcAddr(
> +                             dev,
> +                             "vkGetPhysicalDeviceImageFormatProperties2KHR");
> +
> +     return get_prop;
> +}
> +
>  void
>  vk_create_simple_pipeline(struct vk_core *core,
>                         const struct vk_image_layout *layout,
> diff --git a/tests/spec/ext_memory_object/vk_common.h 
> b/tests/spec/ext_memory_object/vk_common.h
> index 0efccf37a..3f1e70255 100644
> --- a/tests/spec/ext_memory_object/vk_common.h
> +++ b/tests/spec/ext_memory_object/vk_common.h
> @@ -160,6 +160,9 @@ vk_get_proc_addr_for_image_mem_req(VkDevice dev);
>  PFN_vkGetMemoryFdKHR
>  vk_get_proc_addr_for_mem_fd(VkDevice dev);
>  
> +PFN_vkGetPhysicalDeviceImageFormatProperties2KHR
> +vk_get_proc_addr_for_phys_dev_image_format_prop(VkDevice dev);
> +
>  void
>  vk_create_simple_pipeline(struct vk_core *core,
>                         const struct vk_image_layout *layout,
> 

_______________________________________________
Piglit mailing list
Piglit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/piglit

Reply via email to