mirror of
https://github.com/shadps4-emu/shadPS4.git
synced 2025-04-22 04:24:44 +00:00
Devtools: pm4 viewer - use spec op name
avoid some allocations
This commit is contained in:
parent
4f76aa843d
commit
c55dac0e7b
6 changed files with 252 additions and 9 deletions
|
@ -341,6 +341,7 @@ set(MISC_LIBS src/core/libraries/screenshot/screenshot.cpp
|
|||
set(DEV_TOOLS src/core/devtools/layer.cpp
|
||||
src/core/devtools/layer.h
|
||||
src/core/devtools/gcn/gcn_context_regs.cpp
|
||||
src/core/devtools/gcn/gcn_op_names.cpp
|
||||
src/core/devtools/gcn/gcn_shader_regs.cpp
|
||||
src/core/devtools/widget/cmd_list.cpp
|
||||
src/core/devtools/widget/cmd_list.h
|
||||
|
|
117
externals/gcn/include/gcn/si_ci_vi_merged_pm4_it_opcodes.h
vendored
Normal file
117
externals/gcn/include/gcn/si_ci_vi_merged_pm4_it_opcodes.h
vendored
Normal file
|
@ -0,0 +1,117 @@
|
|||
/*
|
||||
***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2015-2021 Advanced Micro Devices, Inc. All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in all
|
||||
* copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
* SOFTWARE.
|
||||
*
|
||||
**********************************************************************************************************************/
|
||||
|
||||
#ifndef PM4_IT_OPCODES_H
|
||||
#define PM4_IT_OPCODES_H
|
||||
|
||||
enum IT_OpCodeType {
|
||||
IT_NOP = 0x10,
|
||||
IT_SET_BASE = 0x11,
|
||||
IT_CLEAR_STATE = 0x12,
|
||||
IT_INDEX_BUFFER_SIZE = 0x13,
|
||||
IT_DISPATCH_DIRECT = 0x15,
|
||||
IT_DISPATCH_INDIRECT = 0x16,
|
||||
IT_ATOMIC_GDS = 0x1D,
|
||||
IT_ATOMIC = 0x1E,
|
||||
IT_OCCLUSION_QUERY = 0x1F,
|
||||
IT_SET_PREDICATION = 0x20,
|
||||
IT_REG_RMW = 0x21,
|
||||
IT_COND_EXEC = 0x22,
|
||||
IT_PRED_EXEC = 0x23,
|
||||
IT_DRAW_INDIRECT = 0x24,
|
||||
IT_DRAW_INDEX_INDIRECT = 0x25,
|
||||
IT_INDEX_BASE = 0x26,
|
||||
IT_DRAW_INDEX_2 = 0x27,
|
||||
IT_CONTEXT_CONTROL = 0x28,
|
||||
IT_INDEX_TYPE = 0x2A,
|
||||
IT_DRAW_INDIRECT_MULTI = 0x2C,
|
||||
IT_DRAW_INDEX_AUTO = 0x2D,
|
||||
IT_NUM_INSTANCES = 0x2F,
|
||||
IT_DRAW_INDEX_MULTI_AUTO = 0x30,
|
||||
IT_INDIRECT_BUFFER_CNST = 0x33,
|
||||
IT_STRMOUT_BUFFER_UPDATE = 0x34,
|
||||
IT_DRAW_INDEX_OFFSET_2 = 0x35,
|
||||
IT_WRITE_DATA = 0x37,
|
||||
IT_DRAW_INDEX_INDIRECT_MULTI = 0x38,
|
||||
IT_MEM_SEMAPHORE = 0x39,
|
||||
IT_COPY_DW__SI__CI = 0x3B,
|
||||
IT_WAIT_REG_MEM = 0x3C,
|
||||
IT_INDIRECT_BUFFER = 0x3F,
|
||||
IT_COND_INDIRECT_BUFFER = 0x3F,
|
||||
IT_COPY_DATA = 0x40,
|
||||
IT_CP_DMA = 0x41,
|
||||
IT_PFP_SYNC_ME = 0x42,
|
||||
IT_SURFACE_SYNC = 0x43,
|
||||
IT_COND_WRITE = 0x45,
|
||||
IT_EVENT_WRITE = 0x46,
|
||||
IT_EVENT_WRITE_EOP = 0x47,
|
||||
IT_EVENT_WRITE_EOS = 0x48,
|
||||
IT_PREAMBLE_CNTL = 0x4A,
|
||||
IT_CONTEXT_REG_RMW = 0x51,
|
||||
IT_LOAD_SH_REG = 0x5F,
|
||||
IT_LOAD_CONFIG_REG = 0x60,
|
||||
IT_LOAD_CONTEXT_REG = 0x61,
|
||||
IT_SET_CONFIG_REG = 0x68,
|
||||
IT_SET_CONTEXT_REG = 0x69,
|
||||
IT_SET_CONTEXT_REG_INDIRECT = 0x73,
|
||||
IT_SET_SH_REG = 0x76,
|
||||
IT_SET_SH_REG_OFFSET = 0x77,
|
||||
IT_SCRATCH_RAM_WRITE = 0x7D,
|
||||
IT_SCRATCH_RAM_READ = 0x7E,
|
||||
IT_LOAD_CONST_RAM = 0x80,
|
||||
IT_WRITE_CONST_RAM = 0x81,
|
||||
IT_DUMP_CONST_RAM = 0x83,
|
||||
IT_INCREMENT_CE_COUNTER = 0x84,
|
||||
IT_INCREMENT_DE_COUNTER = 0x85,
|
||||
IT_WAIT_ON_CE_COUNTER = 0x86,
|
||||
IT_WAIT_ON_DE_COUNTER__SI = 0x87,
|
||||
IT_WAIT_ON_DE_COUNTER_DIFF = 0x88,
|
||||
IT_SWITCH_BUFFER = 0x8B,
|
||||
IT_DRAW_PREAMBLE__CI__VI = 0x36,
|
||||
IT_RELEASE_MEM__CI__VI = 0x49,
|
||||
IT_DMA_DATA__CI__VI = 0x50,
|
||||
IT_ACQUIRE_MEM__CI__VI = 0x58,
|
||||
IT_REWIND__CI__VI = 0x59,
|
||||
IT_LOAD_UCONFIG_REG__CI__VI = 0x5E,
|
||||
IT_SET_QUEUE_REG__CI__VI = 0x78,
|
||||
IT_SET_UCONFIG_REG__CI__VI = 0x79,
|
||||
IT_INDEX_ATTRIBUTES_INDIRECT__CI__VI = 0x91,
|
||||
IT_SET_SH_REG_INDEX__CI__VI = 0x9B,
|
||||
IT_SET_RESOURCES__CI__VI = 0xA0,
|
||||
IT_MAP_PROCESS__CI__VI = 0xA1,
|
||||
IT_MAP_QUEUES__CI__VI = 0xA2,
|
||||
IT_UNMAP_QUEUES__CI__VI = 0xA3,
|
||||
IT_QUERY_STATUS__CI__VI = 0xA4,
|
||||
IT_RUN_LIST__CI__VI = 0xA5,
|
||||
IT_LOAD_SH_REG_INDEX__VI = 0x63,
|
||||
IT_LOAD_CONTEXT_REG_INDEX__VI = 0x9F,
|
||||
IT_DUMP_CONST_RAM_OFFSET__VI = 0x9E,
|
||||
};
|
||||
|
||||
#define PM4_TYPE_0 0
|
||||
#define PM4_TYPE_2 2
|
||||
#define PM4_TYPE_3 3
|
||||
|
||||
#endif
|
|
@ -1,6 +1,8 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
// Credits to https://github.com/psucien/tlg-emu-tools/
|
||||
|
||||
#include "common/types.h"
|
||||
#include "gcn/si_ci_vi_merged_offset.h"
|
||||
|
||||
|
|
118
src/core/devtools/gcn/gcn_op_names.cpp
Normal file
118
src/core/devtools/gcn/gcn_op_names.cpp
Normal file
|
@ -0,0 +1,118 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
// Credits to https://github.com/psucien/tlg-emu-tools/
|
||||
|
||||
#include "common/types.h"
|
||||
#include "gcn/si_ci_vi_merged_pm4_it_opcodes.h"
|
||||
|
||||
namespace Core::Devtools::Gcn {
|
||||
const char* GetOpCodeName(u32 op) {
|
||||
switch (op) {
|
||||
case IT_NOP:
|
||||
return "IT_NOP";
|
||||
case IT_SET_BASE:
|
||||
return "IT_SET_BASE";
|
||||
case IT_INDEX_BUFFER_SIZE:
|
||||
return "IT_INDEX_BUFFER_SIZE";
|
||||
case IT_SET_PREDICATION:
|
||||
return "IT_SET_PREDICATION";
|
||||
case IT_COND_EXEC:
|
||||
return "IT_COND_EXEC";
|
||||
case IT_INDEX_BASE:
|
||||
return "IT_INDEX_BASE";
|
||||
case IT_INDEX_TYPE:
|
||||
return "IT_INDEX_TYPE";
|
||||
case IT_NUM_INSTANCES:
|
||||
return "IT_NUM_INSTANCES";
|
||||
case IT_STRMOUT_BUFFER_UPDATE:
|
||||
return "IT_STRMOUT_BUFFER_UPDATE";
|
||||
case IT_WRITE_DATA:
|
||||
return "IT_WRITE_DATA";
|
||||
case IT_MEM_SEMAPHORE:
|
||||
return "IT_MEM_SEMAPHORE";
|
||||
case IT_WAIT_REG_MEM:
|
||||
return "IT_WAIT_REG_MEM";
|
||||
case IT_INDIRECT_BUFFER:
|
||||
return "IT_INDIRECT_BUFFER";
|
||||
case IT_PFP_SYNC_ME:
|
||||
return "IT_PFP_SYNC_ME";
|
||||
case IT_EVENT_WRITE:
|
||||
return "IT_EVENT_WRITE";
|
||||
case IT_EVENT_WRITE_EOP:
|
||||
return "IT_EVENT_WRITE_EOP";
|
||||
case IT_EVENT_WRITE_EOS:
|
||||
return "IT_EVENT_WRITE_EOS";
|
||||
case IT_DMA_DATA__CI__VI:
|
||||
return "IT_DMA_DATA";
|
||||
case IT_ACQUIRE_MEM__CI__VI:
|
||||
return "IT_ACQUIRE_MEM";
|
||||
case IT_REWIND__CI__VI:
|
||||
return "IT_REWIND";
|
||||
case IT_SET_CONFIG_REG:
|
||||
return "IT_SET_CONFIG_REG";
|
||||
case IT_SET_CONTEXT_REG:
|
||||
return "IT_SET_CONTEXT_REG";
|
||||
case IT_SET_SH_REG:
|
||||
return "IT_SET_SH_REG";
|
||||
case IT_SET_UCONFIG_REG__CI__VI:
|
||||
return "IT_SET_UCONFIG_REG";
|
||||
case IT_INCREMENT_DE_COUNTER:
|
||||
return "IT_INCREMENT_DE_COUNTER";
|
||||
case IT_WAIT_ON_CE_COUNTER:
|
||||
return "IT_WAIT_ON_CE_COUNTER";
|
||||
case IT_DISPATCH_DIRECT:
|
||||
return "IT_DISPATCH_DIRECT";
|
||||
case IT_DISPATCH_INDIRECT:
|
||||
return "IT_DISPATCH_INDIRECT";
|
||||
case IT_OCCLUSION_QUERY:
|
||||
return "IT_OCCLUSION_QUERY";
|
||||
case IT_REG_RMW:
|
||||
return "IT_REG_RMW";
|
||||
case IT_PRED_EXEC:
|
||||
return "IT_PRED_EXEC";
|
||||
case IT_DRAW_INDIRECT:
|
||||
return "IT_DRAW_INDIRECT";
|
||||
case IT_DRAW_INDEX_INDIRECT:
|
||||
return "IT_DRAW_INDEX_INDIRECT";
|
||||
case IT_DRAW_INDEX_2:
|
||||
return "IT_DRAW_INDEX_2";
|
||||
case IT_DRAW_INDEX_OFFSET_2:
|
||||
return "IT_DRAW_INDEX_OFFSET_2";
|
||||
case IT_CONTEXT_CONTROL:
|
||||
return "IT_CONTEXT_CONTROL";
|
||||
case IT_DRAW_INDIRECT_MULTI:
|
||||
return "IT_DRAW_INDIRECT_MULTI";
|
||||
case IT_DRAW_INDEX_AUTO:
|
||||
return "IT_DRAW_INDEX_AUTO";
|
||||
case IT_DRAW_INDEX_MULTI_AUTO:
|
||||
return "IT_DRAW_INDEX_MULTI_AUTO";
|
||||
case IT_COPY_DATA:
|
||||
return "IT_COPY_DATA";
|
||||
case IT_CP_DMA:
|
||||
return "IT_CP_DMA";
|
||||
case IT_SURFACE_SYNC:
|
||||
return "IT_SURFACE_SYNC";
|
||||
case IT_COND_WRITE:
|
||||
return "IT_COND_WRITE";
|
||||
case IT_RELEASE_MEM__CI__VI:
|
||||
return "IT_RELEASE_MEM";
|
||||
case IT_WRITE_CONST_RAM:
|
||||
return "IT_WRITE_CONST_RAM"; // used in CCB
|
||||
case IT_WAIT_ON_DE_COUNTER_DIFF:
|
||||
return "IT_WAIT_ON_DE_COUNTER_DIFF"; // used in CCB
|
||||
case IT_DUMP_CONST_RAM:
|
||||
return "IT_DUMP_CONST_RAM"; // used in CCB
|
||||
case IT_INCREMENT_CE_COUNTER:
|
||||
return "IT_INCREMENT_CE_COUNTER"; // used in CCB
|
||||
case IT_CLEAR_STATE:
|
||||
return "IT_CLEAR_STATE";
|
||||
case 0xFF:
|
||||
return "<STUB (TMP)>";
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return "<UNK>";
|
||||
}
|
||||
} // namespace Core::Devtools::Gcn
|
|
@ -1,6 +1,8 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2024 shadPS4 Emulator Project
|
||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
// Credits to https://github.com/psucien/tlg-emu-tools/
|
||||
|
||||
#include "common/types.h"
|
||||
#include "gcn/si_ci_vi_merged_offset.h"
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@ namespace Core::Devtools::Gcn {
|
|||
|
||||
const char* GetContextRegName(u32 reg_offset);
|
||||
const char* GetShaderRegName(u32 reg_offset);
|
||||
const char* GetOpCodeName(u32 op);
|
||||
|
||||
} // namespace Core::Devtools::Gcn
|
||||
|
||||
|
@ -1098,15 +1099,17 @@ CmdListViewer::CmdListViewer(FrameDumpViewer* parent, const std::vector<u32>& cm
|
|||
}
|
||||
|
||||
void CmdListViewer::Draw() {
|
||||
std::string queue_name = vqid > 254 ? "GFX" : "ASC";
|
||||
if (BeginChild("cmd_queue", {})) {
|
||||
char queue_name[32]{};
|
||||
if (vqid < 254) {
|
||||
std::snprintf(queue_name, sizeof(queue_name), "%s %d", vqid > 254 ? "GFX" : "ASC",
|
||||
vqid);
|
||||
} else {
|
||||
std::snprintf(queue_name, sizeof(queue_name), "%s", vqid > 254 ? "GFX" : "ASC");
|
||||
}
|
||||
|
||||
if (vqid < 254) {
|
||||
queue_name += std::to_string(vqid);
|
||||
}
|
||||
|
||||
if (BeginChild(queue_name.c_str())) {
|
||||
Text("queue : %s", queue_name.c_str());
|
||||
Text("base addr: %08lX", cmdb_addr);
|
||||
Text("queue : %s", queue_name);
|
||||
Text("base addr: %08llX", cmdb_addr);
|
||||
SameLine();
|
||||
if (SmallButton(">")) {
|
||||
parent->cmdb_view.Open ^= true;
|
||||
|
@ -1141,7 +1144,7 @@ void CmdListViewer::Draw() {
|
|||
static char header_name[128];
|
||||
sprintf(header_name, "%08llX: %s",
|
||||
cmdb_addr + batches[batch_id].start_addr + processed_size,
|
||||
enum_name(op).data());
|
||||
Gcn::GetOpCodeName((u32)op));
|
||||
|
||||
if (TreeNode(header_name)) {
|
||||
bool just_opened = IsItemToggledOpen();
|
||||
|
|
Loading…
Add table
Reference in a new issue