mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-04 17:50:11 +01:00
panvk: support VK_ANDROID_external_memory_android_hardware_buffer
This last piece hooks up: - GetPhysicalDeviceImageFormatProperties2 - GetPhysicalDeviceExternalBufferProperties - GetImageMemoryRequirements2 Test: - dEQP-VK.api.external.memory.android_hardware_buffer.* - CtsNativeHardwareTestCases via ANGLE - Android HWUI and SurfaceFlinger via skiavk (entirely AHB based) Acked-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com> Reviewed-by: Faith Ekstrand <faith.ekstrand@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36603>
This commit is contained in:
parent
66bbd9eec8
commit
b76c556c59
5 changed files with 27 additions and 5 deletions
|
|
@ -671,7 +671,7 @@ Khronos extensions that are not part of any Vulkan version:
|
|||
VK_EXT_vertex_input_dynamic_state DONE (anv, hk, lvp, nvk, panvk, radv, tu, vn)
|
||||
VK_EXT_ycbcr_image_arrays DONE (anv, hasvk, hk, lvp, nvk, panvk/v10+, radv, vn)
|
||||
VK_EXT_zero_initialize_device_memory DONE (nvk, radv)
|
||||
VK_ANDROID_external_memory_android_hardware_buffer DONE (anv, radv, tu, vn)
|
||||
VK_ANDROID_external_memory_android_hardware_buffer DONE (anv, panvk, radv, tu, vn)
|
||||
VK_ANDROID_native_buffer DONE (anv, panvk, radv, tu, v3dv, vn)
|
||||
VK_GOOGLE_decorate_string DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, vn)
|
||||
VK_GOOGLE_hlsl_functionality1 DONE (anv, hasvk, hk, lvp, nvk, panvk, radv, tu, vn)
|
||||
|
|
|
|||
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include "vulkan/util/vk_util.h"
|
||||
|
||||
#include "panvk_android.h"
|
||||
#include "panvk_device.h"
|
||||
#include "panvk_device_memory.h"
|
||||
#include "panvk_entrypoints.h"
|
||||
|
|
@ -46,6 +47,11 @@ panvk_AllocateMemory(VkDevice _device,
|
|||
const VkAllocationCallbacks *pAllocator,
|
||||
VkDeviceMemory *pMem)
|
||||
{
|
||||
if (panvk_android_is_ahb_memory(pAllocateInfo)) {
|
||||
return panvk_android_allocate_ahb_memory(_device, pAllocateInfo,
|
||||
pAllocator, pMem);
|
||||
}
|
||||
|
||||
VK_FROM_HANDLE(panvk_device, device, _device);
|
||||
struct panvk_instance *instance =
|
||||
to_panvk_instance(device->vk.physical->instance);
|
||||
|
|
|
|||
|
|
@ -589,7 +589,8 @@ panvk_GetImageMemoryRequirements2(VkDevice device,
|
|||
switch (ext->sType) {
|
||||
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS: {
|
||||
VkMemoryDedicatedRequirements *dedicated = (void *)ext;
|
||||
dedicated->requiresDedicatedAllocation = false;
|
||||
dedicated->requiresDedicatedAllocation =
|
||||
vk_image_is_android_hardware_buffer(&image->vk);
|
||||
dedicated->prefersDedicatedAllocation = dedicated->requiresDedicatedAllocation;
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
#include "util/disk_cache.h"
|
||||
#include "git_sha1.h"
|
||||
|
||||
#include "vk_android.h"
|
||||
#include "vk_device.h"
|
||||
#include "vk_drm_syncobj.h"
|
||||
#include "vk_format.h"
|
||||
|
|
@ -1136,9 +1137,15 @@ panvk_GetPhysicalDeviceImageFormatProperties2(
|
|||
external_props = &fallback_external_props;
|
||||
}
|
||||
|
||||
result = panvk_get_external_image_format_properties(
|
||||
physical_device, base_info, external_info->handleType,
|
||||
&external_props->externalMemoryProperties);
|
||||
if (external_info->handleType ==
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) {
|
||||
result = vk_android_get_ahb_image_properties(physicalDevice, base_info,
|
||||
base_props);
|
||||
} else {
|
||||
result = panvk_get_external_image_format_properties(
|
||||
physical_device, base_info, external_info->handleType,
|
||||
&external_props->externalMemoryProperties);
|
||||
}
|
||||
if (result != VK_SUCCESS)
|
||||
goto fail;
|
||||
|
||||
|
|
@ -1263,6 +1270,13 @@ panvk_GetPhysicalDeviceExternalBufferProperties(
|
|||
const VkPhysicalDeviceExternalBufferInfo *pExternalBufferInfo,
|
||||
VkExternalBufferProperties *pExternalBufferProperties)
|
||||
{
|
||||
if (pExternalBufferInfo->handleType ==
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_ANDROID_HARDWARE_BUFFER_BIT_ANDROID) {
|
||||
vk_android_get_ahb_buffer_properties(physicalDevice, pExternalBufferInfo,
|
||||
pExternalBufferProperties);
|
||||
return;
|
||||
}
|
||||
|
||||
const VkExternalMemoryHandleTypeFlags supported_handle_types =
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT |
|
||||
VK_EXTERNAL_MEMORY_HANDLE_TYPE_DMA_BUF_BIT_EXT;
|
||||
|
|
|
|||
|
|
@ -177,6 +177,7 @@ panvk_per_arch(get_physical_device_extensions)(
|
|||
.EXT_ycbcr_2plane_444_formats = PAN_ARCH >= 10,
|
||||
.EXT_ycbcr_image_arrays = PAN_ARCH >= 10,
|
||||
.EXT_inline_uniform_block = true,
|
||||
.ANDROID_external_memory_android_hardware_buffer = has_gralloc,
|
||||
.ANDROID_native_buffer = has_gralloc,
|
||||
.GOOGLE_decorate_string = true,
|
||||
.GOOGLE_hlsl_functionality1 = true,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue