void decode_gf100_m2mf_verbose(struct gpu_object *obj, struct pushbuf_decode_state *pstate) { int mthd = pstate->mthd; uint32_t data = pstate->mthd_data; struct gf100_m2mf_data *objdata = obj->class_data; if (check_addresses_verbose(pstate, objdata->addresses)) { } else if (mthd == 0x0300) // EXEC { int flags_ok = (data & 0x111) == 0x111 ? 1 : 0; mmt_debug("m2mf exec: 0x%08x push&linear: %d\n", data, flags_ok); if (!flags_ok || objdata->offset_out.gpu_mapping == NULL) { objdata->offset_out.address = 0; objdata->offset_out.gpu_mapping = NULL; } } else if (mthd == 0x0304) // DATA { mmt_debug("m2mf data: 0x%08x\n", data); if (objdata->offset_out.gpu_mapping) { gpu_mapping_register_write(objdata->offset_out.gpu_mapping, objdata->offset_out.address + objdata->data_offset, 4, &data); objdata->data_offset += 4; } } }
void decode_gk104_3d_verbose(struct gpu_object *obj, struct pushbuf_decode_state *pstate) { int mthd = pstate->mthd; uint32_t data = pstate->mthd_data; struct gk104_3d_data *objdata = obj->class_data; if (check_addresses_verbose(pstate, objdata->addresses)) { } else if (mthd == 0x0f10) // SetSelectMaxwellTextureHeaders objdata->tic2 = data; else if (mthd == 0x1234) // LINKED_TSC objdata->linked_tsc = data; else if (mthd == 0x2608) // TEX_CB_INDEX { // This gets done pretty early. To be truly correct, // we'd have to go fish out any past CB bindings to // this CB index. objdata->tex_cb_index = data; } else if (mthd >= 0x2410 && mthd < 0x2410 + 0x20 * 5) // CB_BIND { int i; int cb_index = data >> 4; if (cb_index != objdata->tex_cb_index) return; for (i = 0; i < 5; i++) { if (mthd != 0x2410 + 0x20 * i) continue; objdata->texcb[i] = objdata->cb; break; } }
void decode_g80_3d_verbose(struct pushbuf_decode_state *pstate) { int mthd = pstate->mthd; uint32_t data = pstate->mthd_data; if (check_addresses_verbose(pstate, g80_3d_addresses)) { } else if (mthd == 0x140c && dump_vp) // VP_START_ID g80_3d_disassemble(g80_3d.vp.buffer, "vp", data); else if (mthd == 0x1414 && dump_fp) // FP_START_ID g80_3d_disassemble(g80_3d.fp.buffer, "fp", data); else if (mthd == 0x1410 && dump_gp) // GP_START_ID g80_3d_disassemble(g80_3d.gp.buffer, "gp", data); else if (mthd >= 0x1444 && mthd < 0x1448 + 0x8 * 3) { int i; for (i = 0; i < 3; ++i) { if (dump_tsc && g80_3d.tsc.buffer && mthd == 0x1444 + i * 0x8) // BIND_TSC[i] { int j, tsc = (data >> 12) & 0xff; mmt_debug("bind tsc[%d]: 0x%08x\n", i, tsc); uint32_t *tsc_data = (uint32_t *)&g80_3d.tsc.buffer->data[8 * tsc]; for (j = 0; j < 8; ++j) decode_tsc(tsc, j, tsc_data); break; } if (dump_tic && g80_3d.tic.buffer && mthd == 0x1448 + i * 0x8) // BIND_TIC[i] { int j, tic = (data >> 9) & 0x1ffff; mmt_debug("bind tic[%d]: 0x%08x\n", i, tic); uint32_t *tic_data = (uint32_t *)&g80_3d.tic.buffer->data[8 * tic]; for (j = 0; j < 8; ++j) decode_tic(tic, j, tic_data); break; }
void decode_g80_compute_verbose(struct gpu_object *obj, struct pushbuf_decode_state *pstate) { int mthd = pstate->mthd; uint32_t data = pstate->mthd_data; struct g80_compute_data *objdata = obj->class_data; if (check_addresses_verbose(pstate, objdata->addresses)) { } else if (mthd == 0x0378) objdata->linked_tsc = data; else if (mthd == 0x03b4 && dump_cp) // CP_START_ID g80_3d_disassemble(pstate, &objdata->cp, "cp", data); else if (mthd == 0x3c0 || mthd == 0x3c4) { uint32_t is_tsc = mthd == 0x3c0; if (dump_tsc && objdata->tsc.gpu_mapping && ( is_tsc || objdata->linked_tsc)) { int tsc; if (is_tsc) tsc = (data >> 12) & 0xff; else