mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-20 02:47:02 +02:00
graphics: accept the encoded GE_CNTL group range (#363)
graphics: stop rejecting valid GE_CNTL group sizes GE_CNTL group sizes control guest geometry-engine scheduling rather than host wave width. Do not reject the supported vertex path for compiler-selected values above 64, and remove the corresponding stale debug warnings.
This commit is contained in:
@@ -84,17 +84,8 @@ void uc_print(const char* func, const HW::UserConfig& uc) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void uc_check(const HW::UserConfig& uc) {
|
void uc_check(const HW::UserConfig& uc) {
|
||||||
const auto& ge_cntl = uc.GetGeControl();
|
|
||||||
const auto& user_en = uc.GetGeUserVgprEn();
|
const auto& user_en = uc.GetGeUserVgprEn();
|
||||||
|
|
||||||
if (ge_cntl.primitive_group_size > 0x0040) {
|
|
||||||
LOGF("\t warning: unsupported GE_CNTL primitive_group_size = 0x%04" PRIx16 "\n",
|
|
||||||
ge_cntl.primitive_group_size);
|
|
||||||
}
|
|
||||||
if (ge_cntl.vertex_group_size > 0x0040) {
|
|
||||||
LOGF("\t warning: unsupported GE_CNTL vertex_group_size = 0x%04" PRIx16 "\n",
|
|
||||||
ge_cntl.vertex_group_size);
|
|
||||||
}
|
|
||||||
EXIT_NOT_IMPLEMENTED(user_en.vgpr1 != false);
|
EXIT_NOT_IMPLEMENTED(user_en.vgpr1 != false);
|
||||||
EXIT_NOT_IMPLEMENTED(user_en.vgpr2 != false);
|
EXIT_NOT_IMPLEMENTED(user_en.vgpr2 != false);
|
||||||
EXIT_NOT_IMPLEMENTED(user_en.vgpr3 != false);
|
EXIT_NOT_IMPLEMENTED(user_en.vgpr3 != false);
|
||||||
|
|||||||
@@ -450,15 +450,14 @@ static bool ShouldSkipGeShader(const CommandBuffer& buffer) {
|
|||||||
const bool unsupported_stage_mask = (stages != 0 && stages != 0x02002000);
|
const bool unsupported_stage_mask = (stages != 0 && stages != 0x02002000);
|
||||||
const bool unsupported_gs_stage = (vertex_info.es_regs.data_addr != 0 &&
|
const bool unsupported_gs_stage = (vertex_info.es_regs.data_addr != 0 &&
|
||||||
vertex_info.gs_regs.data_addr != 0 && !ps5_ngg_vertex_path);
|
vertex_info.gs_regs.data_addr != 0 && !ps5_ngg_vertex_path);
|
||||||
const bool ge_group_size =
|
// GE_CNTL group sizes control guest scheduling and do not constrain the host vertex path.
|
||||||
ge_cntl.primitive_group_size > 0x0040 || ge_cntl.vertex_group_size > 0x0040;
|
|
||||||
const bool ge_shader_regs =
|
const bool ge_shader_regs =
|
||||||
(sh_regs.m_geNggSubgrpCntl != 0x00000000 && sh_regs.m_geNggSubgrpCntl != 0x00000001) ||
|
(sh_regs.m_geNggSubgrpCntl != 0x00000000 && sh_regs.m_geNggSubgrpCntl != 0x00000001) ||
|
||||||
sh_regs.m_vgtGsMaxVertOut != 0x00000000 ||
|
sh_regs.m_vgtGsMaxVertOut != 0x00000000 ||
|
||||||
!is_known_gs_out_prim_type(sh_regs.m_vgtGsOutPrimType) ||
|
!is_known_gs_out_prim_type(sh_regs.m_vgtGsOutPrimType) ||
|
||||||
sh_regs.m_geMaxOutputPerSubgroup > 0x00000040;
|
sh_regs.m_geMaxOutputPerSubgroup > 0x00000040;
|
||||||
|
|
||||||
if (unsupported_stage_mask || unsupported_gs_stage || ge_group_size || ge_shader_regs) {
|
if (unsupported_stage_mask || unsupported_gs_stage || ge_shader_regs) {
|
||||||
static std::once_flag warning_once;
|
static std::once_flag warning_once;
|
||||||
std::call_once(warning_once, [] {
|
std::call_once(warning_once, [] {
|
||||||
std::printf("Warning: game uses unsupported graphics pipelines; some draw calls were "
|
std::printf("Warning: game uses unsupported graphics pipelines; some draw calls were "
|
||||||
|
|||||||
Reference in New Issue
Block a user