indirect buffers

This commit is contained in:
InoriRus
2022-01-24 15:56:13 +10:00
parent d90c9113b2
commit 8651c18423
4 changed files with 671 additions and 689 deletions
@@ -15,6 +15,8 @@ struct VsStageRegisters;
KYTY_SUBSYSTEM_DEFINE(Graphics); KYTY_SUBSYSTEM_DEFINE(Graphics);
void GraphicsDbgDumpDcb(const char* type, uint32_t num_dw, uint32_t* cmd_buffer);
int KYTY_SYSV_ABI GraphicsSetVsShader(uint32_t* cmd, uint64_t size, const VsStageRegisters* vs_regs, uint32_t shader_modifier); int KYTY_SYSV_ABI GraphicsSetVsShader(uint32_t* cmd, uint64_t size, const VsStageRegisters* vs_regs, uint32_t shader_modifier);
int KYTY_SYSV_ABI GraphicsSetPsShader350(uint32_t* cmd, uint64_t size, const uint32_t* ps_regs); int KYTY_SYSV_ABI GraphicsSetPsShader350(uint32_t* cmd, uint64_t size, const uint32_t* ps_regs);
int KYTY_SYSV_ABI GraphicsSetCsShaderWithModifier(uint32_t* cmd, uint64_t size, const uint32_t* cs_regs, uint32_t shader_modifier); int KYTY_SYSV_ABI GraphicsSetCsShaderWithModifier(uint32_t* cmd, uint64_t size, const uint32_t* cs_regs, uint32_t shader_modifier);
+8 -6
View File
@@ -18,6 +18,8 @@
#include "Emulator/Libs/Errno.h" #include "Emulator/Libs/Errno.h"
#include "Emulator/Libs/Libs.h" #include "Emulator/Libs/Libs.h"
#include <atomic>
#ifdef KYTY_EMU_ENABLED #ifdef KYTY_EMU_ENABLED
namespace Kyty::Libs::Graphics { namespace Kyty::Libs::Graphics {
@@ -250,11 +252,11 @@ uint32_t KYTY_SYSV_ABI GraphicsDispatchInitDefaultHardwareState(uint32_t* cmd, u
return 2; return 2;
} }
static void dbg_dump_dcb(const char* type, uint32_t num_dw, uint32_t* cmd_buffer) void GraphicsDbgDumpDcb(const char* type, uint32_t num_dw, uint32_t* cmd_buffer)
{ {
EXIT_IF(type == nullptr); EXIT_IF(type == nullptr);
static int id = 0; static std::atomic_int id = 0;
if (Config::CommandBufferDumpEnabled() && num_dw > 0 && cmd_buffer != nullptr) if (Config::CommandBufferDumpEnabled() && num_dw > 0 && cmd_buffer != nullptr)
{ {
@@ -285,8 +287,8 @@ int KYTY_SYSV_ABI GraphicsSubmitCommandBuffers(uint32_t count, void* dcb_gpu_add
auto* ccb = (ccb_gpu_addrs == nullptr ? nullptr : static_cast<uint32_t*>(ccb_gpu_addrs[0])); auto* ccb = (ccb_gpu_addrs == nullptr ? nullptr : static_cast<uint32_t*>(ccb_gpu_addrs[0]));
auto ccb_size = (ccb_sizes_in_bytes == nullptr ? 0 : ccb_sizes_in_bytes[0] / 4); auto ccb_size = (ccb_sizes_in_bytes == nullptr ? 0 : ccb_sizes_in_bytes[0] / 4);
dbg_dump_dcb("d", dcb_size, dcb); GraphicsDbgDumpDcb("d", dcb_size, dcb);
dbg_dump_dcb("c", ccb_size, ccb); GraphicsDbgDumpDcb("c", ccb_size, ccb);
GraphicsRunSubmit(dcb, dcb_size, ccb, ccb_size); GraphicsRunSubmit(dcb, dcb_size, ccb, ccb_size);
@@ -306,8 +308,8 @@ int KYTY_SYSV_ABI GraphicsSubmitAndFlipCommandBuffers(uint32_t count, void* dcb_
auto* ccb = (ccb_gpu_addrs == nullptr ? nullptr : static_cast<uint32_t*>(ccb_gpu_addrs[0])); auto* ccb = (ccb_gpu_addrs == nullptr ? nullptr : static_cast<uint32_t*>(ccb_gpu_addrs[0]));
auto ccb_size = (ccb_sizes_in_bytes == nullptr ? 0 : ccb_sizes_in_bytes[0] / 4); auto ccb_size = (ccb_sizes_in_bytes == nullptr ? 0 : ccb_sizes_in_bytes[0] / 4);
dbg_dump_dcb("d", dcb_size, dcb); GraphicsDbgDumpDcb("d", dcb_size, dcb);
dbg_dump_dcb("c", ccb_size, ccb); GraphicsDbgDumpDcb("c", ccb_size, ccb);
printf("\t handle = %" PRId32 "\n", handle); printf("\t handle = %" PRId32 "\n", handle);
printf("\t index = %" PRId32 "\n", index); printf("\t index = %" PRId32 "\n", index);
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -136,7 +136,7 @@ void DumpPm4PacketStream(Core::File* file, uint32_t* cmd_buffer, uint32_t start_
} }
} else } else
{ {
printf("?????\n"); file->Printf("?????\n");
} }
cmd += len; cmd += len;