Show predication in trace viewer (colors not accurate yet).
This commit is contained in:
parent
22246cccb5
commit
92f1a7cb40
|
@ -43,6 +43,8 @@ struct PacketTypeInfo {
|
||||||
struct PacketAction {
|
struct PacketAction {
|
||||||
enum class Type {
|
enum class Type {
|
||||||
kRegisterWrite,
|
kRegisterWrite,
|
||||||
|
kSetBinMask,
|
||||||
|
kSetBinSelect,
|
||||||
};
|
};
|
||||||
Type type;
|
Type type;
|
||||||
union {
|
union {
|
||||||
|
@ -50,6 +52,12 @@ struct PacketAction {
|
||||||
uint32_t index;
|
uint32_t index;
|
||||||
RegisterFile::RegisterValue value;
|
RegisterFile::RegisterValue value;
|
||||||
} register_write;
|
} register_write;
|
||||||
|
struct {
|
||||||
|
uint64_t value;
|
||||||
|
} set_bin_mask;
|
||||||
|
struct {
|
||||||
|
uint64_t value;
|
||||||
|
} set_bin_select;
|
||||||
};
|
};
|
||||||
static PacketAction RegisterWrite(uint32_t index, uint32_t value) {
|
static PacketAction RegisterWrite(uint32_t index, uint32_t value) {
|
||||||
PacketAction action;
|
PacketAction action;
|
||||||
|
@ -58,6 +66,18 @@ struct PacketAction {
|
||||||
action.register_write.value.u32 = value;
|
action.register_write.value.u32 = value;
|
||||||
return action;
|
return action;
|
||||||
}
|
}
|
||||||
|
static PacketAction SetBinMask(uint64_t value) {
|
||||||
|
PacketAction action;
|
||||||
|
action.type = Type::kSetBinMask;
|
||||||
|
action.set_bin_mask.value = value;
|
||||||
|
return action;
|
||||||
|
}
|
||||||
|
static PacketAction SetBinSelect(uint64_t value) {
|
||||||
|
PacketAction action;
|
||||||
|
action.type = Type::kSetBinSelect;
|
||||||
|
action.set_bin_select.value = value;
|
||||||
|
return action;
|
||||||
|
}
|
||||||
};
|
};
|
||||||
struct PacketInfo {
|
struct PacketInfo {
|
||||||
const PacketTypeInfo* type_info;
|
const PacketTypeInfo* type_info;
|
||||||
|
@ -436,6 +456,7 @@ bool DisasmPacketType3(const uint8_t* base_ptr, uint32_t packet,
|
||||||
out_info->type_info = &op_info;
|
out_info->type_info = &op_info;
|
||||||
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
|
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
|
||||||
// bin_mask_ = (bin_mask_ & 0xFFFFFFFF00000000ull) | value;
|
// bin_mask_ = (bin_mask_ & 0xFFFFFFFF00000000ull) | value;
|
||||||
|
out_info->actions.emplace_back(PacketAction::SetBinMask(value));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PM4_SET_BIN_MASK_HI: {
|
case PM4_SET_BIN_MASK_HI: {
|
||||||
|
@ -453,6 +474,7 @@ bool DisasmPacketType3(const uint8_t* base_ptr, uint32_t packet,
|
||||||
out_info->type_info = &op_info;
|
out_info->type_info = &op_info;
|
||||||
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
|
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
|
||||||
// bin_select_ = (bin_select_ & 0xFFFFFFFF00000000ull) | value;
|
// bin_select_ = (bin_select_ & 0xFFFFFFFF00000000ull) | value;
|
||||||
|
out_info->actions.emplace_back(PacketAction::SetBinSelect(value));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PM4_SET_BIN_SELECT_HI: {
|
case PM4_SET_BIN_SELECT_HI: {
|
||||||
|
@ -1650,6 +1672,9 @@ void DrawPacketDisassemblerUI(xe::ui::MainWindow* window, TracePlayer& player,
|
||||||
if (DisasmPacket(reinterpret_cast<const uint8_t*>(pending_packet) +
|
if (DisasmPacket(reinterpret_cast<const uint8_t*>(pending_packet) +
|
||||||
sizeof(PacketStartCommand),
|
sizeof(PacketStartCommand),
|
||||||
&packet_info)) {
|
&packet_info)) {
|
||||||
|
if (packet_info.predicated) {
|
||||||
|
ImGui::PushStyleColor(ImGuiCol_Text, kColorIgnored);
|
||||||
|
}
|
||||||
ImGui::BulletText(packet_info.type_info->name);
|
ImGui::BulletText(packet_info.type_info->name);
|
||||||
ImGui::TreePush((const char*)0);
|
ImGui::TreePush((const char*)0);
|
||||||
for (auto& action : packet_info.actions) {
|
for (auto& action : packet_info.actions) {
|
||||||
|
@ -1670,9 +1695,20 @@ void DrawPacketDisassemblerUI(xe::ui::MainWindow* window, TracePlayer& player,
|
||||||
ImGui::Columns(1);
|
ImGui::Columns(1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case PacketAction::Type::kSetBinMask: {
|
||||||
|
ImGui::Text("%.16llX", action.set_bin_mask.value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case PacketAction::Type::kSetBinSelect: {
|
||||||
|
ImGui::Text("%.16llX", action.set_bin_select.value);
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
ImGui::TreePop();
|
ImGui::TreePop();
|
||||||
|
if (packet_info.predicated) {
|
||||||
|
ImGui::PopStyleColor();
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ImGui::BulletText("<invalid packet>");
|
ImGui::BulletText("<invalid packet>");
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue