radv: store the dispatch initiator into the device
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 14 Dec 2017 14:51:18 +0000 (15:51 +0100)
committerSamuel Pitoiset <samuel.pitoiset@gmail.com>
Thu, 14 Dec 2017 21:20:55 +0000 (22:20 +0100)
Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
src/amd/vulkan/radv_cmd_buffer.c
src/amd/vulkan/radv_device.c
src/amd/vulkan/radv_private.h

index e68c5a40388b01622ca712b7ed02baba2fa89847..eae5d40e1986945146dd02727e502c37d717a809 100644 (file)
@@ -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);
 
index 5a0dd647273bf7018de4e7d461ba6b215dbe2868..7c0971d190d2de67416b3623dfb353ad7f23cf82 100644 (file)
@@ -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 =
index 16afd6d692189d7f08f1587153888a53d1de197f..2e1362c446d3b6ab441cc360fcb5e9612d2e339e 100644 (file)
@@ -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;