Merge branch 'master' of https://github.com/xenia-project/xenia into canary_experimental
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
#include "xenia/base/filesystem.h"
|
||||
#include "xenia/base/logging.h"
|
||||
#include "xenia/base/math.h"
|
||||
#include "xenia/base/memory.h"
|
||||
#include "xenia/base/platform.h"
|
||||
#include "xenia/base/string.h"
|
||||
#include "xenia/base/system.h"
|
||||
@@ -354,9 +355,10 @@ void TraceViewer::DrawPacketDisassemblerUI() {
|
||||
ImGui::NextColumn();
|
||||
if (!register_info ||
|
||||
register_info->type == RegisterInfo::Type::kDword) {
|
||||
ImGui::Text("%.8X", action.register_write.value.u32);
|
||||
ImGui::Text("%.8X", action.register_write.value);
|
||||
} else {
|
||||
ImGui::Text("%8f", action.register_write.value.f32);
|
||||
ImGui::Text("%8f", xe::memory::Reinterpret<float>(
|
||||
action.register_write.value));
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
break;
|
||||
@@ -706,10 +708,8 @@ void TraceViewer::DrawTextureInfo(
|
||||
const Shader::TextureBinding& texture_binding) {
|
||||
auto& regs = *graphics_system_->register_file();
|
||||
|
||||
int r = XE_GPU_REG_SHADER_CONSTANT_FETCH_00_0 +
|
||||
texture_binding.fetch_constant * 6;
|
||||
auto group = reinterpret_cast<const xe_gpu_fetch_group_t*>(®s.values[r]);
|
||||
auto& fetch = group->texture_fetch;
|
||||
xenos::xe_gpu_texture_fetch_t fetch =
|
||||
regs.GetTextureFetch(texture_binding.fetch_constant);
|
||||
if (fetch.type != xenos::FetchConstantType::kTexture &&
|
||||
(!cvars::gpu_allow_invalid_fetch_constants ||
|
||||
fetch.type != xenos::FetchConstantType::kInvalidTexture)) {
|
||||
@@ -777,9 +777,9 @@ void TraceViewer::DrawFailedTextureInfo(
|
||||
|
||||
void TraceViewer::DrawVertexFetcher(Shader* shader,
|
||||
const Shader::VertexBinding& vertex_binding,
|
||||
const xe_gpu_vertex_fetch_t* fetch) {
|
||||
const uint8_t* addr = memory_->TranslatePhysical(fetch->address << 2);
|
||||
uint32_t vertex_count = fetch->size / vertex_binding.stride_words;
|
||||
const xe_gpu_vertex_fetch_t& fetch) {
|
||||
const uint8_t* addr = memory_->TranslatePhysical(fetch.address << 2);
|
||||
uint32_t vertex_count = fetch.size / vertex_binding.stride_words;
|
||||
int column_count = 0;
|
||||
for (const auto& attrib : vertex_binding.attributes) {
|
||||
switch (attrib.fetch_instr.attributes.data_format) {
|
||||
@@ -880,7 +880,7 @@ void TraceViewer::DrawVertexFetcher(Shader* shader,
|
||||
#define LOADEL(type, wo) \
|
||||
GpuSwap(xe::load<type>(vstart + \
|
||||
(attrib.fetch_instr.attributes.offset + wo) * 4), \
|
||||
fetch->endian)
|
||||
fetch.endian)
|
||||
switch (attrib.fetch_instr.attributes.data_format) {
|
||||
case xenos::VertexFormat::k_32:
|
||||
ImGui::Text("%.8X", LOADEL(uint32_t, 0));
|
||||
@@ -1062,7 +1062,7 @@ void ProgressBar(float frac, float width, float height = 0,
|
||||
if (height == 0) {
|
||||
height = ImGui::GetTextLineHeightWithSpacing();
|
||||
}
|
||||
frac = xe::saturate_unsigned(frac);
|
||||
frac = xe::saturate(frac);
|
||||
|
||||
auto pos = ImGui::GetCursorScreenPos();
|
||||
auto col = ImGui::ColorConvertFloat4ToU32(color);
|
||||
@@ -1180,7 +1180,7 @@ void TraceViewer::DrawStateUI() {
|
||||
}
|
||||
|
||||
auto enable_mode =
|
||||
static_cast<ModeControl>(regs[XE_GPU_REG_RB_MODECONTROL].u32 & 0x7);
|
||||
static_cast<ModeControl>(regs[XE_GPU_REG_RB_MODECONTROL] & 0x7);
|
||||
|
||||
switch (enable_mode) {
|
||||
case ModeControl::kIgnore:
|
||||
@@ -1202,7 +1202,7 @@ void TraceViewer::DrawStateUI() {
|
||||
break;
|
||||
}
|
||||
case ModeControl::kCopy: {
|
||||
uint32_t copy_dest_base = regs[XE_GPU_REG_RB_COPY_DEST_BASE].u32;
|
||||
uint32_t copy_dest_base = regs[XE_GPU_REG_RB_COPY_DEST_BASE];
|
||||
ImGui::Text("Copy Command %d (to %.8X)", player_->current_command_index(),
|
||||
copy_dest_base);
|
||||
break;
|
||||
@@ -1213,9 +1213,9 @@ void TraceViewer::DrawStateUI() {
|
||||
ImGui::BulletText("Viewport State:");
|
||||
if (true) {
|
||||
ImGui::TreePush((const void*)0);
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL].u32;
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL];
|
||||
if ((pa_su_sc_mode_cntl >> 16) & 1) {
|
||||
uint32_t window_offset = regs[XE_GPU_REG_PA_SC_WINDOW_OFFSET].u32;
|
||||
uint32_t window_offset = regs[XE_GPU_REG_PA_SC_WINDOW_OFFSET];
|
||||
int16_t window_offset_x = window_offset & 0x7FFF;
|
||||
int16_t window_offset_y = (window_offset >> 16) & 0x7FFF;
|
||||
if (window_offset_x & 0x4000) {
|
||||
@@ -1229,8 +1229,8 @@ void TraceViewer::DrawStateUI() {
|
||||
} else {
|
||||
ImGui::BulletText("Window Offset: disabled");
|
||||
}
|
||||
uint32_t window_scissor_tl = regs[XE_GPU_REG_PA_SC_WINDOW_SCISSOR_TL].u32;
|
||||
uint32_t window_scissor_br = regs[XE_GPU_REG_PA_SC_WINDOW_SCISSOR_BR].u32;
|
||||
uint32_t window_scissor_tl = regs[XE_GPU_REG_PA_SC_WINDOW_SCISSOR_TL];
|
||||
uint32_t window_scissor_br = regs[XE_GPU_REG_PA_SC_WINDOW_SCISSOR_BR];
|
||||
ImGui::BulletText(
|
||||
"Window Scissor: %d,%d to %d,%d (%d x %d)", window_scissor_tl & 0x7FFF,
|
||||
(window_scissor_tl >> 16) & 0x7FFF, window_scissor_br & 0x7FFF,
|
||||
@@ -1238,7 +1238,7 @@ void TraceViewer::DrawStateUI() {
|
||||
(window_scissor_br & 0x7FFF) - (window_scissor_tl & 0x7FFF),
|
||||
((window_scissor_br >> 16) & 0x7FFF) -
|
||||
((window_scissor_tl >> 16) & 0x7FFF));
|
||||
uint32_t surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO].u32;
|
||||
uint32_t surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO];
|
||||
uint32_t surface_hiz = (surface_info >> 18) & 0x3FFF;
|
||||
uint32_t surface_pitch = surface_info & 0x3FFF;
|
||||
auto surface_msaa = (surface_info >> 16) & 0x3;
|
||||
@@ -1250,7 +1250,7 @@ void TraceViewer::DrawStateUI() {
|
||||
ImGui::BulletText("Surface Pitch: %d", surface_pitch);
|
||||
ImGui::BulletText("Surface HI-Z Pitch: %d", surface_hiz);
|
||||
ImGui::BulletText("Surface MSAA: %s", kMsaaNames[surface_msaa]);
|
||||
uint32_t vte_control = regs[XE_GPU_REG_PA_CL_VTE_CNTL].u32;
|
||||
uint32_t vte_control = regs[XE_GPU_REG_PA_CL_VTE_CNTL];
|
||||
bool vport_xscale_enable = (vte_control & (1 << 0)) > 0;
|
||||
bool vport_xoffset_enable = (vte_control & (1 << 1)) > 0;
|
||||
bool vport_yscale_enable = (vte_control & (1 << 2)) > 0;
|
||||
@@ -1265,14 +1265,20 @@ void TraceViewer::DrawStateUI() {
|
||||
}
|
||||
ImGui::BulletText(
|
||||
"Viewport Offset: %f, %f, %f",
|
||||
vport_xoffset_enable ? regs[XE_GPU_REG_PA_CL_VPORT_XOFFSET].f32 : 0,
|
||||
vport_yoffset_enable ? regs[XE_GPU_REG_PA_CL_VPORT_YOFFSET].f32 : 0,
|
||||
vport_zoffset_enable ? regs[XE_GPU_REG_PA_CL_VPORT_ZOFFSET].f32 : 0);
|
||||
vport_xoffset_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_XOFFSET)
|
||||
: 0.0f,
|
||||
vport_yoffset_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_YOFFSET)
|
||||
: 0.0f,
|
||||
vport_zoffset_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_ZOFFSET)
|
||||
: 0.0f);
|
||||
ImGui::BulletText(
|
||||
"Viewport Scale: %f, %f, %f",
|
||||
vport_xscale_enable ? regs[XE_GPU_REG_PA_CL_VPORT_XSCALE].f32 : 1,
|
||||
vport_yscale_enable ? regs[XE_GPU_REG_PA_CL_VPORT_YSCALE].f32 : 1,
|
||||
vport_zscale_enable ? regs[XE_GPU_REG_PA_CL_VPORT_ZSCALE].f32 : 1);
|
||||
vport_xscale_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_XSCALE)
|
||||
: 1.0f,
|
||||
vport_yscale_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_YSCALE)
|
||||
: 1.0f,
|
||||
vport_zscale_enable ? regs.Get<float>(XE_GPU_REG_PA_CL_VPORT_ZSCALE)
|
||||
: 1.0f);
|
||||
if (!vport_xscale_enable) {
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
@@ -1282,7 +1288,7 @@ void TraceViewer::DrawStateUI() {
|
||||
((vte_control >> 8) & 0x1) ? "y/w0" : "y",
|
||||
((vte_control >> 9) & 0x1) ? "z/w0" : "z",
|
||||
((vte_control >> 10) & 0x1) ? "w0" : "1/w0");
|
||||
uint32_t clip_control = regs[XE_GPU_REG_PA_CL_CLIP_CNTL].u32;
|
||||
uint32_t clip_control = regs[XE_GPU_REG_PA_CL_CLIP_CNTL];
|
||||
bool clip_enabled = ((clip_control >> 17) & 0x1) == 0;
|
||||
bool dx_clip = ((clip_control >> 20) & 0x1) == 0x1;
|
||||
ImGui::BulletText("Clip Enabled: %s, DX Clip: %s",
|
||||
@@ -1294,11 +1300,9 @@ void TraceViewer::DrawStateUI() {
|
||||
ImGui::BulletText("Rasterizer State:");
|
||||
if (true) {
|
||||
ImGui::TreePush((const void*)0);
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL].u32;
|
||||
uint32_t pa_sc_screen_scissor_tl =
|
||||
regs[XE_GPU_REG_PA_SC_SCREEN_SCISSOR_TL].u32;
|
||||
uint32_t pa_sc_screen_scissor_br =
|
||||
regs[XE_GPU_REG_PA_SC_SCREEN_SCISSOR_BR].u32;
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL];
|
||||
uint32_t pa_sc_screen_scissor_tl = regs[XE_GPU_REG_PA_SC_SCREEN_SCISSOR_TL];
|
||||
uint32_t pa_sc_screen_scissor_br = regs[XE_GPU_REG_PA_SC_SCREEN_SCISSOR_BR];
|
||||
if (pa_sc_screen_scissor_tl != 0 && pa_sc_screen_scissor_br != 0x20002000) {
|
||||
int32_t screen_scissor_x = pa_sc_screen_scissor_tl & 0x7FFF;
|
||||
int32_t screen_scissor_y = (pa_sc_screen_scissor_tl >> 16) & 0x7FFF;
|
||||
@@ -1353,7 +1357,7 @@ void TraceViewer::DrawStateUI() {
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
|
||||
auto rb_surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO].u32;
|
||||
auto rb_surface_info = regs[XE_GPU_REG_RB_SURFACE_INFO];
|
||||
uint32_t surface_pitch = rb_surface_info & 0x3FFF;
|
||||
auto surface_msaa =
|
||||
static_cast<xenos::MsaaSamples>((rb_surface_info >> 16) & 0x3);
|
||||
@@ -1362,39 +1366,39 @@ void TraceViewer::DrawStateUI() {
|
||||
if (enable_mode != ModeControl::kDepth) {
|
||||
// Alpha testing -- ALPHAREF, ALPHAFUNC, ALPHATESTENABLE
|
||||
// if(ALPHATESTENABLE && frag_out.a [<=/ALPHAFUNC] ALPHAREF) discard;
|
||||
uint32_t color_control = regs[XE_GPU_REG_RB_COLORCONTROL].u32;
|
||||
uint32_t color_control = regs[XE_GPU_REG_RB_COLORCONTROL];
|
||||
if ((color_control & 0x8) != 0) {
|
||||
ImGui::BulletText("Alpha Test: %s %.2f",
|
||||
kCompareFuncNames[color_control & 0x7],
|
||||
regs[XE_GPU_REG_RB_ALPHA_REF].f32);
|
||||
regs.Get<float>(XE_GPU_REG_RB_ALPHA_REF));
|
||||
} else {
|
||||
ImGui::PushStyleColor(ImGuiCol_Text, kColorIgnored);
|
||||
ImGui::BulletText("Alpha Test: disabled");
|
||||
ImGui::PopStyleColor();
|
||||
}
|
||||
|
||||
auto blend_color = ImVec4(regs[XE_GPU_REG_RB_BLEND_RED].f32,
|
||||
regs[XE_GPU_REG_RB_BLEND_GREEN].f32,
|
||||
regs[XE_GPU_REG_RB_BLEND_BLUE].f32,
|
||||
regs[XE_GPU_REG_RB_BLEND_ALPHA].f32);
|
||||
auto blend_color = ImVec4(regs.Get<float>(XE_GPU_REG_RB_BLEND_RED),
|
||||
regs.Get<float>(XE_GPU_REG_RB_BLEND_GREEN),
|
||||
regs.Get<float>(XE_GPU_REG_RB_BLEND_BLUE),
|
||||
regs.Get<float>(XE_GPU_REG_RB_BLEND_ALPHA));
|
||||
ImGui::BulletText("Blend Color: (%.2f,%.2f,%.2f,%.2f)", blend_color.x,
|
||||
blend_color.y, blend_color.z, blend_color.w);
|
||||
ImGui::SameLine();
|
||||
// TODO small_height (was true) parameter was removed
|
||||
ImGui::ColorButton(nullptr, blend_color);
|
||||
|
||||
uint32_t rb_color_mask = regs[XE_GPU_REG_RB_COLOR_MASK].u32;
|
||||
uint32_t rb_color_mask = regs[XE_GPU_REG_RB_COLOR_MASK];
|
||||
uint32_t color_info[4] = {
|
||||
regs[XE_GPU_REG_RB_COLOR_INFO].u32,
|
||||
regs[XE_GPU_REG_RB_COLOR1_INFO].u32,
|
||||
regs[XE_GPU_REG_RB_COLOR2_INFO].u32,
|
||||
regs[XE_GPU_REG_RB_COLOR3_INFO].u32,
|
||||
regs[XE_GPU_REG_RB_COLOR_INFO],
|
||||
regs[XE_GPU_REG_RB_COLOR1_INFO],
|
||||
regs[XE_GPU_REG_RB_COLOR2_INFO],
|
||||
regs[XE_GPU_REG_RB_COLOR3_INFO],
|
||||
};
|
||||
uint32_t rb_blendcontrol[4] = {
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL0].u32,
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL1].u32,
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL2].u32,
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL3].u32,
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL0],
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL1],
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL2],
|
||||
regs[XE_GPU_REG_RB_BLENDCONTROL3],
|
||||
};
|
||||
ImGui::Columns(2);
|
||||
for (int i = 0; i < xe::countof(color_info); ++i) {
|
||||
@@ -1503,9 +1507,9 @@ void TraceViewer::DrawStateUI() {
|
||||
}
|
||||
|
||||
if (ImGui::CollapsingHeader("Depth/Stencil Target")) {
|
||||
auto rb_depthcontrol = regs[XE_GPU_REG_RB_DEPTHCONTROL].u32;
|
||||
auto rb_stencilrefmask = regs[XE_GPU_REG_RB_STENCILREFMASK].u32;
|
||||
auto rb_depth_info = regs[XE_GPU_REG_RB_DEPTH_INFO].u32;
|
||||
auto rb_depthcontrol = regs[XE_GPU_REG_RB_DEPTHCONTROL];
|
||||
auto rb_stencilrefmask = regs[XE_GPU_REG_RB_STENCILREFMASK];
|
||||
auto rb_depth_info = regs[XE_GPU_REG_RB_DEPTH_INFO];
|
||||
bool uses_depth =
|
||||
(rb_depthcontrol & 0x00000002) || (rb_depthcontrol & 0x00000004);
|
||||
uint32_t stencil_ref = (rb_stencilrefmask & 0xFF);
|
||||
@@ -1689,10 +1693,9 @@ void TraceViewer::DrawStateUI() {
|
||||
draw_info.index_buffer_size,
|
||||
kIndexFormatNames[int(draw_info.index_format)],
|
||||
kEndiannessNames[int(draw_info.index_endianness)]);
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL].u32;
|
||||
uint32_t pa_su_sc_mode_cntl = regs[XE_GPU_REG_PA_SU_SC_MODE_CNTL];
|
||||
if (pa_su_sc_mode_cntl & (1 << 21)) {
|
||||
uint32_t reset_index =
|
||||
regs[XE_GPU_REG_VGT_MULTI_PRIM_IB_RESET_INDX].u32;
|
||||
uint32_t reset_index = regs[XE_GPU_REG_VGT_MULTI_PRIM_IB_RESET_INDX];
|
||||
if (draw_info.index_format == xenos::IndexFormat::kInt16) {
|
||||
ImGui::Text("Reset Index: %.4X", reset_index & 0xFFFF);
|
||||
} else {
|
||||
@@ -1752,30 +1755,16 @@ void TraceViewer::DrawStateUI() {
|
||||
auto shader = command_processor->active_vertex_shader();
|
||||
if (shader) {
|
||||
for (const auto& vertex_binding : shader->vertex_bindings()) {
|
||||
int r = XE_GPU_REG_SHADER_CONSTANT_FETCH_00_0 +
|
||||
(vertex_binding.fetch_constant / 3) * 6;
|
||||
const auto group =
|
||||
reinterpret_cast<xe_gpu_fetch_group_t*>(®s.values[r]);
|
||||
const xe_gpu_vertex_fetch_t* fetch = nullptr;
|
||||
switch (vertex_binding.fetch_constant % 3) {
|
||||
case 0:
|
||||
fetch = &group->vertex_fetch_0;
|
||||
break;
|
||||
case 1:
|
||||
fetch = &group->vertex_fetch_1;
|
||||
break;
|
||||
case 2:
|
||||
fetch = &group->vertex_fetch_2;
|
||||
break;
|
||||
}
|
||||
assert_true(fetch->endian == xenos::Endian::k8in32);
|
||||
xe_gpu_vertex_fetch_t fetch =
|
||||
regs.GetVertexFetch(vertex_binding.fetch_constant);
|
||||
assert_true(fetch.endian == xenos::Endian::k8in32);
|
||||
char tree_root_id[32];
|
||||
sprintf(tree_root_id, "#vertices_root_%d",
|
||||
vertex_binding.fetch_constant);
|
||||
if (ImGui::TreeNode(tree_root_id, "vf%d: 0x%.8X (%db), %s",
|
||||
vertex_binding.fetch_constant, fetch->address << 2,
|
||||
fetch->size * 4,
|
||||
kEndiannessNames[int(fetch->endian)])) {
|
||||
vertex_binding.fetch_constant, fetch.address << 2,
|
||||
fetch.size * 4,
|
||||
kEndiannessNames[int(fetch.endian)])) {
|
||||
ImGui::BeginChild("#vertices", ImVec2(0, 300));
|
||||
DrawVertexFetcher(shader, vertex_binding, fetch);
|
||||
ImGui::EndChild();
|
||||
@@ -1823,7 +1812,7 @@ void TraceViewer::DrawStateUI() {
|
||||
ImGui::Text("f%02d_%d", (i - XE_GPU_REG_SHADER_CONSTANT_FETCH_00_0) / 6,
|
||||
(i - XE_GPU_REG_SHADER_CONSTANT_FETCH_00_0) % 6);
|
||||
ImGui::NextColumn();
|
||||
ImGui::Text("%.8X", regs[i].u32);
|
||||
ImGui::Text("%.8X", regs[i]);
|
||||
ImGui::NextColumn();
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
@@ -1834,8 +1823,9 @@ void TraceViewer::DrawStateUI() {
|
||||
i <= XE_GPU_REG_SHADER_CONSTANT_511_X; i += 4) {
|
||||
ImGui::Text("c%d", (i - XE_GPU_REG_SHADER_CONSTANT_000_X) / 4);
|
||||
ImGui::NextColumn();
|
||||
ImGui::Text("%f, %f, %f, %f", regs[i + 0].f32, regs[i + 1].f32,
|
||||
regs[i + 2].f32, regs[i + 3].f32);
|
||||
ImGui::Text("%f, %f, %f, %f", regs.Get<float>(i + 0),
|
||||
regs.Get<float>(i + 1), regs.Get<float>(i + 2),
|
||||
regs.Get<float>(i + 3));
|
||||
ImGui::NextColumn();
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
@@ -1848,7 +1838,7 @@ void TraceViewer::DrawStateUI() {
|
||||
(i - XE_GPU_REG_SHADER_CONSTANT_BOOL_000_031) * 32,
|
||||
(i - XE_GPU_REG_SHADER_CONSTANT_BOOL_000_031) * 32 + 31);
|
||||
ImGui::NextColumn();
|
||||
ImGui::Text("%.8X", regs[i].u32);
|
||||
ImGui::Text("%.8X", regs[i]);
|
||||
ImGui::NextColumn();
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
@@ -1859,7 +1849,7 @@ void TraceViewer::DrawStateUI() {
|
||||
i <= XE_GPU_REG_SHADER_CONSTANT_LOOP_31; ++i) {
|
||||
ImGui::Text("l%d", i - XE_GPU_REG_SHADER_CONSTANT_LOOP_00);
|
||||
ImGui::NextColumn();
|
||||
ImGui::Text("%.8X", regs[i].u32);
|
||||
ImGui::Text("%.8X", regs[i]);
|
||||
ImGui::NextColumn();
|
||||
}
|
||||
ImGui::Columns(1);
|
||||
|
||||
Reference in New Issue
Block a user