intel/disasm: Label support in shader disassembly for UIP/JIP
[mesa.git] / src / mesa / drivers / dri / i965 / brw_cs.c
index 183ffbf22bbcfef6aa9cdb8eca50162d9ac12a79..990acabc80b2058b860357ded280b989b3ce91e0 100644 (file)
 #include "brw_program.h"
 #include "compiler/glsl/ir_uniform.h"
 
+struct brw_cs_parameters
+brw_cs_get_parameters(const struct brw_context *brw)
+{
+   assert(brw->cs.base.prog_data);
+   struct brw_cs_prog_data *cs_prog_data =
+      brw_cs_prog_data(brw->cs.base.prog_data);
+
+   struct brw_cs_parameters params = {};
+
+   if (brw->compute.group_size) {
+      /* With ARB_compute_variable_group_size the group size is set at
+       * dispatch time, so we can't use the one provided by the compiler.
+       */
+      params.group_size = brw->compute.group_size[0] *
+                          brw->compute.group_size[1] *
+                          brw->compute.group_size[2];
+   } else {
+      params.group_size = cs_prog_data->local_size[0] *
+                          cs_prog_data->local_size[1] *
+                          cs_prog_data->local_size[2];
+   }
+
+   params.simd_size =
+      brw_cs_simd_size_for_group_size(&brw->screen->devinfo,
+                                      cs_prog_data, params.group_size);
+   params.threads = DIV_ROUND_UP(params.group_size, params.simd_size);
+
+   return params;
+}
+
 static void
 assign_cs_binding_table_offsets(const struct gen_device_info *devinfo,
                                 const struct gl_program *prog,
@@ -88,9 +118,11 @@ brw_codegen_cs_prog(struct brw_context *brw,
    if (INTEL_DEBUG & DEBUG_SHADER_TIME)
       st_index = brw_get_shader_time_index(brw, &cp->program, ST_CS, true);
 
+   brw_nir_lower_cs_intrinsics(nir);
+
    char *error_str;
    program = brw_compile_cs(brw->screen->compiler, brw, mem_ctx, key,
-                            &prog_data, nir, st_index, &error_str);
+                            &prog_data, nir, st_index, NULL, &error_str);
    if (program == NULL) {
       cp->program.sh.data->LinkStatus = LINKING_FAILURE;
       ralloc_strcat(&cp->program.sh.data->InfoLog, error_str);