mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-29 16:51:20 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e500333bcd | ||
|
|
4498d75b9b | ||
|
|
1df53b169f |
No files matched your search
@@ -3804,8 +3804,8 @@ int KYTY_SYSV_ABI KernelBatchMap2(KernelBatchMapEntry* entries, int num_entries,
|
|||||||
LOGF("\t [%d] start = %p, offset = 0x%016" PRIx64 ", length = 0x%016" PRIx64
|
LOGF("\t [%d] start = %p, offset = 0x%016" PRIx64 ", length = 0x%016" PRIx64
|
||||||
", prot = 0x%02" PRIx32 ", type = 0x%02" PRIx32 ", op = %d\n",
|
", prot = 0x%02" PRIx32 ", type = 0x%02" PRIx32 ", op = %d\n",
|
||||||
i, entry->start, entry->offset, entry->length,
|
i, entry->start, entry->offset, entry->length,
|
||||||
static_cast<uint32_t>(static_cast<unsigned char>(entry->protection)),
|
static_cast<uint32_t>(entry->protection), static_cast<uint32_t>(entry->type),
|
||||||
static_cast<uint32_t>(static_cast<unsigned char>(entry->type)), entry->operation);
|
entry->operation);
|
||||||
|
|
||||||
if (entry->length == 0 || entry->operation < MAP_OP_MAP_DIRECT ||
|
if (entry->length == 0 || entry->operation < MAP_OP_MAP_DIRECT ||
|
||||||
entry->operation > MAP_OP_TYPE_PROTECT) {
|
entry->operation > MAP_OP_TYPE_PROTECT) {
|
||||||
|
|||||||
+7
-7
@@ -47,13 +47,13 @@ struct VirtualQueryInfo {
|
|||||||
static_assert(sizeof(VirtualQueryInfo) == 72, "VirtualQueryInfo struct size is incorrect");
|
static_assert(sizeof(VirtualQueryInfo) == 72, "VirtualQueryInfo struct size is incorrect");
|
||||||
|
|
||||||
struct KernelBatchMapEntry {
|
struct KernelBatchMapEntry {
|
||||||
void* start;
|
void* start;
|
||||||
uint64_t offset;
|
uint64_t offset;
|
||||||
uint64_t length;
|
uint64_t length;
|
||||||
char protection;
|
unsigned char protection;
|
||||||
char type;
|
unsigned char type;
|
||||||
int16_t reserved;
|
int16_t reserved;
|
||||||
int32_t operation;
|
int32_t operation;
|
||||||
};
|
};
|
||||||
|
|
||||||
static_assert(sizeof(KernelBatchMapEntry) == 32, "KernelBatchMapEntry struct size is incorrect");
|
static_assert(sizeof(KernelBatchMapEntry) == 32, "KernelBatchMapEntry struct size is incorrect");
|
||||||
|
|||||||
+9
-2
@@ -25,6 +25,7 @@
|
|||||||
#include "libs/libs.h"
|
#include "libs/libs.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
#include <array>
|
||||||
#include <atomic>
|
#include <atomic>
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
@@ -142,8 +143,8 @@ struct RegisterDefaultsStorage {
|
|||||||
|
|
||||||
#include <fmt/format.h>
|
#include <fmt/format.h>
|
||||||
|
|
||||||
static constexpr uint32_t GRAPHICS_REGISTER_DEFAULTS_MAX_VERSION = 12;
|
static constexpr uint32_t GRAPHICS_REGISTER_DEFAULTS_MAX_VERSION = 13;
|
||||||
static constexpr uint32_t GRAPHICS_REGISTER_DEFAULTS_FALLBACK_VERSION = 11;
|
static constexpr uint32_t GRAPHICS_REGISTER_DEFAULTS_FALLBACK_VERSION = 13;
|
||||||
static constexpr uint32_t GRAPHICS_INIT_NO_FEATURE_STATE = 0;
|
static constexpr uint32_t GRAPHICS_INIT_NO_FEATURE_STATE = 0;
|
||||||
|
|
||||||
static std::mutex g_register_defaults_mutex;
|
static std::mutex g_register_defaults_mutex;
|
||||||
@@ -3439,6 +3440,12 @@ uint32_t* KYTY_SYSV_ABI AgcDcbCopyData(CommandBuffer* buf, uint8_t dst, uint8_t
|
|||||||
return cmd;
|
return cmd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t KYTY_SYSV_ABI AgcDcbCopyDataGetSize() {
|
||||||
|
PRINT_NAME();
|
||||||
|
|
||||||
|
return 6 * sizeof(uint32_t);
|
||||||
|
}
|
||||||
|
|
||||||
uint32_t* KYTY_SYSV_ABI AgcDcbDmaData(CommandBuffer* buf, uint8_t engine, uint8_t dst,
|
uint32_t* KYTY_SYSV_ABI AgcDcbDmaData(CommandBuffer* buf, uint8_t engine, uint8_t dst,
|
||||||
uint8_t dst_cache_policy, uint64_t dst_address_or_offset,
|
uint8_t dst_cache_policy, uint64_t dst_address_or_offset,
|
||||||
uint8_t src, uint8_t src_cache_policy,
|
uint8_t src, uint8_t src_cache_policy,
|
||||||
|
|||||||
@@ -233,6 +233,7 @@ uint32_t* KYTY_SYSV_ABI AgcDcbCopyData(CommandBuffer* buf, uint8_t dst, uint8_t
|
|||||||
uint64_t dst_address, uint8_t src, uint8_t src_cache_policy,
|
uint64_t dst_address, uint8_t src, uint8_t src_cache_policy,
|
||||||
uint64_t src_address_or_immediate, uint8_t item_size,
|
uint64_t src_address_or_immediate, uint8_t item_size,
|
||||||
uint8_t write_confirm);
|
uint8_t write_confirm);
|
||||||
|
uint64_t KYTY_SYSV_ABI AgcDcbCopyDataGetSize();
|
||||||
uint32_t* KYTY_SYSV_ABI AgcDcbDmaData(CommandBuffer* buf, uint8_t engine, uint8_t dst,
|
uint32_t* KYTY_SYSV_ABI AgcDcbDmaData(CommandBuffer* buf, uint8_t engine, uint8_t dst,
|
||||||
uint8_t dst_cache_policy, uint64_t dst_address_or_offset,
|
uint8_t dst_cache_policy, uint64_t dst_address_or_offset,
|
||||||
uint8_t src, uint8_t src_cache_policy,
|
uint8_t src, uint8_t src_cache_policy,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
// No-feature, non-0x840f00 AgcGetRegisterDefaults2 dispatch, versions 0..12.
|
// No-feature, non-0x840f00 AgcGetRegisterDefaults2 dispatch, versions 0..13.
|
||||||
// Type entries keep the pointer index in bits 0..9; higher bits are AGC flags.
|
// Type entries keep the pointer index in bits 0..9; higher bits are AGC flags.
|
||||||
|
|
||||||
// g_agc_internal_reg_defaults_v0: regs=(1, 12, 0, 4), ptrs=(1, 12, 0, 2), types=15.
|
// g_agc_internal_reg_defaults_v0: regs=(1, 12, 0, 4), ptrs=(1, 12, 0, 2), types=15.
|
||||||
@@ -185,6 +185,45 @@ static CompactRegisterDefaults g_agc_internal_reg_defaults_v11 = {
|
|||||||
g_agc_internal_reg_defaults_v11_types, 24,
|
g_agc_internal_reg_defaults_v11_types, 24,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Version 13 takes the version-11 fallback and selects the >=13 state-0 lookup bank.
|
||||||
|
// Only two internal table-1 values differ in that bank.
|
||||||
|
static auto g_agc_internal_reg_defaults_v13_tbl1_regs = [] {
|
||||||
|
constexpr auto count = sizeof(g_agc_internal_reg_defaults_v11_tbl1_regs) /
|
||||||
|
sizeof(g_agc_internal_reg_defaults_v11_tbl1_regs[0]);
|
||||||
|
std::array<ShaderRegister, count> regs {};
|
||||||
|
std::copy_n(g_agc_internal_reg_defaults_v11_tbl1_regs, count, regs.begin());
|
||||||
|
|
||||||
|
for (auto& reg: regs) {
|
||||||
|
if (reg.offset == 0x0081) {
|
||||||
|
reg.value = 0x00000001;
|
||||||
|
} else if (reg.offset == 0x0101) {
|
||||||
|
reg.value = 0x00000003;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return regs;
|
||||||
|
}();
|
||||||
|
|
||||||
|
static CompactRegisterDefaults g_agc_internal_reg_defaults_v13 = {
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl0_regs,
|
||||||
|
8,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl0_ptrs,
|
||||||
|
8,
|
||||||
|
g_agc_internal_reg_defaults_v13_tbl1_regs.data(),
|
||||||
|
12,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl1_ptrs,
|
||||||
|
12,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl2_regs,
|
||||||
|
1,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl2_ptrs,
|
||||||
|
1,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl3_regs,
|
||||||
|
6,
|
||||||
|
g_agc_internal_reg_defaults_v11_tbl3_ptrs,
|
||||||
|
3,
|
||||||
|
g_agc_internal_reg_defaults_v11_types,
|
||||||
|
24,
|
||||||
|
};
|
||||||
|
|
||||||
// g_agc_internal_reg_defaults_v4: regs=(2, 15, 0, 4), ptrs=(2, 15, 0, 2), types=19.
|
// g_agc_internal_reg_defaults_v4: regs=(2, 15, 0, 4), ptrs=(2, 15, 0, 2), types=19.
|
||||||
static ShaderRegister g_agc_internal_reg_defaults_v4_tbl0_regs[] = {
|
static ShaderRegister g_agc_internal_reg_defaults_v4_tbl0_regs[] = {
|
||||||
{0x02af, 0x00040000},
|
{0x02af, 0x00040000},
|
||||||
@@ -1366,8 +1405,28 @@ static uint32_t g_agc_public_reg_defaults_v11_types[] = {
|
|||||||
0x036ac8a6, 0x000c0452, 0x00000000,
|
0x036ac8a6, 0x000c0452, 0x00000000,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <std::size_t Size>
|
||||||
|
static std::array<ShaderRegister, Size>
|
||||||
|
make_v11_plus_public_tbl0(const ShaderRegister (&source)[Size]) {
|
||||||
|
std::array<ShaderRegister, Size> regs {};
|
||||||
|
std::copy_n(source, Size, regs.begin());
|
||||||
|
|
||||||
|
for (auto& reg: regs) {
|
||||||
|
if (reg.offset == 0x0201) {
|
||||||
|
reg.value |= 0x00010000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return regs;
|
||||||
|
}
|
||||||
|
|
||||||
|
// The common setup helper forces this table-0 patch for every version >= 11.
|
||||||
|
static auto g_agc_public_reg_defaults_v11_tbl0_effective =
|
||||||
|
make_v11_plus_public_tbl0(g_agc_public_reg_defaults_v11_tbl0_regs);
|
||||||
|
static auto g_agc_public_reg_defaults_v12_tbl0_effective =
|
||||||
|
make_v11_plus_public_tbl0(g_agc_public_reg_defaults_v10_tbl0_regs);
|
||||||
|
|
||||||
static CompactRegisterDefaults g_agc_public_reg_defaults_v11 = {
|
static CompactRegisterDefaults g_agc_public_reg_defaults_v11 = {
|
||||||
g_agc_public_reg_defaults_v11_tbl0_regs,
|
g_agc_public_reg_defaults_v11_tbl0_effective.data(),
|
||||||
488,
|
488,
|
||||||
g_agc_public_reg_defaults_v11_tbl0_ptrs,
|
g_agc_public_reg_defaults_v11_tbl0_ptrs,
|
||||||
84,
|
84,
|
||||||
@@ -1387,6 +1446,27 @@ static CompactRegisterDefaults g_agc_public_reg_defaults_v11 = {
|
|||||||
137,
|
137,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static CompactRegisterDefaults g_agc_public_reg_defaults_v12 = {
|
||||||
|
g_agc_public_reg_defaults_v12_tbl0_effective.data(),
|
||||||
|
482,
|
||||||
|
g_agc_public_reg_defaults_v10_tbl0_ptrs,
|
||||||
|
79,
|
||||||
|
g_agc_public_reg_defaults_v10_tbl1_regs,
|
||||||
|
159,
|
||||||
|
g_agc_public_reg_defaults_v10_tbl1_ptrs,
|
||||||
|
29,
|
||||||
|
g_agc_public_reg_defaults_v10_tbl2_regs,
|
||||||
|
55,
|
||||||
|
g_agc_public_reg_defaults_v10_tbl2_ptrs,
|
||||||
|
20,
|
||||||
|
nullptr,
|
||||||
|
0,
|
||||||
|
nullptr,
|
||||||
|
0,
|
||||||
|
g_agc_public_reg_defaults_v10_types,
|
||||||
|
128,
|
||||||
|
};
|
||||||
|
|
||||||
// g_agc_public_reg_defaults_v4: regs=(488, 158, 43, 0), ptrs=(80, 28, 42, 0), types=150.
|
// g_agc_public_reg_defaults_v4: regs=(488, 158, 43, 0), ptrs=(80, 28, 42, 0), types=150.
|
||||||
static ShaderRegister g_agc_public_reg_defaults_v4_tbl0_regs[] = {
|
static ShaderRegister g_agc_public_reg_defaults_v4_tbl0_regs[] = {
|
||||||
{0x0202, 0x00cc0010}, {0x0109, 0x00000008}, {0x0104, 0x00000000}, {0x008f, 0x00000000},
|
{0x0202, 0x00cc0010}, {0x0109, 0x00000008}, {0x0104, 0x00000000}, {0x008f, 0x00000000},
|
||||||
@@ -2825,7 +2905,8 @@ static CompactRegisterDefaults* g_agc_public_reg_defaults_by_version[] = {
|
|||||||
&g_agc_public_reg_defaults_v9, // version 9
|
&g_agc_public_reg_defaults_v9, // version 9
|
||||||
&g_agc_public_reg_defaults_v10, // version 10
|
&g_agc_public_reg_defaults_v10, // version 10
|
||||||
&g_agc_public_reg_defaults_v11, // version 11
|
&g_agc_public_reg_defaults_v11, // version 11
|
||||||
&g_agc_public_reg_defaults_v10, // version 12
|
&g_agc_public_reg_defaults_v12, // version 12
|
||||||
|
&g_agc_public_reg_defaults_v11, // version 13: v11 fallback with the >=13 state-0 bank
|
||||||
};
|
};
|
||||||
|
|
||||||
static CompactRegisterDefaults* g_agc_internal_reg_defaults_by_version[] = {
|
static CompactRegisterDefaults* g_agc_internal_reg_defaults_by_version[] = {
|
||||||
@@ -2842,4 +2923,5 @@ static CompactRegisterDefaults* g_agc_internal_reg_defaults_by_version[] = {
|
|||||||
&g_agc_internal_reg_defaults_v10, // version 10
|
&g_agc_internal_reg_defaults_v10, // version 10
|
||||||
&g_agc_internal_reg_defaults_v11, // version 11
|
&g_agc_internal_reg_defaults_v11, // version 11
|
||||||
&g_agc_internal_reg_defaults_v10, // version 12
|
&g_agc_internal_reg_defaults_v10, // version 12
|
||||||
|
&g_agc_internal_reg_defaults_v13, // version 13
|
||||||
};
|
};
|
||||||
@@ -121,6 +121,7 @@ LIB_DEFINE(InitAgcDriver_1) {
|
|||||||
LIB_FUNC("57labkp+rSQ", Gen5::AgcDcbAcquireMem);
|
LIB_FUNC("57labkp+rSQ", Gen5::AgcDcbAcquireMem);
|
||||||
LIB_FUNC("-vnlTPPXPrw", Gen5::AgcDcbAcquireMemGetSize);
|
LIB_FUNC("-vnlTPPXPrw", Gen5::AgcDcbAcquireMemGetSize);
|
||||||
LIB_FUNC("1rZSWUv1IRc", Gen5::AgcDcbCopyData);
|
LIB_FUNC("1rZSWUv1IRc", Gen5::AgcDcbCopyData);
|
||||||
|
LIB_FUNC("b5u0Jzm8TF8", Gen5::AgcDcbCopyDataGetSize); // SpongeBob PPSA26893
|
||||||
LIB_FUNC("WmAc2MEj6Io", Gen5::AgcDcbDmaData);
|
LIB_FUNC("WmAc2MEj6Io", Gen5::AgcDcbDmaData);
|
||||||
LIB_FUNC("xSAR0LTcRKM", Gen5::AgcDcbJump);
|
LIB_FUNC("xSAR0LTcRKM", Gen5::AgcDcbJump);
|
||||||
LIB_FUNC("VEGu4dixjUg", Gen5::AgcDcbJumpGetSize);
|
LIB_FUNC("VEGu4dixjUg", Gen5::AgcDcbJumpGetSize);
|
||||||
|
|||||||
Reference in new issue
Block a user