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 {
enum class Type {
kRegisterWrite,
kSetBinMask,
kSetBinSelect,
};
Type type;
union {
@ -50,6 +52,12 @@ struct PacketAction {
uint32_t index;
RegisterFile::RegisterValue value;
} 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) {
PacketAction action;
@ -58,6 +66,18 @@ struct PacketAction {
action.register_write.value.u32 = value;
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 {
const PacketTypeInfo* type_info;
@ -436,6 +456,7 @@ bool DisasmPacketType3(const uint8_t* base_ptr, uint32_t packet,
out_info->type_info = &op_info;
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
// bin_mask_ = (bin_mask_ & 0xFFFFFFFF00000000ull) | value;
out_info->actions.emplace_back(PacketAction::SetBinMask(value));
break;
}
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;
uint32_t value = poly::load_and_swap<uint32_t>(ptr);
// bin_select_ = (bin_select_ & 0xFFFFFFFF00000000ull) | value;
out_info->actions.emplace_back(PacketAction::SetBinSelect(value));
break;
}
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) +
sizeof(PacketStartCommand),
&packet_info)) {
if (packet_info.predicated) {
ImGui::PushStyleColor(ImGuiCol_Text, kColorIgnored);
}
ImGui::BulletText(packet_info.type_info->name);
ImGui::TreePush((const char*)0);
for (auto& action : packet_info.actions) {
@ -1670,9 +1695,20 @@ void DrawPacketDisassemblerUI(xe::ui::MainWindow* window, TracePlayer& player,
ImGui::Columns(1);
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();
if (packet_info.predicated) {
ImGui::PopStyleColor();
}
} else {
ImGui::BulletText("<invalid packet>");
}