diff options
author | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-10-24 19:25:20 -0700 |
---|---|---|
committer | Jason Ekstrand <jason.ekstrand@intel.com> | 2016-11-17 12:03:24 -0800 |
commit | 818c7bfb313014eb2c37bf40753524149ae1230d (patch) | |
tree | 0df592d907f211577e3c696c0c7a89888ebebc34 | |
parent | 9be9f5f1c71a5c8942b1f41d0512479a9899df42 (diff) |
anv/cmd_buffer: Refactor surface state relocation handling
Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
-rw-r--r-- | src/intel/vulkan/genX_cmd_buffer.c | 35 |
1 files changed, 22 insertions, 13 deletions
diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 6a4cb8ae6f8..3a2782c8c9f 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -162,6 +162,18 @@ add_surface_state_reloc(struct anv_cmd_buffer *cmd_buffer, state.offset + isl_dev->ss.addr_offset, bo, offset); } +static void +add_image_view_relocs(struct anv_cmd_buffer *cmd_buffer, + const struct anv_image_view *iview, + struct anv_state state) +{ + const struct isl_device *isl_dev = &cmd_buffer->device->isl_dev; + + anv_reloc_list_add(&cmd_buffer->surface_relocs, &cmd_buffer->pool->alloc, + state.offset + isl_dev->ss.addr_offset, + iview->bo, iview->offset); +} + /** * Setup anv_cmd_state::attachments for vkCmdBeginRenderPass. */ @@ -289,8 +301,8 @@ genX(cmd_buffer_setup_attachments)(struct anv_cmd_buffer *cmd_buffer, .view = &view, .mocs = cmd_buffer->device->default_mocs); - add_surface_state_reloc(cmd_buffer, - state->attachments[i].color_rt_state, iview->bo, iview->offset); + add_image_view_relocs(cmd_buffer, iview, + state->attachments[i].color_rt_state); } } @@ -858,8 +870,6 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, struct anv_pipeline_binding *binding = &map->surface_to_descriptor[s]; struct anv_state surface_state; - struct anv_bo *bo; - uint32_t bo_offset; if (binding->set == ANV_DESCRIPTOR_SET_COLOR_ATTACHMENTS) { /* Color attachment binding */ @@ -891,15 +901,13 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT: surface_state = desc->image_view->sampler_surface_state; assert(surface_state.alloc_size); - bo = desc->image_view->bo; - bo_offset = desc->image_view->offset; + add_image_view_relocs(cmd_buffer, desc->image_view, surface_state); break; case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: { surface_state = desc->image_view->storage_surface_state; assert(surface_state.alloc_size); - bo = desc->image_view->bo; - bo_offset = desc->image_view->offset; + add_image_view_relocs(cmd_buffer, desc->image_view, surface_state); struct brw_image_param *image_param = &cmd_buffer->state.push_constants[stage]->images[image++]; @@ -916,15 +924,17 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, case VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER: surface_state = desc->buffer_view->surface_state; assert(surface_state.alloc_size); - bo = desc->buffer_view->bo; - bo_offset = desc->buffer_view->offset; + add_surface_state_reloc(cmd_buffer, surface_state, + desc->buffer_view->bo, + desc->buffer_view->offset); break; case VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER: surface_state = desc->buffer_view->storage_surface_state; assert(surface_state.alloc_size); - bo = desc->buffer_view->bo; - bo_offset = desc->buffer_view->offset; + add_surface_state_reloc(cmd_buffer, surface_state, + desc->buffer_view->bo, + desc->buffer_view->offset); struct brw_image_param *image_param = &cmd_buffer->state.push_constants[stage]->images[image++]; @@ -939,7 +949,6 @@ emit_binding_table(struct anv_cmd_buffer *cmd_buffer, } bt_map[bias + s] = surface_state.offset + state_offset; - add_surface_state_reloc(cmd_buffer, surface_state, bo, bo_offset); } assert(image == map->image_count); |