- static const unsigned stage_offsets[] = {
- offsetof(struct brw_vs_prog_key, program_string_id),
- offsetof(struct brw_tcs_prog_key, program_string_id),
- offsetof(struct brw_tes_prog_key, program_string_id),
- offsetof(struct brw_gs_prog_key, program_string_id),
- offsetof(struct brw_wm_prog_key, program_string_id),
- offsetof(struct brw_cs_prog_key, program_string_id),
- };
- assert((int)stage >= 0 && stage < ARRAY_SIZE(stage_offsets));
- *(unsigned*)((uint8_t*)key + stage_offsets[stage]) = id;
+ for (unsigned i = 0; i < prog_data->num_relocs; i++) {
+ assert(prog_data->relocs[i].offset % 8 == 0);
+ brw_inst *inst = (brw_inst *)(program + prog_data->relocs[i].offset);
+ for (unsigned j = 0; j < num_values; j++) {
+ if (prog_data->relocs[i].id == values[j].id) {
+ brw_update_reloc_imm(devinfo, inst, values[j].value);
+ break;
+ }
+ }
+ }