[Mesa-dev] [PATCH 1/3] radv: store the dispatch initiator into the device

Samuel Pitoiset samuel.pitoiset at gmail.com
Thu Dec 14 14:51:18 UTC 2017


Signed-off-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
---
 src/amd/vulkan/radv_cmd_buffer.c | 12 +-----------
 src/amd/vulkan/radv_device.c     | 10 ++++++++++
 src/amd/vulkan/radv_private.h    |  1 +
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c
index e68c5a4038..eae5d40e19 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 5a0dd64727..7c0971d190 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 16afd6d692..2e1362c446 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;
 
-- 
2.15.1



More information about the mesa-dev mailing list