vk: Store bo pointer in anv_image and anv_buffer
authorKristian Høgsberg <kristian.h.kristensen@intel.com>
Tue, 12 May 2015 05:19:58 +0000 (22:19 -0700)
committerKristian Høgsberg <kristian.h.kristensen@intel.com>
Tue, 12 May 2015 06:25:28 +0000 (23:25 -0700)
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.

src/vulkan/device.c
src/vulkan/image.c
src/vulkan/intel.c
src/vulkan/private.h

index 09b21e50c7c84111390672e79929ed2c5aa9295f..86fa3b8c59ecb929270d21aacca356d358722fa7 100644 (file)
@@ -1028,12 +1028,12 @@ VkResult VKAPI vkQueueBindObjectMemory(
    switch (objType) {
    case VK_OBJECT_TYPE_BUFFER:
       buffer = (struct anv_buffer *) object;
-      buffer->mem = mem;
+      buffer->bo = &mem->bo;
       buffer->offset = memOffset;
       break;
    case VK_OBJECT_TYPE_IMAGE:
       image = (struct anv_image *) object;
-      image->mem = mem;
+      image->bo = &mem->bo;
       image->offset = memOffset;
       break;
    default:
@@ -1236,7 +1236,7 @@ VkResult VKAPI vkCreateBuffer(
       return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
 
    buffer->size = pCreateInfo->size;
-   buffer->mem = NULL;
+   buffer->bo = NULL;
    buffer->offset = 0;
 
    *pBuffer = (VkBuffer) buffer;
@@ -2073,7 +2073,7 @@ void VKAPI vkCmdBindIndexBuffer(
    anv_batch_emit(&cmd_buffer->batch, GEN8_3DSTATE_INDEX_BUFFER,
                   .IndexFormat = vk_to_gen_index_type[indexType],
                   .MemoryObjectControlState = 0,
-                  .BufferStartingAddress = { &buffer->mem->bo, buffer->offset + offset },
+                  .BufferStartingAddress = { buffer->bo, buffer->offset + 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. */
             anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
                                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;
                anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
                                   image_view->surface_state.offset + 8 * sizeof(int32_t),
-                                  &image_view->image->mem->bo,
+                                  image_view->image->bo,
                                   image_view->image->offset);
                break;
             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;
                anv_reloc_list_add(&cmd_buffer->batch.surf_relocs,
                                   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);
                break;
 
@@ -2221,7 +2221,7 @@ anv_cmd_buffer_flush_state(struct anv_cmd_buffer *cmd_buffer)
             .MemoryObjectControlState = 0,
             .AddressModifyEnable = true,
             .BufferPitch = pipeline->binding_stride[vb],
-            .BufferStartingAddress = { &buffer->mem->bo, buffer->offset + offset },
+            .BufferStartingAddress = { buffer->bo, buffer->offset + 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_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;
 
    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_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;
 
    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_buffer *buffer = (struct anv_buffer *) destBuffer;
-   struct anv_bo *bo = &buffer->mem->bo;
+   struct anv_bo *bo = buffer->bo;
 
    switch (timestampType) {
    case VK_TIMESTAMP_TYPE_TOP:
index a5357198225a42e5cd80445ceb6fc0e3ea7c1d8c..b983b887e956213226120a58c7541b5c4b8ca945 100644 (file)
@@ -241,7 +241,7 @@ VkResult VKAPI vkCreateImage(
    if (image == NULL)
       return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
 
-   image->mem = NULL;
+   image->bo = NULL;
    image->offset = 0;
    image->type = pCreateInfo->imageType;
    image->extent = pCreateInfo->extent;
index 81bd722d3e15a9190ccde2f92199bdbd2c4a317f..52fadb1ab062ad9f2e7a32cf3da53b98458fdbd6 100644 (file)
@@ -67,7 +67,7 @@ VkResult VKAPI vkCreateDmaBufImageINTEL(
       goto fail_mem;
    }
 
-   image->mem = mem;
+   image->bo = &mem->bo;
    image->offset = 0;
    image->type = VK_IMAGE_TYPE_2D;
    image->extent = pCreateInfo->extent;
index 31d4ab242fb7da22ea3bd3d238100c209e2589b1..cfcaf1c70a632e447adcfcf180ad215b54a0faba 100644 (file)
@@ -439,7 +439,7 @@ struct anv_buffer {
    VkDeviceSize                                 size;
 
    /* Set when bound */
-   struct anv_device_memory *                   mem;
+   struct anv_bo *                              bo;
    VkDeviceSize                                 offset;   
 };
 
@@ -550,7 +550,7 @@ struct anv_image {
    int32_t                                      stride;
 
    /* Set when bound */
-   struct anv_device_memory *                   mem;
+   struct anv_bo *                              bo;
    VkDeviceSize                                 offset;
 };