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:
Kristian Høgsberg
2015-05-11 22:19:58 -07:00
parent 4f25f5d86c
commit 099faa1a2b
4 changed files with 15 additions and 15 deletions

View File

@@ -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:

View File

@@ -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;

View File

@@ -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;

View File

@@ -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;
}; };