anv: Implement VK_KHR_bind_memory2
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
c302f8fa7c
commit
52a89fedf2
|
@ -1863,23 +1863,48 @@ void anv_GetDeviceMemoryCommitment(
|
|||
*pCommittedMemoryInBytes = 0;
|
||||
}
|
||||
|
||||
VkResult anv_BindBufferMemory(
|
||||
VkDevice device,
|
||||
VkBuffer _buffer,
|
||||
VkDeviceMemory _memory,
|
||||
VkDeviceSize memoryOffset)
|
||||
static void
|
||||
anv_bind_buffer_memory(const VkBindBufferMemoryInfoKHR *pBindInfo)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_device_memory, mem, _memory);
|
||||
ANV_FROM_HANDLE(anv_buffer, buffer, _buffer);
|
||||
ANV_FROM_HANDLE(anv_device_memory, mem, pBindInfo->memory);
|
||||
ANV_FROM_HANDLE(anv_buffer, buffer, pBindInfo->buffer);
|
||||
|
||||
assert(pBindInfo->sType == VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR);
|
||||
|
||||
if (mem) {
|
||||
assert((buffer->usage & mem->type->valid_buffer_usage) == buffer->usage);
|
||||
buffer->bo = mem->bo;
|
||||
buffer->offset = memoryOffset;
|
||||
buffer->offset = pBindInfo->memoryOffset;
|
||||
} else {
|
||||
buffer->bo = NULL;
|
||||
buffer->offset = 0;
|
||||
}
|
||||
}
|
||||
|
||||
VkResult anv_BindBufferMemory(
|
||||
VkDevice device,
|
||||
VkBuffer buffer,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize memoryOffset)
|
||||
{
|
||||
anv_bind_buffer_memory(
|
||||
&(VkBindBufferMemoryInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
|
||||
.buffer = buffer,
|
||||
.memory = memory,
|
||||
.memoryOffset = memoryOffset,
|
||||
});
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VkResult anv_BindBufferMemory2KHR(
|
||||
VkDevice device,
|
||||
uint32_t bindInfoCount,
|
||||
const VkBindBufferMemoryInfoKHR* pBindInfos)
|
||||
{
|
||||
for (uint32_t i = 0; i < bindInfoCount; i++)
|
||||
anv_bind_buffer_memory(&pBindInfos[i]);
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
|
@ -45,6 +45,7 @@ class Extension:
|
|||
self.enable = enable;
|
||||
|
||||
EXTENSIONS = [
|
||||
Extension('VK_KHR_bind_memory2', 1, True),
|
||||
Extension('VK_KHR_dedicated_allocation', 1, True),
|
||||
Extension('VK_KHR_descriptor_update_template', 1, True),
|
||||
Extension('VK_KHR_external_fence', 1,
|
||||
|
|
|
@ -421,23 +421,48 @@ anv_DestroyImage(VkDevice _device, VkImage _image,
|
|||
vk_free2(&device->alloc, pAllocator, image);
|
||||
}
|
||||
|
||||
VkResult anv_BindImageMemory(
|
||||
VkDevice _device,
|
||||
VkImage _image,
|
||||
VkDeviceMemory _memory,
|
||||
VkDeviceSize memoryOffset)
|
||||
static void
|
||||
anv_bind_image_memory(const VkBindImageMemoryInfoKHR *pBindInfo)
|
||||
{
|
||||
ANV_FROM_HANDLE(anv_device_memory, mem, _memory);
|
||||
ANV_FROM_HANDLE(anv_image, image, _image);
|
||||
ANV_FROM_HANDLE(anv_device_memory, mem, pBindInfo->memory);
|
||||
ANV_FROM_HANDLE(anv_image, image, pBindInfo->image);
|
||||
|
||||
assert(pBindInfo->sType == VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR);
|
||||
|
||||
if (mem == NULL) {
|
||||
image->bo = NULL;
|
||||
image->offset = 0;
|
||||
return VK_SUCCESS;
|
||||
return;
|
||||
}
|
||||
|
||||
image->bo = mem->bo;
|
||||
image->offset = memoryOffset;
|
||||
image->offset = pBindInfo->memoryOffset;
|
||||
}
|
||||
|
||||
VkResult anv_BindImageMemory(
|
||||
VkDevice device,
|
||||
VkImage image,
|
||||
VkDeviceMemory memory,
|
||||
VkDeviceSize memoryOffset)
|
||||
{
|
||||
anv_bind_image_memory(
|
||||
&(VkBindImageMemoryInfoKHR) {
|
||||
.sType = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
|
||||
.image = image,
|
||||
.memory = memory,
|
||||
.memoryOffset = memoryOffset,
|
||||
});
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
||||
VkResult anv_BindImageMemory2KHR(
|
||||
VkDevice device,
|
||||
uint32_t bindInfoCount,
|
||||
const VkBindImageMemoryInfoKHR* pBindInfos)
|
||||
{
|
||||
for (uint32_t i = 0; i < bindInfoCount; i++)
|
||||
anv_bind_image_memory(&pBindInfos[i]);
|
||||
|
||||
return VK_SUCCESS;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue