From bbb2b35d3fef680facdcbe337f6c71b732666ec0 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Mon, 27 Mar 2023 17:28:31 -0600 Subject: [PATCH] Update PCSX2. --- Classes/PCSX2GameCore.mm | 4 +- Classes/Video/GSDeviceMTL.mm | 69 +++++++++++++-------- Classes/Video/GSDumpReplayer.cpp | 16 ++++- Classes/Video/MetalHostDisplay.mm | 9 +-- Classes/Video/OpenGLHostDisplayOverride.cpp | 6 +- PCSX2.xcodeproj/project.pbxproj | 32 ++-------- Resources/Info.plist | 4 +- pcsx2 | 2 +- 8 files changed, 75 insertions(+), 67 deletions(-) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index 12428b8..1bb1609 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -806,9 +806,9 @@ void Host::ReleaseHostDisplay(bool clear_state) } } -bool Host::BeginPresentFrame(bool frame_skip) +HostDisplay::PresentResult Host::BeginPresentFrame(bool frame_skip) { - GET_CURRENT_OR_RETURN(false); + GET_CURRENT_OR_RETURN(HostDisplay::PresentResult::DeviceLost); return g_host_display.get()->BeginPresent(frame_skip); } diff --git a/Classes/Video/GSDeviceMTL.mm b/Classes/Video/GSDeviceMTL.mm index 930c720..9c498a8 100644 --- a/Classes/Video/GSDeviceMTL.mm +++ b/Classes/Video/GSDeviceMTL.mm @@ -492,9 +492,9 @@ GSTexture* GSDeviceMTL::CreateSurface(GSTexture::Type type, int width, int heigh MTLTextureDescriptor* desc = [MTLTextureDescriptor texture2DDescriptorWithPixelFormat:fmt - width:std::max(1, std::min(width, m_dev.features.max_texsize)) - height:std::max(1, std::min(height, m_dev.features.max_texsize)) - mipmapped:levels > 1]; + width:std::max(1, std::min(width, m_dev.features.max_texsize)) + height:std::max(1, std::min(height, m_dev.features.max_texsize)) + mipmapped:levels > 1]; if (levels > 1) [desc setMipmapLevelCount:levels]; @@ -541,7 +541,7 @@ GSTexture* GSDeviceMTL::CreateSurface(GSTexture::Type type, int width, int heigh } }} -void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c) +void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c, const bool linear) { @autoreleasepool { id cmdbuf = GetRenderCmdBuf(); GSScopedDebugGroupMTL dbg(cmdbuf, @"DoMerge"); @@ -562,12 +562,12 @@ void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, { // 2nd output is enabled and selected. Copy it to destination so we can blend it with 1st output // Note: value outside of dRect must contains the background color (c) - StretchRect(sTex[1], sRect[1], dTex, dRect[1], ShaderConvert::COPY); + StretchRect(sTex[1], sRect[1], dTex, dRect[1], ShaderConvert::COPY, linear); } // Save 2nd output if (feedback_write_2) // FIXME I'm not sure dRect[1] is always correct - DoStretchRect(dTex, full_r, sTex[2], dRect[1], m_convert_pipeline[static_cast(ShaderConvert::YUV)], true, LoadAction::DontCareIfFull, &cb_yuv, sizeof(cb_yuv)); + DoStretchRect(dTex, full_r, sTex[2], dRect[1], m_convert_pipeline[static_cast(ShaderConvert::YUV)], linear, LoadAction::DontCareIfFull, &cb_yuv, sizeof(cb_yuv)); if (feedback_write_2_but_blend_bg) ClearRenderTarget(dTex, c); @@ -581,34 +581,26 @@ void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, if (PMODE.MMOD == 1) { // Blend with a constant alpha - DoStretchRect(sTex[0], sRect[0], dTex, dRect[0], pipeline, true, LoadAction::Load, &cb_c, sizeof(cb_c)); + DoStretchRect(sTex[0], sRect[0], dTex, dRect[0], pipeline, linear, LoadAction::Load, &cb_c, sizeof(cb_c)); } else { // Blend with 2 * input alpha - DoStretchRect(sTex[0], sRect[0], dTex, dRect[0], pipeline, true, LoadAction::Load, nullptr, 0); + DoStretchRect(sTex[0], sRect[0], dTex, dRect[0], pipeline, linear, LoadAction::Load, nullptr, 0); } } if (feedback_write_1) // FIXME I'm not sure dRect[0] is always correct - StretchRect(dTex, full_r, sTex[2], dRect[0], ShaderConvert::YUV); + StretchRect(dTex, full_r, sTex[2], dRect[0], ShaderConvert::YUV, linear); }} -void GSDeviceMTL::DoInterlace(GSTexture* sTex, GSTexture* dTex, int shader, bool linear, float yoffset, int bufIdx) +void GSDeviceMTL::DoInterlace(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ShaderInterlace shader, bool linear, const InterlaceConstantBuffer& cb) { @autoreleasepool { id cmdbuf = GetRenderCmdBuf(); GSScopedDebugGroupMTL dbg(cmdbuf, @"DoInterlace"); - GSVector4 ds = GSVector4(dTex->GetSize()); - - GSVector4 sRect(0, 0, 1, 1); - GSVector4 dRect(0.f, yoffset, ds.x, ds.y + yoffset); - - GSMTLInterlacePSUniform cb = {}; - cb.ZrH = {static_cast(bufIdx), 1.0f / ds.y, ds.y, MAD_SENSITIVITY}; - - const bool can_discard = shader == 0 || shader == 3; - DoStretchRect(sTex, sRect, dTex, dRect, m_interlace_pipeline[shader], linear, !can_discard ? LoadAction::DontCareIfFull : LoadAction::Load, &cb, sizeof(cb)); + const bool can_discard = shader == ShaderInterlace::WEAVE || shader == ShaderInterlace::MAD_BUFFER; + DoStretchRect(sTex, sRect, dTex, dRect, m_interlace_pipeline[static_cast(shader)], linear, !can_discard ? LoadAction::DontCareIfFull : LoadAction::Load, &cb, sizeof(cb)); }} void GSDeviceMTL::DoFXAA(GSTexture* sTex, GSTexture* dTex) @@ -740,6 +732,7 @@ bool GSDeviceMTL::Create() m_features.bptc_textures = true; m_features.framebuffer_fetch = m_dev.features.framebuffer_fetch; m_features.dual_source_blend = true; + m_features.clip_control = true; m_features.stencil_buffer = true; m_features.cas_sharpening = true; @@ -747,8 +740,6 @@ bool GSDeviceMTL::Create() { // Init metal stuff m_fn_constants = MRCTransfer([MTLFunctionConstantValues new]); - vector_float2 upscale2 = vector2(GSConfig.UpscaleMultiplier, GSConfig.UpscaleMultiplier); - [m_fn_constants setConstantValue:&upscale2 type:MTLDataTypeFloat2 atIndex:GSMTLConstantIndex_SCALING_FACTOR]; setFnConstantB(m_fn_constants, m_dev.features.framebuffer_fetch, GSMTLConstantIndex_FRAMEBUFFER_FETCH); m_draw_sync_fence = MRCTransfer([m_dev.dev newFence]); @@ -1117,7 +1108,7 @@ void GSDeviceMTL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r [encoder endEncoding]; }} -void GSDeviceMTL::DoStretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, id pipeline, bool linear, LoadAction load_action, void* frag_uniform, size_t frag_uniform_len) +void GSDeviceMTL::DoStretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, id pipeline, bool linear, LoadAction load_action, const void* frag_uniform, size_t frag_uniform_len) { FlushClears(sTex); @@ -1253,9 +1244,9 @@ void GSDeviceMTL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture } }} -void GSDeviceMTL::UpdateCLUTTexture(GSTexture* sTex, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) +void GSDeviceMTL::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) { - GSMTLCLUTConvertPSUniform uniform = { ToSimd(sTex->GetScale()), {offsetX, offsetY}, dOffset }; + GSMTLCLUTConvertPSUniform uniform = { sScale, {offsetX, offsetY}, dOffset }; const bool is_clut4 = dSize == 16; const GSVector4i dRect(0, 0, dSize, 1); @@ -1265,6 +1256,19 @@ void GSDeviceMTL::UpdateCLUTTexture(GSTexture* sTex, u32 offsetX, u32 offsetY, G RenderCopy(sTex, m_clut_pipeline[!is_clut4], dRect); } +void GSDeviceMTL::ConvertToIndexedTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) +{ @autoreleasepool { + const ShaderConvert shader = ShaderConvert::RGBA_TO_8I; + id pipeline = m_convert_pipeline[static_cast(shader)]; + if (!pipeline) + [NSException raise:@"StretchRect Missing Pipeline" format:@"No pipeline for %d", static_cast(shader)]; + + GSMTLIndexedConvertPSUniform uniform = { sScale, SBW, DBW }; + + const GSVector4 dRect(0, 0, dTex->GetWidth(), dTex->GetHeight()); + DoStretchRect(sTex, GSVector4::zero(), dTex, dRect, pipeline, false, LoadAction::DontCareIfFull, &uniform, sizeof(uniform)); +}} + void GSDeviceMTL::FlushClears(GSTexture* tex) { if (tex) @@ -1371,16 +1375,19 @@ void GSDeviceMTL::MRESetHWPipelineState(GSHWDrawConfig::VSSelector vssel, GSHWDr setFnConstantB(m_fn_constants, pssel.ltf, GSMTLConstantIndex_PS_LTF); setFnConstantB(m_fn_constants, pssel.shuffle, GSMTLConstantIndex_PS_SHUFFLE); setFnConstantB(m_fn_constants, pssel.read_ba, GSMTLConstantIndex_PS_READ_BA); + setFnConstantB(m_fn_constants, pssel.real16src, GSMTLConstantIndex_PS_READ16_SRC); setFnConstantB(m_fn_constants, pssel.write_rg, GSMTLConstantIndex_PS_WRITE_RG); setFnConstantB(m_fn_constants, pssel.fbmask, GSMTLConstantIndex_PS_FBMASK); setFnConstantI(m_fn_constants, pssel.blend_a, GSMTLConstantIndex_PS_BLEND_A); setFnConstantI(m_fn_constants, pssel.blend_b, GSMTLConstantIndex_PS_BLEND_B); setFnConstantI(m_fn_constants, pssel.blend_c, GSMTLConstantIndex_PS_BLEND_C); setFnConstantI(m_fn_constants, pssel.blend_d, GSMTLConstantIndex_PS_BLEND_D); - setFnConstantI(m_fn_constants, pssel.clr_hw, GSMTLConstantIndex_PS_CLR_HW); + setFnConstantI(m_fn_constants, pssel.blend_hw, GSMTLConstantIndex_PS_BLEND_HW); + setFnConstantB(m_fn_constants, pssel.a_masked, GSMTLConstantIndex_PS_A_MASKED); setFnConstantB(m_fn_constants, pssel.hdr, GSMTLConstantIndex_PS_HDR); setFnConstantB(m_fn_constants, pssel.colclip, GSMTLConstantIndex_PS_COLCLIP); setFnConstantI(m_fn_constants, pssel.blend_mix, GSMTLConstantIndex_PS_BLEND_MIX); + setFnConstantB(m_fn_constants, pssel.round_inv, GSMTLConstantIndex_PS_ROUND_INV); setFnConstantB(m_fn_constants, pssel.fixed_one_a, GSMTLConstantIndex_PS_FIXED_ONE_A); setFnConstantB(m_fn_constants, pssel.pabe, GSMTLConstantIndex_PS_PABE); setFnConstantB(m_fn_constants, pssel.no_color, GSMTLConstantIndex_PS_NO_COLOR); @@ -1595,6 +1602,7 @@ static_assert(offsetof(GSHWDrawConfig::PSConstantBuffer, ChannelShuffle) == of static_assert(offsetof(GSHWDrawConfig::PSConstantBuffer, TCOffsetHack) == offsetof(GSMTLMainPSUniform, tc_offset)); static_assert(offsetof(GSHWDrawConfig::PSConstantBuffer, STScale) == offsetof(GSMTLMainPSUniform, st_scale)); static_assert(offsetof(GSHWDrawConfig::PSConstantBuffer, DitherMatrix) == offsetof(GSMTLMainPSUniform, dither_matrix)); +static_assert(offsetof(GSHWDrawConfig::PSConstantBuffer, ScaleFactor) == offsetof(GSMTLMainPSUniform, scale_factor)); void GSDeviceMTL::SetupDestinationAlpha(GSTexture* rt, GSTexture* ds, const GSVector4i& r, bool datm) { @@ -1699,6 +1707,15 @@ void GSDeviceMTL::RenderHW(GSHWDrawConfig& config) config.ds = nullptr; if (!config.ds && m_current_render.color_target == rt && stencil == m_current_render.stencil_target && m_current_render.depth_target != config.tex) config.ds = m_current_render.depth_target; + if (!rt && !config.ds) + { + // If we were rendering depth-only and depth gets cleared by the above check, that turns into rendering nothing, which should be a no-op + pxAssertDev(0, "RenderHW was given a completely useless draw call!"); + [m_current_render.encoder insertDebugSignpost:@"Skipped no-color no-depth draw"]; + if (primid_tex) + Recycle(primid_tex); + return; + } BeginRenderPass(@"RenderHW", rt, MTLLoadActionLoad, config.ds, MTLLoadActionLoad, stencil, MTLLoadActionLoad); id mtlenc = m_current_render.encoder; diff --git a/Classes/Video/GSDumpReplayer.cpp b/Classes/Video/GSDumpReplayer.cpp index 4647e8e..10e0f91 100644 --- a/Classes/Video/GSDumpReplayer.cpp +++ b/Classes/Video/GSDumpReplayer.cpp @@ -119,9 +119,23 @@ bool GSDumpReplayer::Initialize(const char* filename) return true; } -void GSDumpReplayer::Reset() +bool GSDumpReplayer::ChangeDump(const char* filename) { + Console.WriteLn("(GSDumpReplayer) Switching to '%s'...", filename); + + std::unique_ptr new_dump(GSDumpFile::OpenGSDump(filename)); + if (!new_dump || !new_dump->ReadFile()) + { + Host::ReportFormattedErrorAsync("GSDumpReplayer", "Failed to open or read '%s'.", filename); + return false; + } + + s_dump_file = std::move(new_dump); + s_current_packet = 0; + + // Don't forget to reset the GS! GSDumpReplayerCpuReset(); + return true; } void GSDumpReplayer::Shutdown() diff --git a/Classes/Video/MetalHostDisplay.mm b/Classes/Video/MetalHostDisplay.mm index 6256b2b..7e2d992 100644 --- a/Classes/Video/MetalHostDisplay.mm +++ b/Classes/Video/MetalHostDisplay.mm @@ -95,6 +95,7 @@ void MetalHostDisplay::DetachSurfaceOnMainThread() bool MetalHostDisplay::CreateDevice(const WindowInfo& wi, VsyncMode vsync) { @autoreleasepool { m_window_info = wi; + pxAssertRel(!m_dev.dev, "Device already created!"); m_dev=GSMTLDevice(MRCRetain([_current metalDevice])); m_queue = MRCTransfer([m_dev.dev newCommandQueue]); @@ -238,14 +239,14 @@ void MetalHostDisplay::UpdateTexture(HostDisplayTexture* texture, u32 x, u32 y, static bool s_capture_next = false; -bool MetalHostDisplay::BeginPresent(bool frame_skip) +HostDisplay::PresentResult MetalHostDisplay::BeginPresent(bool frame_skip) { @autoreleasepool { GSDeviceMTL* dev = static_cast(g_gs_device.get()); if (dev && m_capture_start_frame && dev->FrameNo() == m_capture_start_frame) s_capture_next = true; if (frame_skip || m_window_info.type == WindowInfo::Type::Surfaceless || !g_gs_device) { - return false; + return PresentResult::FrameSkipped; } id buf = dev->GetRenderCmdBuf(); m_current_drawable = MRCRetain([m_layer nextDrawable]); @@ -255,7 +256,7 @@ bool MetalHostDisplay::BeginPresent(bool frame_skip) [buf pushDebugGroup:@"Present Skipped"]; [buf popDebugGroup]; dev->FlushEncoders(); - return false; + return PresentResult::FrameSkipped; } [m_pass_desc colorAttachments][0].texture = [m_current_drawable texture]; id enc = [buf renderCommandEncoderWithDescriptor:m_pass_desc]; @@ -263,7 +264,7 @@ bool MetalHostDisplay::BeginPresent(bool frame_skip) dev->m_current_render.encoder = MRCRetain(enc); - return true; + return PresentResult::OK; }} void MetalHostDisplay::EndPresent() diff --git a/Classes/Video/OpenGLHostDisplayOverride.cpp b/Classes/Video/OpenGLHostDisplayOverride.cpp index 3f9b9af..c752244 100644 --- a/Classes/Video/OpenGLHostDisplayOverride.cpp +++ b/Classes/Video/OpenGLHostDisplayOverride.cpp @@ -337,11 +337,11 @@ bool OpenGLHostDisplay::UpdateImGuiFontTexture() return true; } -bool OpenGLHostDisplay::BeginPresent(bool frame_skip) +HostDisplay::PresentResult OpenGLHostDisplay::BeginPresent(bool frame_skip) { if (frame_skip || m_window_info.type == WindowInfo::Type::Surfaceless) { - return false; + return PresentResult::FrameSkipped; } glDisable(GL_SCISSOR_TEST); @@ -350,7 +350,7 @@ bool OpenGLHostDisplay::BeginPresent(bool frame_skip) glClear(GL_COLOR_BUFFER_BIT); glViewport(0, 0, m_window_info.surface_width, m_window_info.surface_height); - return true; + return PresentResult::OK; } void OpenGLHostDisplay::EndPresent() diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 7a1f04c..f7f7147 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -154,8 +154,6 @@ 551AA47F27935D8800658151 /* crc64_fast.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517F0CB263D4838000219EC /* crc64_fast.c */; }; 551AA48027935D9200658151 /* crc64_table.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517F0C1263D4838000219EC /* crc64_table.c */; }; 551AA48127935D9A00658151 /* crc32_table.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517F0BA263D4838000219EC /* crc32_table.c */; }; - 551AA48927935DF400658151 /* GSTextureNull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA48327935DF400658151 /* GSTextureNull.cpp */; }; - 551AA48A27935DF400658151 /* GSDeviceNull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA48427935DF400658151 /* GSDeviceNull.cpp */; }; 551AA48B27935DF400658151 /* GSRendererNull.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA48527935DF400658151 /* GSRendererNull.cpp */; }; 551AA4A927935E9100658151 /* EthernetFrame.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA49027935E9100658151 /* EthernetFrame.cpp */; }; 551AA4AA27935E9100658151 /* UDP_Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA49327935E9100658151 /* UDP_Packet.cpp */; }; @@ -1829,8 +1827,6 @@ 551AA1082792AB1700658151 /* GS.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GS.cpp; sourceTree = ""; }; 551AA1092792AB1700658151 /* GSLzma.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSLzma.cpp; sourceTree = ""; }; 551AA10A2792AB1700658151 /* GSDrawingContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDrawingContext.h; sourceTree = ""; }; - 551AA1112792AB1700658151 /* GSSetting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSSetting.cpp; sourceTree = ""; }; - 551AA1122792AB1700658151 /* GSSetting.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSSetting.h; sourceTree = ""; }; 551AA1142792AB1700658151 /* GSVector.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSVector.cpp; sourceTree = ""; }; 551AA1152792AB1700658151 /* GSClut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSClut.cpp; sourceTree = ""; }; 551AA1162792AB1700658151 /* GSPerfMon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSPerfMon.h; sourceTree = ""; }; @@ -1873,12 +1869,8 @@ 551AA4182792C82A00658151 /* PINE.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PINE.cpp; sourceTree = ""; }; 551AA4192792C82A00658151 /* PINE.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PINE.h; sourceTree = ""; }; 551AA41B2792C85500658151 /* SingleRegisterTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SingleRegisterTypes.h; sourceTree = ""; }; - 551AA48327935DF400658151 /* GSTextureNull.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSTextureNull.cpp; sourceTree = ""; }; - 551AA48427935DF400658151 /* GSDeviceNull.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDeviceNull.cpp; sourceTree = ""; }; 551AA48527935DF400658151 /* GSRendererNull.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRendererNull.cpp; sourceTree = ""; }; 551AA48627935DF400658151 /* GSRendererNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSRendererNull.h; sourceTree = ""; }; - 551AA48727935DF400658151 /* GSDeviceNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDeviceNull.h; sourceTree = ""; }; - 551AA48827935DF400658151 /* GSTextureNull.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSTextureNull.h; sourceTree = ""; }; 551AA48E27935E9100658151 /* Payload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Payload.h; sourceTree = ""; }; 551AA48F27935E9100658151 /* NetLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = NetLib.h; sourceTree = ""; }; 551AA49027935E9100658151 /* EthernetFrame.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EthernetFrame.cpp; sourceTree = ""; }; @@ -5153,7 +5145,6 @@ 55B1EFCE295BA71D00DB297F /* MultiISA.cpp */, 55B1EFD0295BA71D00DB297F /* MultiISA.h */, 551AA08B2792AB1700658151 /* Renderers */, - 551AA10B2792AB1700658151 /* Window */, ); path = GS; sourceTree = ""; @@ -5258,15 +5249,6 @@ path = OpenGL; sourceTree = ""; }; - 551AA10B2792AB1700658151 /* Window */ = { - isa = PBXGroup; - children = ( - 551AA1112792AB1700658151 /* GSSetting.cpp */, - 551AA1122792AB1700658151 /* GSSetting.h */, - ); - path = Window; - sourceTree = ""; - }; 551AA1712792B66400658151 /* InternalServers */ = { isa = PBXGroup; children = ( @@ -5332,12 +5314,8 @@ 551AA48227935DF400658151 /* Null */ = { isa = PBXGroup; children = ( - 551AA48327935DF400658151 /* GSTextureNull.cpp */, - 551AA48427935DF400658151 /* GSDeviceNull.cpp */, 551AA48527935DF400658151 /* GSRendererNull.cpp */, 551AA48627935DF400658151 /* GSRendererNull.h */, - 551AA48727935DF400658151 /* GSDeviceNull.h */, - 551AA48827935DF400658151 /* GSTextureNull.h */, ); path = Null; sourceTree = ""; @@ -7985,7 +7963,6 @@ 5580652827AB4DE9008CD5D2 /* SettingsWrapper.cpp in Sources */, 551AA4AA27935E9100658151 /* UDP_Packet.cpp in Sources */, 551BF689264241E80008C529 /* DisR5900asm.cpp in Sources */, - 551AA48927935DF400658151 /* GSTextureNull.cpp in Sources */, DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */, 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */, 551BF57E26420E9A0008C529 /* Sio.cpp in Sources */, @@ -8118,7 +8095,6 @@ 551BF5AC26420FA50008C529 /* IopHw.cpp in Sources */, 551BF67E264240660008C529 /* ATA_Info.cpp in Sources */, 551BF5A826420FA50008C529 /* HwWrite.cpp in Sources */, - 551AA48A27935DF400658151 /* GSDeviceNull.cpp in Sources */, 551BF57826420E720008C529 /* vtlb.cpp in Sources */, 551AA4E52793775E00658151 /* StringUtil.cpp in Sources */, 551BF5D5264212270008C529 /* MTGS.cpp in Sources */, @@ -8787,7 +8763,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.0; + CURRENT_PROJECT_VERSION = 1.7.4280; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; @@ -8814,7 +8790,7 @@ ); INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MARKETING_VERSION = 1.7.0; + MARKETING_VERSION = 1.7.4280; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -8866,7 +8842,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.0; + CURRENT_PROJECT_VERSION = 1.7.4280; DEAD_CODE_STRIPPING = YES; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8895,7 +8871,7 @@ INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; LLVM_LTO = YES_THIN; - MARKETING_VERSION = 1.7.0; + MARKETING_VERSION = 1.7.4280; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/Resources/Info.plist b/Resources/Info.plist index bd6a1f3..abb4bcc 100644 --- a/Resources/Info.plist +++ b/Resources/Info.plist @@ -32,10 +32,10 @@ OEGameCoreSupportsCheatCode - OEGameCoreSupportsMultipleDiscs - OEGameCoreSupportsDisplayModeChange + OEGameCoreSupportsMultipleDiscs + OERequiredFiles diff --git a/pcsx2 b/pcsx2 index cbf91a8..2b94cfe 160000 --- a/pcsx2 +++ b/pcsx2 @@ -1 +1 @@ -Subproject commit cbf91a8d1907d785bab4be047ac307ba032c5aa2 +Subproject commit 2b94cfe782296973301ad448792582ba11927559