vk: Store bo pointer in anv_image and anv_buffer
We don't need to point back to the memory object the bo came from. Pointing directly to a bo lets us bind images and buffers to other bos - like our allocator bos.
This commit is contained in:
@@ -1028,12 +1028,12 @@ VkResult VKAPI vkQueueBindObjectMemory(
|
|||||||
switch (objType) {
|
switch (objType) {
|
||||||
case VK_OBJECT_TYPE_BUFFER:
|
case VK_OBJECT_TYPE_BUFFER:
|
||||||
buffer = (struct anv_buffer *) object;
|
buffer = (struct anv_buffer *) object;
|
||||||
buffer->mem = mem;
|
buffer->bo = &mem->bo;
|
||||||
buffer->offset = memOffset;
|
buffer->offset = memOffset;
|
||||||
break;
|
break;
|
||||||
case VK_OBJECT_TYPE_IMAGE:
|
case VK_OBJECT_TYPE_IMAGE:
|
||||||
image = (struct anv_image *) object;
|
image = (struct anv_image *) object;
|
||||||
image->mem = mem;
|
image->bo = &mem->bo;
|
||||||
image->offset = memOffset;
|
image->offset = memOffset;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -1236,7 +1236,7 @@ VkResult VKAPI vkCreateBuffer(
|
|||||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||||
|
|
||||||
buffer->size = pCreateInfo->size;
|
buffer->size = pCreateInfo->size;
|
||||||
buffer->mem = NULL;
|
buffer->bo = NULL;
|
||||||
buffer->offset = 0;
|
buffer->offset = 0;
|
||||||
|
|
||||||
*pBuffer = (VkBuffer) buffer;
|
*pBuffer = (VkBuffer) buffer;
|
||||||
@@ -2073,7 +2073,7 @@ void VKAPI vkCmdBindIndexBuffer(
|
|||||||
anv_batch_emit(&cmd_buffer->batch, GEN8_3DSTATE_INDEX_BUFFER,
|
anv_batch_emit(&cmd_buffer->batch, GEN8_3DSTATE_INDEX_BUFFER,
|
||||||
.IndexFormat = vk_to_gen_index_type[indexType],
|
.IndexFormat = vk_to_gen_index_type[indexType],
|
||||||
.MemoryObjectControlState = 0,
|
.MemoryObjectControlState = 0,
|
||||||
.BufferStartingAddress = { &buffer->mem->bo, buffer->offset + offset },
|
.BufferStartingAddress = { buffer->bo, buffer->offset + offset },
|
||||||
.BufferSize = buffer->size - offset);
|
.BufferSize = buffer->size - offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2140,7 +2140,7 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
* submit time. Surface address is dwords 8-9. */
|
* submit time. Surface address is dwords 8-9. */
|
||||||
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
||||||
view->surface_state.offset + 8 * sizeof(int32_t),
|
view->surface_state.offset + 8 * sizeof(int32_t),
|
||||||
&view->image->mem->bo, view->image->offset);
|
view->image->bo, view->image->offset);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2161,7 +2161,7 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
table[bias + i] = image_view->surface_state.offset;
|
table[bias + i] = image_view->surface_state.offset;
|
||||||
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
||||||
image_view->surface_state.offset + 8 * sizeof(int32_t),
|
image_view->surface_state.offset + 8 * sizeof(int32_t),
|
||||||
&image_view->image->mem->bo,
|
image_view->image->bo,
|
||||||
image_view->image->offset);
|
image_view->image->offset);
|
||||||
break;
|
break;
|
||||||
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
|
||||||
@@ -2175,7 +2175,7 @@ flush_descriptor_sets(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
table[bias + i] = buffer_view->surface_state.offset;
|
table[bias + i] = buffer_view->surface_state.offset;
|
||||||
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
|
||||||
buffer_view->surface_state.offset + 8 * sizeof(int32_t),
|
buffer_view->surface_state.offset + 8 * sizeof(int32_t),
|
||||||
&buffer_view->buffer->mem->bo,
|
buffer_view->buffer->bo,
|
||||||
buffer_view->buffer->offset + buffer_view->offset);
|
buffer_view->buffer->offset + buffer_view->offset);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -2221,7 +2221,7 @@ anv_cmd_buffer_flush_state(struct anv_cmd_buffer *cmd_buffer)
|
|||||||
.MemoryObjectControlState = 0,
|
.MemoryObjectControlState = 0,
|
||||||
.AddressModifyEnable = true,
|
.AddressModifyEnable = true,
|
||||||
.BufferPitch = pipeline->binding_stride[vb],
|
.BufferPitch = pipeline->binding_stride[vb],
|
||||||
.BufferStartingAddress = { &buffer->mem->bo, buffer->offset + offset },
|
.BufferStartingAddress = { buffer->bo, buffer->offset + offset },
|
||||||
.BufferSize = buffer->size - offset
|
.BufferSize = buffer->size - offset
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2324,7 +2324,7 @@ void VKAPI vkCmdDrawIndirect(
|
|||||||
{
|
{
|
||||||
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
||||||
struct anv_buffer *buffer = (struct anv_buffer *) _buffer;
|
struct anv_buffer *buffer = (struct anv_buffer *) _buffer;
|
||||||
struct anv_bo *bo = &buffer->mem->bo;
|
struct anv_bo *bo = buffer->bo;
|
||||||
uint32_t bo_offset = buffer->offset + offset;
|
uint32_t bo_offset = buffer->offset + offset;
|
||||||
|
|
||||||
anv_cmd_buffer_flush_state(cmd_buffer);
|
anv_cmd_buffer_flush_state(cmd_buffer);
|
||||||
@@ -2349,7 +2349,7 @@ void VKAPI vkCmdDrawIndexedIndirect(
|
|||||||
{
|
{
|
||||||
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
||||||
struct anv_buffer *buffer = (struct anv_buffer *) _buffer;
|
struct anv_buffer *buffer = (struct anv_buffer *) _buffer;
|
||||||
struct anv_bo *bo = &buffer->mem->bo;
|
struct anv_bo *bo = buffer->bo;
|
||||||
uint32_t bo_offset = buffer->offset + offset;
|
uint32_t bo_offset = buffer->offset + offset;
|
||||||
|
|
||||||
anv_cmd_buffer_flush_state(cmd_buffer);
|
anv_cmd_buffer_flush_state(cmd_buffer);
|
||||||
@@ -2485,7 +2485,7 @@ void VKAPI vkCmdWriteTimestamp(
|
|||||||
{
|
{
|
||||||
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
struct anv_cmd_buffer *cmd_buffer = (struct anv_cmd_buffer *) cmdBuffer;
|
||||||
struct anv_buffer *buffer = (struct anv_buffer *) destBuffer;
|
struct anv_buffer *buffer = (struct anv_buffer *) destBuffer;
|
||||||
struct anv_bo *bo = &buffer->mem->bo;
|
struct anv_bo *bo = buffer->bo;
|
||||||
|
|
||||||
switch (timestampType) {
|
switch (timestampType) {
|
||||||
case VK_TIMESTAMP_TYPE_TOP:
|
case VK_TIMESTAMP_TYPE_TOP:
|
||||||
|
@@ -241,7 +241,7 @@ VkResult VKAPI vkCreateImage(
|
|||||||
if (image == NULL)
|
if (image == NULL)
|
||||||
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
|
||||||
|
|
||||||
image->mem = NULL;
|
image->bo = NULL;
|
||||||
image->offset = 0;
|
image->offset = 0;
|
||||||
image->type = pCreateInfo->imageType;
|
image->type = pCreateInfo->imageType;
|
||||||
image->extent = pCreateInfo->extent;
|
image->extent = pCreateInfo->extent;
|
||||||
|
@@ -67,7 +67,7 @@ VkResult VKAPI vkCreateDmaBufImageINTEL(
|
|||||||
goto fail_mem;
|
goto fail_mem;
|
||||||
}
|
}
|
||||||
|
|
||||||
image->mem = mem;
|
image->bo = &mem->bo;
|
||||||
image->offset = 0;
|
image->offset = 0;
|
||||||
image->type = VK_IMAGE_TYPE_2D;
|
image->type = VK_IMAGE_TYPE_2D;
|
||||||
image->extent = pCreateInfo->extent;
|
image->extent = pCreateInfo->extent;
|
||||||
|
@@ -439,7 +439,7 @@ struct anv_buffer {
|
|||||||
VkDeviceSize size;
|
VkDeviceSize size;
|
||||||
|
|
||||||
/* Set when bound */
|
/* Set when bound */
|
||||||
struct anv_device_memory * mem;
|
struct anv_bo * bo;
|
||||||
VkDeviceSize offset;
|
VkDeviceSize offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -550,7 +550,7 @@ struct anv_image {
|
|||||||
int32_t stride;
|
int32_t stride;
|
||||||
|
|
||||||
/* Set when bound */
|
/* Set when bound */
|
||||||
struct anv_device_memory * mem;
|
struct anv_bo * bo;
|
||||||
VkDeviceSize offset;
|
VkDeviceSize offset;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user