- } else {
- gl_constant_value *param;
- unsigned i, t;
-
- const unsigned push_constant_data_size =
- (local_id_dwords + prog_data->nr_params) * sizeof(gl_constant_value);
- const unsigned reg_aligned_constant_size = ALIGN(push_constant_data_size, 32);
- const unsigned param_aligned_count =
- reg_aligned_constant_size / sizeof(*param);
-
- unsigned threads = get_cs_thread_count(cs_prog_data);
-
- param = (gl_constant_value*)
- brw_state_batch(brw, type,
- ALIGN(reg_aligned_constant_size * threads, 64),
- 64, &stage_state->push_const_offset);
- assert(param);
-
- STATIC_ASSERT(sizeof(gl_constant_value) == sizeof(float));
-
- brw_cs_fill_local_id_payload(cs_prog_data, param, threads,
- reg_aligned_constant_size);
-
- /* _NEW_PROGRAM_CONSTANTS */
- for (t = 0; t < threads; t++) {
- gl_constant_value *next_param =
- ¶m[t * param_aligned_count + local_id_dwords];
- for (i = 0; i < prog_data->nr_params; i++) {
- next_param[i] = *prog_data->param[i];
- }
+ return;
+ }
+
+
+ gl_constant_value *param = (gl_constant_value*)
+ brw_state_batch(brw, type, ALIGN(cs_prog_data->push.total.size, 64),
+ 64, &stage_state->push_const_offset);
+ assert(param);
+
+ STATIC_ASSERT(sizeof(gl_constant_value) == sizeof(float));
+
+ if (cs_prog_data->push.cross_thread.size > 0) {
+ gl_constant_value *param_copy = param;
+ assert(cs_prog_data->thread_local_id_index < 0 ||
+ cs_prog_data->thread_local_id_index >=
+ cs_prog_data->push.cross_thread.dwords);
+ for (unsigned i = 0;
+ i < cs_prog_data->push.cross_thread.dwords;
+ i++) {
+ param_copy[i] = *prog_data->param[i];