From: Samuel Pitoiset Date: Thu, 14 Dec 2017 14:51:18 +0000 (+0100) Subject: radv: store the dispatch initiator into the device X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=9fdc1437baab9dbb0b1c3473af27b2241954b2de;p=mesa.git radv: store the dispatch initiator into the device Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen --- diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e68c5a40388..eae5d40e198 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -3483,26 +3483,16 @@ radv_emit_dispatch_packets(struct radv_cmd_buffer *cmd_buffer, { struct radv_pipeline *pipeline = cmd_buffer->state.compute_pipeline; struct radv_shader_variant *compute_shader = pipeline->shaders[MESA_SHADER_COMPUTE]; + unsigned dispatch_initiator = cmd_buffer->device->dispatch_initiator; struct radeon_winsys *ws = cmd_buffer->device->ws; struct radeon_winsys_cs *cs = cmd_buffer->cs; struct ac_userdata_info *loc; - unsigned dispatch_initiator; loc = radv_lookup_user_sgpr(pipeline, MESA_SHADER_COMPUTE, AC_UD_CS_GRID_SIZE); MAYBE_UNUSED unsigned cdw_max = radeon_check_space(ws, cs, 25); - dispatch_initiator = S_00B800_COMPUTE_SHADER_EN(1) | - S_00B800_FORCE_START_AT_000(1); - - if (cmd_buffer->device->physical_device->rad_info.chip_class >= CIK) { - /* If the KMD allows it (there is a KMD hw register for it), - * allow launching waves out-of-order. - */ - dispatch_initiator |= S_00B800_ORDER_MODE(1); - } - if (info->indirect) { uint64_t va = radv_buffer_get_va(info->indirect->bo); diff --git a/src/amd/vulkan/radv_device.c b/src/amd/vulkan/radv_device.c index 5a0dd647273..7c0971d190d 100644 --- a/src/amd/vulkan/radv_device.c +++ b/src/amd/vulkan/radv_device.c @@ -1101,6 +1101,16 @@ VkResult radv_CreateDevice( device->scratch_waves = MAX2(32 * physical_device->rad_info.num_good_compute_units, max_threads_per_block / 64); + device->dispatch_initiator = S_00B800_COMPUTE_SHADER_EN(1) | + S_00B800_FORCE_START_AT_000(1); + + if (device->physical_device->rad_info.chip_class >= CIK) { + /* If the KMD allows it (there is a KMD hw register for it), + * allow launching waves out-of-order. + */ + device->dispatch_initiator |= S_00B800_ORDER_MODE(1); + } + radv_device_init_gs_info(device); device->tess_offchip_block_dw_size = diff --git a/src/amd/vulkan/radv_private.h b/src/amd/vulkan/radv_private.h index 16afd6d6921..2e1362c446d 100644 --- a/src/amd/vulkan/radv_private.h +++ b/src/amd/vulkan/radv_private.h @@ -542,6 +542,7 @@ struct radv_device { bool dfsm_allowed; uint32_t tess_offchip_block_dw_size; uint32_t scratch_waves; + uint32_t dispatch_initiator; uint32_t gs_table_depth;