anv/buffer_view: Store a bo + offset instead of buffer pointer

This is what image_view does.  Also, we really need to do this so that we
can properly handle the combined offsets from the buffer and from
pCreateInfo.

This fixes some of the nonzero offset buffer view CTS tests.
This commit is contained in:
Jason Ekstrand
2015-12-14 14:09:35 -08:00
parent ee57062e1e
commit dba28da075
3 changed files with 9 additions and 5 deletions
+2 -2
View File
@@ -731,8 +731,8 @@ anv_cmd_buffer_emit_binding_table(struct anv_cmd_buffer *cmd_buffer,
case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER:
surface_state = desc->buffer_view->surface_state;
bo = desc->buffer_view->buffer->bo;
bo_offset = desc->buffer_view->buffer->offset;
bo = desc->buffer_view->bo;
bo_offset = desc->buffer_view->offset;
break;
case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER:
+4 -2
View File
@@ -512,7 +512,9 @@ anv_CreateBufferView(VkDevice _device,
if (!view)
return vk_error(VK_ERROR_OUT_OF_HOST_MEMORY);
view->buffer = buffer;
view->bo = buffer->bo;
view->offset = buffer->offset + pCreateInfo->offset;
view->surface_state =
anv_state_pool_alloc(&device->surface_state_pool, 64, 64);
@@ -520,7 +522,7 @@ anv_CreateBufferView(VkDevice _device,
anv_format_for_vk_format(pCreateInfo->format);
anv_fill_buffer_surface_state(device, view->surface_state.map, format,
pCreateInfo->offset, pCreateInfo->range,
view->offset, pCreateInfo->range,
format->isl_layout->bpb / 8);
*pView = anv_buffer_view_to_handle(view);
+3 -1
View File
@@ -1517,7 +1517,9 @@ gen9_image_view_init(struct anv_image_view *iview,
struct anv_cmd_buffer *cmd_buffer);
struct anv_buffer_view {
struct anv_buffer *buffer;
struct anv_bo *bo;
uint32_t offset; /**< Offset into bo. */
struct anv_state surface_state;
};