anv/gen7: Set SLM size in interface descriptor
authorJordan Justen <jordan.l.justen@intel.com>
Sat, 30 Jan 2016 08:49:31 +0000 (00:49 -0800)
committerJordan Justen <jordan.l.justen@intel.com>
Sat, 30 Jan 2016 17:10:54 +0000 (09:10 -0800)
Signed-off-by: Jordan Justen <jordan.l.justen@intel.com>
src/vulkan/gen7_cmd_buffer.c

index e4a35388170eae79c6b4e7da4e7d50147aab7268..091faad7c51969cf9ad559a6d0b371a402e424df 100644 (file)
@@ -294,6 +294,16 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
                      .CURBEDataStartAddress = push_state.offset);
    }
 
+   assert(prog_data->total_shared <= 64 * 1024);
+   uint32_t slm_size = 0;
+   if (prog_data->total_shared > 0) {
+      /* slm_size is in 4k increments, but must be a power of 2. */
+      slm_size = 4 * 1024;
+      while (slm_size < prog_data->total_shared)
+         slm_size <<= 1;
+      slm_size /= 4 * 1024;
+   }
+
    struct anv_state state =
       anv_state_pool_emit(&device->dynamic_state_pool,
                           GEN7_INTERFACE_DESCRIPTOR_DATA, 64,
@@ -304,6 +314,7 @@ flush_compute_descriptor_set(struct anv_cmd_buffer *cmd_buffer)
                              push_constant_regs,
                           .ConstantURBEntryReadOffset = 0,
                           .BarrierEnable = cs_prog_data->uses_barrier,
+                          .SharedLocalMemorySize = slm_size,
                           .NumberofThreadsinGPGPUThreadGroup =
                              pipeline->cs_thread_width_max);