Show predication in trace viewer (colors not accurate yet).

This commit is contained in:
Ben Vanik 2015-03-20 16:38:26 -07:00
parent 22246cccb5
commit 92f1a7cb40
1 changed files with 36 additions and 0 deletions

View File

@ -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>");
} }