--- src/intel/vulkan/anv_private.h | 5 +++++ src/intel/vulkan/genX_cmd_buffer.c | 12 +++++++----- 2 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h index 510471da602..1a9ab7013f2 100644 --- a/src/intel/vulkan/anv_private.h +++ b/src/intel/vulkan/anv_private.h @@ -1989,6 +1989,11 @@ struct anv_cmd_state { * is one of the states in render_pass_states. */ struct anv_state null_surface_state; + + /** + * Current state base address. + */ + struct anv_address base_state_address; }; struct anv_cmd_pool { diff --git a/src/intel/vulkan/genX_cmd_buffer.c b/src/intel/vulkan/genX_cmd_buffer.c index 611311904e6..2847e0b30c9 100644 --- a/src/intel/vulkan/genX_cmd_buffer.c +++ b/src/intel/vulkan/genX_cmd_buffer.c @@ -67,6 +67,12 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer) { struct anv_device *device = cmd_buffer->device; + struct anv_address new_base_address = + anv_cmd_buffer_surface_base_address(cmd_buffer); + if (new_base_address.bo == cmd_buffer->state.base_state_address.bo && + new_base_address.offset == cmd_buffer->state.base_state_address.offset) + return; + /* If we are emitting a new state base address we probably need to re-emit * binding tables. */ @@ -90,8 +96,7 @@ genX(cmd_buffer_emit_state_base_address)(struct anv_cmd_buffer *cmd_buffer) sba.GeneralStateMemoryObjectControlState = GENX(MOCS); sba.GeneralStateBaseAddressModifyEnable = true; - sba.SurfaceStateBaseAddress = - anv_cmd_buffer_surface_base_address(cmd_buffer); + sba.SurfaceStateBaseAddress = new_base_address; sba.SurfaceStateMemoryObjectControlState = GENX(MOCS); sba.SurfaceStateBaseAddressModifyEnable = true; @@ -1521,9 +1526,6 @@ genX(CmdExecuteCommands)( /* Each of the secondary command buffers will use its own state base * address. We need to re-emit state base address for the primary after * all of the secondaries are done. - * - * TODO: Maybe we want to make this a dirty bit to avoid extra state base - * address calls? */ genX(cmd_buffer_emit_state_base_address)(primary); } -- 2.14.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev