Mesa (master): anv/cmd_buffer: Refactor surface state relocation handling

Jason Ekstrand jekstrand at kemper.freedesktop.org
Thu Nov 17 20:04:22 UTC 2016


Module: Mesa
Branch: master
Commit: 818c7bfb313014eb2c37bf40753524149ae1230d
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=818c7bfb313014eb2c37bf40753524149ae1230d

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Mon Oct 24 19:25:20 2016 -0700

anv/cmd_buffer: Refactor surface state relocation handling

Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

---

 src/intel/vulkan/genX_cmd_buffer.c | 35 ++++++++++++++++++++++-------------
 1 file changed, 22 insertions(+), 13 deletions(-)

diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c
index 6a4cb8a..3a2782c 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);
 




More information about the mesa-commit mailing list