[Mesa-dev] [PATCH] radv: Add VK_KHR_bind_memory2 support.

Dave Airlie airlied at gmail.com
Sun Sep 17 19:59:57 UTC 2017


On 18 September 2017 at 01:00, Jason Ekstrand <jason at jlekstrand.net> wrote:
> Reviewed: Jason Ekstrand <jason at jlekstrand.net>

Reviewed-by: Dave Airlie <airlied at redhat.com>

>
>
>
> On September 17, 2017 5:00:01 AM Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> wrote:
>
>> Nothing too exciting, just adding the possibility for a pNext pointer,
>> and batch binding. Our binding is pretty much trivial.
>>
>> It also adds VK_IMAGE_CREATE_ALIAS_BIT_KHR, but since we store no
>> state in radv_image, I don't think we have to do anything there.
>> ---
>>  src/amd/vulkan/radv_device.c           | 82
>> ++++++++++++++++++++++++----------
>>  src/amd/vulkan/radv_entrypoints_gen.py |  1 +
>>  2 files changed, 59 insertions(+), 24 deletions(-)
>>
>> diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c
>> index e6d595dfbe5..7bfdddf0eea 100644
>> --- a/src/amd/vulkan/radv_device.c
>> +++ b/src/amd/vulkan/radv_device.c
>> @@ -174,6 +174,10 @@ static const VkExtensionProperties
>> common_device_extensions[] = {
>>                 .extensionName = VK_KHR_IMAGE_FORMAT_LIST_EXTENSION_NAME,
>>                 .specVersion = 1,
>>         },
>> +       {
>> +               .extensionName = VK_KHR_BIND_MEMORY_2_EXTENSION_NAME,
>> +               .specVersion = 1,
>> +       },
>>  };
>>  static const VkExtensionProperties ext_sema_device_extensions[] = {
>>         {
>> @@ -2481,44 +2485,74 @@ void radv_GetDeviceMemoryCommitment(
>>         *pCommittedMemoryInBytes = 0;
>>  }
>>
>> +VkResult radv_BindBufferMemory2KHR(VkDevice device,
>> +                                   uint32_t bindInfoCount,
>> +                                   const VkBindBufferMemoryInfoKHR
>> *pBindInfos)
>> +{
>> +       for (uint32_t i = 0; i < bindInfoCount; ++i) {
>> +               RADV_FROM_HANDLE(radv_device_memory, mem,
>> pBindInfos[i].memory);
>> +               RADV_FROM_HANDLE(radv_buffer, buffer,
>> pBindInfos[i].buffer);
>> +
>> +               if (mem) {
>> +                       buffer->bo = mem->bo;
>> +                       buffer->offset = pBindInfos[i].memoryOffset;
>> +               } else {
>> +                       buffer->bo = NULL;
>> +               }
>> +       }
>> +       return VK_SUCCESS;
>> +}
>> +
>>  VkResult radv_BindBufferMemory(
>>         VkDevice                                    device,
>> -       VkBuffer                                    _buffer,
>> -       VkDeviceMemory                              _memory,
>> +       VkBuffer                                    buffer,
>> +       VkDeviceMemory                              memory,
>>         VkDeviceSize                                memoryOffset)
>>  {
>> -       RADV_FROM_HANDLE(radv_device_memory, mem, _memory);
>> -       RADV_FROM_HANDLE(radv_buffer, buffer, _buffer);
>> +       const VkBindBufferMemoryInfoKHR info = {
>> +               .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
>> +               .buffer = buffer,
>> +               .memory = memory,
>> +               .memoryOffset = memoryOffset
>> +       };
>>
>> -       if (mem) {
>> -               buffer->bo = mem->bo;
>> -               buffer->offset = memoryOffset;
>> -       } else {
>> -               buffer->bo = NULL;
>> -               buffer->offset = 0;
>> -       }
>> +       return radv_BindBufferMemory2KHR(device, 1, &info);
>> +}
>>
>> +VkResult radv_BindImageMemory2KHR(VkDevice device,
>> +                                  uint32_t bindInfoCount,
>> +                                  const VkBindImageMemoryInfoKHR
>> *pBindInfos)
>> +{
>> +       for (uint32_t i = 0; i < bindInfoCount; ++i) {
>> +               RADV_FROM_HANDLE(radv_device_memory, mem,
>> pBindInfos[i].memory);
>> +               RADV_FROM_HANDLE(radv_image, image, pBindInfos[i].image);
>> +
>> +               if (mem) {
>> +                       image->bo = mem->bo;
>> +                       image->offset = pBindInfos[i].memoryOffset;
>> +               } else {
>> +                       image->bo = NULL;
>> +                       image->offset = 0;
>> +               }
>> +       }
>>         return VK_SUCCESS;
>>  }
>>
>> +
>>  VkResult radv_BindImageMemory(
>>         VkDevice                                    device,
>> -       VkImage                                     _image,
>> -       VkDeviceMemory                              _memory,
>> +       VkImage                                     image,
>> +       VkDeviceMemory                              memory,
>>         VkDeviceSize                                memoryOffset)
>>  {
>> -       RADV_FROM_HANDLE(radv_device_memory, mem, _memory);
>> -       RADV_FROM_HANDLE(radv_image, image, _image);
>> -
>> -       if (mem) {
>> -               image->bo = mem->bo;
>> -               image->offset = memoryOffset;
>> -       } else {
>> -               image->bo = NULL;
>> -               image->offset = 0;
>> -       }
>> +       const VkBindImageMemoryInfoKHR info = {
>> +               .sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
>> +               .image = image,
>> +               .memory = memory,
>> +               .memoryOffset = memoryOffset
>> +       };
>>
>> -       return VK_SUCCESS;
>> +       return radv_BindImageMemory2KHR(device, 1, &info);
>>  }
>>
>>
>> diff --git a/src/amd/vulkan/radv_entrypoints_gen.py
>> b/src/amd/vulkan/radv_entrypoints_gen.py
>> index 9634f76fcd6..21738f4da90 100644
>> --- a/src/amd/vulkan/radv_entrypoints_gen.py
>> +++ b/src/amd/vulkan/radv_entrypoints_gen.py
>> @@ -57,6 +57,7 @@ SUPPORTED_EXTENSIONS = [
>>      'VK_KHR_external_semaphore_capabilities',
>>      'VK_KHR_external_semaphore',
>>      'VK_KHR_external_semaphore_fd',
>> +    'VK_KHR_bind_memory2',
>>  ]
>>
>>  # We generate a static hash table for entry point lookup
>> --
>> 2.14.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>
>
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list