[Mesa-dev] [PATCH 17/23] anv: In anv_image, track anv_device_memory* instead of anv_bo*
Chad Versace
chadversary at chromium.org
Sat Sep 2 08:17:40 UTC 2017
This will reduce fragility in the implementation of
VK_ANDROID_native_buffer, which must do the equivalent of
vkAllocateMemory inside of vkCreateImage.
No behavioral change.
---
src/intel/vulkan/anv_blorp.c | 12 ++++++------
src/intel/vulkan/anv_image.c | 12 ++++++------
src/intel/vulkan/anv_intel.c | 4 ++--
src/intel/vulkan/anv_private.h | 4 ++--
src/intel/vulkan/anv_wsi.c | 2 +-
src/intel/vulkan/genX_cmd_buffer.c | 34 +++++++++++++++++-----------------
6 files changed, 34 insertions(+), 34 deletions(-)
diff --git a/src/intel/vulkan/anv_blorp.c b/src/intel/vulkan/anv_blorp.c
index 915643ffa3c..cf1888ca472 100644
--- a/src/intel/vulkan/anv_blorp.c
+++ b/src/intel/vulkan/anv_blorp.c
@@ -191,16 +191,16 @@ get_blorp_surf_for_anv_image(const struct anv_image *image,
*blorp_surf = (struct blorp_surf) {
.surf = &surface->isl,
.addr = {
- .buffer = image->bo,
- .offset = image->offset + surface->offset,
+ .buffer = image->mem->bo,
+ .offset = image->mem_offset + surface->offset,
},
};
if (aux_usage != ISL_AUX_USAGE_NONE) {
blorp_surf->aux_surf = &image->aux_surface.isl,
blorp_surf->aux_addr = (struct blorp_address) {
- .buffer = image->bo,
- .offset = image->offset + image->aux_surface.offset,
+ .buffer = image->mem->bo,
+ .offset = image->mem_offset + image->aux_surface.offset,
};
blorp_surf->aux_usage = aux_usage;
}
@@ -1515,8 +1515,8 @@ anv_gen8_hiz_op_resolve(struct anv_cmd_buffer *cmd_buffer,
/* Manually add the aux HiZ surf */
surf.aux_surf = &image->aux_surface.isl,
surf.aux_addr = (struct blorp_address) {
- .buffer = image->bo,
- .offset = image->offset + image->aux_surface.offset,
+ .buffer = image->mem->bo,
+ .offset = image->mem_offset + image->aux_surface.offset,
};
surf.aux_usage = ISL_AUX_USAGE_HIZ;
diff --git a/src/intel/vulkan/anv_image.c b/src/intel/vulkan/anv_image.c
index c38cd5f3e79..1fe8ab8ee43 100644
--- a/src/intel/vulkan/anv_image.c
+++ b/src/intel/vulkan/anv_image.c
@@ -493,13 +493,13 @@ VkResult anv_BindImageMemory(
ANV_FROM_HANDLE(anv_image, image, _image);
if (mem == NULL) {
- image->bo = NULL;
- image->offset = 0;
+ image->mem = NULL;
+ image->mem_offset = 0;
return VK_SUCCESS;
}
- image->bo = mem->bo;
- image->offset = memoryOffset;
+ image->mem = mem;
+ image->mem_offset = memoryOffset;
return VK_SUCCESS;
}
@@ -757,8 +757,8 @@ anv_CreateImageView(VkDevice _device,
anv_image_get_surface_for_aspect_mask(image, range->aspectMask);
iview->image = image;
- iview->bo = image->bo;
- iview->offset = image->offset + surface->offset;
+ iview->bo = image->mem->bo;
+ iview->offset = image->mem_offset + surface->offset;
iview->aspect_mask = pCreateInfo->subresourceRange.aspectMask;
iview->vk_format = pCreateInfo->format;
diff --git a/src/intel/vulkan/anv_intel.c b/src/intel/vulkan/anv_intel.c
index 991a93542d2..172ae1dabf2 100644
--- a/src/intel/vulkan/anv_intel.c
+++ b/src/intel/vulkan/anv_intel.c
@@ -80,8 +80,8 @@ VkResult anv_CreateDmaBufImageINTEL(
pAllocator, &image_h);
image = anv_image_from_handle(image_h);
- image->bo = mem->bo;
- image->offset = 0;
+ image->mem = mem;
+ image->mem_offset = 0;
assert(image->extent.width > 0);
assert(image->extent.height > 0);
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 8020a5ab0d3..98bdaa90a50 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -2086,8 +2086,8 @@ struct anv_image {
uint32_t alignment;
/* Set when bound */
- struct anv_bo *bo;
- VkDeviceSize offset;
+ struct anv_device_memory *mem;
+ VkDeviceSize mem_offset;
/**
* Image subsurfaces
diff --git a/src/intel/vulkan/anv_wsi.c b/src/intel/vulkan/anv_wsi.c
index 00edb220b2b..26a85c99447 100644
--- a/src/intel/vulkan/anv_wsi.c
+++ b/src/intel/vulkan/anv_wsi.c
@@ -265,7 +265,7 @@ anv_wsi_image_create(VkDevice device_h,
*memory_p = memory_h;
*fd_p = fd;
*size = image->size;
- *offset = image->offset;
+ *offset = image->mem_offset;
return VK_SUCCESS;
fail_alloc_memory:
anv_FreeMemory(device_h, memory_h, pAllocator);
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 7d7c5fbf9b1..5d97dbe8eb2 100644
--- a/src/intel/vulkan/genX_cmd_buffer.c
+++ b/src/intel/vulkan/genX_cmd_buffer.c
@@ -186,13 +186,13 @@ add_image_relocs(struct anv_cmd_buffer * const cmd_buffer,
const struct anv_state state)
{
const struct isl_device *isl_dev = &cmd_buffer->device->isl_dev;
- const uint32_t surf_offset = image->offset +
+ const uint32_t surf_offset = image->mem_offset +
anv_image_get_surface_for_aspect_mask(image, aspect_mask)->offset;
- add_surface_state_reloc(cmd_buffer, state, image->bo, surf_offset);
+ add_surface_state_reloc(cmd_buffer, state, image->mem->bo, surf_offset);
if (aux_usage != ISL_AUX_USAGE_NONE) {
- uint32_t aux_offset = image->offset + image->aux_surface.offset;
+ uint32_t aux_offset = image->mem_offset + image->aux_surface.offset;
/* On gen7 and prior, the bottom 12 bits of the MCS base address are
* used to store other information. This should be ok, however, because
@@ -206,7 +206,7 @@ add_image_relocs(struct anv_cmd_buffer * const cmd_buffer,
anv_reloc_list_add(&cmd_buffer->surface_relocs,
&cmd_buffer->pool->alloc,
state.offset + isl_dev->ss.aux_addr_offset,
- image->bo, aux_offset);
+ image->mem->bo, aux_offset);
if (result != VK_SUCCESS)
anv_batch_set_error(&cmd_buffer->batch, result);
}
@@ -420,7 +420,7 @@ get_fast_clear_state_offset(const struct anv_device *device,
assert(device && image);
assert(image->aspects == VK_IMAGE_ASPECT_COLOR_BIT);
assert(level < anv_image_aux_levels(image));
- uint32_t offset = image->offset + image->aux_surface.offset +
+ uint32_t offset = image->mem_offset + image->aux_surface.offset +
image->aux_surface.isl.size +
anv_fast_clear_state_entry_size(device) * level;
@@ -432,7 +432,7 @@ get_fast_clear_state_offset(const struct anv_device *device,
break;
}
- assert(offset < image->offset + image->size);
+ assert(offset < image->mem_offset + image->size);
return offset;
}
@@ -460,7 +460,7 @@ genX(set_image_needs_resolve)(struct anv_cmd_buffer *cmd_buffer,
* issues in testing is currently being used in the GL driver.
*/
anv_batch_emit(&cmd_buffer->batch, GENX(MI_STORE_DATA_IMM), sdi) {
- sdi.Address = (struct anv_address) { image->bo, resolve_flag_offset };
+ sdi.Address = (struct anv_address) { image->mem->bo, resolve_flag_offset };
sdi.ImmediateData = needs_resolve;
}
}
@@ -485,7 +485,7 @@ genX(load_needs_resolve_predicate)(struct anv_cmd_buffer *cmd_buffer,
emit_lri(&cmd_buffer->batch, MI_PREDICATE_SRC1 + 4, 0);
emit_lri(&cmd_buffer->batch, MI_PREDICATE_SRC0 , 0);
emit_lrm(&cmd_buffer->batch, MI_PREDICATE_SRC0 + 4,
- image->bo, resolve_flag_offset);
+ image->mem->bo, resolve_flag_offset);
anv_batch_emit(&cmd_buffer->batch, GENX(MI_PREDICATE), mip) {
mip.LoadOperation = LOAD_LOADINV;
mip.CombineOperation = COMBINE_SET;
@@ -528,7 +528,7 @@ init_fast_clear_state_entry(struct anv_cmd_buffer *cmd_buffer,
const uint32_t entry_offset =
get_fast_clear_state_offset(cmd_buffer->device, image, level,
FAST_CLEAR_STATE_FIELD_CLEAR_COLOR);
- sdi.Address = (struct anv_address) { image->bo, entry_offset + i };
+ sdi.Address = (struct anv_address) { image->mem->bo, entry_offset + i };
if (GEN_GEN >= 9) {
/* MCS buffers on SKL+ can only have 1/0 clear colors. */
@@ -579,11 +579,11 @@ genX(copy_fast_clear_dwords)(struct anv_cmd_buffer *cmd_buffer,
unsigned copy_size = cmd_buffer->device->isl_dev.ss.clear_value_size;
if (copy_from_surface_state) {
- genX(cmd_buffer_mi_memcpy)(cmd_buffer, image->bo, entry_offset,
+ genX(cmd_buffer_mi_memcpy)(cmd_buffer, image->mem->bo, entry_offset,
ss_bo, ss_clear_offset, copy_size);
} else {
genX(cmd_buffer_mi_memcpy)(cmd_buffer, ss_bo, ss_clear_offset,
- image->bo, entry_offset, copy_size);
+ image->mem->bo, entry_offset, copy_size);
/* Updating a surface state object may require that the state cache be
* invalidated. From the SKL PRM, Shared Functions -> State -> State
@@ -2765,8 +2765,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
info.depth_address =
anv_batch_emit_reloc(&cmd_buffer->batch,
dw + device->isl_dev.ds.depth_offset / 4,
- image->bo,
- image->offset + image->depth_surface.offset);
+ image->mem->bo,
+ image->mem_offset + image->depth_surface.offset);
const uint32_t ds =
cmd_buffer->state.subpass->depth_stencil_attachment.attachment;
@@ -2777,8 +2777,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
info.hiz_address =
anv_batch_emit_reloc(&cmd_buffer->batch,
dw + device->isl_dev.ds.hiz_offset / 4,
- image->bo,
- image->offset + image->aux_surface.offset);
+ image->mem->bo,
+ image->mem_offset + image->aux_surface.offset);
info.depth_clear_value = ANV_HZ_FC_VAL;
}
@@ -2790,8 +2790,8 @@ cmd_buffer_emit_depth_stencil(struct anv_cmd_buffer *cmd_buffer)
info.stencil_address =
anv_batch_emit_reloc(&cmd_buffer->batch,
dw + device->isl_dev.ds.stencil_offset / 4,
- image->bo,
- image->offset + image->stencil_surface.offset);
+ image->mem->bo,
+ image->mem_offset + image->stencil_surface.offset);
}
isl_emit_depth_stencil_hiz_s(&device->isl_dev, dw, &info);
--
2.13.5
More information about the mesa-dev
mailing list