gnm_driver: various fixes
This commit is contained in:
parent
72ea0be9ff
commit
4746f514ff
|
@ -238,7 +238,7 @@ u32 PS4_SYSV_ABI sceGnmDispatchInitDefaultHardwareState(u32* cmdbuf, u32 size) {
|
||||||
cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0xef);
|
cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0xef);
|
||||||
cmdbuf = WriteBody(cmdbuf, 0xau, 0u);
|
cmdbuf = WriteBody(cmdbuf, 0xau, 0u);
|
||||||
} else {
|
} else {
|
||||||
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0x100);
|
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0xff);
|
||||||
}
|
}
|
||||||
return 0x100; // it is a size, not a retcode
|
return 0x100; // it is a size, not a retcode
|
||||||
}
|
}
|
||||||
|
@ -347,7 +347,7 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState200(u32* cmdbuf, u32 size) {
|
||||||
if constexpr (g_fair_hw_init) {
|
if constexpr (g_fair_hw_init) {
|
||||||
ASSERT_MSG(0, "Not implemented");
|
ASSERT_MSG(0, "Not implemented");
|
||||||
} else {
|
} else {
|
||||||
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0x100);
|
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0xff);
|
||||||
}
|
}
|
||||||
return 0x100; // it is a size, not a retcode
|
return 0x100; // it is a size, not a retcode
|
||||||
}
|
}
|
||||||
|
@ -361,7 +361,7 @@ u32 PS4_SYSV_ABI sceGnmDrawInitDefaultHardwareState350(u32* cmdbuf, u32 size) {
|
||||||
if constexpr (g_fair_hw_init) {
|
if constexpr (g_fair_hw_init) {
|
||||||
ASSERT_MSG(0, "Not implemented");
|
ASSERT_MSG(0, "Not implemented");
|
||||||
} else {
|
} else {
|
||||||
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0x100);
|
cmdbuf = cmdbuf = WriteHeader<PM4ItOpcode::Nop>(cmdbuf, 0xff);
|
||||||
}
|
}
|
||||||
return 0x100; // it is a size, not a retcode
|
return 0x100; // it is a size, not a retcode
|
||||||
}
|
}
|
||||||
|
@ -591,9 +591,9 @@ s32 PS4_SYSV_ABI sceGnmInsertPopMarker(u32* cmdbuf, u32 size) {
|
||||||
LOG_TRACE(Lib_GnmDriver, "called");
|
LOG_TRACE(Lib_GnmDriver, "called");
|
||||||
|
|
||||||
if (cmdbuf && (size == 6)) {
|
if (cmdbuf && (size == 6)) {
|
||||||
cmdbuf = WritePacket<PM4ItOpcode::Nop>(
|
cmdbuf =
|
||||||
cmdbuf, PM4ShaderType::ShaderGraphics,
|
WritePacket<PM4ItOpcode::Nop>(cmdbuf, PM4ShaderType::ShaderGraphics,
|
||||||
static_cast<u32>(PM4CmdNop::PayloadType::DebugMarkerPop), 0u, 0u, 0u, 0u);
|
PM4CmdNop::PayloadType::DebugMarkerPop, 0u, 0u, 0u, 0u);
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -614,7 +614,7 @@ s32 PS4_SYSV_ABI sceGnmInsertPushMarker(u32* cmdbuf, u32 size, const char* marke
|
||||||
auto* nop = reinterpret_cast<PM4CmdNop*>(cmdbuf);
|
auto* nop = reinterpret_cast<PM4CmdNop*>(cmdbuf);
|
||||||
nop->header =
|
nop->header =
|
||||||
PM4Type3Header{PM4ItOpcode::Nop, packet_size, PM4ShaderType::ShaderGraphics};
|
PM4Type3Header{PM4ItOpcode::Nop, packet_size, PM4ShaderType::ShaderGraphics};
|
||||||
nop->data_block[0] = static_cast<u32>(PM4CmdNop::PayloadType::DebugMarkerPush);
|
nop->data_block[0] = PM4CmdNop::PayloadType::DebugMarkerPush;
|
||||||
const auto marker_len = len + 1;
|
const auto marker_len = len + 1;
|
||||||
std::memcpy(&nop->data_block[1], marker, marker_len);
|
std::memcpy(&nop->data_block[1], marker, marker_len);
|
||||||
std::memset(reinterpret_cast<u8*>(&nop->data_block[1]) + marker_len, 0,
|
std::memset(reinterpret_cast<u8*>(&nop->data_block[1]) + marker_len, 0,
|
||||||
|
@ -650,15 +650,15 @@ s32 PS4_SYSV_ABI sceGnmInsertWaitFlipDone(u32* cmdbuf, u32 size, s32 vo_handle,
|
||||||
uintptr_t label_addr{};
|
uintptr_t label_addr{};
|
||||||
VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr);
|
VideoOut::sceVideoOutGetBufferLabelAddress(vo_handle, &label_addr);
|
||||||
|
|
||||||
auto* write_reg_mem = reinterpret_cast<PM4CmdWaitRegMem*>(cmdbuf);
|
auto* wait_reg_mem = reinterpret_cast<PM4CmdWaitRegMem*>(cmdbuf);
|
||||||
write_reg_mem->header = PM4Type3Header{PM4ItOpcode::WaitRegMem, 5};
|
wait_reg_mem->header = PM4Type3Header{PM4ItOpcode::WaitRegMem, 5};
|
||||||
write_reg_mem->function.Assign(3u);
|
wait_reg_mem->function.Assign(3u);
|
||||||
write_reg_mem->mem_space.Assign(1u);
|
wait_reg_mem->mem_space.Assign(1u);
|
||||||
*reinterpret_cast<uintptr_t*>(&write_reg_mem->poll_addr_lo) =
|
*reinterpret_cast<uintptr_t*>(&wait_reg_mem->poll_addr_lo) =
|
||||||
(label_addr + buf_idx * sizeof(uintptr_t)) & 0xffff'fffcu;
|
(label_addr + buf_idx * sizeof(uintptr_t)) & 0xffff'fffcu;
|
||||||
write_reg_mem->ref = 0u;
|
wait_reg_mem->ref = 0u;
|
||||||
write_reg_mem->mask = 0xffff'ffffu;
|
wait_reg_mem->mask = 0xffff'ffffu;
|
||||||
write_reg_mem->poll_interval = 10u;
|
wait_reg_mem->poll_interval = 10u;
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1311,7 +1311,7 @@ s32 PS4_SYSV_ABI sceGnmSubmitCommandBuffers(u32 count, void* dcb_gpu_addrs[],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
liverpool->ProcessCmdList(reinterpret_cast<u32*>(dcb_sizes_in_bytes[0]), dcb_sizes_in_bytes[0]);
|
liverpool->ProcessCmdList(reinterpret_cast<u32*>(dcb_gpu_addrs[0]), dcb_sizes_in_bytes[0]);
|
||||||
|
|
||||||
return ORBIS_OK;
|
return ORBIS_OK;
|
||||||
}
|
}
|
||||||
|
|
|
@ -201,13 +201,18 @@ struct PM4CmdNop {
|
||||||
PM4Type3Header header;
|
PM4Type3Header header;
|
||||||
u32 data_block[0];
|
u32 data_block[0];
|
||||||
|
|
||||||
enum class PayloadType : u32 {
|
enum PayloadType : u32 {
|
||||||
DebugMarkerPush = 0x68750001, ///< Begin of GPU event scope
|
DebugMarkerPush = 0x68750001u, ///< Begin of GPU event scope
|
||||||
DebugMarkerPop = 0x68750002, ///< End of GPU event scope
|
DebugMarkerPop = 0x68750002u, ///< End of GPU event scope
|
||||||
SetVsharpInUdata = 0x68750004, ///< Indicates that V# will be set in the next packet
|
SetVsharpInUdata = 0x68750004u, ///< Indicates that V# will be set in the next packet
|
||||||
SetTsharpInUdata = 0x68750005, ///< Indicates that T# will be set in the next packet
|
SetTsharpInUdata = 0x68750005u, ///< Indicates that T# will be set in the next packet
|
||||||
SetSsharpInUdata = 0x68750006, ///< Indicates that S# will be set in the next packet
|
SetSsharpInUdata = 0x68750006u, ///< Indicates that S# will be set in the next packet
|
||||||
DebugColorMarkerPush = 0x6875000e, ///< Begin of GPU event scope with color
|
DebugColorMarkerPush = 0x6875000eu, ///< Begin of GPU event scope with color
|
||||||
|
PatchedFlip = 0x68750776u, ///< Patched flip marker
|
||||||
|
PrepareFlip = 0x68750777u, ///< Flip marker
|
||||||
|
PrepareFlipLabel = 0x68750778u, ///< Flip marker with label address
|
||||||
|
PrepareFlipInterrupt = 0x68750780u, ///< Flip marker with interrupt
|
||||||
|
PrepareFlipInterruptLabel = 0x68750781u, ///< Flip marker with interrupt and label
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue