<div dir="ltr"><div class="gmail_quote"><div dir="ltr">On Wed, Aug 22, 2018 at 12:54 AM Tapani Pälli <<a href="mailto:tapani.palli@intel.com">tapani.palli@intel.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
<br>
On 21.08.2018 11:27, Tapani Pälli wrote:<br>
> v2: have separate memory properties for android, set usage<br>
> flags for buffers correctly<br>
> <br>
> Signed-off-by: Tapani Pälli <<a href="mailto:tapani.palli@intel.com" target="_blank">tapani.palli@intel.com</a>><br>
> ---<br>
> src/intel/vulkan/anv_formats.c | 71 +++++++++++++++++++++++++++++++++++++++++-<br>
> 1 file changed, 70 insertions(+), 1 deletion(-)<br>
> <br>
> diff --git a/src/intel/vulkan/anv_formats.c b/src/intel/vulkan/anv_formats.c<br>
> index dc398306a70..56425a8b614 100644<br>
> --- a/src/intel/vulkan/anv_formats.c<br>
> +++ b/src/intel/vulkan/anv_formats.c<br>
> @@ -929,9 +929,31 @@ static const VkExternalMemoryProperties prime_fd_props = {<br>
> .exportFromImportedHandleTypes =<br>
> VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT |<br>
> VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> .compatibleHandleTypes =<br>
> VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT |<br>
> - VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT,<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT |<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> +};<br>
<br>
Oops changes above are leftovers from prototyping stage and I've removed <br>
these changes locally. I only want to introduce android_buffer_props, <br>
android_image_props and use those like done below.<br></blockquote><div><br></div><div>Thanks! I was wondering about that...<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> +<br>
> +static const VkExternalMemoryProperties android_buffer_props = {<br>
> + .externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT |<br>
> + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT,<br>
> + .exportFromImportedHandleTypes =<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> + .compatibleHandleTypes =<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> +};<br>
> +<br>
> +<br>
> +static const VkExternalMemoryProperties android_image_props = {<br>
> + .externalMemoryFeatures = VK_EXTERNAL_MEMORY_FEATURE_EXPORTABLE_BIT |<br>
> + VK_EXTERNAL_MEMORY_FEATURE_IMPORTABLE_BIT |<br>
> + VK_EXTERNAL_MEMORY_FEATURE_DEDICATED_ONLY_BIT,<br>
> + .exportFromImportedHandleTypes =<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> + .compatibleHandleTypes =<br>
> + VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID,<br>
> };<br>
> <br>
> VkResult anv_GetPhysicalDeviceImageFormatProperties2(<br>
> @@ -943,8 +965,12 @@ VkResult anv_GetPhysicalDeviceImageFormatProperties2(<br>
> const VkPhysicalDeviceExternalImageFormatInfo *external_info = NULL;<br>
> VkExternalImageFormatPropertiesKHR *external_props = NULL;<br>
> VkSamplerYcbcrConversionImageFormatProperties *ycbcr_props = NULL;<br>
> + struct VkAndroidHardwareBufferUsageANDROID *android_usage = NULL;<br>
> VkResult result;<br>
> <br>
> + /* Only used on Android environment. */<br>
> + (void) android_usage;<br>
> +<br>
> /* Extract input structs */<br>
> vk_foreach_struct_const(s, base_info->pNext) {<br>
> switch (s->sType) {<br>
> @@ -966,6 +992,9 @@ VkResult anv_GetPhysicalDeviceImageFormatProperties2(<br>
> case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:<br>
> ycbcr_props = (void *) s;<br>
> break;<br>
> + case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:<br>
> + android_usage = (void *) s;<br>
> + break;<br>
> default:<br>
> anv_debug_ignored_stype(s->sType);<br>
> break;<br>
> @@ -977,6 +1006,38 @@ VkResult anv_GetPhysicalDeviceImageFormatProperties2(<br>
> if (result != VK_SUCCESS)<br>
> goto fail;<br>
> <br>
> +#ifdef ANDROID<br>
> + if (android_usage) {<br>
> + android_usage->androidHardwareBufferUsage = 0;<br>
> +<br>
> + if (base_info->usage & VK_IMAGE_USAGE_SAMPLED_BIT)<br>
> + android_usage->androidHardwareBufferUsage |=<br>
> + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;<br>
> +<br>
> + if (base_info->usage & VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT)<br>
> + android_usage->androidHardwareBufferUsage |=<br>
> + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;<br>
> +<br>
> + if (base_info->usage & VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT)<br>
> + android_usage->androidHardwareBufferUsage |=<br>
> + AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT;<br>
> +<br>
> + if (base_info->flags & VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT)<br>
> + android_usage->androidHardwareBufferUsage |=<br>
> + AHARDWAREBUFFER_USAGE_GPU_CUBE_MAP;<br>
> +<br>
> + if (base_info->flags & VK_IMAGE_CREATE_PROTECTED_BIT)<br>
> + android_usage->androidHardwareBufferUsage |=<br>
> + AHARDWAREBUFFER_USAGE_PROTECTED_CONTENT;<br>
> +<br>
> + /* No usage bits set - set at least one GPU usage. */<br>
> + if (android_usage->androidHardwareBufferUsage == 0)<br>
> + android_usage->androidHardwareBufferUsage =<br>
> + AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE;<br></blockquote><div><br></div><div>Give that you have this exact same code in an earlier patch, it's probably worth having a vk_to_ahb_usage helper in anv_android.c so we aren't duplicating it.<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> + }<br>
> +#endif<br>
> +<br>
> /* From the Vulkan 1.0.42 spec:<br>
> *<br>
> * If handleType is 0, vkGetPhysicalDeviceImageFormatProperties2 will<br>
> @@ -990,6 +1051,10 @@ VkResult anv_GetPhysicalDeviceImageFormatProperties2(<br>
> if (external_props)<br>
> external_props->externalMemoryProperties = prime_fd_props;<br>
> break;<br>
> + case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID:<br>
> + if (external_props)<br>
> + external_props->externalMemoryProperties = android_image_props;<br>
> + break;<br>
> default:<br>
> /* From the Vulkan 1.0.42 spec:<br>
> *<br>
> @@ -1072,6 +1137,10 @@ void anv_GetPhysicalDeviceExternalBufferProperties(<br>
> case VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT:<br>
> pExternalBufferProperties->externalMemoryProperties = prime_fd_props;<br>
> return;<br>
> + case VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID:<br>
> + pExternalBufferProperties->externalMemoryProperties =<br>
> + android_buffer_props;<br>
> + return;<br>
> default:<br>
> goto unsupported;<br>
> }<br>
> <br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div></div>