amdgpu: additional heuristic for CB extents detection
Found in CUSA00144
This commit is contained in:
parent
f041276b04
commit
8144f835a9
|
@ -199,19 +199,12 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||||
|
|
||||||
switch (reg_addr) {
|
switch (reg_addr) {
|
||||||
case ContextRegs::CbColor0Base:
|
case ContextRegs::CbColor0Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor1Base:
|
case ContextRegs::CbColor1Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor2Base:
|
case ContextRegs::CbColor2Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor3Base:
|
case ContextRegs::CbColor3Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor4Base:
|
case ContextRegs::CbColor4Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor5Base:
|
case ContextRegs::CbColor5Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor6Base:
|
case ContextRegs::CbColor6Base:
|
||||||
[[fallthrough]];
|
|
||||||
case ContextRegs::CbColor7Base: {
|
case ContextRegs::CbColor7Base: {
|
||||||
const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Base) /
|
const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Base) /
|
||||||
(ContextRegs::CbColor1Base - ContextRegs::CbColor0Base);
|
(ContextRegs::CbColor1Base - ContextRegs::CbColor0Base);
|
||||||
|
@ -227,6 +220,26 @@ Liverpool::Task Liverpool::ProcessGraphics(std::span<const u32> dcb, std::span<c
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case ContextRegs::CbColor0Cmask:
|
||||||
|
case ContextRegs::CbColor1Cmask:
|
||||||
|
case ContextRegs::CbColor2Cmask:
|
||||||
|
case ContextRegs::CbColor3Cmask:
|
||||||
|
case ContextRegs::CbColor4Cmask:
|
||||||
|
case ContextRegs::CbColor5Cmask:
|
||||||
|
case ContextRegs::CbColor6Cmask:
|
||||||
|
case ContextRegs::CbColor7Cmask: {
|
||||||
|
const auto col_buf_id = (reg_addr - ContextRegs::CbColor0Cmask) /
|
||||||
|
(ContextRegs::CbColor1Cmask - ContextRegs::CbColor0Cmask);
|
||||||
|
ASSERT(col_buf_id < NumColorBuffers);
|
||||||
|
|
||||||
|
const auto nop_offset = header->type3.count;
|
||||||
|
if (nop_offset == 0x04) {
|
||||||
|
ASSERT_MSG(payload[nop_offset] == 0xc0001000,
|
||||||
|
"NOP hint is missing in CB setup sequence");
|
||||||
|
last_cb_extent[col_buf_id].raw = payload[nop_offset + 1];
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case ContextRegs::DbZInfo: {
|
case ContextRegs::DbZInfo: {
|
||||||
if (header->type3.count == 8) {
|
if (header->type3.count == 8) {
|
||||||
ASSERT_MSG(payload[20] == 0xc0001000,
|
ASSERT_MSG(payload[20] == 0xc0001000,
|
||||||
|
|
|
@ -786,6 +786,14 @@ struct Liverpool {
|
||||||
CbColor5Base = 0xA363,
|
CbColor5Base = 0xA363,
|
||||||
CbColor6Base = 0xA372,
|
CbColor6Base = 0xA372,
|
||||||
CbColor7Base = 0xA381,
|
CbColor7Base = 0xA381,
|
||||||
|
CbColor0Cmask = 0xA31F,
|
||||||
|
CbColor1Cmask = 0xA32E,
|
||||||
|
CbColor2Cmask = 0xA33D,
|
||||||
|
CbColor3Cmask = 0xA34C,
|
||||||
|
CbColor4Cmask = 0xA35B,
|
||||||
|
CbColor5Cmask = 0xA36A,
|
||||||
|
CbColor6Cmask = 0xA379,
|
||||||
|
CbColor7Cmask = 0xA388,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct PolygonOffset {
|
struct PolygonOffset {
|
||||||
|
|
Loading…
Reference in New Issue