Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions detect.c
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,7 @@ void initbits(int fam) {
bits.gui = (1U << 31);
bits.uvd = 0;
bits.vce0 = 0;
bits.vcn = 0;

// R600 has a different texture bit, and only R600 has the TC, CR, SMX bits
if (fam < RV770) {
Expand All @@ -377,4 +378,17 @@ void initbits(int fam) {
bits.vce0 = (1U << 7);
}
}

// Video Core (VCN) on RDNA: bit 1 of SRBM_STATUS2
if (fam >= NAVI10) {
bits.vcn = (1U << 1);
}

// RDNA (GFX10+): VGT replaced by Geometry Engine at bit 21,
// Event Engine and Sequencer Instruction Cache bits undefined.
if (fam >= NAVI10) {
bits.ee = 0;
bits.vgt = (1U << 21);
bits.sh = 0;
}
}
11 changes: 8 additions & 3 deletions dump.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ void dumpdata(const unsigned int ticks, const char file[], const unsigned int li
float cb = 100 * results->cb * k;
float uvd = 100 * results->uvd * k;
float vce0 = 100 * results->vce0 * k;
float vcn = 100 * results->vcn * k;
float vram = 100.0f * results->vram / vramsize;
float vrammb = results->vram / 1024.0f / 1024.0f;
float gtt = 100.0f * results->gtt / gttsize;
Expand All @@ -108,15 +109,17 @@ void dumpdata(const unsigned int ticks, const char file[], const unsigned int li
float sclk_ghz = results->sclk * k / 1000.0f;

fprintf(f, "gpu %.2f%%, ", gui);
fprintf(f, "ee %.2f%%, ", ee);
fprintf(f, "vgt %.2f%%, ", vgt);
if (bits.ee)
fprintf(f, "ee %.2f%%, ", ee);
fprintf(f, "%s %.2f%%, ", bits.ee ? "vgt" : "ge", vgt);
fprintf(f, "ta %.2f%%, ", ta);

if (bits.tc)
fprintf(f, "tc %.2f%%, ", tc);

fprintf(f, "sx %.2f%%, ", sx);
fprintf(f, "sh %.2f%%, ", sh);
if (bits.sh)
fprintf(f, "sh %.2f%%, ", sh);
fprintf(f, "spi %.2f%%, ", spi);

if (bits.smx)
Expand All @@ -133,6 +136,8 @@ void dumpdata(const unsigned int ticks, const char file[], const unsigned int li
fprintf(f, ", uvd %.2f%%", uvd);
if (bits.vce0)
fprintf(f, ", vce0 %.2f%%", vce0);
if (bits.vcn)
fprintf(f, ", vc %.2f%%", vcn);

if (bits.vram)
fprintf(f, ", vram %.2f%% %.2fmb", vram, vrammb);
Expand Down
1 change: 1 addition & 0 deletions include/radeontop.h
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,7 @@ struct bits_t {
unsigned int cr;
unsigned int uvd;
unsigned int vce0;
unsigned int vcn;
uint64_t vram;
uint64_t gtt;
unsigned int sclk;
Expand Down
10 changes: 7 additions & 3 deletions ticks.c
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ static void *collector(void *arg) {
getgrbm(&stat);
unsigned int uvd;
if (bits.uvd) getsrbm(&uvd);
unsigned int vce;
if (bits.vce0) getsrbm2(&vce);
unsigned int srbm2;
if (bits.vce0 || bits.vcn) getsrbm2(&srbm2);

memset(&history[cur], 0, sizeof(struct bits_t));

Expand All @@ -63,7 +63,10 @@ static void *collector(void *arg) {
if (stat & bits.cr) history[cur].cr = 1;
if (stat & bits.cb) history[cur].cb = 1;
if (uvd & bits.uvd) history[cur].uvd = 1;
if (vce & bits.vce0) history[cur].vce0 = 1;
if (bits.vce0 || bits.vcn) {
if (srbm2 & bits.vce0) history[cur].vce0 = 1;
if (srbm2 & bits.vcn) history[cur].vcn = 1;
}
getsclk(&history[cur].sclk);
getmclk(&history[cur].mclk);

Expand Down Expand Up @@ -94,6 +97,7 @@ static void *collector(void *arg) {
res[curres].cr += history[i].cr;
res[curres].uvd += history[i].uvd;
res[curres].vce0 += history[i].vce0;
res[curres].vcn += history[i].vcn;
res[curres].mclk += history[i].mclk;
res[curres].sclk += history[i].sclk;
}
Expand Down
26 changes: 19 additions & 7 deletions ui.c
Original file line number Diff line number Diff line change
Expand Up @@ -153,6 +153,7 @@ void present(const unsigned int ticks, const char card[], unsigned int color,
float cb = 100 * results->cb * k;
float uvd = 100 * results->uvd * k;
float vce0 = 100 * results->vce0 * k;
float vcn = 100 * results->vcn * k;
float vram = 100.0f * results->vram / vramsize;
float vrammb = results->vram / 1024.0f / 1024.0f;
float vramsizemb = vramsize / 1024.0f / 1024.0f;
Expand All @@ -175,15 +176,20 @@ void present(const unsigned int ticks, const char card[], unsigned int color,

unsigned int start = 4;

percentage(start, w, ee);
printright(start++, hw, _("Event Engine %6.2f%%"), ee);
if (bits.ee) {
percentage(start, w, ee);
printright(start++, hw, _("Event Engine %6.2f%%"), ee);

// Enough height?
if (h > bigh) start++;
// Enough height?
if (h > bigh) start++;
}

if (color) attron(COLOR_PAIR(2));
percentage(start, w, vgt);
printright(start++, hw, _("Vertex Grouper + Tesselator %6.2f%%"), vgt);
if (bits.ee)
printright(start++, hw, _("Vertex Grouper + Tesselator %6.2f%%"), vgt);
else
printright(start++, hw, _("Geometry Engine %6.2f%%"), vgt);
if (color) attroff(COLOR_PAIR(2));

// Enough height?
Expand All @@ -207,8 +213,10 @@ void present(const unsigned int ticks, const char card[], unsigned int color,
percentage(start, w, sx);
printright(start++, hw, _("Shader Export %6.2f%%"), sx);

percentage(start, w, sh);
printright(start++, hw, _("Sequencer Instruction Cache %6.2f%%"), sh);
if (bits.sh) {
percentage(start, w, sh);
printright(start++, hw, _("Sequencer Instruction Cache %6.2f%%"), sh);
}

percentage(start, w, spi);
printright(start++, hw, _("Shader Interpolator %6.2f%%"), spi);
Expand Down Expand Up @@ -254,6 +262,10 @@ void present(const unsigned int ticks, const char card[], unsigned int color,
percentage(start, w, vce0);
printright(start++, hw, _("VCE %6.2f%%"), vce0);
}
if (bits.vcn) {
percentage(start, w, vcn);
printright(start++, hw, _("Video Core %6.2f%%"), vcn);
}

if (bits.vram || bits.gtt) {
// Enough height?
Expand Down