From 0c6ef2203c3898893af075718e4d283e32af428d Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Tue, 2 May 2023 02:41:26 -0600 Subject: [PATCH 01/16] Begin work on updating PCSX2 to master, or at least 1.7.4452. --- Classes/PCSX2GameCore.mm | 107 +- Classes/Video/GSDevice.cpp | 815 ++++++ Classes/Video/GSDeviceMTL.mm | 575 +++- Classes/Video/GSDeviceOGL.cpp | 2626 +++++++++++++++++++ Classes/Video/MetalHostDisplay.mm | 422 --- Classes/Video/OpenGLHostDisplayOverride.cpp | 3 +- PCSX2.xcodeproj/project.pbxproj | 52 +- pcsx2 | 2 +- 8 files changed, 3996 insertions(+), 606 deletions(-) create mode 100644 Classes/Video/GSDevice.cpp create mode 100644 Classes/Video/GSDeviceOGL.cpp delete mode 100644 Classes/Video/MetalHostDisplay.mm diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index cbf1803..cc6f970 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -33,12 +33,12 @@ #include "PrecompiledHeader.h" #include "GS.h" #include "HostSettings.h" -#include "HostDisplay.h" +#include "Host.h" +//#include "core/host_display.h" #include "VMManager.h" //#include "AppConfig.h" #include "Frontend/InputManager.h" #include "pcsx2/INISettingsInterface.h" -#include "Frontend/OpenGLHostDisplay.h" #include "Frontend/CommonHost.h" #include "Frontend/FullscreenUI.h" #include "Frontend/LogSink.h" @@ -55,7 +55,7 @@ #include #include -class MetalHostDisplay : public HostDisplay {}; +//class MetalHostDisplay : public HostDisplay {}; static bool ExitRequested = false; static bool WaitRequested = false; @@ -297,16 +297,16 @@ - (void)startEmulation params.fullscreen = false; if(!hasInitialized){ - if (self.gameCoreRendering == OEGameCoreRenderingOpenGL3Video) - g_host_display = HostDisplay::CreateForAPI(RenderAPI::OpenGL); - else if (self.gameCoreRendering == OEGameCoreRenderingMetal2Video) - g_host_display = HostDisplay::CreateForAPI(RenderAPI::Metal); +// if (self.gameCoreRendering == OEGameCoreRenderingOpenGL3Video) +// g_host_display = HostDisplay::CreateForAPI(RenderAPI::OpenGL); +// else if (self.gameCoreRendering == OEGameCoreRenderingMetal2Video) +// g_host_display = HostDisplay::CreateForAPI(RenderAPI::Metal); WindowInfo wi; wi.type = WindowInfo::Type::MacOS; wi.surface_width = screenRect.size.width ; wi.surface_height = screenRect.size.height ; - g_host_display->CreateDevice(wi, VsyncMode::Adaptive); +// g_host_display->CreateDevice(wi, VsyncMode::Adaptive); VMManager::Internal::InitializeGlobals(); @@ -788,45 +788,50 @@ - (void)changeDisplayWithMode:(NSString *)displayMode #pragma mark Host Display -bool Host::AcquireHostDisplay(RenderAPI api, bool clear_state_on_fail) -{ - GET_CURRENT_OR_RETURN(false); - - [current.renderDelegate willRenderFrameOnAlternateThread]; - return g_host_display.get(); -} - -void Host::ReleaseHostDisplay(bool clear_state) -{ - GET_CURRENT_OR_RETURN(); - if (g_host_display.get()) { - g_host_display.reset(); - } -} - -HostDisplay::PresentResult Host::BeginPresentFrame(bool frame_skip) -{ - GET_CURRENT_OR_RETURN(HostDisplay::PresentResult::DeviceLost); - - return g_host_display.get()->BeginPresent(frame_skip); -} - -void Host::EndPresentFrame() -{ - GET_CURRENT_OR_RETURN(); - - g_host_display.get()->EndPresent(); -} - -int Host::PresentFrameBuffer() -{ - GET_CURRENT_OR_RETURN(0); - - return [[current.renderDelegate presentationFramebuffer] intValue]; -} +//std::optional EmuThread::acquireRenderWindow() +//{ +// return {}; +//} +// +//bool Host::AcquireHostDisplay(RenderAPI api, bool clear_state_on_fail) +//{ +// GET_CURRENT_OR_RETURN(false); +// +// [current.renderDelegate willRenderFrameOnAlternateThread]; +// return g_host_display.get(); +//} +// +//void Host::ReleaseHostDisplay(bool clear_state) +//{ +// GET_CURRENT_OR_RETURN(); +// if (g_host_display.get()) { +// g_host_display.reset(); +// } +//} + +//HostDisplay::PresentResult Host::BeginPresentFrame(bool frame_skip) +//{ +// GET_CURRENT_OR_RETURN(HostDisplay::PresentResult::DeviceLost); +// +// return g_host_display.get()->BeginPresent(frame_skip); +//} +// +//void Host::EndPresentFrame() +//{ +// GET_CURRENT_OR_RETURN(); +// +// g_host_display.get()->EndPresent(); +//} +// +//int Host::PresentFrameBuffer() +//{ +// GET_CURRENT_OR_RETURN(0); +// +// return [[current.renderDelegate presentationFramebuffer] intValue]; +//} -void Host::ResizeHostDisplay(u32 new_window_width, u32 new_window_height, float new_window_scale) -{ +//void Host::ResizeHostDisplay(u32 new_window_width, u32 new_window_height, float new_window_scale) +//{ //Once We have METAL, we may be able to scale the frontend canvas @@ -838,17 +843,17 @@ - (void)changeDisplayWithMode:(NSString *)displayMode // wi.surface_height = new_window_height; // current->hostDisplay.get()->ChangeRenderWindow(wi); // current->screenRect = OEIntRectMake(0, 0 , new_window_width, new_window_height); - -} +// +//} void Host::CancelGameListRefresh() { } -void Host::UpdateHostDisplay() -{ -} +//void Host::UpdateHostDisplay() +//{ +//} #pragma mark Host Settings diff --git a/Classes/Video/GSDevice.cpp b/Classes/Video/GSDevice.cpp new file mode 100644 index 0000000..d0b1882 --- /dev/null +++ b/Classes/Video/GSDevice.cpp @@ -0,0 +1,815 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2021 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" +#include "GS/Renderers/Common/GSDevice.h" +#include "GS/GSGL.h" +#include "GS/GS.h" +#include "Host.h" +#include "HostSettings.h" +#include "common/Align.h" +#include "common/StringUtil.h" + +//#include "imgui.h" + +#include + +const char* shaderName(ShaderConvert value) +{ + switch (value) + { + // clang-format off + case ShaderConvert::COPY: return "ps_copy"; + case ShaderConvert::RGBA8_TO_16_BITS: return "ps_convert_rgba8_16bits"; + case ShaderConvert::DATM_1: return "ps_datm1"; + case ShaderConvert::DATM_0: return "ps_datm0"; + case ShaderConvert::HDR_INIT: return "ps_hdr_init"; + case ShaderConvert::HDR_RESOLVE: return "ps_hdr_resolve"; + case ShaderConvert::TRANSPARENCY_FILTER: return "ps_filter_transparency"; + case ShaderConvert::FLOAT32_TO_16_BITS: return "ps_convert_float32_32bits"; + case ShaderConvert::FLOAT32_TO_32_BITS: return "ps_convert_float32_32bits"; + case ShaderConvert::FLOAT32_TO_RGBA8: return "ps_convert_float32_rgba8"; + case ShaderConvert::FLOAT16_TO_RGB5A1: return "ps_convert_float16_rgb5a1"; + case ShaderConvert::RGBA8_TO_FLOAT32: return "ps_convert_rgba8_float32"; + case ShaderConvert::RGBA8_TO_FLOAT24: return "ps_convert_rgba8_float24"; + case ShaderConvert::RGBA8_TO_FLOAT16: return "ps_convert_rgba8_float16"; + case ShaderConvert::RGB5A1_TO_FLOAT16: return "ps_convert_rgb5a1_float16"; + case ShaderConvert::RGBA8_TO_FLOAT32_BILN: return "ps_convert_rgba8_float32_biln"; + case ShaderConvert::RGBA8_TO_FLOAT24_BILN: return "ps_convert_rgba8_float24_biln"; + case ShaderConvert::RGBA8_TO_FLOAT16_BILN: return "ps_convert_rgba8_float16_biln"; + case ShaderConvert::RGB5A1_TO_FLOAT16_BILN: return "ps_convert_rgb5a1_float16_biln"; + case ShaderConvert::DEPTH_COPY: return "ps_depth_copy"; + case ShaderConvert::RGBA_TO_8I: return "ps_convert_rgba_8i"; + case ShaderConvert::CLUT_4: return "ps_convert_clut_4"; + case ShaderConvert::CLUT_8: return "ps_convert_clut_8"; + case ShaderConvert::YUV: return "ps_yuv"; + // clang-format on + default: + ASSERT(0); + return "ShaderConvertUnknownShader"; + } +} + +const char* shaderName(PresentShader value) +{ + switch (value) + { + // clang-format off + case PresentShader::COPY: return "ps_copy"; + case PresentShader::SCANLINE: return "ps_filter_scanlines"; + case PresentShader::DIAGONAL_FILTER: return "ps_filter_diagonal"; + case PresentShader::TRIANGULAR_FILTER: return "ps_filter_triangular"; + case PresentShader::COMPLEX_FILTER: return "ps_filter_complex"; + case PresentShader::LOTTES_FILTER: return "ps_filter_lottes"; + // clang-format on + default: + ASSERT(0); + return "DisplayShaderUnknownShader"; + } +} + +static int MipmapLevelsForSize(int width, int height) +{ + return std::min(static_cast(std::log2(std::max(width, height))) + 1, MAXIMUM_TEXTURE_MIPMAP_LEVELS); +} + +std::unique_ptr g_gs_device; + +GSDevice::GSDevice() = default; + +GSDevice::~GSDevice() +{ + // should've been cleaned up in Destroy() + pxAssert(m_pool[0].empty() && m_pool[1].empty() && !m_merge && !m_weavebob && !m_blend && !m_mad && !m_target_tmp && !m_cas); +} + +const char* GSDevice::RenderAPIToString(RenderAPI api) +{ + switch (api) + { + // clang-format off +#define CASE(x) case RenderAPI::x: return #x + CASE(None); + CASE(D3D11); + CASE(D3D12); + CASE(Metal); + CASE(Vulkan); + CASE(OpenGL); +#undef CASE + // clang-format on + default: + return "Unknown"; + } +} + +bool GSDevice::GetRequestedExclusiveFullscreenMode(u32* width, u32* height, float* refresh_rate) +{ + const std::string mode = Host::GetBaseStringSettingValue("EmuCore/GS", "FullscreenMode", ""); + if (!mode.empty()) + { + const std::string_view mode_view = mode; + std::string_view::size_type sep1 = mode.find('x'); + if (sep1 != std::string_view::npos) + { + std::optional owidth = StringUtil::FromChars(mode_view.substr(0, sep1)); + sep1++; + + while (sep1 < mode.length() && std::isspace(mode[sep1])) + sep1++; + + if (owidth.has_value() && sep1 < mode.length()) + { + std::string_view::size_type sep2 = mode.find('@', sep1); + if (sep2 != std::string_view::npos) + { + std::optional oheight = StringUtil::FromChars(mode_view.substr(sep1, sep2 - sep1)); + sep2++; + + while (sep2 < mode.length() && std::isspace(mode[sep2])) + sep2++; + + if (oheight.has_value() && sep2 < mode.length()) + { + std::optional orefresh_rate = StringUtil::FromChars(mode_view.substr(sep2)); + if (orefresh_rate.has_value()) + { + *width = owidth.value(); + *height = oheight.value(); + *refresh_rate = orefresh_rate.value(); + return true; + } + } + } + } + } + } + + *width = 0; + *height = 0; + *refresh_rate = 0; + return false; +} + +std::string GSDevice::GetFullscreenModeString(u32 width, u32 height, float refresh_rate) +{ + return StringUtil::StdStringFromFormat("%u x %u @ %f hz", width, height, refresh_rate); +} + +void GSDevice::GenerateExpansionIndexBuffer(void* buffer) +{ + static constexpr u32 MAX_INDEX = EXPAND_BUFFER_SIZE / 6 / sizeof(u16); + + u16* idx_buffer = static_cast(buffer); + for (u32 i = 0; i < MAX_INDEX; i++) + { + const u32 base = i * 4; + *(idx_buffer++) = base + 0; + *(idx_buffer++) = base + 1; + *(idx_buffer++) = base + 2; + *(idx_buffer++) = base + 1; + *(idx_buffer++) = base + 2; + *(idx_buffer++) = base + 3; + } +} + +bool GSDevice::Create() +{ + m_vsync_mode = Host::GetEffectiveVSyncMode(); + return true; +} + +void GSDevice::Destroy() +{ + if (m_imgui_font) + { + Recycle(m_imgui_font); + m_imgui_font = nullptr; + } + + ClearCurrent(); + PurgePool(); +} + +bool GSDevice::AcquireWindow(bool recreate_window) +{ + std::optional wi = Host::AcquireRenderWindow(recreate_window); + if (!wi.has_value()) + { + Console.Error("Failed to acquire render window."); + Host::ReportErrorAsync("Error", "Failed to acquire render window. The log may have more information."); + return false; + } + + m_window_info = std::move(wi.value()); + return true; +} + +bool GSDevice::GetHostRefreshRate(float* refresh_rate) +{ + if (m_window_info.surface_refresh_rate > 0.0f) + { + *refresh_rate = m_window_info.surface_refresh_rate; + return true; + } + + return WindowInfo::QueryRefreshRateForWindow(m_window_info, refresh_rate); +} + +bool GSDevice::UpdateImGuiFontTexture() +{ + return true; +} + +GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_reuse) +{ + const GSVector2i size(width, height); + const bool prefer_new_texture = (m_features.prefer_new_textures && type == GSTexture::Type::Texture && !prefer_reuse); + FastList& pool = m_pool[type != GSTexture::Type::Texture]; + + GSTexture* t = nullptr; + auto fallback = pool.end(); + + for (auto i = pool.begin(); i != pool.end(); ++i) + { + t = *i; + + assert(t); + + if (t->GetType() == type && t->GetFormat() == format && t->GetSize() == size && t->GetMipmapLevels() == levels) + { + if (!prefer_new_texture || t->GetLastFrameUsed() != m_frame) + { + m_pool_memory_usage -= t->GetMemUsage(); + pool.erase(i); + break; + } + else if (fallback == pool.end()) + { + fallback = i; + } + } + + t = nullptr; + } + + if (!t) + { + if (pool.size() >= ((type == GSTexture::Type::Texture) ? MAX_POOLED_TEXTURES : MAX_POOLED_TARGETS) && + fallback != pool.end()) + { + t = *fallback; + m_pool_memory_usage -= t->GetMemUsage(); + pool.erase(fallback); + } + else + { + t = CreateSurface(type, width, height, levels, format); + if (!t) + throw std::bad_alloc(); + } + } + + switch (type) + { + case GSTexture::Type::RenderTarget: + { + if (clear) + ClearRenderTarget(t, 0); + else + InvalidateRenderTarget(t); + } + break; + case GSTexture::Type::DepthStencil: + { + if (clear) + ClearDepth(t); + else + InvalidateRenderTarget(t); + } + break; + default: + break; + } + + return t; +} + +void GSDevice::Recycle(GSTexture* t) +{ + if (!t) + return; + + t->SetLastFrameUsed(m_frame); + + FastList& pool = m_pool[!t->IsTexture()]; + pool.push_front(t); + m_pool_memory_usage += t->GetMemUsage(); + + const u32 max_size = t->IsTexture() ? MAX_POOLED_TEXTURES : MAX_POOLED_TARGETS; + const u32 max_age = t->IsTexture() ? MAX_TEXTURE_AGE : MAX_TARGET_AGE; + while (pool.size() > max_size) + { + // Don't toss when the texture was last used in this frame. + // Because we're going to need to keep it alive anyway. + GSTexture* back = pool.back(); + if ((m_frame - back->GetLastFrameUsed()) < max_age) + break; + + m_pool_memory_usage -= back->GetMemUsage(); + delete back; + + pool.pop_back(); + } +} + +bool GSDevice::UsesLowerLeftOrigin() const +{ + const RenderAPI api = GetRenderAPI(); + return (api == RenderAPI::OpenGL); +} + +void GSDevice::AgePool() +{ + m_frame++; + + // Toss out textures when they're not too-recently used. + for (u32 pool_idx = 0; pool_idx < m_pool.size(); pool_idx++) + { + const u32 max_age = (pool_idx == 0) ? MAX_TEXTURE_AGE : MAX_TARGET_AGE; + FastList& pool = m_pool[pool_idx]; + while (!pool.empty()) + { + GSTexture* back = pool.back(); + if ((m_frame - back->GetLastFrameUsed()) < max_age) + break; + + m_pool_memory_usage -= back->GetMemUsage(); + delete back; + + pool.pop_back(); + } + } +} + +void GSDevice::PurgePool() +{ + for (FastList& pool : m_pool) + { + for (GSTexture* t : pool) + delete t; + pool.clear(); + } + m_pool_memory_usage = 0; +} + +GSTexture* GSDevice::CreateRenderTarget(int w, int h, GSTexture::Format format, bool clear) +{ + return FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, format, clear, true); +} + +GSTexture* GSDevice::CreateDepthStencil(int w, int h, GSTexture::Format format, bool clear) +{ + return FetchSurface(GSTexture::Type::DepthStencil, w, h, 1, format, clear, true); +} + +GSTexture* GSDevice::CreateTexture(int w, int h, int mipmap_levels, GSTexture::Format format, bool prefer_reuse /* = false */) +{ + const int levels = mipmap_levels < 0 ? MipmapLevelsForSize(w, h) : mipmap_levels; + return FetchSurface(GSTexture::Type::Texture, w, h, levels, format, false, prefer_reuse); +} + +void GSDevice::StretchRect(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, ShaderConvert shader, bool linear) +{ + StretchRect(sTex, GSVector4(0, 0, 1, 1), dTex, dRect, shader, linear); +} + +void GSDevice::DrawMultiStretchRects( + const MultiStretchRect* rects, u32 num_rects, GSTexture* dTex, ShaderConvert shader) +{ + for (u32 i = 0; i < num_rects; i++) + { + const MultiStretchRect& sr = rects[i]; + pxAssert(shader == ShaderConvert::COPY || rects[0].wmask.wrgba == 0xf); + if (rects[0].wmask.wrgba != 0xf) + { + g_gs_device->StretchRect(sr.src, sr.src_rect, dTex, sr.dst_rect, rects[0].wmask.wr, + rects[0].wmask.wg, rects[0].wmask.wb, rects[0].wmask.wa); + } + else + { + g_gs_device->StretchRect(sr.src, sr.src_rect, dTex, sr.dst_rect, shader, sr.linear); + } + } +} + +void GSDevice::SortMultiStretchRects(MultiStretchRect* rects, u32 num_rects) +{ + // Depending on num_rects, insertion sort may be better here. + std::sort(rects, rects + num_rects, [](const MultiStretchRect& lhs, const MultiStretchRect& rhs) { + return lhs.src < rhs.src || lhs.linear < rhs.linear; + }); +} + +void GSDevice::ClearCurrent() +{ + m_current = nullptr; + + delete m_merge; + delete m_weavebob; + delete m_blend; + delete m_mad; + delete m_target_tmp; + delete m_cas; + + m_merge = nullptr; + m_weavebob = nullptr; + m_blend = nullptr; + m_mad = nullptr; + m_target_tmp = nullptr; + m_cas = nullptr; +} + +void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c) +{ + if (ResizeRenderTarget(&m_merge, fs.x, fs.y, false, false)) + DoMerge(sTex, sRect, m_merge, dRect, PMODE, EXTBUF, c, GSConfig.PCRTCOffsets); + + m_current = m_merge; +} + +void GSDevice::Interlace(const GSVector2i& ds, int field, int mode, float yoffset) +{ + static int bufIdx = 0; + float offset = yoffset * static_cast(field); + offset = GSConfig.DisableInterlaceOffset ? 0.0f : offset; + + auto do_interlace = [this](GSTexture* sTex, GSTexture* dTex, ShaderInterlace shader, bool linear, float yoffset, int bufIdx) { + const GSVector2i ds_i = dTex->GetSize(); + const GSVector2 ds = GSVector2(static_cast(ds_i.x), static_cast(ds_i.y)); + + GSVector4 sRect = GSVector4(0.0f, 0.0f, 1.0f, 1.0f); + GSVector4 dRect = GSVector4(0.0f, yoffset, ds.x, ds.y + yoffset); + + // Select the top or bottom half for MAD buffering. + if (shader == ShaderInterlace::MAD_BUFFER) + { + const float half_size = ds.y * 0.5f; + if ((bufIdx >> 1) == 1) + dRect.y += half_size; + else + dRect.w -= half_size; + } + + const InterlaceConstantBuffer cb = { + GSVector4(static_cast(bufIdx), 1.0f / ds.y, ds.y, MAD_SENSITIVITY) + }; + + GL_PUSH("DoInterlace %dx%d Shader:%d Linear:%d", ds_i.x, ds_i.y, static_cast(shader), linear); + DoInterlace(sTex, sRect, dTex, dRect, shader, linear, cb); + }; + + switch (mode) + { + case 0: // Weave + ResizeRenderTarget(&m_weavebob, ds.x, ds.y, true, false); + do_interlace(m_merge, m_weavebob, ShaderInterlace::WEAVE, false, offset, field); + m_current = m_weavebob; + break; + case 1: // Bob + // Field is reversed here as we are countering the bounce. + ResizeRenderTarget(&m_weavebob, ds.x, ds.y, true, false); + do_interlace(m_merge, m_weavebob, ShaderInterlace::BOB, true, yoffset * (1 - field), 0); + m_current = m_weavebob; + break; + case 2: // Blend + ResizeRenderTarget(&m_weavebob, ds.x, ds.y, true, false); + do_interlace(m_merge, m_weavebob, ShaderInterlace::WEAVE, false, offset, field); + ResizeRenderTarget(&m_blend, ds.x, ds.y, true, false); + do_interlace(m_weavebob, m_blend, ShaderInterlace::BLEND, false, 0, 0); + m_current = m_blend; + break; + case 3: // FastMAD Motion Adaptive Deinterlacing + bufIdx++; + bufIdx &= ~1; + bufIdx |= field; + bufIdx &= 3; + ResizeRenderTarget(&m_mad, ds.x, ds.y * 2.0f, true, false); + do_interlace(m_merge, m_mad, ShaderInterlace::MAD_BUFFER, false, offset, bufIdx); + ResizeRenderTarget(&m_weavebob, ds.x, ds.y, true, false); + do_interlace(m_mad, m_weavebob, ShaderInterlace::MAD_RECONSTRUCT, false, 0, bufIdx); + m_current = m_weavebob; + break; + default: + m_current = m_merge; + break; + } +} + +void GSDevice::FXAA() +{ + // Combining FXAA+ShadeBoost can't share the same target. + GSTexture*& dTex = (m_current == m_target_tmp) ? m_merge : m_target_tmp; + if (ResizeRenderTarget(&dTex, m_current->GetWidth(), m_current->GetHeight(), false, false)) + { + DoFXAA(m_current, dTex); + m_current = dTex; + } +} + +void GSDevice::ShadeBoost() +{ + if (ResizeRenderTarget(&m_target_tmp, m_current->GetWidth(), m_current->GetHeight(), false, false)) + { + // predivide to avoid the divide (multiply) in the shader + const float params[4] = { + static_cast(GSConfig.ShadeBoost_Brightness) * (1.0f / 50.0f), + static_cast(GSConfig.ShadeBoost_Contrast) * (1.0f / 50.0f), + static_cast(GSConfig.ShadeBoost_Saturation) * (1.0f / 50.0f), + }; + + DoShadeBoost(m_current, m_target_tmp, params); + + m_current = m_target_tmp; + } +} + +void GSDevice::Resize(int width, int height) +{ + GSTexture*& dTex = (m_current == m_target_tmp) ? m_merge : m_target_tmp; + GSVector2i s = m_current->GetSize(); + int multiplier = 1; + + while (width > s.x || height > s.y) + { + s = m_current->GetSize() * GSVector2i(++multiplier); + } + + if (ResizeRenderTarget(&dTex, s.x, s.y, false, false)) + { + const GSVector4 sRect(0, 0, 1, 1); + const GSVector4 dRect(0, 0, s.x, s.y); + StretchRect(m_current, sRect, dTex, dRect, ShaderConvert::COPY, false); + m_current = dTex; + } +} + +bool GSDevice::ResizeRenderTarget(GSTexture** t, int w, int h, bool preserve_contents, bool recycle) +{ + pxAssert(t); + + GSTexture* orig_tex = *t; + if (orig_tex && orig_tex->GetWidth() == w && orig_tex->GetHeight() == h) + { + if (!preserve_contents) + InvalidateRenderTarget(orig_tex); + + return true; + } + + GSTexture* new_tex; + try + { + const GSTexture::Format fmt = orig_tex ? orig_tex->GetFormat() : GSTexture::Format::Color; + new_tex = FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, fmt, !preserve_contents, true); + } + catch (std::bad_alloc&) + { + Console.WriteLn("%dx%d texture allocation failed in ResizeTexture()", w, h); + return false; + } + + if (preserve_contents && orig_tex) + { + constexpr GSVector4 sRect = GSVector4::cxpr(0, 0, 1, 1); + const GSVector4 dRect = GSVector4(orig_tex->GetRect()); + StretchRect(orig_tex, sRect, new_tex, dRect, ShaderConvert::COPY, true); + } + + if (orig_tex) + { + if (recycle) + Recycle(orig_tex); + else + delete orig_tex; + } + + *t = new_tex; + return true; +} + +void GSDevice::SetHWDrawConfigForAlphaPass(GSHWDrawConfig::PSSelector* ps, + GSHWDrawConfig::ColorMaskSelector* cms, + GSHWDrawConfig::BlendState* bs, + GSHWDrawConfig::DepthStencilSelector* dss) +{ + // only need to compute the alpha component (allow the shader to optimize better) + ps->no_ablend = false; + ps->only_alpha = true; + + // definitely don't need to compute software blend (this may get rid of some barriers) + ps->blend_a = ps->blend_b = ps->blend_c = ps->blend_d = 0; + + // only write alpha (RGB=0,A=1) + cms->wrgba = (1 << 3); + + // no need for hardware blending, since we're not writing RGB + bs->enable = false; + + // if depth writes are on, we can optimize to an EQUAL test, otherwise we leave the tests alone + // since the alpha channel isn't blended, the last fragment wins and this'll be okay + if (dss->zwe) + { + dss->zwe = false; + dss->ztst = ZTST_GEQUAL; + } +} + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunused-function" +#pragma clang diagnostic ignored "-Wignored-qualifiers" +#elif defined(__GNUC__) +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wignored-qualifiers" +#endif + +// Kinda grotty, but better than copy/pasting the relevant bits in.. +#define A_CPU 1 +#include "bin/resources/shaders/common/ffx_a.h" +#include "bin/resources/shaders/common/ffx_cas.h" + +#if defined(__clang__) +#pragma clang diagnostic pop +#elif defined(__GNUC__) +#pragma GCC diagnostic pop +#endif + +bool GSDevice::GetCASShaderSource(std::string* source) +{ + std::optional ffx_a_source(Host::ReadResourceFileToString("shaders/common/ffx_a.h")); + std::optional ffx_cas_source(Host::ReadResourceFileToString("shaders/common/ffx_cas.h")); + if (!ffx_a_source.has_value() || !ffx_cas_source.has_value()) + return false; + + // Since our shader compilers don't support includes, and OpenGL doesn't at all... we'll do a really cheeky string replace. + StringUtil::ReplaceAll(source, "#include \"ffx_a.h\"", ffx_a_source.value()); + StringUtil::ReplaceAll(source, "#include \"ffx_cas.h\"", ffx_cas_source.value()); + return true; +} + +void GSDevice::CAS(GSTexture*& tex, GSVector4i& src_rect, GSVector4& src_uv, const GSVector4& draw_rect, bool sharpen_only) +{ + const int dst_width = sharpen_only ? src_rect.width() : static_cast(std::ceil(draw_rect.z - draw_rect.x)); + const int dst_height = sharpen_only ? src_rect.height() : static_cast(std::ceil(draw_rect.w - draw_rect.y)); + const int src_offset_x = static_cast(src_rect.x); + const int src_offset_y = static_cast(src_rect.y); + + GSTexture* src_tex = tex; + if (!m_cas || m_cas->GetWidth() != dst_width || m_cas->GetHeight() != dst_height) + { + delete m_cas; + m_cas = CreateSurface(GSTexture::Type::RWTexture, dst_width, dst_height, 1, GSTexture::Format::Color); + if (!m_cas) + { + Console.Error("Failed to allocate CAS RW texture."); + return; + } + } + + std::array consts; + CasSetup(&consts[0], &consts[4], static_cast(GSConfig.CAS_Sharpness) * 0.01f, + static_cast(src_rect.width()), static_cast(src_rect.height()), + static_cast(dst_width), static_cast(dst_height)); + consts[8] = static_cast(src_offset_x); + consts[9] = static_cast(src_offset_y); + + if (!DoCAS(src_tex, m_cas, sharpen_only, consts)) + { + // leave textures intact if we failed + Console.Warning("Applying CAS failed."); + return; + } + + tex = m_cas; + src_rect = GSVector4i(0, 0, dst_width, dst_height); + src_uv = GSVector4(0.0f, 0.0f, 1.0f, 1.0f); +} + +// clang-format off + +const std::array GSDevice::m_replaceDualSrcBlendMap = +{{ + SRC_COLOR, // SRC_COLOR + INV_SRC_COLOR, // INV_SRC_COLOR + DST_COLOR, // DST_COLOR + INV_DST_COLOR, // INV_DST_COLOR + SRC_COLOR, // SRC1_COLOR + INV_SRC_COLOR, // INV_SRC1_COLOR + SRC_ALPHA, // SRC_ALPHA + INV_SRC_ALPHA, // INV_SRC_ALPHA + DST_ALPHA, // DST_ALPHA + INV_DST_ALPHA, // INV_DST_ALPHA + SRC_ALPHA, // SRC1_ALPHA + INV_SRC_ALPHA, // INV_SRC1_ALPHA + CONST_COLOR, // CONST_COLOR + INV_CONST_COLOR, // INV_CONST_COLOR + CONST_ONE, // CONST_ONE + CONST_ZERO // CONST_ZERO +}}; + +const std::array GSDevice::m_blendMap = +{{ + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 0000: (Cs - Cs)*As + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 0001: (Cs - Cs)*As + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 0002: (Cs - Cs)*As + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 0010: (Cs - Cs)*Ad + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 0011: (Cs - Cs)*Ad + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 0012: (Cs - Cs)*Ad + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 0020: (Cs - Cs)*F + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 0021: (Cs - Cs)*F + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 0022: (Cs - Cs)*F + 0 ==> 0 + { BLEND_A_MAX | BLEND_MIX2 , OP_SUBTRACT , CONST_ONE , SRC1_ALPHA} , // 0100: (Cs - Cd)*As + Cs ==> Cs*(As + 1) - Cd*As + { BLEND_MIX1 , OP_ADD , SRC1_ALPHA , INV_SRC1_ALPHA} , // 0101: (Cs - Cd)*As + Cd ==> Cs*As + Cd*(1 - As) + { BLEND_MIX1 , OP_SUBTRACT , SRC1_ALPHA , SRC1_ALPHA} , // 0102: (Cs - Cd)*As + 0 ==> Cs*As - Cd*As + { BLEND_A_MAX , OP_SUBTRACT , CONST_ONE , DST_ALPHA} , // 0110: (Cs - Cd)*Ad + Cs ==> Cs*(Ad + 1) - Cd*Ad + { 0 , OP_ADD , DST_ALPHA , INV_DST_ALPHA} , // 0111: (Cs - Cd)*Ad + Cd ==> Cs*Ad + Cd*(1 - Ad) + { 0 , OP_SUBTRACT , DST_ALPHA , DST_ALPHA} , // 0112: (Cs - Cd)*Ad + 0 ==> Cs*Ad - Cd*Ad + { BLEND_A_MAX | BLEND_MIX2 , OP_SUBTRACT , CONST_ONE , CONST_COLOR} , // 0120: (Cs - Cd)*F + Cs ==> Cs*(F + 1) - Cd*F + { BLEND_MIX1 , OP_ADD , CONST_COLOR , INV_CONST_COLOR} , // 0121: (Cs - Cd)*F + Cd ==> Cs*F + Cd*(1 - F) + { BLEND_MIX1 , OP_SUBTRACT , CONST_COLOR , CONST_COLOR} , // 0122: (Cs - Cd)*F + 0 ==> Cs*F - Cd*F + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 0200: (Cs - 0)*As + Cs ==> Cs*(As + 1) + { BLEND_ACCU , OP_ADD , SRC1_ALPHA , CONST_ONE} , // 0201: (Cs - 0)*As + Cd ==> Cs*As + Cd + { BLEND_NO_REC , OP_ADD , SRC1_ALPHA , CONST_ZERO} , // 0202: (Cs - 0)*As + 0 ==> Cs*As + { BLEND_A_MAX , OP_ADD , CONST_ONE , CONST_ZERO} , // 0210: (Cs - 0)*Ad + Cs ==> Cs*(Ad + 1) + { BLEND_HW_CLR3 , OP_ADD , DST_ALPHA , CONST_ONE} , // 0211: (Cs - 0)*Ad + Cd ==> Cs*Ad + Cd + { BLEND_HW_CLR3 , OP_ADD , DST_ALPHA , CONST_ZERO} , // 0212: (Cs - 0)*Ad + 0 ==> Cs*Ad + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 0220: (Cs - 0)*F + Cs ==> Cs*(F + 1) + { BLEND_ACCU , OP_ADD , CONST_COLOR , CONST_ONE} , // 0221: (Cs - 0)*F + Cd ==> Cs*F + Cd + { BLEND_NO_REC , OP_ADD , CONST_COLOR , CONST_ZERO} , // 0222: (Cs - 0)*F + 0 ==> Cs*F + { BLEND_MIX3 , OP_ADD , INV_SRC1_ALPHA , SRC1_ALPHA} , // 1000: (Cd - Cs)*As + Cs ==> Cd*As + Cs*(1 - As) + { BLEND_A_MAX | BLEND_MIX1 , OP_REV_SUBTRACT , SRC1_ALPHA , CONST_ONE} , // 1001: (Cd - Cs)*As + Cd ==> Cd*(As + 1) - Cs*As + { BLEND_MIX1 , OP_REV_SUBTRACT , SRC1_ALPHA , SRC1_ALPHA} , // 1002: (Cd - Cs)*As + 0 ==> Cd*As - Cs*As + { 0 , OP_ADD , INV_DST_ALPHA , DST_ALPHA} , // 1010: (Cd - Cs)*Ad + Cs ==> Cd*Ad + Cs*(1 - Ad) + { BLEND_A_MAX , OP_REV_SUBTRACT , DST_ALPHA , CONST_ONE} , // 1011: (Cd - Cs)*Ad + Cd ==> Cd*(Ad + 1) - Cs*Ad + { 0 , OP_REV_SUBTRACT , DST_ALPHA , DST_ALPHA} , // 1012: (Cd - Cs)*Ad + 0 ==> Cd*Ad - Cs*Ad + { BLEND_MIX3 , OP_ADD , INV_CONST_COLOR , CONST_COLOR} , // 1020: (Cd - Cs)*F + Cs ==> Cd*F + Cs*(1 - F) + { BLEND_A_MAX | BLEND_MIX1 , OP_REV_SUBTRACT , CONST_COLOR , CONST_ONE} , // 1021: (Cd - Cs)*F + Cd ==> Cd*(F + 1) - Cs*F + { BLEND_MIX1 , OP_REV_SUBTRACT , CONST_COLOR , CONST_COLOR} , // 1022: (Cd - Cs)*F + 0 ==> Cd*F - Cs*F + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 1100: (Cd - Cd)*As + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 1101: (Cd - Cd)*As + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 1102: (Cd - Cd)*As + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 1110: (Cd - Cd)*Ad + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 1111: (Cd - Cd)*Ad + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 1112: (Cd - Cd)*Ad + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 1120: (Cd - Cd)*F + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 1121: (Cd - Cd)*F + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 1122: (Cd - Cd)*F + 0 ==> 0 + { 0 , OP_ADD , CONST_ONE , SRC1_ALPHA} , // 1200: (Cd - 0)*As + Cs ==> Cs + Cd*As + { BLEND_HW_CLR1 , OP_ADD , DST_COLOR , SRC1_ALPHA} , // 1201: (Cd - 0)*As + Cd ==> Cd*(1 + As) + { BLEND_HW_CLR2 , OP_ADD , DST_COLOR , SRC1_ALPHA} , // 1202: (Cd - 0)*As + 0 ==> Cd*As + { 0 , OP_ADD , CONST_ONE , DST_ALPHA} , // 1210: (Cd - 0)*Ad + Cs ==> Cs + Cd*Ad + { BLEND_HW_CLR1 , OP_ADD , DST_COLOR , DST_ALPHA} , // 1211: (Cd - 0)*Ad + Cd ==> Cd*(1 + Ad) + { 0 , OP_ADD , CONST_ZERO , DST_ALPHA} , // 1212: (Cd - 0)*Ad + 0 ==> Cd*Ad + { 0 , OP_ADD , CONST_ONE , CONST_COLOR} , // 1220: (Cd - 0)*F + Cs ==> Cs + Cd*F + { BLEND_HW_CLR1 , OP_ADD , DST_COLOR , CONST_COLOR} , // 1221: (Cd - 0)*F + Cd ==> Cd*(1 + F) + { BLEND_HW_CLR2 , OP_ADD , DST_COLOR , CONST_COLOR} , // 1222: (Cd - 0)*F + 0 ==> Cd*F + { BLEND_NO_REC , OP_ADD , INV_SRC1_ALPHA , CONST_ZERO} , // 2000: (0 - Cs)*As + Cs ==> Cs*(1 - As) + { BLEND_ACCU , OP_REV_SUBTRACT , SRC1_ALPHA , CONST_ONE} , // 2001: (0 - Cs)*As + Cd ==> Cd - Cs*As + { BLEND_NO_REC , OP_REV_SUBTRACT , SRC1_ALPHA , CONST_ZERO} , // 2002: (0 - Cs)*As + 0 ==> 0 - Cs*As + { 0 , OP_ADD , INV_DST_ALPHA , CONST_ZERO} , // 2010: (0 - Cs)*Ad + Cs ==> Cs*(1 - Ad) + { BLEND_HW_CLR3 , OP_REV_SUBTRACT , DST_ALPHA , CONST_ONE} , // 2011: (0 - Cs)*Ad + Cd ==> Cd - Cs*Ad + { 0 , OP_REV_SUBTRACT , DST_ALPHA , CONST_ZERO} , // 2012: (0 - Cs)*Ad + 0 ==> 0 - Cs*Ad + { BLEND_NO_REC , OP_ADD , INV_CONST_COLOR , CONST_ZERO} , // 2020: (0 - Cs)*F + Cs ==> Cs*(1 - F) + { BLEND_ACCU , OP_REV_SUBTRACT , CONST_COLOR , CONST_ONE} , // 2021: (0 - Cs)*F + Cd ==> Cd - Cs*F + { BLEND_NO_REC , OP_REV_SUBTRACT , CONST_COLOR , CONST_ZERO} , // 2022: (0 - Cs)*F + 0 ==> 0 - Cs*F + { 0 , OP_SUBTRACT , CONST_ONE , SRC1_ALPHA} , // 2100: (0 - Cd)*As + Cs ==> Cs - Cd*As + { 0 , OP_ADD , CONST_ZERO , INV_SRC1_ALPHA} , // 2101: (0 - Cd)*As + Cd ==> Cd*(1 - As) + { 0 , OP_SUBTRACT , CONST_ZERO , SRC1_ALPHA} , // 2102: (0 - Cd)*As + 0 ==> 0 - Cd*As + { 0 , OP_SUBTRACT , CONST_ONE , DST_ALPHA} , // 2110: (0 - Cd)*Ad + Cs ==> Cs - Cd*Ad + { 0 , OP_ADD , CONST_ZERO , INV_DST_ALPHA} , // 2111: (0 - Cd)*Ad + Cd ==> Cd*(1 - Ad) + { 0 , OP_SUBTRACT , CONST_ONE , DST_ALPHA} , // 2112: (0 - Cd)*Ad + 0 ==> 0 - Cd*Ad + { 0 , OP_SUBTRACT , CONST_ONE , CONST_COLOR} , // 2120: (0 - Cd)*F + Cs ==> Cs - Cd*F + { 0 , OP_ADD , CONST_ZERO , INV_CONST_COLOR} , // 2121: (0 - Cd)*F + Cd ==> Cd*(1 - F) + { 0 , OP_SUBTRACT , CONST_ONE , CONST_COLOR} , // 2122: (0 - Cd)*F + 0 ==> 0 - Cd*F + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 2200: (0 - 0)*As + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 2201: (0 - 0)*As + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 2202: (0 - 0)*As + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 2210: (0 - 0)*Ad + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 2211: (0 - 0)*Ad + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 2212: (0 - 0)*Ad + 0 ==> 0 + { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 2220: (0 - 0)*F + Cs ==> Cs + { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 2221: (0 - 0)*F + Cd ==> Cd + { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 2222: (0 - 0)*F + 0 ==> 0 +}}; diff --git a/Classes/Video/GSDeviceMTL.mm b/Classes/Video/GSDeviceMTL.mm index 9c498a8..1a9130e 100644 --- a/Classes/Video/GSDeviceMTL.mm +++ b/Classes/Video/GSDeviceMTL.mm @@ -14,27 +14,35 @@ */ #include "PrecompiledHeader.h" -#include "GSMetalCPPAccessible.h" -#include "GSDeviceMTL.h" -#include "Frontend/MetalHostDisplay.h" -#include "GSTextureMTL.h" +#include "Host.h" +#include "GS/Renderers/Metal/GSMetalCPPAccessible.h" +#include "GS/Renderers/Metal/GSDeviceMTL.h" +#include "GS/Renderers/Metal/GSTextureMTL.h" #include "GS/GSPerfMon.h" -#include "HostDisplay.h" #ifdef __APPLE__ #include "GSMTLSharedHeader.h" -GSDevice* MakeGSDeviceMTL() +static constexpr simd::float2 ToSimd(const GSVector2& vec) { - return new GSDeviceMTL(); + return simd::make_float2(vec.x, vec.y); } -static constexpr simd::float2 ToSimd(const GSVector2& vec) +GSDevice* MakeGSDeviceMTL() { - return simd::make_float2(vec.x, vec.y); + return new GSDeviceMTL(); } +std::vector GetMetalAdapterList() +{ @autoreleasepool { + std::vector list; + auto devs = MRCTransfer(MTLCopyAllDevices()); + for (id dev in devs.Get()) + list.push_back([[dev name] UTF8String]); + return list; +}} + bool GSDeviceMTL::UsageTracker::PrepareForAllocation(u64 last_draw, size_t amt) { auto removeme = std::find_if(m_usage.begin(), m_usage.end(), [last_draw](UsageEntry usage){ return usage.drawno > last_draw; }); @@ -81,11 +89,8 @@ } GSDeviceMTL::~GSDeviceMTL() -{ @autoreleasepool { - FlushEncoders(); - std::lock_guard guard(m_backref->first); - m_backref->second = nullptr; -}} +{ +} GSDeviceMTL::Map GSDeviceMTL::Allocate(UploadBuffer& buffer, size_t amt) { @@ -126,10 +131,10 @@ { id enc = GetVertexUploadEncoder(); [enc copyFromBuffer:buffer.cpubuffer - sourceOffset:buffer.last_upload - toBuffer:buffer.gpubuffer + sourceOffset:buffer.last_upload + toBuffer:buffer.gpubuffer destinationOffset:buffer.last_upload - size:base_pos - buffer.last_upload]; + size:base_pos - buffer.last_upload]; } buffer.last_upload = 0; } @@ -166,10 +171,10 @@ id enc = GetVertexUploadEncoder(); [enc copyFromBuffer:buffer.cpubuffer - sourceOffset:buffer.last_upload - toBuffer:buffer.gpubuffer + sourceOffset:buffer.last_upload + toBuffer:buffer.gpubuffer destinationOffset:buffer.last_upload - size:buffer.usage.Pos() - buffer.last_upload]; + size:buffer.usage.Pos() - buffer.last_upload]; [enc updateFence:m_draw_sync_fence]; buffer.last_upload = buffer.usage.Pos(); } @@ -240,15 +245,17 @@ // We can do the update non-atomically because we only ever update under the lock u64 newval = std::max(draw, m_last_finished_draw.load(std::memory_order_relaxed)); m_last_finished_draw.store(newval, std::memory_order_release); - static_cast(g_host_display.get())->AccumulateCommandBufferTime(buffer); + AccumulateCommandBufferTime(buffer); } void GSDeviceMTL::FlushEncoders() { - if (!m_current_render_cmdbuf) - return; - EndRenderPass(); - Sync(m_vertex_upload_buf); + bool needs_submit = m_current_render_cmdbuf; + if (needs_submit) + { + EndRenderPass(); + Sync(m_vertex_upload_buf); + } if (m_dev.features.unified_memory) { ASSERT(!m_vertex_upload_cmdbuf && "Should never be used!"); @@ -267,6 +274,8 @@ m_texture_upload_encoder = nil; m_texture_upload_cmdbuf = nil; } + if (!needs_submit) + return; if (m_late_texture_upload_encoder) { [m_late_texture_upload_encoder endEncoding]; @@ -364,6 +373,7 @@ if (m_current_render.encoder) { EndDebugGroup(m_current_render.encoder); + g_perfmon.Put(GSPerfMon::RenderPasses, 1); if (m_spin_timer) [m_current_render.encoder updateFence:m_spin_fence afterStages:MTLRenderStageFragment]; [m_current_render.encoder endEncoding]; @@ -379,8 +389,8 @@ GSTextureMTL* md = static_cast(depth); GSTextureMTL* ms = static_cast(stencil); bool needs_new = color != m_current_render.color_target - || depth != m_current_render.depth_target - || stencil != m_current_render.stencil_target; + || depth != m_current_render.depth_target + || stencil != m_current_render.stencil_target; GSVector4 color_clear; float depth_clear=0; int stencil_clear=0; @@ -452,7 +462,7 @@ [m_current_render.encoder setLabel:name]; if (!m_dev.features.unified_memory) [m_current_render.encoder waitForFence:m_draw_sync_fence - beforeStages:MTLRenderStageVertex]; + beforeStages:MTLRenderStageVertex]; m_current_render.color_target = color; m_current_render.depth_target = depth; m_current_render.stencil_target = stencil; @@ -613,8 +623,8 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) { BeginRenderPass(@"ShadeBoost", dTex, MTLLoadActionDontCare, nullptr, MTLLoadActionDontCare); [m_current_render.encoder setFragmentBytes:params - length:sizeof(float) * 4 - atIndex:GSMTLBufferIndexUniforms]; + length:sizeof(float) * 4 + atIndex:GSMTLBufferIndexUniforms]; RenderCopy(sTex, m_shadeboost_pipeline, GSVector4i(0, 0, dTex->GetSize().x, dTex->GetSize().y)); } @@ -633,7 +643,7 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) [enc setTexture:static_cast(dTex)->GetTexture() atIndex:1]; [enc setBytes:&constants length:sizeof(constants) atIndex:GSMTLBufferIndexUniforms]; [enc dispatchThreadgroups:MTLSizeMake(dispatchX, dispatchY, 1) - threadsPerThreadgroup:MTLSizeMake(64, 1, 1)]; + threadsPerThreadgroup:MTLSizeMake(64, 1, 1)]; [enc endEncoding]; return true; }} @@ -675,9 +685,9 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) NSError* err; MRCOwned> res = MRCTransfer([m_dev.dev newComputePipelineStateWithDescriptor:desc - options:0 - reflection:nil - error:&err]); + options:0 + reflection:nil + error:&err]); if (unlikely(err)) { NSString* msg = [NSString stringWithFormat:@"Failed to create pipeline %@: %@", name, [err localizedDescription]]; @@ -705,22 +715,122 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS [fc setConstantValue:&value type:MTLDataTypeUInt atIndex:constant]; } +template +static void OnMainThread(Fn&& fn) +{ + if ([NSThread isMainThread]) + fn(); + else + dispatch_sync(dispatch_get_main_queue(), fn); +} + +RenderAPI GSDeviceMTL::GetRenderAPI() const +{ + return RenderAPI::Metal; +} + +bool GSDeviceMTL::HasSurface() const { return static_cast(m_layer);} + +void GSDeviceMTL::AttachSurfaceOnMainThread() +{ + ASSERT([NSThread isMainThread]); + m_layer = MRCRetain([CAMetalLayer layer]); + [m_layer setDrawableSize:CGSizeMake(m_window_info.surface_width, m_window_info.surface_height)]; + [m_layer setDevice:m_dev.dev]; + m_view = MRCRetain((__bridge NSView*)m_window_info.window_handle); + [m_view setWantsLayer:YES]; + [m_view setLayer:m_layer]; +} + +void GSDeviceMTL::DetachSurfaceOnMainThread() +{ + ASSERT([NSThread isMainThread]); + [m_view setLayer:nullptr]; + [m_view setWantsLayer:NO]; + m_view = nullptr; + m_layer = nullptr; +} + +// Metal is fun and won't let you use newBufferWithBytes for private buffers +static MRCOwned> CreatePrivateBufferWithContent( + id dev, id cb, + MTLResourceOptions options, NSUInteger length, + std::function fill) +{ + MRCOwned> tmp = MRCTransfer([dev newBufferWithLength:length options:MTLResourceStorageModeShared]); + MRCOwned> actual = MRCTransfer([dev newBufferWithLength:length options:options|MTLResourceStorageModePrivate]); + fill([tmp contents]); + id blit = [cb blitCommandEncoder]; + [blit copyFromBuffer:tmp sourceOffset:0 toBuffer:actual destinationOffset:0 size:length]; + [blit endEncoding]; + return actual; +} + bool GSDeviceMTL::Create() { @autoreleasepool { if (!GSDevice::Create()) return false; - if (g_host_display->GetRenderAPI() != RenderAPI::Metal) - return false; + NSString* ns_adapter_name = [NSString stringWithUTF8String:EmuConfig.GS.Adapter.c_str()]; + auto devs = MRCTransfer(MTLCopyAllDevices()); + for (id dev in devs.Get()) + { + if ([[dev name] isEqualToString:ns_adapter_name]) + m_dev = GSMTLDevice(MRCRetain(dev)); + } + if (!m_dev.dev) + { + if (!EmuConfig.GS.Adapter.empty()) + Console.Warning("Metal: Couldn't find adapter %s, using default", EmuConfig.GS.Adapter.c_str()); + m_dev = GSMTLDevice(MRCTransfer(MTLCreateSystemDefaultDevice())); + if (!m_dev.dev) + Host::ReportErrorAsync("No Metal Devices Available", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all macs from 2012 onwards)."); + } + m_queue = MRCTransfer([m_dev.dev newCommandQueue]); + + m_pass_desc = MRCTransfer([MTLRenderPassDescriptor new]); + [m_pass_desc colorAttachments][0].loadAction = MTLLoadActionClear; + [m_pass_desc colorAttachments][0].clearColor = MTLClearColorMake(0, 0, 0, 0); + [m_pass_desc colorAttachments][0].storeAction = MTLStoreActionStore; + + if (char* env = getenv("MTL_USE_PRESENT_DRAWABLE")) + m_use_present_drawable = static_cast(atoi(env)); + else if (@available(macOS 13.0, *)) + m_use_present_drawable = UsePresentDrawable::Always; + else // Before Ventura, presentDrawable acts like vsync is on when windowed + m_use_present_drawable = UsePresentDrawable::IfVsync; + + m_capture_start_frame = 0; + if (char* env = getenv("MTL_CAPTURE")) + { + m_capture_start_frame = atoi(env); + } + if (m_capture_start_frame) + { + Console.WriteLn("Metal will capture frame %u", m_capture_start_frame); + } - if (!g_host_display->HasDevice() || !g_host_display->HasSurface()) + if (m_dev.IsOk() && m_queue) + { + // This is a little less than ideal, pinging back and forward between threads, but we don't really + // have any other option, because Qt uses a blocking queued connection for window acquire. + if (!AcquireWindow(true)) + return false; + + OnMainThread([this] + { + AttachSurfaceOnMainThread(); + }); + [m_layer setDisplaySyncEnabled:m_vsync_mode != VsyncMode::Off]; + } + else + { return false; - m_dev = *static_cast(g_host_display->GetDevice()); - m_queue = MRCRetain((__bridge id)g_host_display->GetContext()); - MTLPixelFormat layer_px_fmt = [(__bridge CAMetalLayer*)g_host_display->GetSurface() pixelFormat]; + } + + MTLPixelFormat layer_px_fmt = [m_layer pixelFormat]; m_features.broken_point_sampler = [[m_dev.dev name] containsString:@"AMD"]; - m_features.geometry_shader = false; m_features.vs_expand = true; m_features.primitive_id = m_dev.features.primid; m_features.texture_barrier = true; @@ -735,6 +845,7 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS m_features.clip_control = true; m_features.stencil_buffer = true; m_features.cas_sharpening = true; + m_features.test_and_sample_depth = true; try { @@ -763,6 +874,9 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS m_cas_pipeline[sharpen_only] = MakeComputePipeline(LoadShader(shader), sharpen_only ? @"CAS Sharpen" : @"CAS Upscale"); } + m_expand_index_buffer = CreatePrivateBufferWithContent(m_dev.dev, initCommands, MTLResourceHazardTrackingModeUntracked, EXPAND_BUFFER_SIZE, GenerateExpansionIndexBuffer); + [m_expand_index_buffer setLabel:@"Point/Sprite Expand Indices"]; + m_hw_vertex = MRCTransfer([MTLVertexDescriptor new]); [[[m_hw_vertex layouts] objectAtIndexedSubscript:GSMTLBufferIndexHWVertices] setStride:sizeof(GSVertex)]; applyAttribute(m_hw_vertex, GSMTLAttributeIndexST, MTLVertexFormatFloat2, offsetof(GSVertex, ST), GSMTLBufferIndexHWVertices); @@ -1045,6 +1159,257 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS return true; }} +void GSDeviceMTL::Destroy() +{ @autoreleasepool { + FlushEncoders(); + std::lock_guard guard(m_backref->first); + m_backref->second = nullptr; + + GSDevice::Destroy(); + GSDeviceMTL::DestroySurface(); + m_queue = nullptr; + m_dev.Reset(); +}} + +void GSDeviceMTL::DestroySurface() +{ + if (!m_layer) + return; + OnMainThread([this]{ DetachSurfaceOnMainThread(); }); + m_layer = nullptr; +} + +bool GSDeviceMTL::UpdateWindow() +{ + DestroySurface(); + + if (!AcquireWindow(false)) + return false; + + if (m_window_info.type == WindowInfo::Type::Surfaceless) + return true; + + OnMainThread([this] { AttachSurfaceOnMainThread(); }); + return true; +} + +bool GSDeviceMTL::SupportsExclusiveFullscreen() const { return false; } + +std::string GSDeviceMTL::GetDriverInfo() const +{ @autoreleasepool { + std::string desc([[m_dev.dev description] UTF8String]); + desc += "\n Texture Swizzle: " + std::string(m_dev.features.texture_swizzle ? "Supported" : "Unsupported"); + desc += "\n Unified Memory: " + std::string(m_dev.features.unified_memory ? "Supported" : "Unsupported"); + desc += "\n Framebuffer Fetch: " + std::string(m_dev.features.framebuffer_fetch ? "Supported" : "Unsupported"); + desc += "\n Primitive ID: " + std::string(m_dev.features.primid ? "Supported" : "Unsupported"); + desc += "\n Shader Version: " + std::string(to_string(m_dev.features.shader_version)); + desc += "\n Max Texture Size: " + std::to_string(m_dev.features.max_texsize); + return desc; +}} + +void GSDeviceMTL::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) +{ + m_window_info.surface_scale = new_window_scale; + if (m_window_info.surface_width == static_cast(new_window_width) && m_window_info.surface_height == static_cast(new_window_height)) + return; + m_window_info.surface_width = new_window_width; + m_window_info.surface_height = new_window_height; + @autoreleasepool + { + [m_layer setDrawableSize:CGSizeMake(new_window_width, new_window_height)]; + } +} + +void GSDeviceMTL::UpdateTexture(id texture, u32 x, u32 y, u32 width, u32 height, const void* data, u32 data_stride) +{ + id cmdbuf = [m_queue commandBuffer]; + id enc = [cmdbuf blitCommandEncoder]; + size_t bytes = data_stride * height; + MRCOwned> buf = MRCTransfer([m_dev.dev newBufferWithLength:bytes options:MTLResourceStorageModeShared | MTLResourceCPUCacheModeWriteCombined]); + memcpy([buf contents], data, bytes); + [enc copyFromBuffer:buf + sourceOffset:0 + sourceBytesPerRow:data_stride + sourceBytesPerImage:bytes + sourceSize:MTLSizeMake(width, height, 1) + toTexture:texture + destinationSlice:0 + destinationLevel:0 + destinationOrigin:MTLOriginMake(0, 0, 0)]; + [enc endEncoding]; + [cmdbuf commit]; +} + +static bool s_capture_next = false; + +GSDevice::PresentResult GSDeviceMTL::BeginPresent(bool frame_skip) +{ @autoreleasepool { + if (m_capture_start_frame && FrameNo() == m_capture_start_frame) + s_capture_next = true; + if (frame_skip || m_window_info.type == WindowInfo::Type::Surfaceless || !g_gs_device) + { +// ImGui::EndFrame(); + return PresentResult::FrameSkipped; + } + id buf = GetRenderCmdBuf(); + m_current_drawable = MRCRetain([m_layer nextDrawable]); + EndRenderPass(); + if (!m_current_drawable) + { + [buf pushDebugGroup:@"Present Skipped"]; + [buf popDebugGroup]; + FlushEncoders(); +// ImGui::EndFrame(); + return PresentResult::FrameSkipped; + } + [m_pass_desc colorAttachments][0].texture = [m_current_drawable texture]; + id enc = [buf renderCommandEncoderWithDescriptor:m_pass_desc]; + [enc setLabel:@"Present"]; + m_current_render.encoder = MRCRetain(enc); + return PresentResult::OK; +}} + +void GSDeviceMTL::EndPresent() +{ @autoreleasepool { + pxAssertDev(m_current_render.encoder && m_current_render_cmdbuf, "BeginPresent cmdbuf was destroyed"); +// ImGui::Render(); +// RenderImGui(ImGui::GetDrawData()); + EndRenderPass(); + if (m_current_drawable) + { + const bool use_present_drawable = m_use_present_drawable == UsePresentDrawable::Always || + (m_use_present_drawable == UsePresentDrawable::IfVsync && m_vsync_mode != VsyncMode::Off); + + if (use_present_drawable) + [m_current_render_cmdbuf presentDrawable:m_current_drawable]; + else + [m_current_render_cmdbuf addScheduledHandler:[drawable = std::move(m_current_drawable)](id){ + [drawable present]; + }]; + } + FlushEncoders(); + FrameCompleted(); + m_current_drawable = nullptr; + if (m_capture_start_frame) + { + if (@available(macOS 10.15, iOS 13, *)) + { + static NSString* const path = @"/tmp/PCSX2MTLCapture.gputrace"; + static u32 frames; + if (frames) + { + --frames; + if (!frames) + { + [[MTLCaptureManager sharedCaptureManager] stopCapture]; + Console.WriteLn("Metal Trace Capture to /tmp/PCSX2MTLCapture.gputrace finished"); + [[NSWorkspace sharedWorkspace] selectFile:path + inFileViewerRootedAtPath:@"/tmp/"]; + } + } + else if (s_capture_next) + { + s_capture_next = false; + MTLCaptureManager* mgr = [MTLCaptureManager sharedCaptureManager]; + if ([mgr supportsDestination:MTLCaptureDestinationGPUTraceDocument]) + { + MTLCaptureDescriptor* desc = [[MTLCaptureDescriptor new] autorelease]; + [desc setCaptureObject:m_dev.dev]; + if ([[NSFileManager defaultManager] fileExistsAtPath:path]) + [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; + [desc setOutputURL:[NSURL fileURLWithPath:path]]; + [desc setDestination:MTLCaptureDestinationGPUTraceDocument]; + NSError* err = nullptr; + [mgr startCaptureWithDescriptor:desc error:&err]; + if (err) + { + Console.Error("Metal Trace Capture failed: %s", [[err localizedDescription] UTF8String]); + } + else + { + Console.WriteLn("Metal Trace Capture to /tmp/PCSX2MTLCapture.gputrace started"); + frames = 2; + } + } + else + { + Console.Error("Metal Trace Capture Failed: MTLCaptureManager doesn't support GPU trace documents! (Did you forget to run with METAL_CAPTURE_ENABLED=1?)"); + } + } + } + } +}} + +void GSDeviceMTL::SetVSync(VsyncMode mode) +{ + if (m_vsync_mode == mode) + return; + + [m_layer setDisplaySyncEnabled:mode != VsyncMode::Off]; + m_vsync_mode = mode; +} + +bool GSDeviceMTL::GetHostRefreshRate(float* refresh_rate) +{ + OnMainThread([this, refresh_rate] + { + u32 did = [[[[[m_view window] screen] deviceDescription] valueForKey:@"NSScreenNumber"] unsignedIntValue]; + if (CGDisplayModeRef mode = CGDisplayCopyDisplayMode(did)) + { + *refresh_rate = CGDisplayModeGetRefreshRate(mode); + CGDisplayModeRelease(mode); + } + else + { + *refresh_rate = 0; + } + }); + return *refresh_rate != 0; +} + +bool GSDeviceMTL::SetGPUTimingEnabled(bool enabled) +{ + if (enabled == m_gpu_timing_enabled) + return true; + if (@available(macOS 10.15, iOS 10.3, *)) + { + std::lock_guard l(m_mtx); + m_gpu_timing_enabled = enabled; + m_accumulated_gpu_time = 0; + m_last_gpu_time_end = 0; + return true; + } + return false; +} + +float GSDeviceMTL::GetAndResetAccumulatedGPUTime() +{ + std::lock_guard l(m_mtx); + float time = m_accumulated_gpu_time * 1000; + m_accumulated_gpu_time = 0; + return time; +} + +void GSDeviceMTL::AccumulateCommandBufferTime(id buffer) +{ + std::lock_guard l(m_mtx); + if (!m_gpu_timing_enabled) + return; + // We do the check before enabling m_gpu_timing_enabled +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunguarded-availability" + // It's unlikely, but command buffers can overlap or run out of order + // This doesn't handle every case (fully out of order), but it should at least handle overlapping + double begin = std::max(m_last_gpu_time_end, [buffer GPUStartTime]); + double end = [buffer GPUEndTime]; + if (end > begin) + { + m_accumulated_gpu_time += end - begin; + m_last_gpu_time_end = end; + } +#pragma clang diagnostic pop +} + void GSDeviceMTL::ClearRenderTarget(GSTexture* t, const GSVector4& c) { if (!t) return; @@ -1069,11 +1434,21 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS static_cast(t)->RequestStencilClear(c); } +void GSDeviceMTL::InvalidateRenderTarget(GSTexture* t) +{ + // TODO: Implement me +} + std::unique_ptr GSDeviceMTL::CreateDownloadTexture(u32 width, u32 height, GSTexture::Format format) { return GSDownloadTextureMTL::Create(this, width, height, format); } +void GSDeviceMTL::ClearSamplerCache() +{ + // TODO: Implement me +} + void GSDeviceMTL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, u32 destX, u32 destY) { @autoreleasepool { g_perfmon.Put(GSPerfMon::TextureCopies, 1); @@ -1097,14 +1472,14 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS id encoder = [cmdbuf blitCommandEncoder]; [encoder setLabel:@"CopyRect"]; [encoder copyFromTexture:sT->GetTexture() - sourceSlice:0 - sourceLevel:0 - sourceOrigin:MTLOriginMake(r.x, r.y, 0) - sourceSize:MTLSizeMake(r.width(), r.height(), 1) - toTexture:dT->GetTexture() - destinationSlice:0 - destinationLevel:0 - destinationOrigin:MTLOriginMake((int)destX, (int)destY, 0)]; + sourceSlice:0 + sourceLevel:0 + sourceOrigin:MTLOriginMake(r.x, r.y, 0) + sourceSize:MTLSizeMake(r.width(), r.height(), 1) + toTexture:dT->GetTexture() + destinationSlice:0 + destinationLevel:0 + destinationOrigin:MTLOriginMake((int)destX, (int)destY, 0)]; [encoder endEncoding]; }} @@ -1118,9 +1493,9 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS GSVector2i ds = dT->GetSize(); bool covers_target = static_cast(dRect.x) <= 0 - && static_cast(dRect.y) <= 0 - && static_cast(dRect.z) >= ds.x - && static_cast(dRect.w) >= ds.y; + && static_cast(dRect.y) <= 0 + && static_cast(dRect.z) >= ds.x + && static_cast(dRect.w) >= ds.y; bool dontcare = load_action == LoadAction::DontCare || (load_action == LoadAction::DontCareIfFull && covers_target); MTLLoadAction action = dontcare ? MTLLoadActionDontCare : MTLLoadActionLoad; @@ -1165,8 +1540,8 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS [m_current_render.encoder setVertexBytes:vertices length:sizeof(vertices) atIndex:GSMTLBufferIndexVertices]; [m_current_render.encoder drawPrimitives:MTLPrimitiveTypeTriangleStrip - vertexStart:0 - vertexCount:4]; + vertexStart:0 + vertexCount:4]; g_perfmon.Put(GSPerfMon::DrawCalls, 1); } @@ -1222,7 +1597,7 @@ static void setFnConstantI(MTLFunctionConstantValues* fc, unsigned int value, GS void GSDeviceMTL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, PresentShader shader, float shaderTime, bool linear) { @autoreleasepool { - GSVector2i ds = dTex ? dTex->GetSize() : GSVector2i(g_host_display->GetWindowWidth(), g_host_display->GetWindowHeight()); + GSVector2i ds = dTex ? dTex->GetSize() : GetWindowSize(); DisplayConstantBuffer cb; cb.SetSource(sRect, sTex->GetSize()); cb.SetTarget(dRect, ds); @@ -1404,6 +1779,7 @@ static GSMTLExpandType ConvertVSExpand(GSHWDrawConfig::VSExpand generic) setFnConstantB(m_fn_constants, pssel.automatic_lod, GSMTLConstantIndex_PS_AUTOMATIC_LOD); setFnConstantB(m_fn_constants, pssel.manual_lod, GSMTLConstantIndex_PS_MANUAL_LOD); setFnConstantB(m_fn_constants, pssel.point_sampler, GSMTLConstantIndex_PS_POINT_SAMPLER); + setFnConstantB(m_fn_constants, pssel.region_rect, GSMTLConstantIndex_PS_REGION_RECT); setFnConstantI(m_fn_constants, pssel.scanmsk, GSMTLConstantIndex_PS_SCANMSK); auto newps = LoadShader(@"ps_main"); ps = newps; @@ -1471,8 +1847,8 @@ static void textureBarrier(id enc) { if (@available(macOS 10.14, *)) { [enc memoryBarrierWithScope:MTLBarrierScopeRenderTargets - afterStages:MTLRenderStageFragment - beforeStages:MTLRenderStageFragment]; + afterStages:MTLRenderStageFragment + beforeStages:MTLRenderStageFragment]; } else { [enc textureBarrier]; } @@ -1633,17 +2009,27 @@ static void textureBarrier(id enc) void GSDeviceMTL::RenderHW(GSHWDrawConfig& config) { @autoreleasepool { - if (config.topology == GSHWDrawConfig::Topology::Point) - config.vs.point_size = 1; // M1 requires point size output on *all* points - if (config.tex && config.ds == config.tex) EndRenderPass(); // Barrier size_t vertsize = config.nverts * sizeof(*config.verts); - size_t idxsize = config.nindices * sizeof(*config.indices); + size_t idxsize = config.vs.UseExpandIndexBuffer() ? 0 : (config.nindices * sizeof(*config.indices)); Map allocation = Allocate(m_vertex_upload_buf, vertsize + idxsize); memcpy(allocation.cpu_buffer, config.verts, vertsize); - memcpy(static_cast(allocation.cpu_buffer) + vertsize, config.indices, idxsize); + + id index_buffer; + size_t index_buffer_offset; + if (!config.vs.UseExpandIndexBuffer()) + { + memcpy(static_cast(allocation.cpu_buffer) + vertsize, config.indices, idxsize); + index_buffer = allocation.gpu_buffer; + index_buffer_offset = allocation.gpu_offset + vertsize; + } + else + { + index_buffer = m_expand_index_buffer; + index_buffer_offset = 0; + } FlushClears(config.tex); FlushClears(config.pal); @@ -1674,7 +2060,7 @@ static void textureBarrier(id enc) ASSERT(config.require_full_barrier == false && config.drawlist == nullptr); MRESetHWPipelineState(config.vs, config.ps, {}, {}); MREInitHWDraw(config, allocation); - SendHWDraw(config, m_current_render.encoder, allocation.gpu_buffer, allocation.gpu_offset + vertsize); + SendHWDraw(config, m_current_render.encoder, index_buffer, index_buffer_offset); config.ps.date = 3; break; } @@ -1730,7 +2116,7 @@ static void textureBarrier(id enc) MRESetHWPipelineState(config.vs, config.ps, config.blend, config.colormask); MRESetDSS(config.depth); - SendHWDraw(config, mtlenc, allocation.gpu_buffer, allocation.gpu_offset + vertsize); + SendHWDraw(config, mtlenc, index_buffer, index_buffer_offset); if (config.alpha_second_pass.enable) { @@ -1741,7 +2127,7 @@ static void textureBarrier(id enc) } MRESetHWPipelineState(config.vs, config.alpha_second_pass.ps, config.blend, config.alpha_second_pass.colormask); MRESetDSS(config.alpha_second_pass.depth); - SendHWDraw(config, mtlenc, allocation.gpu_buffer, allocation.gpu_offset + vertsize); + SendHWDraw(config, mtlenc, index_buffer, index_buffer_offset); } if (hdr_rt) @@ -1787,57 +2173,60 @@ static void textureBarrier(id enc) g_perfmon.Put(GSPerfMon::DrawCalls, config.drawlist->size()); g_perfmon.Put(GSPerfMon::Barriers, config.drawlist->size()); - for (size_t count = 0, p = 0, n = 0; n < config.drawlist->size(); p += count, ++n) + + const u32 indices_per_prim = config.indices_per_prim; + const u32 draw_list_size = static_cast(config.drawlist->size()); + + for (u32 n = 0, p = 0; n < draw_list_size; n++) { - count = (*config.drawlist)[n] * config.indices_per_prim; + const u32 count = (*config.drawlist)[n] * indices_per_prim; textureBarrier(enc); [enc drawIndexedPrimitives:topology - indexCount:count - indexType:MTLIndexTypeUInt32 - indexBuffer:buffer - indexBufferOffset:off + p * sizeof(*config.indices)]; + indexCount:count + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off + p * sizeof(*config.indices)]; + p += count; } + [enc popDebugGroup]; + return; } else if (config.require_full_barrier) { - const u32 ndraws = config.nindices / config.indices_per_prim; + const u32 indices_per_prim = config.indices_per_prim; + const u32 ndraws = config.nindices / indices_per_prim; g_perfmon.Put(GSPerfMon::DrawCalls, ndraws); g_perfmon.Put(GSPerfMon::Barriers, ndraws); [enc pushDebugGroup:[NSString stringWithFormat:@"Full barrier split draw (%d prims)", ndraws]]; - for (size_t p = 0; p < config.nindices; p += config.indices_per_prim) + + for (u32 p = 0; p < config.nindices; p += indices_per_prim) { textureBarrier(enc); [enc drawIndexedPrimitives:topology - indexCount:config.indices_per_prim - indexType:MTLIndexTypeUInt32 - indexBuffer:buffer - indexBufferOffset:off + p * sizeof(*config.indices)]; + indexCount:config.indices_per_prim + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off + p * sizeof(*config.indices)]; } + [enc popDebugGroup]; + return; } else if (config.require_one_barrier) { // One barrier needed textureBarrier(enc); - [enc drawIndexedPrimitives:topology - indexCount:config.nindices - indexType:MTLIndexTypeUInt32 - indexBuffer:buffer - indexBufferOffset:off]; - g_perfmon.Put(GSPerfMon::DrawCalls, 1); g_perfmon.Put(GSPerfMon::Barriers, 1); } - else - { - // No barriers needed - [enc drawIndexedPrimitives:topology - indexCount:config.nindices - indexType:MTLIndexTypeUInt32 - indexBuffer:buffer - indexBufferOffset:off]; - g_perfmon.Put(GSPerfMon::DrawCalls, 1); - } + + [enc drawIndexedPrimitives:topology + indexCount:config.nindices + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off]; + + g_perfmon.Put(GSPerfMon::DrawCalls, 1); } // tbh I'm not a fan of the current debug groups diff --git a/Classes/Video/GSDeviceOGL.cpp b/Classes/Video/GSDeviceOGL.cpp new file mode 100644 index 0000000..a338501 --- /dev/null +++ b/Classes/Video/GSDeviceOGL.cpp @@ -0,0 +1,2626 @@ +/* PCSX2 - PS2 Emulator for PCs + * Copyright (C) 2002-2021 PCSX2 Dev Team + * + * PCSX2 is free software: you can redistribute it and/or modify it under the terms + * of the GNU Lesser General Public License as published by the Free Software Found- + * ation, either version 3 of the License, or (at your option) any later version. + * + * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; + * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with PCSX2. + * If not, see . + */ + +#include "PrecompiledHeader.h" + +#include "GS/GSState.h" +#include "GS/GSGL.h" +#include "GS/GSUtil.h" +#include "GS/Renderers/OpenGL/GSDeviceOGL.h" +#include "GS/Renderers/OpenGL/GLState.h" +#include "Host.h" +#include "ShaderCacheVersion.h" + +#include "common/StringUtil.h" + +#include +#include +#include + +//#define ONLY_LINES + +static constexpr u32 g_vs_cb_index = 1; +static constexpr u32 g_ps_cb_index = 0; + +static constexpr u32 VERTEX_BUFFER_SIZE = 32 * 1024 * 1024; +static constexpr u32 INDEX_BUFFER_SIZE = 16 * 1024 * 1024; +static constexpr u32 VERTEX_UNIFORM_BUFFER_SIZE = 8 * 1024 * 1024; +static constexpr u32 FRAGMENT_UNIFORM_BUFFER_SIZE = 8 * 1024 * 1024; +static constexpr u32 TEXTURE_UPLOAD_BUFFER_SIZE = 128 * 1024 * 1024; + +static std::unique_ptr s_texture_upload_buffer; + +GSDeviceOGL::GSDeviceOGL() = default; + +GSDeviceOGL::~GSDeviceOGL() +{ + pxAssert(!m_gl_context); +} + +GSTexture* GSDeviceOGL::CreateSurface(GSTexture::Type type, int width, int height, int levels, GSTexture::Format format) +{ + GL_PUSH("Create surface"); + return new GSTextureOGL(type, width, height, levels, format); +} + +RenderAPI GSDeviceOGL::GetRenderAPI() const +{ + return RenderAPI::OpenGL; +} + +bool GSDeviceOGL::HasSurface() const +{ + return m_window_info.type != WindowInfo::Type::Surfaceless; +} + +void GSDeviceOGL::SetVSync(VsyncMode mode) +{ + if (m_vsync_mode == mode || m_gl_context->GetWindowInfo().type == WindowInfo::Type::Surfaceless) + return; + + // Window framebuffer has to be bound to call SetSwapInterval. + GLint current_fbo = 0; + glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, ¤t_fbo); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + + if (mode != VsyncMode::Adaptive || !m_gl_context->SetSwapInterval(-1)) + m_gl_context->SetSwapInterval(static_cast(mode != VsyncMode::Off)); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_fbo); + m_vsync_mode = mode; +} + +bool GSDeviceOGL::Create() +{ + if (!GSDevice::Create()) + return false; + + // GL is a pain and needs the window super early to create the context. + if (!AcquireWindow(true)) + return false; + + // We need at least GL3.3. + static constexpr const GL::Context::Version version_list[] = {{GL::Context::Profile::Core, 4, 6}, + {GL::Context::Profile::Core, 4, 5}, {GL::Context::Profile::Core, 4, 4}, {GL::Context::Profile::Core, 4, 3}, + {GL::Context::Profile::Core, 4, 2}, {GL::Context::Profile::Core, 4, 1}, {GL::Context::Profile::Core, 4, 0}, + {GL::Context::Profile::Core, 3, 3}}; + m_gl_context = GL::Context::Create(m_window_info, version_list); + if (!m_gl_context) + { + Console.Error("Failed to create any GL context"); + m_gl_context.reset(); + return false; + } + + if (!m_gl_context->MakeCurrent()) + { + Console.Error("Failed to make GL context current"); + return false; + } + + // Render a frame as soon as possible to clear out whatever was previously being displayed. + if (m_window_info.type != WindowInfo::Type::Surfaceless) + RenderBlankFrame(); + + if (!GLLoader::check_gl_requirements()) + return false; + + SetSwapInterval(); + + if (!GSConfig.DisableShaderCache) + { + if (!m_shader_cache.Open(false, EmuFolders::Cache, SHADER_CACHE_VERSION)) + Console.Warning("Shader cache failed to open."); + } + else + { + Console.WriteLn("Not using shader cache."); + } + + // optional features based on context + m_features.broken_point_sampler = GLLoader::vendor_id_amd; + m_features.primitive_id = true; + + m_features.framebuffer_fetch = GLAD_GL_EXT_shader_framebuffer_fetch; + if (m_features.framebuffer_fetch && GSConfig.DisableFramebufferFetch) + { + Host::AddOSDMessage("Framebuffer fetch was found but is disabled. This will reduce performance.", Host::OSD_ERROR_DURATION); + m_features.framebuffer_fetch = false; + } + + if (GSConfig.OverrideTextureBarriers == 0) + m_features.texture_barrier = m_features.framebuffer_fetch; // Force Disabled + else if (GSConfig.OverrideTextureBarriers == 1) + m_features.texture_barrier = true; // Force Enabled + else + m_features.texture_barrier = m_features.framebuffer_fetch || GLAD_GL_ARB_texture_barrier; + if (!m_features.texture_barrier) + { + Host::AddOSDMessage( + "GL_ARB_texture_barrier is not supported, blending will not be accurate.", Host::OSD_ERROR_DURATION); + } + + m_features.provoking_vertex_last = true; + m_features.dxt_textures = GLAD_GL_EXT_texture_compression_s3tc; + m_features.bptc_textures = GLAD_GL_VERSION_4_2 || GLAD_GL_ARB_texture_compression_bptc || GLAD_GL_EXT_texture_compression_bptc; + m_features.prefer_new_textures = false; + m_features.dual_source_blend = !GSConfig.DisableDualSourceBlend; + m_features.clip_control = GLAD_GL_ARB_clip_control; + if (!m_features.clip_control) + Host::AddOSDMessage("GL_ARB_clip_control is not supported, this will cause rendering issues.", Host::OSD_ERROR_DURATION); + m_features.stencil_buffer = true; + m_features.test_and_sample_depth = m_features.texture_barrier; + + if (GLAD_GL_ARB_shader_storage_buffer_object) + { + GLint max_vertex_ssbos = 0; + glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &max_vertex_ssbos); + DevCon.WriteLn("GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: %d", max_vertex_ssbos); + m_features.vs_expand = (max_vertex_ssbos > 0 && GLAD_GL_ARB_gpu_shader5); + } + if (!m_features.vs_expand) + Console.Warning("Vertex expansion is not supported. This will reduce performance."); + + GLint point_range[2] = {}; + glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_range); + m_features.point_expand = (point_range[0] <= GSConfig.UpscaleMultiplier && point_range[1] >= GSConfig.UpscaleMultiplier); + m_features.line_expand = false; + + Console.WriteLn("Using %s for point expansion, %s for line expansion and %s for sprite expansion.", + m_features.point_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), + m_features.line_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), + m_features.vs_expand ? "vertex expanding" : "CPU"); + + // because of fbo bindings below... + GLState::Clear(); + + // **************************************************************** + // Debug helper + // **************************************************************** + if (GSConfig.UseDebugDevice) + { + glDebugMessageCallback(DebugMessageCallback, NULL); + + glDebugMessageControl(GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, true); + // Useless info message on Nvidia driver + static constexpr const GLuint ids[] = { 0x20004 }; + glDebugMessageControl(GL_DEBUG_SOURCE_API_ARB, GL_DEBUG_TYPE_OTHER_ARB, GL_DONT_CARE, std::size(ids), ids, false); + + // Uncomment synchronous if you want callstacks which match where the error occurred. + glEnable(GL_DEBUG_OUTPUT); + //glEnable(GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB); + } + + // WARNING it must be done after the control setup (at least on MESA) + GL_PUSH("GSDeviceOGL::Create"); + + // **************************************************************** + // Various object + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Various"); + + glGenFramebuffers(1, &m_fbo); + glGenFramebuffers(1, &m_fbo_read); + glGenFramebuffers(1, &m_fbo_write); + + OMSetFBO(m_fbo); + + // Always write to the first buffer + static constexpr GLenum target[1] = {GL_COLOR_ATTACHMENT0}; + glDrawBuffers(1, target); + + // Always read from the first buffer + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glReadBuffer(GL_COLOR_ATTACHMENT0); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + } + + // **************************************************************** + // Vertex buffer state + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Vertex Buffer"); + + glGenVertexArrays(1, &m_vao); + IASetVAO(m_vao); + + m_vertex_stream_buffer = GL::StreamBuffer::Create(GL_ARRAY_BUFFER, VERTEX_BUFFER_SIZE); + m_index_stream_buffer = GL::StreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, INDEX_BUFFER_SIZE); + m_vertex_uniform_stream_buffer = GL::StreamBuffer::Create(GL_UNIFORM_BUFFER, VERTEX_UNIFORM_BUFFER_SIZE); + m_fragment_uniform_stream_buffer = GL::StreamBuffer::Create(GL_UNIFORM_BUFFER, FRAGMENT_UNIFORM_BUFFER_SIZE); + glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &m_uniform_buffer_alignment); + if (!m_vertex_stream_buffer || !m_index_stream_buffer || !m_vertex_uniform_stream_buffer || !m_fragment_uniform_stream_buffer) + { + Host::ReportErrorAsync("GS", "Failed to create vertex/index/uniform streaming buffers"); + return false; + } + + m_vertex_stream_buffer->Bind(); + m_index_stream_buffer->Bind(); + + // Force UBOs to be uploaded on first use. + std::memset(&m_vs_cb_cache, 0xFF, sizeof(m_vs_cb_cache)); + std::memset(&m_ps_cb_cache, 0xFF, sizeof(m_ps_cb_cache)); + + static_assert(sizeof(GSVertexPT1) == sizeof(GSVertex), "wrong GSVertex size"); + for (u32 i = 0; i < 8; i++) + glEnableVertexAttribArray(i); + + glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GSVertexPT1), (const GLvoid*)(0)); + glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, sizeof(GSVertexPT1), (const GLvoid*)(16)); + glVertexAttribPointer(2, 4, GL_UNSIGNED_BYTE, GL_FALSE, sizeof(GSVertex), (const GLvoid*)(8)); + glVertexAttribPointer(3, 1, GL_FLOAT, GL_FALSE, sizeof(GSVertex), (const GLvoid*)(12)); + glVertexAttribIPointer(4, 2, GL_UNSIGNED_SHORT, sizeof(GSVertex), (const GLvoid*)(16)); + glVertexAttribIPointer(5, 1, GL_UNSIGNED_INT, sizeof(GSVertex), (const GLvoid*)(20)); + glVertexAttribIPointer(6, 2, GL_UNSIGNED_SHORT, sizeof(GSVertex), (const GLvoid*)(24)); + glVertexAttribPointer(7, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(GSVertex), (const GLvoid*)(28)); + + if (m_features.vs_expand) + { + glGenVertexArrays(1, &m_expand_vao); + glBindVertexArray(m_expand_vao); + IASetVAO(m_expand_vao); + + // Still need the vertex buffer bound, because uploads happen to GL_ARRAY_BUFFER. + m_vertex_stream_buffer->Bind(); + + std::unique_ptr expand_data = std::make_unique(EXPAND_BUFFER_SIZE); + GenerateExpansionIndexBuffer(expand_data.get()); + glGenBuffers(1, &m_expand_ibo); + glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_expand_ibo); + glBufferData(GL_ELEMENT_ARRAY_BUFFER, EXPAND_BUFFER_SIZE, expand_data.get(), GL_STATIC_DRAW); + + // We can bind it once when using gl_BaseVertexARB. + if (GLAD_GL_ARB_shader_draw_parameters) + { + glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 2, m_vertex_stream_buffer->GetGLBufferId(), + 0, VERTEX_BUFFER_SIZE); + } + } + } + + // **************************************************************** + // Pre Generate the different sampler object + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Sampler"); + + for (u32 key = 0; key < std::size(m_ps_ss); key++) + { + m_ps_ss[key] = CreateSampler(PSSamplerSelector(key)); + } + } + + // these all share the same vertex shader + const auto convert_glsl = Host::ReadResourceFileToString("shaders/opengl/convert.glsl"); + if (!convert_glsl.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/convert.glsl."); + return false; + } + + // **************************************************************** + // convert + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Convert"); + + + + m_convert.vs = GetShaderSource("vs_main", GL_VERTEX_SHADER, *convert_glsl); + + for (size_t i = 0; i < std::size(m_convert.ps); i++) + { + const char* name = shaderName(static_cast(i)); + const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, *convert_glsl)); + if (!m_shader_cache.GetProgram(&m_convert.ps[i], m_convert.vs, ps)) + return false; + m_convert.ps[i].SetFormattedName("Convert pipe %s", name); + + if (static_cast(i) == ShaderConvert::RGBA_TO_8I) + { + m_convert.ps[i].RegisterUniform("SBW"); + m_convert.ps[i].RegisterUniform("DBW"); + m_convert.ps[i].RegisterUniform("ScaleFactor"); + } + else if (static_cast(i) == ShaderConvert::YUV) + { + m_convert.ps[i].RegisterUniform("EMOD"); + } + else if (static_cast(i) == ShaderConvert::CLUT_4 || static_cast(i) == ShaderConvert::CLUT_8) + { + m_convert.ps[i].RegisterUniform("offset"); + m_convert.ps[i].RegisterUniform("scale"); + } + } + + const PSSamplerSelector point; + m_convert.pt = GetSamplerID(point); + + PSSamplerSelector bilinear; + bilinear.biln = true; + m_convert.ln = GetSamplerID(bilinear); + + m_convert.dss = new GSDepthStencilOGL(); + m_convert.dss_write = new GSDepthStencilOGL(); + m_convert.dss_write->EnableDepth(); + m_convert.dss_write->SetDepth(GL_ALWAYS, true); + } + + // **************************************************************** + // present + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Present"); + + // these all share the same vertex shader + const auto shader = Host::ReadResourceFileToString("shaders/opengl/present.glsl"); + if (!shader.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/present.glsl."); + return false; + } + + std::string present_vs(GetShaderSource("vs_main", GL_VERTEX_SHADER, *shader)); + + for (size_t i = 0; i < std::size(m_present); i++) + { + const char* name = shaderName(static_cast(i)); + const std::string ps(GetShaderSource(name, GL_FRAGMENT_SHADER, *shader)); + if (!m_shader_cache.GetProgram(&m_present[i], present_vs, ps)) + return false; + m_present[i].SetFormattedName("Present pipe %s", name); + + // This is a bit disgusting, but it saves allocating a UBO when no shaders currently need it. + m_present[i].RegisterUniform("u_source_rect"); + m_present[i].RegisterUniform("u_target_rect"); + m_present[i].RegisterUniform("u_source_size"); + m_present[i].RegisterUniform("u_target_size"); + m_present[i].RegisterUniform("u_target_resolution"); + m_present[i].RegisterUniform("u_rcp_target_resolution"); + m_present[i].RegisterUniform("u_source_resolution"); + m_present[i].RegisterUniform("u_rcp_source_resolution"); + m_present[i].RegisterUniform("u_time"); + } + } + + // **************************************************************** + // merge + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Merge"); + + const auto shader = Host::ReadResourceFileToString("shaders/opengl/merge.glsl"); + if (!shader.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/merge.glsl."); + return false; + } + + for (size_t i = 0; i < std::size(m_merge_obj.ps); i++) + { + const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, *shader)); + if (!m_shader_cache.GetProgram(&m_merge_obj.ps[i], m_convert.vs, ps)) + return false; + m_merge_obj.ps[i].SetFormattedName("Merge pipe %zu", i); + m_merge_obj.ps[i].RegisterUniform("BGColor"); + } + } + + // **************************************************************** + // interlace + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Interlace"); + + const auto shader = Host::ReadResourceFileToString("shaders/opengl/interlace.glsl"); + if (!shader.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/interlace.glsl."); + return false; + } + + for (size_t i = 0; i < std::size(m_interlace.ps); i++) + { + const std::string ps(GetShaderSource(fmt::format("ps_main{}", i), GL_FRAGMENT_SHADER, *shader)); + if (!m_shader_cache.GetProgram(&m_interlace.ps[i], m_convert.vs, ps)) + return false; + m_interlace.ps[i].SetFormattedName("Merge pipe %zu", i); + m_interlace.ps[i].RegisterUniform("ZrH"); + } + } + + // **************************************************************** + // Post processing + // **************************************************************** + if (!CompileShadeBoostProgram() || !CompileFXAAProgram()) + return false; + + // Image load store and GLSL 420pack is core in GL4.2, no need to check. + m_features.cas_sharpening = ((GLAD_GL_VERSION_4_2 && GLAD_GL_ARB_compute_shader) || GLAD_GL_ES_VERSION_3_2) && CreateCASPrograms(); + + // **************************************************************** + // rasterization configuration + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Rasterization"); + + glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); + glDisable(GL_CULL_FACE); + glEnable(GL_SCISSOR_TEST); + glDisable(GL_MULTISAMPLE); + + glDisable(GL_DITHER); // Honestly I don't know! + } + + // **************************************************************** + // DATE + // **************************************************************** + { + GL_PUSH("GSDeviceOGL::Date"); + + m_date.dss = new GSDepthStencilOGL(); + m_date.dss->EnableStencil(); + m_date.dss->SetStencil(GL_ALWAYS, GL_REPLACE); + + for (size_t i = 0; i < std::size(m_date.primid_ps); i++) + { + const std::string ps(GetShaderSource( + fmt::format("ps_stencil_image_init_{}", i), + GL_FRAGMENT_SHADER, *convert_glsl)); + m_shader_cache.GetProgram(&m_date.primid_ps[i], m_convert.vs, ps); + m_date.primid_ps[i].SetFormattedName("PrimID Destination Alpha Init %d", i); + } + } + + // **************************************************************** + // Use DX coordinate convention + // **************************************************************** + + // VS gl_position.z => [-1,-1] + // FS depth => [0, 1] + // because of -1 we loose lot of precision for small GS value + // This extension allow FS depth to range from -1 to 1. So + // gl_position.z could range from [0, 1] + // Change depth convention + if (m_features.clip_control) + glClipControl(GL_LOWER_LEFT, GL_ZERO_TO_ONE); + + // **************************************************************** + // HW renderer shader + // **************************************************************** + if (!CreateTextureFX()) + return false; + + // **************************************************************** + // Pbo Pool allocation + // **************************************************************** + if (!GLLoader::buggy_pbo) + { + s_texture_upload_buffer = GL::StreamBuffer::Create(GL_PIXEL_UNPACK_BUFFER, TEXTURE_UPLOAD_BUFFER_SIZE); + if (s_texture_upload_buffer) + { + // Don't keep it bound, we'll re-bind when we need it. + // Otherwise non-PBO texture uploads break. Yay for global state. + s_texture_upload_buffer->Unbind(); + } + else + { + Console.Error("Failed to create texture upload buffer. Using slow path."); + GLLoader::buggy_pbo = true; + } + } + + if (!CreateImGuiProgram()) + return false; + + // Basic to ensure structures are correctly packed + static_assert(sizeof(VSSelector) == 1, "Wrong VSSelector size"); + static_assert(sizeof(PSSelector) == 12, "Wrong PSSelector size"); + static_assert(sizeof(PSSamplerSelector) == 1, "Wrong PSSamplerSelector size"); + static_assert(sizeof(OMDepthStencilSelector) == 1, "Wrong OMDepthStencilSelector size"); + static_assert(sizeof(OMColorMaskSelector) == 1, "Wrong OMColorMaskSelector size"); + + return true; +} + +void GSDeviceOGL::Destroy() +{ + GSDevice::Destroy(); + + if (m_gl_context) + { + DestroyTimestampQueries(); + DestroyResources(); + + m_gl_context->DoneCurrent(); + m_gl_context.reset(); + } +} + +bool GSDeviceOGL::CreateTextureFX() +{ + GL_PUSH("GSDeviceOGL::CreateTextureFX"); + + auto vertex_shader = Host::ReadResourceFileToString("shaders/opengl/tfx_vgs.glsl"); + auto fragment_shader = Host::ReadResourceFileToString("shaders/opengl/tfx_fs.glsl"); + if (!vertex_shader.has_value() || !fragment_shader.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/tfx_{vgs,fs}.glsl."); + return false; + } + + m_shader_tfx_vgs = std::move(*vertex_shader); + m_shader_tfx_fs = std::move(*fragment_shader); + + // warning 1 sampler by image unit. So you cannot reuse m_ps_ss... + m_palette_ss = CreateSampler(PSSamplerSelector(0)); + glBindSampler(1, m_palette_ss); + + // Enable all bits for stencil operations. Technically 1 bit is + // enough but buffer is polluted with noise. Clear will be limited + // to the mask. + glStencilMask(0xFF); + for (u32 key = 0; key < std::size(m_om_dss); key++) + { + m_om_dss[key] = CreateDepthStencil(OMDepthStencilSelector(key)); + } + + GL::Program::ResetLastProgram(); + return true; +} + +void GSDeviceOGL::SetSwapInterval() +{ + const int interval = ((m_vsync_mode == VsyncMode::Adaptive) ? -1 : ((m_vsync_mode == VsyncMode::On) ? 1 : 0)); + m_gl_context->SetSwapInterval(interval); +} + +void GSDeviceOGL::DestroyResources() +{ + m_shader_cache.Close(); + + if (m_palette_ss != 0) + glDeleteSamplers(1, &m_palette_ss); + + m_programs.clear(); + + for (GSDepthStencilOGL* ds : m_om_dss) + delete ds; + + if (m_ps_ss[0] != 0) + glDeleteSamplers(std::size(m_ps_ss), m_ps_ss); + + m_imgui.ps.Destroy(); + if (m_imgui.vao != 0) + glDeleteVertexArrays(1, &m_imgui.vao); + + m_cas.upscale_ps.Destroy(); + m_cas.sharpen_ps.Destroy(); + + m_shadeboost.ps.Destroy(); + + for (GL::Program& prog : m_date.primid_ps) + prog.Destroy(); + delete m_date.dss; + + m_fxaa.ps.Destroy(); + + for (GL::Program& prog : m_present) + prog.Destroy(); + + for (GL::Program& prog : m_convert.ps) + prog.Destroy(); + delete m_convert.dss; + delete m_convert.dss_write; + + for (GL::Program& prog : m_interlace.ps) + prog.Destroy(); + + for (GL::Program& prog : m_merge_obj.ps) + prog.Destroy(); + + m_fragment_uniform_stream_buffer.reset(); + m_vertex_uniform_stream_buffer.reset(); + + glBindVertexArray(0); + if (m_expand_ibo != 0) + glDeleteVertexArrays(1, &m_expand_ibo); + if (m_vao != 0) + glDeleteVertexArrays(1, &m_vao); + + m_index_stream_buffer.reset(); + m_vertex_stream_buffer.reset(); + s_texture_upload_buffer.reset(); + if (m_expand_ibo) + glDeleteBuffers(1, &m_expand_ibo); + + if (m_fbo != 0) + glDeleteFramebuffers(1, &m_fbo); + if (m_fbo_read != 0) + glDeleteFramebuffers(1, &m_fbo_read); + if (m_fbo_write != 0) + glDeleteFramebuffers(1, &m_fbo_write); +} + +bool GSDeviceOGL::UpdateWindow() +{ + pxAssert(m_gl_context); + + DestroySurface(); + + if (!AcquireWindow(false)) + return false; + + if (!m_gl_context->ChangeSurface(m_window_info)) + { + Console.Error("Failed to change surface"); + return false; + } + + m_window_info = m_gl_context->GetWindowInfo(); + + if (m_window_info.type != WindowInfo::Type::Surfaceless) + { + // reset vsync rate, since it (usually) gets lost + if (m_vsync_mode != VsyncMode::Adaptive || !m_gl_context->SetSwapInterval(-1)) + m_gl_context->SetSwapInterval(static_cast(m_vsync_mode != VsyncMode::Off)); + + RenderBlankFrame(); + } + + return true; +} + +void GSDeviceOGL::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) +{ + m_window_info.surface_scale = new_window_scale; + if (m_window_info.surface_width == static_cast(new_window_width) && + m_window_info.surface_height == static_cast(new_window_height)) + { + return; + } + + m_gl_context->ResizeSurface(static_cast(new_window_width), static_cast(new_window_height)); + m_window_info = m_gl_context->GetWindowInfo(); +} + +bool GSDeviceOGL::SupportsExclusiveFullscreen() const +{ + return false; +} + +void GSDeviceOGL::DestroySurface() +{ + m_window_info = {}; + if (!m_gl_context->ChangeSurface(m_window_info)) + Console.Error("Failed to switch to surfaceless"); +} + +std::string GSDeviceOGL::GetDriverInfo() const +{ + const char* gl_vendor = reinterpret_cast(glGetString(GL_VENDOR)); + const char* gl_renderer = reinterpret_cast(glGetString(GL_RENDERER)); + const char* gl_version = reinterpret_cast(glGetString(GL_VERSION)); + return StringUtil::StdStringFromFormat( + "%s Context:\n%s\n%s %s", m_gl_context->IsGLES() ? "OpenGL ES" : "OpenGL", gl_version, gl_vendor, gl_renderer); +} + +GSDevice::PresentResult GSDeviceOGL::BeginPresent(bool frame_skip) +{ + if (frame_skip || m_window_info.type == WindowInfo::Type::Surfaceless) + return PresentResult::FrameSkipped; + + OMSetFBO(0); + OMSetColorMaskState(); + + glDisable(GL_SCISSOR_TEST); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + glEnable(GL_SCISSOR_TEST); + + const GSVector2i size = GetWindowSize(); + SetViewport(size); + SetScissor(GSVector4i::loadh(size)); + + return PresentResult::OK; +} + +void GSDeviceOGL::EndPresent() +{ + RenderImGui(); + + if (m_gpu_timing_enabled) + PopTimestampQuery(); + + m_gl_context->SwapBuffers(); + + if (m_gpu_timing_enabled) + KickTimestampQuery(); +} + +void GSDeviceOGL::CreateTimestampQueries() +{ + const bool gles = m_gl_context->IsGLES(); + const auto GenQueries = gles ? glGenQueriesEXT : glGenQueries; + + GenQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); + KickTimestampQuery(); +} + +void GSDeviceOGL::DestroyTimestampQueries() +{ + if (m_timestamp_queries[0] == 0) + return; + + const bool gles = m_gl_context->IsGLES(); + const auto DeleteQueries = gles ? glDeleteQueriesEXT : glDeleteQueries; + + if (m_timestamp_query_started) + { + const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; + EndQuery(GL_TIME_ELAPSED); + } + + DeleteQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); + m_timestamp_queries.fill(0); + m_read_timestamp_query = 0; + m_write_timestamp_query = 0; + m_waiting_timestamp_queries = 0; + m_timestamp_query_started = false; +} + +void GSDeviceOGL::PopTimestampQuery() +{ + const bool gles = m_gl_context->IsGLES(); + + if (gles) + { + GLint disjoint = 0; + glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint); + if (disjoint) + { + DevCon.WriteLn("GPU timing disjoint, resetting."); + if (m_timestamp_query_started) + glEndQueryEXT(GL_TIME_ELAPSED); + + m_read_timestamp_query = 0; + m_write_timestamp_query = 0; + m_waiting_timestamp_queries = 0; + m_timestamp_query_started = false; + } + } + + while (m_waiting_timestamp_queries > 0) + { + const auto GetQueryObjectiv = gles ? glGetQueryObjectivEXT : glGetQueryObjectiv; + const auto GetQueryObjectui64v = gles ? glGetQueryObjectui64vEXT : glGetQueryObjectui64v; + + GLint available = 0; + GetQueryObjectiv(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT_AVAILABLE, &available); + + if (!available) + break; + + u64 result = 0; + GetQueryObjectui64v(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT, &result); + m_accumulated_gpu_time += static_cast(static_cast(result) / 1000000.0); + m_read_timestamp_query = (m_read_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; + m_waiting_timestamp_queries--; + } + + if (m_timestamp_query_started) + { + const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; + EndQuery(GL_TIME_ELAPSED); + + m_write_timestamp_query = (m_write_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; + m_timestamp_query_started = false; + m_waiting_timestamp_queries++; + } +} + +void GSDeviceOGL::KickTimestampQuery() +{ + if (m_timestamp_query_started || m_waiting_timestamp_queries == NUM_TIMESTAMP_QUERIES) + return; + + const bool gles = m_gl_context->IsGLES(); + const auto BeginQuery = gles ? glBeginQueryEXT : glBeginQuery; + + BeginQuery(GL_TIME_ELAPSED, m_timestamp_queries[m_write_timestamp_query]); + m_timestamp_query_started = true; +} + +bool GSDeviceOGL::SetGPUTimingEnabled(bool enabled) +{ + if (m_gpu_timing_enabled == enabled) + return true; + + if (enabled && m_gl_context->IsGLES() && !GLAD_GL_EXT_disjoint_timer_query) + return false; + + m_gpu_timing_enabled = enabled; + if (m_gpu_timing_enabled) + CreateTimestampQueries(); + else + DestroyTimestampQueries(); + + return true; +} + +float GSDeviceOGL::GetAndResetAccumulatedGPUTime() +{ + const float value = m_accumulated_gpu_time; + m_accumulated_gpu_time = 0.0f; + return value; +} + +void GSDeviceOGL::DrawPrimitive() +{ + g_perfmon.Put(GSPerfMon::DrawCalls, 1); + glDrawArrays(m_draw_topology, m_vertex.start, m_vertex.count); +} + +void GSDeviceOGL::DrawIndexedPrimitive() +{ + g_perfmon.Put(GSPerfMon::DrawCalls, 1); + glDrawElementsBaseVertex(m_draw_topology, static_cast(m_index.count), GL_UNSIGNED_SHORT, + reinterpret_cast(static_cast(m_index.start) * sizeof(u16)), static_cast(m_vertex.start)); +} + +void GSDeviceOGL::DrawIndexedPrimitive(int offset, int count) +{ + //ASSERT(offset + count <= (int)m_index.count); + + g_perfmon.Put(GSPerfMon::DrawCalls, 1); + glDrawElementsBaseVertex(m_draw_topology, count, GL_UNSIGNED_SHORT, + reinterpret_cast((static_cast(m_index.start) + static_cast(offset)) * sizeof(u16)), + static_cast(m_vertex.start)); +} + +void GSDeviceOGL::ClearRenderTarget(GSTexture* t, const GSVector4& c) +{ + if (!t) + return; + + GSTextureOGL* T = static_cast(t); + if (T->HasBeenCleaned()) + return; + + // Performance note: potentially T->Clear() could be used. Main purpose of + // Clear() is to avoid the framebuffer setup cost. However, in this context, + // the texture 't' will be set as the render target of the framebuffer and + // therefore will require a framebuffer setup. + + // So using the old/standard path is faster/better albeit verbose. + + GL_PUSH("Clear RT %d", T->GetID()); + + // TODO: check size of scissor before toggling it + glDisable(GL_SCISSOR_TEST); + + const u32 old_color_mask = GLState::wrgba; + OMSetColorMaskState(); + + OMSetFBO(m_fbo); + OMAttachRt(T); + + if (T->IsIntegerFormat()) + { + if (T->IsUnsignedFormat()) + glClearBufferuiv(GL_COLOR, 0, c.U32); + else + glClearBufferiv(GL_COLOR, 0, c.I32); + } + else + { + glClearBufferfv(GL_COLOR, 0, c.v); + } + + OMSetColorMaskState(OMColorMaskSelector(old_color_mask)); + + glEnable(GL_SCISSOR_TEST); + + T->WasCleaned(); +} + +void GSDeviceOGL::ClearRenderTarget(GSTexture* t, u32 c) +{ + if (!t) + return; + + const GSVector4 color = GSVector4::rgba32(c) * (1.0f / 255); + ClearRenderTarget(t, color); +} + +void GSDeviceOGL::InvalidateRenderTarget(GSTexture* t) +{ + GSTextureOGL* T = static_cast(t); + if (!T || T->HasBeenCleaned()) + return; + + if (GLAD_GL_VERSION_4_3 || GLAD_GL_ES_VERSION_3_0) + { + OMSetFBO(m_fbo); + + if (T->GetType() == GSTexture::Type::DepthStencil) + { + OMAttachDs(T); + const GLenum attachments[] = {GL_DEPTH_STENCIL_ATTACHMENT}; + glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); + } + else + { + OMAttachRt(T); + const GLenum attachments[] = {GL_COLOR_ATTACHMENT0}; + glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); + } + } +} + +void GSDeviceOGL::ClearDepth(GSTexture* t) +{ + if (!t) + return; + + GSTextureOGL* T = static_cast(t); + + GL_PUSH("Clear Depth %d", T->GetID()); + + OMSetFBO(m_fbo); + // RT must be detached, if RT is too small, depth won't be fully cleared + // AT tolenico 2 map clip bug + OMAttachRt(NULL); + OMAttachDs(T); + + // TODO: check size of scissor before toggling it + glDisable(GL_SCISSOR_TEST); + const float c = 0.0f; + if (GLState::depth_mask) + { + glClearBufferfv(GL_DEPTH, 0, &c); + } + else + { + glDepthMask(true); + glClearBufferfv(GL_DEPTH, 0, &c); + glDepthMask(false); + } + glEnable(GL_SCISSOR_TEST); +} + +void GSDeviceOGL::ClearStencil(GSTexture* t, u8 c) +{ + if (!t) + return; + + GSTextureOGL* T = static_cast(t); + + GL_PUSH("Clear Stencil %d", T->GetID()); + + // Keep SCISSOR_TEST enabled on purpose to reduce the size + // of clean in DATE (impact big upscaling) + OMSetFBO(m_fbo); + OMAttachDs(T); + const GLint color = c; + + glClearBufferiv(GL_STENCIL, 0, &color); +} + +std::unique_ptr GSDeviceOGL::CreateDownloadTexture(u32 width, u32 height, GSTexture::Format format) +{ + return GSDownloadTextureOGL::Create(width, height, format); +} + +GLuint GSDeviceOGL::CreateSampler(PSSamplerSelector sel) +{ + GL_PUSH("Create Sampler"); + + GLuint sampler; + glCreateSamplers(1, &sampler); + + glSamplerParameteri(sampler, GL_TEXTURE_MAG_FILTER, sel.IsMagFilterLinear() ? GL_LINEAR : GL_NEAREST); + if (!sel.UseMipmapFiltering()) + { + glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, sel.IsMinFilterLinear() ? GL_LINEAR : GL_NEAREST); + } + else + { + if (sel.IsMipFilterLinear()) + glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, sel.IsMinFilterLinear() ? GL_LINEAR_MIPMAP_LINEAR : GL_NEAREST_MIPMAP_LINEAR); + else + glSamplerParameteri(sampler, GL_TEXTURE_MIN_FILTER, sel.IsMinFilterLinear() ? GL_LINEAR_MIPMAP_NEAREST : GL_NEAREST_MIPMAP_NEAREST); + } + + glSamplerParameterf(sampler, GL_TEXTURE_MIN_LOD, -1000.0f); + glSamplerParameterf(sampler, GL_TEXTURE_MAX_LOD, sel.lodclamp ? 0.25f : 1000.0f); + + if (sel.tau) + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_REPEAT); + else + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); + if (sel.tav) + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_REPEAT); + else + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); + + glSamplerParameteri(sampler, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); + + const int anisotropy = GSConfig.MaxAnisotropy; + if (anisotropy > 1 && sel.aniso) + { + if (GLAD_GL_ARB_texture_filter_anisotropic) + glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY, static_cast(anisotropy)); + else if (GLAD_GL_EXT_texture_filter_anisotropic) + glSamplerParameterf(sampler, GL_TEXTURE_MAX_ANISOTROPY_EXT, static_cast(anisotropy)); + } + + return sampler; +} + +GLuint GSDeviceOGL::GetSamplerID(PSSamplerSelector ssel) +{ + return m_ps_ss[ssel.key]; +} + +GSDepthStencilOGL* GSDeviceOGL::CreateDepthStencil(OMDepthStencilSelector dssel) +{ + GSDepthStencilOGL* dss = new GSDepthStencilOGL(); + + if (dssel.date) + { + dss->EnableStencil(); + if (dssel.date_one) + dss->SetStencil(GL_EQUAL, GL_ZERO); + else + dss->SetStencil(GL_EQUAL, GL_KEEP); + } + + if (dssel.ztst != ZTST_ALWAYS || dssel.zwe) + { + static const GLenum ztst[] = + { + GL_NEVER, + GL_ALWAYS, + GL_GEQUAL, + GL_GREATER + }; + dss->EnableDepth(); + dss->SetDepth(ztst[dssel.ztst], dssel.zwe); + } + + return dss; +} + +GSTexture* GSDeviceOGL::InitPrimDateTexture(GSTexture* rt, const GSVector4i& area, bool datm) +{ + const GSVector2i& rtsize = rt->GetSize(); + + GSTexture* tex = CreateRenderTarget(rtsize.x, rtsize.y, GSTexture::Format::PrimID, false); + + GL_PUSH("PrimID Destination Alpha Clear"); + StretchRect(rt, GSVector4(area) / GSVector4(rtsize).xyxy(), tex, GSVector4(area), m_date.primid_ps[datm], false); + return tex; +} + +std::string GSDeviceOGL::GetShaderSource(const std::string_view& entry, GLenum type, const std::string_view& glsl_h_code, const std::string_view& macro_sel) +{ + std::string src = GenGlslHeader(entry, type, macro_sel); + src += glsl_h_code; + return src; +} + +std::string GSDeviceOGL::GenGlslHeader(const std::string_view& entry, GLenum type, const std::string_view& macro) +{ + std::string header; + + // Intel's GL driver doesn't like the readonly qualifier with 3.3 GLSL. + if (m_features.vs_expand && GLAD_GL_VERSION_4_3) + { + header = "#version 430 core\n"; + } + else + { + header = "#version 330 core\n"; + header += "#extension GL_ARB_shading_language_420pack : require\n"; + if (GLAD_GL_ARB_gpu_shader5) + header += "#extension GL_ARB_gpu_shader5 : require\n"; + if (m_features.vs_expand) + header += "#extension GL_ARB_shader_storage_buffer_object: require\n"; + } + + if (GLAD_GL_ARB_shader_draw_parameters) + header += "#extension GL_ARB_shader_draw_parameters : require\n"; + if (m_features.framebuffer_fetch && GLAD_GL_EXT_shader_framebuffer_fetch) + header += "#extension GL_EXT_shader_framebuffer_fetch : require\n"; + + if (m_features.framebuffer_fetch) + header += "#define HAS_FRAMEBUFFER_FETCH 1\n"; + else + header += "#define HAS_FRAMEBUFFER_FETCH 0\n"; + + if (m_features.clip_control) + header += "#define HAS_CLIP_CONTROL 1\n"; + else + header += "#define HAS_CLIP_CONTROL 0\n"; + + // Allow to puts several shader in 1 files + switch (type) + { + case GL_VERTEX_SHADER: + header += "#define VERTEX_SHADER 1\n"; + break; + case GL_GEOMETRY_SHADER: + header += "#define GEOMETRY_SHADER 1\n"; + break; + case GL_FRAGMENT_SHADER: + header += "#define FRAGMENT_SHADER 1\n"; + break; + default: + ASSERT(0); + } + + // Select the entry point ie the main function + header += "#define "; + header += entry; + header += " main\n"; + + header += macro; + + return header; +} + +std::string GSDeviceOGL::GetVSSource(VSSelector sel) +{ + DevCon.WriteLn("Compiling new vertex shader with selector 0x%" PRIX64, sel.key); + + std::string macro = fmt::format("#define VS_FST {}\n", static_cast(sel.fst)) + + fmt::format("#define VS_IIP {}\n", static_cast(sel.iip)) + + fmt::format("#define VS_POINT_SIZE {}\n", static_cast(sel.point_size)) + + fmt::format("#define VS_EXPAND {}\n", static_cast(sel.expand)); + + std::string src = GenGlslHeader("vs_main", GL_VERTEX_SHADER, macro); + src += m_shader_tfx_vgs; + return src; +} + +std::string GSDeviceOGL::GetPSSource(const PSSelector& sel) +{ + DevCon.WriteLn("Compiling new pixel shader with selector 0x%" PRIX64 "%08X", sel.key_hi, sel.key_lo); + + std::string macro = fmt::format("#define PS_FST {}\n", sel.fst) + + fmt::format("#define PS_WMS {}\n", sel.wms) + + fmt::format("#define PS_WMT {}\n", sel.wmt) + + fmt::format("#define PS_ADJS {}\n", sel.adjs) + + fmt::format("#define PS_ADJT {}\n", sel.adjt) + + fmt::format("#define PS_AEM_FMT {}\n", sel.aem_fmt) + + fmt::format("#define PS_PAL_FMT {}\n", sel.pal_fmt) + + fmt::format("#define PS_DFMT {}\n", sel.dfmt) + + fmt::format("#define PS_DEPTH_FMT {}\n", sel.depth_fmt) + + fmt::format("#define PS_CHANNEL_FETCH {}\n", sel.channel) + + fmt::format("#define PS_URBAN_CHAOS_HLE {}\n", sel.urban_chaos_hle) + + fmt::format("#define PS_TALES_OF_ABYSS_HLE {}\n", sel.tales_of_abyss_hle) + + fmt::format("#define PS_TEX_IS_FB {}\n", sel.tex_is_fb) + + fmt::format("#define PS_AEM {}\n", sel.aem) + + fmt::format("#define PS_TFX {}\n", sel.tfx) + + fmt::format("#define PS_TCC {}\n", sel.tcc) + + fmt::format("#define PS_ATST {}\n", sel.atst) + + fmt::format("#define PS_FOG {}\n", sel.fog) + + fmt::format("#define PS_BLEND_HW {}\n", sel.blend_hw) + + fmt::format("#define PS_A_MASKED {}\n", sel.a_masked) + + fmt::format("#define PS_FBA {}\n", sel.fba) + + fmt::format("#define PS_LTF {}\n", sel.ltf) + + fmt::format("#define PS_AUTOMATIC_LOD {}\n", sel.automatic_lod) + + fmt::format("#define PS_MANUAL_LOD {}\n", sel.manual_lod) + + fmt::format("#define PS_COLCLIP {}\n", sel.colclip) + + fmt::format("#define PS_DATE {}\n", sel.date) + + fmt::format("#define PS_TCOFFSETHACK {}\n", sel.tcoffsethack) + + fmt::format("#define PS_POINT_SAMPLER {}\n", sel.point_sampler) + + fmt::format("#define PS_REGION_RECT {}\n", sel.region_rect) + + fmt::format("#define PS_BLEND_A {}\n", sel.blend_a) + + fmt::format("#define PS_BLEND_B {}\n", sel.blend_b) + + fmt::format("#define PS_BLEND_C {}\n", sel.blend_c) + + fmt::format("#define PS_BLEND_D {}\n", sel.blend_d) + + fmt::format("#define PS_IIP {}\n", sel.iip) + + fmt::format("#define PS_SHUFFLE {}\n", sel.shuffle) + + fmt::format("#define PS_READ_BA {}\n", sel.read_ba) + + fmt::format("#define PS_READ16_SRC {}\n", sel.real16src) + + fmt::format("#define PS_WRITE_RG {}\n", sel.write_rg) + + fmt::format("#define PS_FBMASK {}\n", sel.fbmask) + + fmt::format("#define PS_HDR {}\n", sel.hdr) + + fmt::format("#define PS_DITHER {}\n", sel.dither) + + fmt::format("#define PS_ZCLAMP {}\n", sel.zclamp) + + fmt::format("#define PS_BLEND_MIX {}\n", sel.blend_mix) + + fmt::format("#define PS_ROUND_INV {}\n", sel.round_inv) + + fmt::format("#define PS_FIXED_ONE_A {}\n", sel.fixed_one_a) + + fmt::format("#define PS_PABE {}\n", sel.pabe) + + fmt::format("#define PS_SCANMSK {}\n", sel.scanmsk) + + fmt::format("#define PS_NO_COLOR {}\n", sel.no_color) + + fmt::format("#define PS_NO_COLOR1 {}\n", sel.no_color1) + + fmt::format("#define PS_NO_ABLEND {}\n", sel.no_ablend) + + fmt::format("#define PS_ONLY_ALPHA {}\n", sel.only_alpha) + ; + + std::string src = GenGlslHeader("ps_main", GL_FRAGMENT_SHADER, macro); + src += m_shader_tfx_fs; + return src; +} + +// Copy a sub part of texture (same as below but force a conversion) +void GSDeviceOGL::BlitRect(GSTexture* sTex, const GSVector4i& r, const GSVector2i& dsize, bool at_origin, bool linear) +{ + GL_PUSH(fmt::format("CopyRectConv from {}", static_cast(sTex)->GetID()).c_str()); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); + + // NOTE: This previously used glCopyTextureSubImage2D(), but this appears to leak memory in + // the loading screens of Evolution Snowboarding in Intel/NVIDIA drivers. + glDisable(GL_SCISSOR_TEST); + + const GSVector4 float_r(r); + + m_convert.ps[static_cast(ShaderConvert::COPY)].Bind(); + OMSetDepthStencilState(m_convert.dss); + OMSetBlendState(); + OMSetColorMaskState(); + PSSetShaderResource(0, sTex); + PSSetSamplerState(linear ? m_convert.ln : m_convert.pt); + DrawStretchRect(float_r / (GSVector4(sTex->GetSize()).xyxy()), float_r, dsize); + + glEnable(GL_SCISSOR_TEST); +} + +// Copy a sub part of a texture into another +void GSDeviceOGL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, u32 destX, u32 destY) +{ + ASSERT(sTex && dTex); + if (!(sTex && dTex)) + return; + + const GLuint& sid = static_cast(sTex)->GetID(); + const GLuint& did = static_cast(dTex)->GetID(); + + GL_PUSH("CopyRect from %d to %d", sid, did); + +#ifdef ENABLE_OGL_DEBUG + PSSetShaderResource(6, sTex); +#endif + + g_perfmon.Put(GSPerfMon::TextureCopies, 1); + + if (GLAD_GL_VERSION_4_3 || GLAD_GL_ARB_copy_image) + { + glCopyImageSubData(sid, GL_TEXTURE_2D, 0, r.x, r.y, 0, did, GL_TEXTURE_2D, + 0, destX, destY, 0, r.width(), r.height(), 1); + } + else if (GLAD_GL_EXT_copy_image) + { + glCopyImageSubDataEXT(sid, GL_TEXTURE_2D, 0, r.x, r.y, 0, did, GL_TEXTURE_2D, + 0, destX, destY, 0, r.width(), r.height(), 1); + } + else if (GLAD_GL_OES_copy_image) + { + glCopyImageSubDataOES(sid, GL_TEXTURE_2D, 0, r.x, r.y, 0, did, GL_TEXTURE_2D, + 0, destX, destY, 0, r.width(), r.height(), 1); + } + else + { + glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo_write); + glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sid, 0); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, did, 0); + + const int w = r.width(), h = r.height(); + glDisable(GL_SCISSOR_TEST); + glBlitFramebuffer(r.x, r.y, r.x + w, r.y + h, destX + r.x, destY + r.y, destX + r.x + w, destY + r.y + h, GL_COLOR_BUFFER_BIT, GL_NEAREST); + glEnable(GL_SCISSOR_TEST); + + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLState::fbo); + glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); + } +} + +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ShaderConvert shader, bool linear) +{ + pxAssert(dTex->IsDepthStencil() == HasDepthOutput(shader)); + pxAssert(linear ? SupportsBilinear(shader) : SupportsNearest(shader)); + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[(int)shader], linear); +} + +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GL::Program& ps, bool linear) +{ + StretchRect(sTex, sRect, dTex, dRect, ps, false, OMColorMaskSelector(), linear); +} + +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, bool red, bool green, bool blue, bool alpha) +{ + OMColorMaskSelector cms; + + cms.wr = red; + cms.wg = green; + cms.wb = blue; + cms.wa = alpha; + + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[(int)ShaderConvert::COPY], false, cms, false); +} + +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GL::Program& ps, bool alpha_blend, OMColorMaskSelector cms, bool linear) +{ + ASSERT(sTex); + + const bool draw_in_depth = dTex->IsDepthStencil(); + + // ************************************ + // Init + // ************************************ + + GL_PUSH("StretchRect from %d to %d", static_cast(sTex)->GetID(), static_cast(dTex)->GetID()); + if (draw_in_depth) + OMSetRenderTargets(NULL, dTex); + else + OMSetRenderTargets(dTex, NULL); + + ps.Bind(); + + // ************************************ + // om + // ************************************ + + if (draw_in_depth) + OMSetDepthStencilState(m_convert.dss_write); + else + OMSetDepthStencilState(m_convert.dss); + + OMSetBlendState(alpha_blend, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, GL_FUNC_ADD); + OMSetColorMaskState(cms); + + // ************************************ + // Texture + // ************************************ + + PSSetShaderResource(0, sTex); + PSSetSamplerState(linear ? m_convert.ln : m_convert.pt); + + // ************************************ + // Draw + // ************************************ + DrawStretchRect(sRect, dRect, dTex->GetSize()); +} + +void GSDeviceOGL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, PresentShader shader, float shaderTime, bool linear) +{ + ASSERT(sTex); + + const GSVector2i ds(dTex ? dTex->GetSize() : GSVector2i(GetWindowWidth(), GetWindowHeight())); + DisplayConstantBuffer cb; + cb.SetSource(sRect, sTex->GetSize()); + cb.SetTarget(dRect, ds); + cb.SetTime(shaderTime); + + GL::Program& prog = m_present[static_cast(shader)]; + prog.Bind(); + prog.Uniform4fv(0, cb.SourceRect.F32); + prog.Uniform4fv(1, cb.TargetRect.F32); + prog.Uniform2fv(2, &cb.SourceSize.x); + prog.Uniform2fv(3, &cb.TargetSize.x); + prog.Uniform2fv(4, &cb.TargetResolution.x); + prog.Uniform2fv(5, &cb.RcpTargetResolution.x); + prog.Uniform2fv(6, &cb.SourceResolution.x); + prog.Uniform2fv(7, &cb.RcpSourceResolution.x); + prog.Uniform1f(8, cb.TimeAndPad.x); + + OMSetDepthStencilState(m_convert.dss); + OMSetBlendState(false); + OMSetColorMaskState(); + + PSSetShaderResource(0, sTex); + PSSetSamplerState(linear ? m_convert.ln : m_convert.pt); + + // Flip y axis only when we render in the backbuffer + // By default everything is render in the wrong order (ie dx). + // 1/ consistency between several pass rendering (interlace) + // 2/ in case some GS code expect thing in dx order. + // Only flipping the backbuffer is transparent (I hope)... + const GSVector4 flip_sr(sRect.xwzy()); + DrawStretchRect(flip_sr, dRect, ds); +} + +void GSDeviceOGL::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) +{ + const ShaderConvert shader = (dSize == 16) ? ShaderConvert::CLUT_4 : ShaderConvert::CLUT_8; + GL::Program& prog = m_convert.ps[static_cast(shader)]; + prog.Bind(); + prog.Uniform3ui(0, offsetX, offsetY, dOffset); + prog.Uniform1f(1, sScale); + + OMSetDepthStencilState(m_convert.dss); + OMSetBlendState(false); + OMSetColorMaskState(); + OMSetRenderTargets(dTex, nullptr); + + PSSetShaderResource(0, sTex); + PSSetSamplerState(m_convert.pt); + + const GSVector4 dRect(0, 0, dSize, 1); + DrawStretchRect(GSVector4::zero(), dRect, dTex->GetSize()); +} + +void GSDeviceOGL::ConvertToIndexedTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) +{ + const ShaderConvert shader = ShaderConvert::RGBA_TO_8I; + GL::Program& prog = m_convert.ps[static_cast(shader)]; + prog.Bind(); + prog.Uniform1ui(0, SBW); + prog.Uniform1ui(1, DBW); + prog.Uniform1f(2, sScale); + + OMSetDepthStencilState(m_convert.dss); + OMSetBlendState(false); + OMSetColorMaskState(); + OMSetRenderTargets(dTex, nullptr); + + PSSetShaderResource(0, sTex); + PSSetSamplerState(m_convert.pt); + + const GSVector4 dRect(0, 0, dTex->GetWidth(), dTex->GetHeight()); + DrawStretchRect(GSVector4::zero(), dRect, dTex->GetSize()); +} + +void GSDeviceOGL::DrawStretchRect(const GSVector4& sRect, const GSVector4& dRect, const GSVector2i& ds) +{ + // Original code from DX + const float left = dRect.x * 2 / ds.x - 1.0f; + const float right = dRect.z * 2 / ds.x - 1.0f; +#if 0 + const float top = 1.0f - dRect.y * 2 / ds.y; + const float bottom = 1.0f - dRect.w * 2 / ds.y; +#else + // Opengl get some issues with the coordinate + // I flip top/bottom to fix scaling of the internal resolution + const float top = -1.0f + dRect.y * 2 / ds.y; + const float bottom = -1.0f + dRect.w * 2 / ds.y; +#endif + + GSVertexPT1 vertices[] = + { + {GSVector4(left , top , 0.0f, 0.0f) , GSVector2(sRect.x , sRect.y)} , + {GSVector4(right , top , 0.0f, 0.0f) , GSVector2(sRect.z , sRect.y)} , + {GSVector4(left , bottom, 0.0f, 0.0f) , GSVector2(sRect.x , sRect.w)} , + {GSVector4(right , bottom, 0.0f, 0.0f) , GSVector2(sRect.z , sRect.w)} , + }; + + IASetVAO(m_vao); + IASetVertexBuffer(vertices, 4); + IASetPrimitiveTopology(GL_TRIANGLE_STRIP); + DrawPrimitive(); +} + +void GSDeviceOGL::DrawMultiStretchRects( + const MultiStretchRect* rects, u32 num_rects, GSTexture* dTex, ShaderConvert shader) +{ + IASetVAO(m_vao); + IASetPrimitiveTopology(GL_TRIANGLE_STRIP); + OMSetDepthStencilState(m_convert.dss); + OMSetBlendState(false); + OMSetColorMaskState(); + if (!dTex->IsDepthStencil()) + OMSetRenderTargets(dTex, nullptr); + else + OMSetRenderTargets(nullptr, dTex); + m_convert.ps[static_cast(shader)].Bind(); + + const GSVector2 ds(static_cast(dTex->GetWidth()), static_cast(dTex->GetHeight())); + GSTexture* last_tex = rects[0].src; + bool last_linear = rects[0].linear; + u8 last_wmask = rects[0].wmask.wrgba; + + u32 first = 0; + u32 count = 1; + + for (u32 i = 1; i < num_rects; i++) + { + if (rects[i].src == last_tex && rects[i].linear == last_linear && rects[i].wmask.wrgba == last_wmask) + { + count++; + continue; + } + + DoMultiStretchRects(rects + first, count, ds); + last_tex = rects[i].src; + last_linear = rects[i].linear; + last_wmask = rects[i].wmask.wrgba; + first += count; + count = 1; + } + + DoMultiStretchRects(rects + first, count, ds); +} + +void GSDeviceOGL::DoMultiStretchRects(const MultiStretchRect* rects, u32 num_rects, const GSVector2& ds) +{ + const u32 vertex_reserve_size = num_rects * 4 * sizeof(GSVertexPT1); + const u32 index_reserve_size = num_rects * 6 * sizeof(u16); + auto vertex_map = m_vertex_stream_buffer->Map(sizeof(GSVertexPT1), vertex_reserve_size); + auto index_map = m_index_stream_buffer->Map(sizeof(u16), index_reserve_size); + m_vertex.start = vertex_map.index_aligned; + m_index.start = index_map.index_aligned; + + // Don't use primitive restart here, it ends up slower on some drivers. + GSVertexPT1* verts = reinterpret_cast(vertex_map.pointer); + u16* idx = reinterpret_cast(index_map.pointer); + u32 icount = 0; + u32 vcount = 0; + for (u32 i = 0; i < num_rects; i++) + { + const GSVector4& sRect = rects[i].src_rect; + const GSVector4& dRect = rects[i].dst_rect; + const float left = dRect.x * 2 / ds.x - 1.0f; + const float right = dRect.z * 2 / ds.x - 1.0f; + const float top = -1.0f + dRect.y * 2 / ds.y; + const float bottom = -1.0f + dRect.w * 2 / ds.y; + + const u32 vstart = vcount; + verts[vcount++] = { GSVector4(left , top , 0.0f, 0.0f) , GSVector2(sRect.x , sRect.y) }; + verts[vcount++] = { GSVector4(right , top , 0.0f, 0.0f) , GSVector2(sRect.z , sRect.y) }; + verts[vcount++] = { GSVector4(left , bottom, 0.0f, 0.0f) , GSVector2(sRect.x , sRect.w) }; + verts[vcount++] = { GSVector4(right , bottom, 0.0f, 0.0f) , GSVector2(sRect.z , sRect.w) }; + + if (i > 0) + idx[icount++] = vstart; + + idx[icount++] = vstart; + idx[icount++] = vstart + 1; + idx[icount++] = vstart + 2; + idx[icount++] = vstart + 3; + idx[icount++] = vstart + 3; + }; + + m_vertex.count = vcount; + m_index.count = icount; + m_vertex_stream_buffer->Unmap(vcount * sizeof(GSVertexPT1)); + m_index_stream_buffer->Unmap(icount * sizeof(u16)); + + PSSetShaderResource(0, rects[0].src); + PSSetSamplerState(rects[0].linear ? m_convert.ln : m_convert.pt); + OMSetColorMaskState(rects[0].wmask); + DrawIndexedPrimitive(); +} + +void GSDeviceOGL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c, const bool linear) +{ + GL_PUSH("DoMerge"); + + const GSVector4 full_r(0.0f, 0.0f, 1.0f, 1.0f); + const bool feedback_write_2 = PMODE.EN2 && sTex[2] != nullptr && EXTBUF.FBIN == 1; + const bool feedback_write_1 = PMODE.EN1 && sTex[2] != nullptr && EXTBUF.FBIN == 0; + const bool feedback_write_2_but_blend_bg = feedback_write_2 && PMODE.SLBG == 1; + + // Merge the 2 source textures (sTex[0],sTex[1]). Final results go to dTex. Feedback write will go to sTex[2]. + // If either 2nd output is disabled or SLBG is 1, a background color will be used. + // Note: background color is also used when outside of the unit rectangle area + OMSetColorMaskState(); + ClearRenderTarget(dTex, c); + + if (sTex[1] && (PMODE.SLBG == 0 || feedback_write_2_but_blend_bg)) + { + // 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, PMODE.SLBG ? dRect[2] : dRect[1], ShaderConvert::COPY, linear); + } + + // Upload constant to select YUV algo + if (feedback_write_2 || feedback_write_1) + { + // Write result to feedback loop + m_convert.ps[static_cast(ShaderConvert::YUV)].Bind(); + m_convert.ps[static_cast(ShaderConvert::YUV)].Uniform2i(0, EXTBUF.EMODA, EXTBUF.EMODC); + } + + // Save 2nd output + if (feedback_write_2) + StretchRect(dTex, full_r, sTex[2], dRect[2], ShaderConvert::YUV, linear); + + // Restore background color to process the normal merge + if (feedback_write_2_but_blend_bg) + ClearRenderTarget(dTex, c); + + if (sTex[0]) + { + if (PMODE.AMOD == 1) // Keep the alpha from the 2nd output + OMSetColorMaskState(OMColorMaskSelector(0x7)); + + // 1st output is enabled. It must be blended + if (PMODE.MMOD == 1) + { + // Blend with a constant alpha + m_merge_obj.ps[1].Bind(); + m_merge_obj.ps[1].Uniform4fv(0, c.v); + StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge_obj.ps[1], true, OMColorMaskSelector(), linear); + } + else + { + // Blend with 2 * input alpha + StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge_obj.ps[0], true, OMColorMaskSelector(), linear); + } + } + + if (feedback_write_1) + StretchRect(dTex, full_r, sTex[2], dRect[2], ShaderConvert::YUV, linear); +} + +void GSDeviceOGL::DoInterlace(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ShaderInterlace shader, bool linear, const InterlaceConstantBuffer& cb) +{ + OMSetColorMaskState(); + + m_interlace.ps[static_cast(shader)].Bind(); + m_interlace.ps[static_cast(shader)].Uniform4fv(0, cb.ZrH.F32); + + StretchRect(sTex, sRect, dTex, dRect, m_interlace.ps[static_cast(shader)], linear); +} + +bool GSDeviceOGL::CompileFXAAProgram() +{ + // Needs ARB_gpu_shader5 for gather. + if (!GLAD_GL_ARB_gpu_shader5) + { + Console.Warning("FXAA is not supported with the current GPU"); + return true; + } + + const std::string_view fxaa_macro = "#define FXAA_GLSL_130 1\n"; + std::optional shader = Host::ReadResourceFileToString("shaders/common/fxaa.fx"); + if (!shader.has_value()) + { + Console.Error("Failed to read fxaa.fs"); + return false; + } + + const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, shader->c_str(), fxaa_macro)); + std::optional prog = m_shader_cache.GetProgram(m_convert.vs, ps); + if (!prog.has_value()) + { + Console.Error("Failed to compile FXAA fragment shader"); + return false; + } + + m_fxaa.ps = std::move(prog.value()); + return true; +} + +void GSDeviceOGL::DoFXAA(GSTexture* sTex, GSTexture* dTex) +{ + if (!m_fxaa.ps.IsValid()) + return; + + GL_PUSH("DoFxaa"); + + OMSetColorMaskState(); + + const GSVector2i s = dTex->GetSize(); + + const GSVector4 sRect(0, 0, 1, 1); + const GSVector4 dRect(0, 0, s.x, s.y); + + StretchRect(sTex, sRect, dTex, dRect, m_fxaa.ps, true); +} + +bool GSDeviceOGL::CompileShadeBoostProgram() +{ + const auto shader = Host::ReadResourceFileToString("shaders/opengl/shadeboost.glsl"); + if (!shader.has_value()) + { + Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/shadeboost.glsl."); + return false; + } + + const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, *shader)); + if (!m_shader_cache.GetProgram(&m_shadeboost.ps, m_convert.vs, ps)) + return false; + m_shadeboost.ps.RegisterUniform("params"); + m_shadeboost.ps.SetName("Shadeboost pipe"); + return true; +} + +void GSDeviceOGL::DoShadeBoost(GSTexture* sTex, GSTexture* dTex, const float params[4]) +{ + GL_PUSH("DoShadeBoost"); + + m_shadeboost.ps.Bind(); + m_shadeboost.ps.Uniform4fv(0, params); + + OMSetColorMaskState(); + + const GSVector2i s = dTex->GetSize(); + + const GSVector4 sRect(0, 0, 1, 1); + const GSVector4 dRect(0, 0, s.x, s.y); + + StretchRect(sTex, sRect, dTex, dRect, m_shadeboost.ps, false); +} + +void GSDeviceOGL::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* vertices, bool datm) +{ + GL_PUSH("DATE First Pass"); + + // sfex3 (after the capcom logo), vf4 (first menu fading in), ffxii shadows, rumble roses shadows, persona4 shadows + + ClearStencil(ds, 0); + + m_convert.ps[static_cast(datm ? ShaderConvert::DATM_1 : ShaderConvert::DATM_0)].Bind(); + + // om + + OMSetDepthStencilState(m_date.dss); + if (GLState::blend) + { + glDisable(GL_BLEND); + } + OMSetRenderTargets(NULL, ds, &GLState::scissor); + + // ia + + IASetVAO(m_vao); + IASetVertexBuffer(vertices, 4); + IASetPrimitiveTopology(GL_TRIANGLE_STRIP); + + + // Texture + + PSSetShaderResource(0, rt); + PSSetSamplerState(m_convert.pt); + + DrawPrimitive(); + + if (GLState::blend) + { + glEnable(GL_BLEND); + } +} + +void GSDeviceOGL::IASetVAO(GLuint vao) +{ + if (GLState::vao == vao) + return; + + GLState::vao = vao; + glBindVertexArray(vao); +} + +void GSDeviceOGL::IASetVertexBuffer(const void* vertices, size_t count) +{ + const u32 size = static_cast(count) * sizeof(GSVertexPT1); + auto res = m_vertex_stream_buffer->Map(sizeof(GSVertexPT1), size); + std::memcpy(res.pointer, vertices, size); + m_vertex.start = res.index_aligned; + m_vertex.count = count; + m_vertex_stream_buffer->Unmap(size); +} + +void GSDeviceOGL::IASetIndexBuffer(const void* index, size_t count) +{ + const u32 size = static_cast(count) * sizeof(u16); + auto res = m_index_stream_buffer->Map(sizeof(u16), size); + m_index.start = res.index_aligned; + m_index.count = count; + std::memcpy(res.pointer, index, size); + m_index_stream_buffer->Unmap(size); +} + +void GSDeviceOGL::IASetPrimitiveTopology(GLenum topology) +{ + m_draw_topology = topology; +} + +void GSDeviceOGL::PSSetShaderResource(int i, GSTexture* sr) +{ + ASSERT(i < static_cast(std::size(GLState::tex_unit))); + // Note: Nvidia debgger doesn't support the id 0 (ie the NULL texture) + if (sr) + { + const GLuint id = static_cast(sr)->GetID(); + if (GLState::tex_unit[i] != id) + { + GLState::tex_unit[i] = id; + glBindTextureUnit(i, id); + } + } +} + +void GSDeviceOGL::PSSetShaderResources(GSTexture* sr0, GSTexture* sr1) +{ + PSSetShaderResource(0, sr0); + PSSetShaderResource(1, sr1); +} + +void GSDeviceOGL::PSSetSamplerState(GLuint ss) +{ + if (GLState::ps_ss != ss) + { + GLState::ps_ss = ss; + glBindSampler(0, ss); + } +} + +void GSDeviceOGL::ClearSamplerCache() +{ + glDeleteSamplers(std::size(m_ps_ss), m_ps_ss); + + for (u32 key = 0; key < std::size(m_ps_ss); key++) + { + m_ps_ss[key] = CreateSampler(PSSamplerSelector(key)); + } +} + +bool GSDeviceOGL::CreateCASPrograms() +{ + std::optional cas_source(Host::ReadResourceFileToString("shaders/opengl/cas.glsl")); + if (!cas_source.has_value() || !GetCASShaderSource(&cas_source.value())) + { + m_features.cas_sharpening = false; + return false; + } + + const char* header = + "#version 420\n" + "#extension GL_ARB_compute_shader : require\n"; + const char* sharpen_params[2] = { + "#define CAS_SHARPEN_ONLY false\n", + "#define CAS_SHARPEN_ONLY true\n"}; + + if (!m_shader_cache.GetComputeProgram(&m_cas.upscale_ps, fmt::format("{}{}{}", header, sharpen_params[0], cas_source.value())) || + !m_shader_cache.GetComputeProgram(&m_cas.sharpen_ps, fmt::format("{}{}{}", header, sharpen_params[1], cas_source.value()))) + { + m_features.cas_sharpening = false; + return false; + } + + const auto link_uniforms = [](GL::Program& prog) { + prog.RegisterUniform("const0"); + prog.RegisterUniform("const1"); + prog.RegisterUniform("srcOffset"); + }; + link_uniforms(m_cas.upscale_ps); + link_uniforms(m_cas.sharpen_ps); + + return true; +} + +bool GSDeviceOGL::DoCAS(GSTexture* sTex, GSTexture* dTex, bool sharpen_only, const std::array& constants) +{ + const GL::Program& prog = sharpen_only ? m_cas.sharpen_ps : m_cas.upscale_ps; + prog.Bind(); + prog.Uniform4uiv(0, &constants[0]); + prog.Uniform4uiv(1, &constants[4]); + prog.Uniform2iv(2, reinterpret_cast(&constants[8])); + + PSSetShaderResource(0, sTex); + glBindImageTexture(0, static_cast(dTex)->GetID(), 0, GL_FALSE, 0, GL_WRITE_ONLY, GL_RGBA8); + + static const int threadGroupWorkRegionDim = 16; + const int dispatchX = (dTex->GetWidth() + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + const int dispatchY = (dTex->GetHeight() + (threadGroupWorkRegionDim - 1)) / threadGroupWorkRegionDim; + glDispatchCompute(dispatchX, dispatchY, 1); + + return true; +} + +bool GSDeviceOGL::CreateImGuiProgram() +{ + std::optional glsl = Host::ReadResourceFileToString("shaders/opengl/imgui.glsl"); + if (!glsl.has_value()) + { + Console.Error("Failed to read imgui.glsl"); + return false; + } + + std::optional prog = m_shader_cache.GetProgram( + GetShaderSource("vs_main", GL_VERTEX_SHADER, glsl.value()), + GetShaderSource("ps_main", GL_FRAGMENT_SHADER, glsl.value())); + if (!prog.has_value()) + { + Console.Error("Failed to compile imgui shaders"); + return false; + } + + prog->SetName("ImGui Render"); + prog->RegisterUniform("ProjMtx"); + m_imgui.ps = std::move(prog.value()); + + // Need a different VAO because the layout doesn't match GS + glGenVertexArrays(1, &m_imgui.vao); + glBindVertexArray(m_imgui.vao); + m_vertex_stream_buffer->Bind(); + m_index_stream_buffer->Bind(); + + glEnableVertexAttribArray(0); + glEnableVertexAttribArray(1); + glEnableVertexAttribArray(2); + + glBindVertexArray(GLState::vao); + return true; +} + +void GSDeviceOGL::RenderImGui() +{ +} + +void GSDeviceOGL::RenderBlankFrame() +{ + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); + glDisable(GL_SCISSOR_TEST); + glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClear(GL_COLOR_BUFFER_BIT); + m_gl_context->SwapBuffers(); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLState::fbo); + glEnable(GL_SCISSOR_TEST); +} + +void GSDeviceOGL::OMAttachRt(GSTextureOGL* rt) +{ + if (rt) + rt->WasAttached(); + + if (GLState::rt != rt) + { + GLState::rt = rt; + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt ? rt->GetID() : 0, 0); + } +} + +void GSDeviceOGL::OMAttachDs(GSTextureOGL* ds) +{ + if (ds) + ds->WasAttached(); + + if (GLState::ds != ds) + { + GLState::ds = ds; + + const GLenum target = m_features.framebuffer_fetch ? GL_DEPTH_ATTACHMENT : GL_DEPTH_STENCIL_ATTACHMENT; + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, target, GL_TEXTURE_2D, ds ? ds->GetID() : 0, 0); + } +} + +void GSDeviceOGL::OMSetFBO(GLuint fbo) +{ + if (GLState::fbo != fbo) + { + GLState::fbo = fbo; + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, fbo); + } +} + +void GSDeviceOGL::OMSetDepthStencilState(GSDepthStencilOGL* dss) +{ + dss->SetupDepth(); + dss->SetupStencil(); +} + +void GSDeviceOGL::OMSetColorMaskState(OMColorMaskSelector sel) +{ + if (sel.wrgba != GLState::wrgba) + { + GLState::wrgba = sel.wrgba; + + glColorMaski(0, sel.wr, sel.wg, sel.wb, sel.wa); + } +} + +void GSDeviceOGL::OMUnbindTexture(GSTextureOGL* tex) +{ + if (GLState::rt != tex && GLState::ds != tex) + return; + + OMSetFBO(m_fbo); + if (GLState::rt == tex) + OMAttachRt(); + if (GLState::ds == tex) + OMAttachDs(); +} + +void GSDeviceOGL::OMSetBlendState(bool enable, GLenum src_factor, GLenum dst_factor, GLenum op, bool is_constant, u8 constant) +{ + if (enable) + { + if (!GLState::blend) + { + GLState::blend = true; + glEnable(GL_BLEND); + } + + if (is_constant && GLState::bf != constant) + { + GLState::bf = constant; + const float bf = (float)constant / 128.0f; + glBlendColor(bf, bf, bf, bf); + } + + if (GLState::eq_RGB != op) + { + GLState::eq_RGB = op; + glBlendEquationSeparate(op, GL_FUNC_ADD); + } + + if (GLState::f_sRGB != src_factor || GLState::f_dRGB != dst_factor) + { + GLState::f_sRGB = src_factor; + GLState::f_dRGB = dst_factor; + glBlendFuncSeparate(src_factor, dst_factor, GL_ONE, GL_ZERO); + } + } + else + { + if (GLState::blend) + { + // make sure we're not using dual source + if (GLState::f_sRGB == GL_SRC1_ALPHA || GLState::f_sRGB == GL_ONE_MINUS_SRC1_ALPHA || + GLState::f_dRGB == GL_SRC1_ALPHA || GLState::f_dRGB == GL_ONE_MINUS_SRC1_ALPHA) + { + glBlendFuncSeparate(GL_ONE, GL_ZERO, GL_ONE, GL_ZERO); + GLState::f_sRGB = GL_ONE; + GLState::f_dRGB = GL_ZERO; + } + + GLState::blend = false; + glDisable(GL_BLEND); + } + } +} + +void GSDeviceOGL::OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor) +{ + GSTextureOGL* RT = static_cast(rt); + GSTextureOGL* DS = static_cast(ds); + + g_perfmon.Put(GSPerfMon::RenderPasses, static_cast(GLState::rt != RT || GLState::ds != DS)); + + OMSetFBO(m_fbo); + if (rt) + { + OMAttachRt(RT); + } + else + { + OMAttachRt(); + } + + // Note: it must be done after OMSetFBO + if (ds) + OMAttachDs(DS); + else + OMAttachDs(); + + if (rt || ds) + { + const GSVector2i size = rt ? rt->GetSize() : ds->GetSize(); + SetViewport(size); + SetScissor(scissor ? *scissor : GSVector4i::loadh(size)); + } +} + +void GSDeviceOGL::SetViewport(const GSVector2i& viewport) +{ + if (GLState::viewport != viewport) + { + GLState::viewport = viewport; + glViewport(0, 0, viewport.x, viewport.y); + } +} + +void GSDeviceOGL::SetScissor(const GSVector4i& scissor) +{ + if (!GLState::scissor.eq(scissor)) + { + GLState::scissor = scissor; + glScissor(scissor.x, scissor.y, scissor.width(), scissor.height()); + } +} + +__fi static void WriteToStreamBuffer(GL::StreamBuffer* sb, u32 index, u32 align, const void* data, u32 size) +{ + const auto res = sb->Map(align, size); + std::memcpy(res.pointer, data, size); + sb->Unmap(size); + + glBindBufferRange(GL_UNIFORM_BUFFER, index, sb->GetGLBufferId(), res.buffer_offset, size); +} + +void GSDeviceOGL::SetupPipeline(const ProgramSelector& psel) +{ + auto it = m_programs.find(psel); + if (it != m_programs.end()) + { + it->second.Bind(); + return; + } + + const std::string vs(GetVSSource(psel.vs)); + const std::string ps(GetPSSource(psel.ps)); + + GL::Program prog; + m_shader_cache.GetProgram(&prog, vs, ps); + it = m_programs.emplace(psel, std::move(prog)).first; + it->second.Bind(); +} + +void GSDeviceOGL::SetupSampler(PSSamplerSelector ssel) +{ + PSSetSamplerState(m_ps_ss[ssel.key]); +} + +GLuint GSDeviceOGL::GetPaletteSamplerID() +{ + return m_palette_ss; +} + +void GSDeviceOGL::SetupOM(OMDepthStencilSelector dssel) +{ + OMSetDepthStencilState(m_om_dss[dssel.key]); +} + +// clang-format off +static constexpr std::array s_gl_blend_factors = { { + GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR, GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, + GL_SRC1_COLOR, GL_ONE_MINUS_SRC1_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA, + GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA, GL_SRC1_ALPHA, GL_ONE_MINUS_SRC1_ALPHA, + GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR, GL_ONE, GL_ZERO +} }; +static constexpr std::array s_gl_blend_ops = { { + GL_FUNC_ADD, GL_FUNC_SUBTRACT, GL_FUNC_REVERSE_SUBTRACT +} }; +// clang-format on + +void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) +{ + if (!GLState::scissor.eq(config.scissor)) + { + glScissor(config.scissor.x, config.scissor.y, config.scissor.width(), config.scissor.height()); + GLState::scissor = config.scissor; + } + + GSVector2i rtsize = (config.rt ? config.rt : config.ds)->GetSize(); + + GSTexture* primid_texture = nullptr; + + // Destination Alpha Setup + switch (config.destination_alpha) + { + case GSHWDrawConfig::DestinationAlphaMode::Off: + case GSHWDrawConfig::DestinationAlphaMode::Full: + break; // No setup + case GSHWDrawConfig::DestinationAlphaMode::PrimIDTracking: + primid_texture = InitPrimDateTexture(config.rt, config.drawarea, config.datm); + break; + case GSHWDrawConfig::DestinationAlphaMode::StencilOne: + if (m_features.texture_barrier) + { + ClearStencil(config.ds, 1); + break; + } + [[fallthrough]]; + case GSHWDrawConfig::DestinationAlphaMode::Stencil: + { + const GSVector4 src = GSVector4(config.drawarea) / GSVector4(config.ds->GetSize()).xyxy(); + const GSVector4 dst = src * 2.f - 1.f; + GSVertexPT1 vertices[] = + { + {GSVector4(dst.x, dst.y, 0.0f, 0.0f), GSVector2(src.x, src.y)}, + {GSVector4(dst.z, dst.y, 0.0f, 0.0f), GSVector2(src.z, src.y)}, + {GSVector4(dst.x, dst.w, 0.0f, 0.0f), GSVector2(src.x, src.w)}, + {GSVector4(dst.z, dst.w, 0.0f, 0.0f), GSVector2(src.z, src.w)}, + }; + SetupDATE(config.rt, config.ds, vertices, config.datm); + } + } + + GSTexture* hdr_rt = nullptr; + GSTexture* draw_rt_clone = nullptr; + if (config.ps.hdr) + { + hdr_rt = CreateRenderTarget(rtsize.x, rtsize.y, GSTexture::Format::HDRColor, false); + OMSetRenderTargets(hdr_rt, config.ds, &config.scissor); + + GSVector4 dRect(config.drawarea); + const GSVector4 sRect = dRect / GSVector4(rtsize.x, rtsize.y).xyxy(); + StretchRect(config.rt, sRect, hdr_rt, dRect, ShaderConvert::HDR_INIT, false); + } + else if (config.require_one_barrier && !m_features.texture_barrier) + { + // Requires a copy of the RT + draw_rt_clone = CreateTexture(rtsize.x, rtsize.y, 1, GSTexture::Format::Color, true); + GL_PUSH("Copy RT to temp texture for fbmask {%d,%d %dx%d}", + config.drawarea.left, config.drawarea.top, + config.drawarea.width(), config.drawarea.height()); + CopyRect(config.rt, draw_rt_clone, config.drawarea, config.drawarea.left, config.drawarea.top); + } + else if (config.tex && config.tex == config.ds) + { + // Ensure all depth writes are finished before sampling + GL_INS("Texture barrier to flush depth before reading"); + glTextureBarrier(); + } + + IASetVertexBuffer(config.verts, config.nverts); + if (config.vs.expand != GSHWDrawConfig::VSExpand::None && !GLAD_GL_ARB_shader_draw_parameters) + { + // Need to offset the buffer. + glBindBufferRange(GL_SHADER_STORAGE_BUFFER, 2, m_vertex_stream_buffer->GetGLBufferId(), + m_vertex.start * sizeof(GSVertex), config.nverts * sizeof(GSVertex)); + m_vertex.start = 0; + } + + if (config.vs.UseExpandIndexBuffer()) + { + IASetVAO(m_expand_vao); + m_index.start = 0; + m_index.count = config.nindices; + } + else + { + IASetVAO(m_vao); + IASetIndexBuffer(config.indices, config.nindices); + } + + GLenum topology = 0; + switch (config.topology) + { + case GSHWDrawConfig::Topology::Point: topology = GL_POINTS; break; + case GSHWDrawConfig::Topology::Line: topology = GL_LINES; break; + case GSHWDrawConfig::Topology::Triangle: topology = GL_TRIANGLES; break; + } + IASetPrimitiveTopology(topology); + + PSSetShaderResources(config.tex, config.pal); + if (draw_rt_clone) + PSSetShaderResource(2, draw_rt_clone); + else if (config.require_one_barrier || config.require_full_barrier) + PSSetShaderResource(2, config.rt); + + SetupSampler(config.sampler); + + if (m_vs_cb_cache.Update(config.cb_vs)) + { + WriteToStreamBuffer(m_vertex_uniform_stream_buffer.get(), g_vs_cb_index, + m_uniform_buffer_alignment, &config.cb_vs, sizeof(config.cb_vs)); + } + if (m_ps_cb_cache.Update(config.cb_ps)) + { + WriteToStreamBuffer(m_fragment_uniform_stream_buffer.get(), g_ps_cb_index, + m_uniform_buffer_alignment, &config.cb_ps, sizeof(config.cb_ps)); + } + + ProgramSelector psel; + psel.vs = config.vs; + psel.ps.key_hi = config.ps.key_hi; + psel.ps.key_lo = config.ps.key_lo; + std::memset(psel.pad, 0, sizeof(psel.pad)); + + SetupPipeline(psel); + + // additional non-pipeline config stuff + const bool point_size_enabled = config.vs.point_size; + if (GLState::point_size != point_size_enabled) + { + if (point_size_enabled) + glEnable(GL_PROGRAM_POINT_SIZE); + else + glDisable(GL_PROGRAM_POINT_SIZE); + GLState::point_size = point_size_enabled; + } + const float line_width = config.line_expand ? static_cast(GSConfig.UpscaleMultiplier) : 1.0f; + if (GLState::line_width != line_width) + { + GLState::line_width = line_width; + glLineWidth(line_width); + } + + if (config.destination_alpha == GSHWDrawConfig::DestinationAlphaMode::PrimIDTracking) + { + GL_PUSH("Destination Alpha PrimID Init"); + + OMSetRenderTargets(primid_texture, config.ds, &config.scissor); + OMColorMaskSelector mask; + mask.wrgba = 0; + mask.wr = true; + OMSetColorMaskState(mask); + OMSetBlendState(true, GL_ONE, GL_ONE, GL_MIN); + OMDepthStencilSelector dss = config.depth; + dss.zwe = 0; // Don't write depth + SetupOM(dss); + + // Compute primitiveID max that pass the date test (Draw without barrier) + DrawIndexedPrimitive(); + + psel.ps.date = 3; + config.alpha_second_pass.ps.date = 3; + SetupPipeline(psel); + PSSetShaderResource(3, primid_texture); + } + + OMSetBlendState(config.blend.enable, s_gl_blend_factors[config.blend.src_factor], + s_gl_blend_factors[config.blend.dst_factor], s_gl_blend_ops[config.blend.op], + config.blend.constant_enable, config.blend.constant); + + // avoid changing framebuffer just to switch from rt+depth to rt and vice versa + GSTexture* draw_rt = hdr_rt ? hdr_rt : config.rt; + GSTexture* draw_ds = config.ds; + if (!draw_rt && GLState::rt && GLState::ds == draw_ds && config.tex != GLState::rt && + GLState::rt->GetSize() == draw_ds->GetSize()) + { + draw_rt = GLState::rt; + } + else if (!draw_ds && GLState::ds && GLState::rt == draw_rt && config.tex != GLState::ds && + GLState::ds->GetSize() == draw_rt->GetSize()) + { + draw_ds = GLState::ds; + } + + OMSetRenderTargets(draw_rt, draw_ds, &config.scissor); + OMSetColorMaskState(config.colormask); + SetupOM(config.depth); + + SendHWDraw(config, psel.ps.IsFeedbackLoop()); + + if (config.separate_alpha_pass) + { + GSHWDrawConfig::BlendState dummy_bs; + SetHWDrawConfigForAlphaPass(&psel.ps, &config.colormask, &dummy_bs, &config.depth); + SetupPipeline(psel); + OMSetColorMaskState(config.alpha_second_pass.colormask); + SetupOM(config.alpha_second_pass.depth); + OMSetBlendState(); + SendHWDraw(config, psel.ps.IsFeedbackLoop()); + + // restore blend state if we're doing a second pass + if (config.alpha_second_pass.enable) + { + OMSetBlendState(config.blend.enable, s_gl_blend_factors[config.blend.src_factor], + s_gl_blend_factors[config.blend.dst_factor], s_gl_blend_ops[config.blend.op], + config.blend.constant_enable, config.blend.constant); + } + } + + if (config.alpha_second_pass.enable) + { + // cbuffer will definitely be dirty if aref changes, no need to check it + if (config.cb_ps.FogColor_AREF.a != config.alpha_second_pass.ps_aref) + { + config.cb_ps.FogColor_AREF.a = config.alpha_second_pass.ps_aref; + WriteToStreamBuffer(m_fragment_uniform_stream_buffer.get(), g_ps_cb_index, + m_uniform_buffer_alignment, &config.cb_ps, sizeof(config.cb_ps)); + } + + psel.ps = config.alpha_second_pass.ps; + SetupPipeline(psel); + OMSetColorMaskState(config.alpha_second_pass.colormask); + SetupOM(config.alpha_second_pass.depth); + SendHWDraw(config, psel.ps.IsFeedbackLoop()); + + if (config.second_separate_alpha_pass) + { + GSHWDrawConfig::BlendState dummy_bs; + SetHWDrawConfigForAlphaPass(&psel.ps, &config.colormask, &dummy_bs, &config.depth); + SetupPipeline(psel); + OMSetColorMaskState(config.alpha_second_pass.colormask); + SetupOM(config.alpha_second_pass.depth); + OMSetBlendState(); + SendHWDraw(config, psel.ps.IsFeedbackLoop()); + } + } + + if (primid_texture) + Recycle(primid_texture); + if (draw_rt_clone) + Recycle(draw_rt_clone); + + if (hdr_rt) + { + GSVector2i size = config.rt->GetSize(); + GSVector4 dRect(config.drawarea); + const GSVector4 sRect = dRect / GSVector4(size.x, size.y).xyxy(); + StretchRect(hdr_rt, sRect, config.rt, dRect, ShaderConvert::HDR_RESOLVE, false); + + Recycle(hdr_rt); + } +} + +void GSDeviceOGL::SendHWDraw(const GSHWDrawConfig& config, bool needs_barrier) +{ + if (config.drawlist) + { + GL_PUSH("Split the draw (SPRITE)"); +#if defined(_DEBUG) + // Check how draw call is split. + std::map frequency; + for (const auto& it : *config.drawlist) + ++frequency[it]; + + std::string message; + for (const auto& it : frequency) + message += " " + std::to_string(it.first) + "(" + std::to_string(it.second) + ")"; + + GL_PERF("Split single draw (%d sprites) into %zu draws: consecutive draws(frequency):%s", + config.nindices / config.indices_per_prim, config.drawlist->size(), message.c_str()); +#endif + + g_perfmon.Put(GSPerfMon::Barriers, static_cast(config.drawlist->size())); + + const u32 indices_per_prim = config.indices_per_prim; + const u32 draw_list_size = static_cast(config.drawlist->size()); + + for (u32 n = 0, p = 0; n < draw_list_size; n++) + { + const u32 count = (*config.drawlist)[n] * indices_per_prim; + glTextureBarrier(); + DrawIndexedPrimitive(p, count); + p += count; + } + + return; + } + + if (needs_barrier && m_features.texture_barrier) + { + if (config.require_full_barrier) + { + const u32 indices_per_prim = config.indices_per_prim; + + GL_PUSH("Split single draw in %d draw", config.nindices / indices_per_prim); + g_perfmon.Put(GSPerfMon::Barriers, config.nindices / config.indices_per_prim); + + for (u32 p = 0; p < config.nindices; p += indices_per_prim) + { + glTextureBarrier(); + DrawIndexedPrimitive(p, indices_per_prim); + } + + return; + } + + if (config.require_one_barrier) + { + g_perfmon.Put(GSPerfMon::Barriers, 1); + glTextureBarrier(); + } + } + + DrawIndexedPrimitive(); +} + +// Note: used as a callback of DebugMessageCallback. Don't change the signature +void GSDeviceOGL::DebugMessageCallback(GLenum gl_source, GLenum gl_type, GLuint id, GLenum gl_severity, GLsizei gl_length, const GLchar* gl_message, const void* userParam) +{ + std::string message(gl_message, gl_length >= 0 ? gl_length : strlen(gl_message)); + std::string type, severity, source; + switch (gl_type) + { + case GL_DEBUG_TYPE_ERROR_ARB : type = "Error"; break; + case GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR_ARB : type = "Deprecated bhv"; break; + case GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR_ARB : type = "Undefined bhv"; break; + case GL_DEBUG_TYPE_PORTABILITY_ARB : type = "Portability"; break; + case GL_DEBUG_TYPE_PERFORMANCE_ARB : type = "Perf"; break; + case GL_DEBUG_TYPE_OTHER_ARB : type = "Oth"; break; + case GL_DEBUG_TYPE_PUSH_GROUP : return; // Don't print message injected by myself + case GL_DEBUG_TYPE_POP_GROUP : return; // Don't print message injected by myself + default : type = "TTT"; break; + } + switch (gl_severity) + { + case GL_DEBUG_SEVERITY_HIGH_ARB : severity = "High"; break; + case GL_DEBUG_SEVERITY_MEDIUM_ARB : severity = "Mid"; break; + case GL_DEBUG_SEVERITY_LOW_ARB : severity = "Low"; break; + default: + if (id == 0xFEAD) + severity = "Cache"; + else if (id == 0xB0B0) + severity = "REG"; + else if (id == 0xD0D0) + severity = "EXTRA"; + break; + } + switch (gl_source) + { + case GL_DEBUG_SOURCE_API_ARB : source = "API"; break; + case GL_DEBUG_SOURCE_WINDOW_SYSTEM_ARB : source = "WINDOW"; break; + case GL_DEBUG_SOURCE_SHADER_COMPILER_ARB : source = "COMPILER"; break; + case GL_DEBUG_SOURCE_THIRD_PARTY_ARB : source = "3rdparty"; break; + case GL_DEBUG_SOURCE_APPLICATION_ARB : source = "Application"; break; + case GL_DEBUG_SOURCE_OTHER_ARB : source = "Others"; break; + default : source = "???"; break; + } + + // Don't spam noisy information on the terminal + if (gl_severity != GL_DEBUG_SEVERITY_NOTIFICATION && gl_source != GL_DEBUG_SOURCE_APPLICATION) + { + Console.Error("T:%s\tID:%d\tS:%s\t=> %s", type.c_str(), GSState::s_n, severity.c_str(), message.c_str()); + } +} + +GL::StreamBuffer* GSDeviceOGL::GetTextureUploadBuffer() +{ + return s_texture_upload_buffer.get(); +} + +void GSDeviceOGL::PushDebugGroup(const char* fmt, ...) +{ +#ifdef ENABLE_OGL_DEBUG + if (!glPushDebugGroup || !GSConfig.UseDebugDevice) + return; + + std::va_list ap; + va_start(ap, fmt); + const std::string buf(StringUtil::StdStringFromFormatV(fmt, ap)); + va_end(ap); + if (!buf.empty()) + glPushDebugGroup(GL_DEBUG_SOURCE_APPLICATION, 0xBAD, -1, buf.c_str()); +#endif +} + +void GSDeviceOGL::PopDebugGroup() +{ +#ifdef ENABLE_OGL_DEBUG + if (!glPopDebugGroup || !GSConfig.UseDebugDevice) + return; + + glPopDebugGroup(); +#endif +} + +void GSDeviceOGL::InsertDebugMessage(DebugMessageCategory category, const char* fmt, ...) +{ +#ifdef ENABLE_OGL_DEBUG + if (!glDebugMessageInsert || !GSConfig.UseDebugDevice) + return; + + GLenum type, id, severity; + switch (category) + { + case GSDevice::DebugMessageCategory::Cache: + type = GL_DEBUG_TYPE_OTHER; + id = 0xFEAD; + severity = GL_DEBUG_SEVERITY_NOTIFICATION; + break; + case GSDevice::DebugMessageCategory::Reg: + type = GL_DEBUG_TYPE_OTHER; + id = 0xB0B0; + severity = GL_DEBUG_SEVERITY_NOTIFICATION; + break; + case GSDevice::DebugMessageCategory::Debug: + type = GL_DEBUG_TYPE_OTHER; + id = 0xD0D0; + severity = GL_DEBUG_SEVERITY_NOTIFICATION; + break; + case GSDevice::DebugMessageCategory::Message: + type = GL_DEBUG_TYPE_ERROR; + id = 0xDEAD; + severity = GL_DEBUG_SEVERITY_MEDIUM; + break; + case GSDevice::DebugMessageCategory::Performance: + default: + type = GL_DEBUG_TYPE_PERFORMANCE; + id = 0xFEE1; + severity = GL_DEBUG_SEVERITY_NOTIFICATION; + break; + } + + std::va_list ap; + va_start(ap, fmt); + const std::string buf(StringUtil::StdStringFromFormatV(fmt, ap)); + va_end(ap); + if (!buf.empty()) + glDebugMessageInsert(GL_DEBUG_SOURCE_APPLICATION, type, id, severity, buf.size(), buf.c_str()); +#endif +} diff --git a/Classes/Video/MetalHostDisplay.mm b/Classes/Video/MetalHostDisplay.mm deleted file mode 100644 index 7e2d992..0000000 --- a/Classes/Video/MetalHostDisplay.mm +++ /dev/null @@ -1,422 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2022 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PCSX2GameCore.h" -#include "PrecompiledHeader.h" -#include "MetalHostDisplay.h" -#include "GS/Renderers/Metal/GSMetalCPPAccessible.h" -#include "GS/Renderers/Metal/GSDeviceMTL.h" - -#ifdef __APPLE__ - -class MetalHostDisplayTexture final : public HostDisplayTexture -{ - MRCOwned> m_tex; - - u32 m_width, m_height; -public: - MetalHostDisplayTexture(MRCOwned> tex, u32 width, u32 height) - : m_tex(std::move(tex)) - , m_width(width) - , m_height(height) - { - } - - void* GetHandle() const override { return (__bridge void*)m_tex; }; - u32 GetWidth() const override { return m_width; } - u32 GetHeight() const override { return m_height; } -}; - -HostDisplay* MakeMetalHostDisplay() -{ - return new MetalHostDisplay(); -} - -MetalHostDisplay::MetalHostDisplay() -{ -} - -MetalHostDisplay::~MetalHostDisplay() -{ - MetalHostDisplay::DestroySurface(); - m_queue = nullptr; - m_dev.Reset(); -} - -HostDisplay::AdapterAndModeList GetMetalAdapterAndModeList() -{ @autoreleasepool { - HostDisplay::AdapterAndModeList list; - auto devs = MRCTransfer(MTLCopyAllDevices()); - for (id dev in devs.Get()) - list.adapter_names.push_back([[dev name] UTF8String]); - return list; -}} - -template -static void OnMainThread(Fn&& fn) -{ - if ([NSThread isMainThread]) - fn(); - else - dispatch_sync(dispatch_get_main_queue(), fn); -} - -RenderAPI MetalHostDisplay::GetRenderAPI() const -{ - return RenderAPI::Metal; -} - -void* MetalHostDisplay::GetDevice() const { return const_cast(static_cast(&m_dev)); } -void* MetalHostDisplay::GetContext() const { return (__bridge void*)m_queue; } -void* MetalHostDisplay::GetSurface() const { return (__bridge void*)m_layer; } -bool MetalHostDisplay::HasDevice() const { return m_dev.IsOk(); } -bool MetalHostDisplay::HasSurface() const { return static_cast(m_layer);} - -void MetalHostDisplay::AttachSurfaceOnMainThread() -{ -} - -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]); - - m_pass_desc = MRCTransfer([MTLRenderPassDescriptor new]); - [m_pass_desc colorAttachments][0].loadAction = MTLLoadActionClear; - [m_pass_desc colorAttachments][0].clearColor = MTLClearColorMake(0, 0, 0, 0); - [m_pass_desc colorAttachments][0].storeAction = MTLStoreActionStore; - - if (char* env = getenv("MTL_USE_PRESENT_DRAWABLE")) - m_use_present_drawable = static_cast(atoi(env)); - else if (@available(macOS 13.0, *)) - m_use_present_drawable = UsePresentDrawable::Always; - else // Before Ventura, presentDrawable acts like vsync is on when windowed - m_use_present_drawable = UsePresentDrawable::IfVsync; - - m_capture_start_frame = 0; - if (char* env = getenv("MTL_CAPTURE")) - { - m_capture_start_frame = atoi(env); - } - if (m_capture_start_frame) - { - Console.WriteLn("Metal will capture frame %u", m_capture_start_frame); - } - - if (m_dev.IsOk() && m_queue) - { - Console.WriteLn("Renderer info:\n %s", GetDriverInfo().c_str()); - - m_layer = MRCRetain([CAMetalLayer layer]); - m_layer.Get().framebufferOnly=NO; - [m_layer setDrawableSize:CGSizeMake(m_window_info.surface_width, m_window_info.surface_height)]; - [m_layer setDevice:m_dev.dev]; - - SetVSync(vsync); - return true; - } - else - return false; -}} - -bool MetalHostDisplay::SetupDevice() -{ - return true; -} - -bool MetalHostDisplay::MakeCurrent() { return true; } -bool MetalHostDisplay::DoneCurrent() { return true; } - -void MetalHostDisplay::DestroySurface() -{ - if (!m_layer) - return; - - m_layer = nullptr; - -} - -bool MetalHostDisplay::ChangeWindow(const WindowInfo& wi) -{ - return true; -} - -bool MetalHostDisplay::SupportsFullscreen() const { return false; } -bool MetalHostDisplay::IsFullscreen() { return false; } -bool MetalHostDisplay::SetFullscreen(bool fullscreen, u32 width, u32 height, float refresh_rate) { return false; } - -HostDisplay::AdapterAndModeList MetalHostDisplay::GetAdapterAndModeList() -{ - return GetMetalAdapterAndModeList(); -} - -std::string MetalHostDisplay::GetDriverInfo() const -{ @autoreleasepool { - std::string desc([[m_dev.dev description] UTF8String]); - desc += "\n Texture Swizzle: " + std::string(m_dev.features.texture_swizzle ? "Supported" : "Unsupported"); - desc += "\n Unified Memory: " + std::string(m_dev.features.unified_memory ? "Supported" : "Unsupported"); - desc += "\n Framebuffer Fetch: " + std::string(m_dev.features.framebuffer_fetch ? "Supported" : "Unsupported"); - desc += "\n Primitive ID: " + std::string(m_dev.features.primid ? "Supported" : "Unsupported"); - desc += "\n Shader Version: " + std::string(to_string(m_dev.features.shader_version)); - desc += "\n Max Texture Size: " + std::to_string(m_dev.features.max_texsize); - return desc; -}} - -void MetalHostDisplay::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) -{ - m_window_info.surface_scale = new_window_scale; - if (m_window_info.surface_width == static_cast(new_window_width) && m_window_info.surface_height == static_cast(new_window_height)) - return; - m_window_info.surface_width = new_window_width; - m_window_info.surface_height = new_window_height; - @autoreleasepool - { - [m_layer setDrawableSize:CGSizeMake(new_window_width, new_window_height)]; - } -} - -std::unique_ptr MetalHostDisplay::CreateTexture(u32 width, u32 height, const void* data, u32 data_stride, bool dynamic) -{ @autoreleasepool { - MTLTextureDescriptor* desc = [MTLTextureDescriptor - texture2DDescriptorWithPixelFormat:MTLPixelFormatBGRA8Unorm - width:width - height:height - mipmapped:false]; - [desc setUsage:MTLTextureUsageShaderRead]; - [desc setStorageMode:MTLStorageModePrivate]; - MRCOwned> tex = MRCTransfer([m_dev.dev newTextureWithDescriptor:desc]); - if (!tex) - return nullptr; // Something broke yay - [tex setLabel:@"MetalHostDisplay Texture"]; - if (data) - UpdateTexture(tex, 0, 0, width, height, data, data_stride); - return std::make_unique(std::move(tex), width, height); -}} - -void MetalHostDisplay::UpdateTexture(id texture, u32 x, u32 y, u32 width, u32 height, const void* data, u32 data_stride) -{ - id cmdbuf = [m_queue commandBuffer]; - id enc = [cmdbuf blitCommandEncoder]; - size_t bytes = data_stride * height; - MRCOwned> buf = MRCTransfer([m_dev.dev newBufferWithLength:bytes options:MTLResourceStorageModeShared | MTLResourceCPUCacheModeWriteCombined]); - memcpy([buf contents], data, bytes); - [enc copyFromBuffer:buf - sourceOffset:0 - sourceBytesPerRow:data_stride - sourceBytesPerImage:bytes - sourceSize:MTLSizeMake(width, height, 1) - toTexture:texture - destinationSlice:0 - destinationLevel:0 - destinationOrigin:MTLOriginMake(0, 0, 0)]; - [enc endEncoding]; - [cmdbuf commit]; -} - -void MetalHostDisplay::UpdateTexture(HostDisplayTexture* texture, u32 x, u32 y, u32 width, u32 height, const void* data, u32 data_stride) -{ @autoreleasepool { - UpdateTexture((__bridge id)texture->GetHandle(), x, y, width, height, data, data_stride); -}} - -static bool s_capture_next = false; - -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 PresentResult::FrameSkipped; - } - id buf = dev->GetRenderCmdBuf(); - m_current_drawable = MRCRetain([m_layer nextDrawable]); - dev->EndRenderPass(); - if (!m_current_drawable) - { - [buf pushDebugGroup:@"Present Skipped"]; - [buf popDebugGroup]; - dev->FlushEncoders(); - return PresentResult::FrameSkipped; - } - [m_pass_desc colorAttachments][0].texture = [m_current_drawable texture]; - id enc = [buf renderCommandEncoderWithDescriptor:m_pass_desc]; - [enc setLabel:@"Present"]; - dev->m_current_render.encoder = MRCRetain(enc); - - - return PresentResult::OK; -}} - -void MetalHostDisplay::EndPresent() -{ @autoreleasepool { - GSDeviceMTL* dev = static_cast(g_gs_device.get()); - pxAssertDev(dev && dev->m_current_render.encoder && dev->m_current_render_cmdbuf, "BeginPresent cmdbuf was destroyed"); - dev->EndRenderPass(); - - if (m_current_drawable){ //Here is where we blit the Metal Texture to the OEMetalRenderTexture - id blitCommandEncoder = [dev->m_current_render_cmdbuf blitCommandEncoder]; - - if (@available(macOS 10.15, *)) { - [blitCommandEncoder copyFromTexture:[m_current_drawable texture] toTexture:id([_current metalTexture])]; - } else { - // Fallback on earlier versions - // TODO: Add pre 10.15 metal blit - } - - [blitCommandEncoder endEncoding]; - } - - if (@available(macOS 10.15, iOS 13, *)) - { - const bool use_present_drawable = m_use_present_drawable == UsePresentDrawable::Always || - (m_use_present_drawable == UsePresentDrawable::IfVsync && m_vsync_mode != VsyncMode::Off); - - if (use_present_drawable) - [dev->m_current_render_cmdbuf presentDrawable:m_current_drawable]; - else - [dev->m_current_render_cmdbuf addScheduledHandler:[drawable = std::move(m_current_drawable)](id){ - [drawable present]; - }]; - } - dev->FlushEncoders(); - dev->FrameCompleted(); - m_current_drawable = nullptr; - if (m_capture_start_frame) - { - if (@available(macOS 10.15, iOS 13, *)) - { - static NSString* const path = @"/tmp/PCSX2MTLCapture.gputrace"; - static u32 frames; - if (frames) - { - --frames; - if (!frames) - { - [[MTLCaptureManager sharedCaptureManager] stopCapture]; - Console.WriteLn("Metal Trace Capture to /tmp/PCSX2MTLCapture.gputrace finished"); - [[NSWorkspace sharedWorkspace] selectFile:path - inFileViewerRootedAtPath:@"/tmp/"]; - } - } - else if (s_capture_next) - { - s_capture_next = false; - MTLCaptureManager* mgr = [MTLCaptureManager sharedCaptureManager]; - if ([mgr supportsDestination:MTLCaptureDestinationGPUTraceDocument]) - { - MTLCaptureDescriptor* desc = [[MTLCaptureDescriptor new] autorelease]; - [desc setCaptureObject:m_dev.dev]; - if ([[NSFileManager defaultManager] fileExistsAtPath:path]) - [[NSFileManager defaultManager] removeItemAtPath:path error:nil]; - [desc setOutputURL:[NSURL fileURLWithPath:path]]; - [desc setDestination:MTLCaptureDestinationGPUTraceDocument]; - NSError* err = nullptr; - [mgr startCaptureWithDescriptor:desc error:&err]; - if (err) - { - Console.Error("Metal Trace Capture failed: %s", [[err localizedDescription] UTF8String]); - } - else - { - Console.WriteLn("Metal Trace Capture to /tmp/PCSX2MTLCapture.gputrace started"); - frames = 2; - } - } - else - { - Console.Error("Metal Trace Capture Failed: MTLCaptureManager doesn't support GPU trace documents! (Did you forget to run with METAL_CAPTURE_ENABLED=1?)"); - } - } - } - } -}} - -void MetalHostDisplay::SetVSync(VsyncMode mode) -{ - [m_layer setDisplaySyncEnabled:mode != VsyncMode::Off]; - m_vsync_mode = mode; -} - -bool MetalHostDisplay::CreateImGuiContext() -{ - return true; -} - -void MetalHostDisplay::DestroyImGuiContext() -{ -} - -bool MetalHostDisplay::UpdateImGuiFontTexture() -{ - return true; -} - -bool MetalHostDisplay::GetHostRefreshRate(float* refresh_rate) -{ - return *refresh_rate != 0; -} - -bool MetalHostDisplay::SetGPUTimingEnabled(bool enabled) -{ - if (enabled == m_gpu_timing_enabled) - return true; - if (@available(macOS 10.15, iOS 10.3, *)) - { - std::lock_guard l(m_mtx); - m_gpu_timing_enabled = enabled; - m_accumulated_gpu_time = 0; - m_last_gpu_time_end = 0; - return true; - } - return false; -} - -float MetalHostDisplay::GetAndResetAccumulatedGPUTime() -{ - std::lock_guard l(m_mtx); - float time = m_accumulated_gpu_time * 1000; - m_accumulated_gpu_time = 0; - return time; -} - -void MetalHostDisplay::AccumulateCommandBufferTime(id buffer) -{ - std::lock_guard l(m_mtx); - if (!m_gpu_timing_enabled) - return; - // We do the check before enabling m_gpu_timing_enabled -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunguarded-availability" - // It's unlikely, but command buffers can overlap or run out of order - // This doesn't handle every case (fully out of order), but it should at least handle overlapping - double begin = std::max(m_last_gpu_time_end, [buffer GPUStartTime]); - double end = [buffer GPUEndTime]; - if (end > begin) - { - m_accumulated_gpu_time += end - begin; - m_last_gpu_time_end = end; - } -#pragma clang diagnostic pop -} - -#endif // __APPLE__ diff --git a/Classes/Video/OpenGLHostDisplayOverride.cpp b/Classes/Video/OpenGLHostDisplayOverride.cpp index c752244..f2be2a0 100644 --- a/Classes/Video/OpenGLHostDisplayOverride.cpp +++ b/Classes/Video/OpenGLHostDisplayOverride.cpp @@ -16,7 +16,6 @@ #include "PrecompiledHeader.h" #include "Video/OEHostDisplay.h" -#include "OpenGLHostDisplay.h" #include "common/Assertions.h" #include "common/Console.h" #include "common/ScopedGuard.h" @@ -27,6 +26,7 @@ static int OE_FBO = 0; +#if 0 class OpenGLHostDisplayTexture : public HostDisplayTexture { public: @@ -486,3 +486,4 @@ float OpenGLHostDisplay::GetAndResetAccumulatedGPUTime() return value; } +#endif diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index f7f7147..d93e7e5 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -50,16 +50,13 @@ 551AA12E2792AB1700658151 /* GSTextureCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0A52792AB1700658151 /* GSTextureCache.cpp */; }; 551AA12F2792AB1700658151 /* GSRendererHW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0A82792AB1700658151 /* GSRendererHW.cpp */; }; 551AA1302792AB1700658151 /* GSHwHack.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0A92792AB1700658151 /* GSHwHack.cpp */; }; - 551AA1392792AB1700658151 /* GSDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0BE2792AB1700658151 /* GSDevice.cpp */; }; 551AA13A2792AB1700658151 /* GSVertexTrace.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0BF2792AB1700658151 /* GSVertexTrace.cpp */; }; 551AA13B2792AB1700658151 /* GSFunctionMap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0C22792AB1700658151 /* GSFunctionMap.cpp */; }; 551AA13D2792AB1700658151 /* GSTexture.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0C82792AB1700658151 /* GSTexture.cpp */; }; - 551AA13E2792AB1700658151 /* GSVertexList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0C92792AB1700658151 /* GSVertexList.cpp */; }; 551AA13F2792AB1700658151 /* GSRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0CC2792AB1700658151 /* GSRenderer.cpp */; }; 551AA1402792AB1700658151 /* GSDirtyRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0CD2792AB1700658151 /* GSDirtyRect.cpp */; }; 551AA1482792AB1800658151 /* GLState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E12792AB1700658151 /* GLState.cpp */; }; 551AA1492792AB1800658151 /* GLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E22792AB1700658151 /* GLLoader.cpp */; }; - 551AA14B2792AB1800658151 /* GSDeviceOGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E72792AB1700658151 /* GSDeviceOGL.cpp */; }; 551AA14C2792AB1800658151 /* GSTextureOGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E82792AB1700658151 /* GSTextureOGL.cpp */; }; 551AA16D2792B0EA00658151 /* MemoryCardFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA16B2792B0EA00658151 /* MemoryCardFile.cpp */; }; 551AA16E2792B0EA00658151 /* MemoryCardFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA16C2792B0EA00658151 /* MemoryCardFolder.cpp */; }; @@ -393,6 +390,8 @@ 55300EAE27C9A28B0049E2CC /* GSTextureReplacementLoaders.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55300EAC27C9A2830049E2CC /* GSTextureReplacementLoaders.cpp */; }; 55324ED929973BA300A8FF1A /* ARP_PacketEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55324ED729973BA300A8FF1A /* ARP_PacketEditor.cpp */; }; 55324EDC29973BBF00A8FF1A /* EthernetFrameEditor.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55324EDA29973BBE00A8FF1A /* EthernetFrameEditor.cpp */; }; + 55325A072A00FB0800D4CFFA /* GSDevice.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */; }; + 55325A092A01025600D4CFFA /* GSDeviceOGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */; }; 553CF8382640D2F8003A437C /* jmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA79263D48AE000219EC /* jmp.cpp */; }; 553CF8392640D2F8003A437C /* x86emitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA78263D48AE000219EC /* x86emitter.cpp */; }; 553CF83A2640D2F8003A437C /* legacy_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6F263D48AE000219EC /* legacy_sse.cpp */; }; @@ -579,7 +578,6 @@ 557D49D027D00BE7006C2C69 /* merge.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB727B70F0C0006ABDC /* merge.metal */; }; 557D49D127D00BE7006C2C69 /* convert.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFC127B70F0C0006ABDC /* convert.metal */; }; 5580639A27AB3262008CD5D2 /* KeyStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639627AB3261008CD5D2 /* KeyStatus.cpp */; }; - 558063A027AB346B008CD5D2 /* HostDisplay.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639E27AB346B008CD5D2 /* HostDisplay.cpp */; }; 558063A127AB346B008CD5D2 /* Host.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639F27AB346B008CD5D2 /* Host.cpp */; }; 558063A727AB3D2D008CD5D2 /* ProgressCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A527AB3D2D008CD5D2 /* ProgressCallback.cpp */; }; 558063AA27AB3E0B008CD5D2 /* WindowInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A827AB3E0B008CD5D2 /* WindowInfo.cpp */; }; @@ -596,7 +594,6 @@ 5580663227AD3ADE008CD5D2 /* tfx_vgs.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C527AD3A31008CD5D2 /* tfx_vgs.glsl */; }; 5580663327AD3AE1008CD5D2 /* interlace.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C727AD3A31008CD5D2 /* interlace.glsl */; }; 5580663427AD3AE6008CD5D2 /* merge.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C827AD3A31008CD5D2 /* merge.glsl */; }; - 5580663527AD3AEC008CD5D2 /* common_header.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C927AD3A31008CD5D2 /* common_header.glsl */; }; 5580663627AD3AEF008CD5D2 /* shadeboost.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065CA27AD3A31008CD5D2 /* shadeboost.glsl */; }; 5580663827AD3B38008CD5D2 /* convert.glsl in Copy Vulkan Shaders */ = {isa = PBXBuildFile; fileRef = 558065B927AD3A31008CD5D2 /* convert.glsl */; }; 5580663927AD3B3A008CD5D2 /* interlace.glsl in Copy Vulkan Shaders */ = {isa = PBXBuildFile; fileRef = 558065BB27AD3A31008CD5D2 /* interlace.glsl */; }; @@ -677,7 +674,6 @@ DD0302B127C435760006ABDC /* SndOut_Cubeb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063BB27AB4B6C008CD5D2 /* SndOut_Cubeb.cpp */; }; DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B527C491020006ABDC /* OESndOut.cpp */; }; DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */; }; - DD0302BF27C491160006ABDC /* MetalHostDisplay.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BB27C491160006ABDC /* MetalHostDisplay.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BC27C491160006ABDC /* ContextAGL.mm */; }; DD0302C327C5423F0006ABDC /* PAD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639827AB3261008CD5D2 /* PAD.cpp */; }; DD0302C927C549730006ABDC /* StateManagement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639727AB3261008CD5D2 /* StateManagement.cpp */; }; @@ -820,7 +816,6 @@ 5580663427AD3AE6008CD5D2 /* merge.glsl in Copy OpenGL Shaders */, 5580663627AD3AEF008CD5D2 /* shadeboost.glsl in Copy OpenGL Shaders */, 55BD3E69295A58E5001DD03E /* present.glsl in Copy OpenGL Shaders */, - 5580663527AD3AEC008CD5D2 /* common_header.glsl in Copy OpenGL Shaders */, ); name = "Copy OpenGL Shaders"; runOnlyForDeploymentPostprocessing = 0; @@ -1773,7 +1768,6 @@ 551AA0A82792AB1700658151 /* GSRendererHW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRendererHW.cpp; sourceTree = ""; }; 551AA0A92792AB1700658151 /* GSHwHack.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSHwHack.cpp; sourceTree = ""; }; 551AA0AC2792AB1700658151 /* GSVertexHW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVertexHW.h; sourceTree = ""; }; - 551AA0BC2792AB1700658151 /* GSVertexList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVertexList.h; sourceTree = ""; }; 551AA0BE2792AB1700658151 /* GSDevice.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDevice.cpp; sourceTree = ""; }; 551AA0BF2792AB1700658151 /* GSVertexTrace.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSVertexTrace.cpp; sourceTree = ""; }; 551AA0C02792AB1700658151 /* GSFastList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSFastList.h; sourceTree = ""; }; @@ -1784,7 +1778,6 @@ 551AA0C52792AB1700658151 /* GSVertexTrace.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVertexTrace.h; sourceTree = ""; }; 551AA0C62792AB1700658151 /* GSDevice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDevice.h; sourceTree = ""; }; 551AA0C82792AB1700658151 /* GSTexture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSTexture.cpp; sourceTree = ""; }; - 551AA0C92792AB1700658151 /* GSVertexList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSVertexList.cpp; sourceTree = ""; }; 551AA0CA2792AB1700658151 /* GSTexture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSTexture.h; sourceTree = ""; }; 551AA0CB2792AB1700658151 /* GSFunctionMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSFunctionMap.h; sourceTree = ""; }; 551AA0CC2792AB1700658151 /* GSRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRenderer.cpp; sourceTree = ""; }; @@ -1963,6 +1956,8 @@ 55324ED829973BA300A8FF1A /* ARP_PacketEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ARP_PacketEditor.h; sourceTree = ""; }; 55324EDA29973BBE00A8FF1A /* EthernetFrameEditor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EthernetFrameEditor.cpp; sourceTree = ""; }; 55324EDB29973BBE00A8FF1A /* EthernetFrameEditor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EthernetFrameEditor.h; sourceTree = ""; }; + 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSDevice.cpp; sourceTree = ""; }; + 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSDeviceOGL.cpp; sourceTree = ""; }; 553CF8172640CCCD003A437C /* libemitter_PCSX2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libemitter_PCSX2.a; sourceTree = BUILT_PRODUCTS_DIR; }; 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OEPatching.cpp; sourceTree = ""; }; 5548491928853D2E0066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; @@ -2969,7 +2964,6 @@ 556FBB39279E1067007B4F88 /* LayeredSettingsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayeredSettingsInterface.cpp; sourceTree = ""; }; 556FBB3B279E1067007B4F88 /* GameList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameList.h; sourceTree = ""; }; 556FBB3F279E1067007B4F88 /* InputSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputSource.cpp; sourceTree = ""; }; - 556FBB40279E1067007B4F88 /* OpenGLHostDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLHostDisplay.cpp; sourceTree = ""; }; 5576A4812885E10B0078CFF8 /* InputRecordingLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputRecordingLogger.cpp; sourceTree = ""; }; 5580639327AB3261008CD5D2 /* Global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Global.h; sourceTree = ""; }; 5580639427AB3261008CD5D2 /* StateManagement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StateManagement.h; sourceTree = ""; }; @@ -2978,8 +2972,6 @@ 5580639727AB3261008CD5D2 /* StateManagement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StateManagement.cpp; sourceTree = ""; }; 5580639827AB3261008CD5D2 /* PAD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PAD.cpp; sourceTree = ""; }; 5580639927AB3261008CD5D2 /* KeyStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyStatus.h; sourceTree = ""; }; - 5580639D27AB346B008CD5D2 /* HostDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HostDisplay.h; sourceTree = ""; }; - 5580639E27AB346B008CD5D2 /* HostDisplay.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HostDisplay.cpp; sourceTree = ""; }; 5580639F27AB346B008CD5D2 /* Host.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Host.cpp; sourceTree = ""; }; 558063A527AB3D2D008CD5D2 /* ProgressCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProgressCallback.cpp; sourceTree = ""; }; 558063A627AB3D2D008CD5D2 /* ProgressCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressCallback.h; sourceTree = ""; }; @@ -3045,7 +3037,6 @@ 5580652627AB4DE9008CD5D2 /* SettingsWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsWrapper.h; sourceTree = ""; }; 5580652727AB4DE9008CD5D2 /* SettingsWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SettingsWrapper.cpp; sourceTree = ""; }; 5580652C27AB504C008CD5D2 /* libxml2.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libxml2.tbd; path = usr/lib/libxml2.tbd; sourceTree = SDKROOT; }; - 5580653127AB50CC008CD5D2 /* OpenGLHostDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OpenGLHostDisplay.h; sourceTree = ""; }; 5580653527AB5369008CD5D2 /* PCSX2Exports.exp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.exports; path = PCSX2Exports.exp; sourceTree = ""; }; 558065B427AD3A31008CD5D2 /* game_controller_db.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = game_controller_db.txt; sourceTree = ""; }; 558065B727AD3A31008CD5D2 /* fxaa.fx */ = {isa = PBXFileReference; explicitFileType = sourcecode.glsl; path = fxaa.fx; sourceTree = ""; }; @@ -3058,7 +3049,6 @@ 558065C627AD3A31008CD5D2 /* tfx_fs.glsl */ = {isa = PBXFileReference; lastKnownFileType = text; path = tfx_fs.glsl; sourceTree = ""; }; 558065C727AD3A31008CD5D2 /* interlace.glsl */ = {isa = PBXFileReference; lastKnownFileType = text; path = interlace.glsl; sourceTree = ""; }; 558065C827AD3A31008CD5D2 /* merge.glsl */ = {isa = PBXFileReference; lastKnownFileType = text; path = merge.glsl; sourceTree = ""; }; - 558065C927AD3A31008CD5D2 /* common_header.glsl */ = {isa = PBXFileReference; lastKnownFileType = text; path = common_header.glsl; sourceTree = ""; }; 558065CA27AD3A31008CD5D2 /* shadeboost.glsl */ = {isa = PBXFileReference; lastKnownFileType = text; path = shadeboost.glsl; sourceTree = ""; }; 558065CB27AD3A31008CD5D2 /* cover-placeholder.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cover-placeholder.png"; sourceTree = ""; }; 558065CD27AD3A31008CD5D2 /* fa-solid-900.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "fa-solid-900.ttf"; sourceTree = ""; }; @@ -3201,7 +3191,6 @@ DD0302B527C491020006ABDC /* OESndOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OESndOut.cpp; sourceTree = ""; }; DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLHostDisplayOverride.cpp; sourceTree = ""; }; DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 1; }; - DD0302BB27C491160006ABDC /* MetalHostDisplay.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MetalHostDisplay.mm; sourceTree = ""; }; DD0302BC27C491160006ABDC /* ContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextAGL.mm; sourceTree = ""; }; DD0302C827C5494A0006ABDC /* keymap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keymap.h; sourceTree = ""; }; DD03FFB427B70F0C0006ABDC /* GSMetalCPPAccessible.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSMetalCPPAccessible.h; sourceTree = ""; }; @@ -3217,8 +3206,6 @@ DD03FFBE27B70F0C0006ABDC /* GSMTLSharedHeader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSMTLSharedHeader.h; sourceTree = ""; }; DD03FFBF27B70F0C0006ABDC /* GSDeviceMTL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDeviceMTL.h; sourceTree = ""; }; DD03FFC127B70F0C0006ABDC /* convert.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = convert.metal; sourceTree = ""; }; - DD03FFD227B720610006ABDC /* MetalHostDisplay.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MetalHostDisplay.h; sourceTree = ""; }; - DD03FFD327B720610006ABDC /* MetalHostDisplay.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MetalHostDisplay.mm; sourceTree = ""; }; DD1134E827CBCE8900C2E60B /* SaveState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveState.cpp; sourceTree = ""; }; DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OEHostDisplay.h; sourceTree = ""; }; DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSMTLDeviceInfo.mm; sourceTree = ""; }; @@ -4499,8 +4486,6 @@ 5517FE19263D49BC000219EC /* Hardware.h */, 5580639F27AB346B008CD5D2 /* Host.cpp */, 551AA4132792C76A00658151 /* Host.h */, - 5580639E27AB346B008CD5D2 /* HostDisplay.cpp */, - 5580639D27AB346B008CD5D2 /* HostDisplay.h */, 558063AB27AB4069008CD5D2 /* HostSettings.h */, 5517FB03263D49BB000219EC /* Hw.cpp */, 5517FDF4263D49BC000219EC /* Hw.h */, @@ -5225,8 +5210,6 @@ 551AA0C82792AB1700658151 /* GSTexture.cpp */, 551AA0CA2792AB1700658151 /* GSTexture.h */, 551AA0C42792AB1700658151 /* GSVertex.h */, - 551AA0C92792AB1700658151 /* GSVertexList.cpp */, - 551AA0BC2792AB1700658151 /* GSVertexList.h */, 551AA0BF2792AB1700658151 /* GSVertexTrace.cpp */, 551AA0C52792AB1700658151 /* GSVertexTrace.h */, 55B1F03B295BAF4200DB297F /* GSVertexTraceFMM.cpp */, @@ -6874,10 +6857,6 @@ 556FBB37279E1067007B4F88 /* InputSource.h */, 556FBB39279E1067007B4F88 /* LayeredSettingsInterface.cpp */, 556FBB38279E1067007B4F88 /* LayeredSettingsInterface.h */, - DD03FFD227B720610006ABDC /* MetalHostDisplay.h */, - DD03FFD327B720610006ABDC /* MetalHostDisplay.mm */, - 556FBB40279E1067007B4F88 /* OpenGLHostDisplay.cpp */, - 5580653127AB50CC008CD5D2 /* OpenGLHostDisplay.h */, ); path = Frontend; sourceTree = ""; @@ -7060,7 +7039,6 @@ isa = PBXGroup; children = ( 55BD3E5F295A5861001DD03E /* cas.glsl */, - 558065C927AD3A31008CD5D2 /* common_header.glsl */, 558065C427AD3A31008CD5D2 /* convert.glsl */, 558065C727AD3A31008CD5D2 /* interlace.glsl */, 558065C827AD3A31008CD5D2 /* merge.glsl */, @@ -7283,14 +7261,15 @@ DD0302B827C491160006ABDC /* Video */ = { isa = PBXGroup; children = ( - DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */, DD0302BC27C491160006ABDC /* ContextAGL.mm */, + 55EBA8B8295CDEF90035A1FD /* GSCaptureStub.cpp */, DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */, + 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */, 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */, - DD0302BB27C491160006ABDC /* MetalHostDisplay.mm */, + 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */, + DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */, DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */, DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */, - 55EBA8B8295CDEF90035A1FD /* GSCaptureStub.cpp */, ); path = Video; sourceTree = ""; @@ -7892,7 +7871,6 @@ 55B1F014295BACF000DB297F /* TCP_Options.cpp in Sources */, 551BF57126420E720008C529 /* VUflags.cpp in Sources */, 551BF5BF264210A30008C529 /* FPU.cpp in Sources */, - 551AA14B2792AB1800658151 /* GSDeviceOGL.cpp in Sources */, 551BF56F26420E710008C529 /* VU1micro.cpp in Sources */, 551AA12B2792AB1700658151 /* GSRasterizer.cpp in Sources */, DD771F8D298AE19F007BE4EA /* GSDeviceMTL.mm in Sources */, @@ -7941,7 +7919,6 @@ 558063A127AB346B008CD5D2 /* Host.cpp in Sources */, 5548492B288554210066EDEB /* Ps1CD.cpp in Sources */, 551BF64B264218380008C529 /* iR5900Templates.cpp in Sources */, - 558063A027AB346B008CD5D2 /* HostDisplay.cpp in Sources */, 551BF61D264214530008C529 /* BaseblockEx.cpp in Sources */, 551BF683264241530008C529 /* IsoFSCDVD.cpp in Sources */, 551BF69D264243B60008C529 /* ATA_CmdSMART.cpp in Sources */, @@ -7961,13 +7938,13 @@ DDE1B429298C68130028DF05 /* usb-mic-singstar.cpp in Sources */, 551AA16E2792B0EA00658151 /* MemoryCardFolder.cpp in Sources */, 5580652827AB4DE9008CD5D2 /* SettingsWrapper.cpp in Sources */, + 55325A072A00FB0800D4CFFA /* GSDevice.cpp in Sources */, 551AA4AA27935E9100658151 /* UDP_Packet.cpp in Sources */, 551BF689264241E80008C529 /* DisR5900asm.cpp in Sources */, DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */, 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */, 551BF57E26420E9A0008C529 /* Sio.cpp in Sources */, DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */, - DD0302BF27C491160006ABDC /* MetalHostDisplay.mm in Sources */, 551BF5CC264212070008C529 /* IPU.cpp in Sources */, 551BF56726420DE90008C529 /* SymbolMap.cpp in Sources */, 551BF5B9264210860008C529 /* Counters.cpp in Sources */, @@ -8047,7 +8024,6 @@ 551BF635264216F50008C529 /* CDVDdiscThread.cpp in Sources */, DDE1B42E298C68210028DF05 /* usb-pad-ff.cpp in Sources */, 5517E8C7263D45F4000219EC /* PCSX2GameCore.mm in Sources */, - 551AA1392792AB1700658151 /* GSDevice.cpp in Sources */, 551BF5BC2642109F0008C529 /* Elfheader.cpp in Sources */, 551BF649264218380008C529 /* iR5900MultDiv.cpp in Sources */, 55B1EFC7295BA52A00DB297F /* USB.cpp in Sources */, @@ -8055,7 +8031,6 @@ 551AA14C2792AB1800658151 /* GSTextureOGL.cpp in Sources */, 551BF57626420E720008C529 /* Vif1_MFIFO.cpp in Sources */, 551BF56C26420E710008C529 /* Vif_Transfer.cpp in Sources */, - 551AA13E2792AB1700658151 /* GSVertexList.cpp in Sources */, 551BF5DA264212270008C529 /* Memory.cpp in Sources */, 551BF637264216F50008C529 /* BlockdumpFileReader.cpp in Sources */, DDE1B427298C68130028DF05 /* audiodev-cubeb.cpp in Sources */, @@ -8088,6 +8063,7 @@ 551BF61C264214530008C529 /* ir5900tables.cpp in Sources */, 551AA48B27935DF400658151 /* GSRendererNull.cpp in Sources */, 551BF5C4264210AB0008C529 /* Gif_Logger.cpp in Sources */, + 55325A092A01025600D4CFFA /* GSDeviceOGL.cpp in Sources */, 556FBB48279E1067007B4F88 /* InputManager.cpp in Sources */, 551BF58A26420E9A0008C529 /* R3000A.cpp in Sources */, 551AA16D2792B0EA00658151 /* MemoryCardFile.cpp in Sources */, @@ -8763,7 +8739,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.4280; + CURRENT_PROJECT_VERSION = 1.7.4452; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; @@ -8790,7 +8766,7 @@ ); INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MARKETING_VERSION = 1.7.4280; + MARKETING_VERSION = 1.7.4452; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -8842,7 +8818,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.4280; + CURRENT_PROJECT_VERSION = 1.7.4452; DEAD_CODE_STRIPPING = YES; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8871,7 +8847,7 @@ INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; LLVM_LTO = YES_THIN; - MARKETING_VERSION = 1.7.4280; + MARKETING_VERSION = 1.7.4452; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; diff --git a/pcsx2 b/pcsx2 index 2b94cfe..e462f1f 160000 --- a/pcsx2 +++ b/pcsx2 @@ -1 +1 @@ -Subproject commit 2b94cfe782296973301ad448792582ba11927559 +Subproject commit e462f1ff9c8f4b1a35076096c8eaca959f97f1d0 From bbee1052fa4e235806edb363d691bd41374682e5 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Thu, 18 Jan 2024 01:32:39 -0700 Subject: [PATCH 02/16] Begin work on updating the PCSX2 plug-in to v1.7.5476 --- Classes/Audio/OESndOut.cpp | 30 +- PCSX2.xcodeproj/project.pbxproj | 2708 ++++++++++++++++++++----------- libzip/private/zipconf.h | 47 + pcsx2 | 2 +- 4 files changed, 1780 insertions(+), 1007 deletions(-) create mode 100644 libzip/private/zipconf.h diff --git a/Classes/Audio/OESndOut.cpp b/Classes/Audio/OESndOut.cpp index fee546e..f66c467 100644 --- a/Classes/Audio/OESndOut.cpp +++ b/Classes/Audio/OESndOut.cpp @@ -48,16 +48,6 @@ static __forceinline s32 MulShr32(s32 srcval, s32 mulval) return (s64)srcval * mulval >> 32; } -__forceinline s32 clamp_mix(s32 x) -{ - return std::clamp(x, -0x8000, 0x7fff); -} - -__forceinline StereoOut32 clamp_mix(StereoOut32 sample) -{ - return StereoOut32(clamp_mix(sample.Left), clamp_mix(sample.Right)); -} - static void __forceinline XA_decode_block(s16* buffer, const s16* block, s32& prev1, s32& prev2) { const s32 header = *block; @@ -115,7 +105,7 @@ static void __forceinline IncrementNextA(V_Core& thiscore, uint voiceidx) // decoded pcm data, used to cache the decoded data so that it needn't be decoded // multiple times. Cache chunks are decoded when the mixer requests the blocks, and // invalided when DMA transfers and memory writes are performed. -PcmCacheEntry* pcm_cache_data = nullptr; +PcmCacheEntry pcm_cache_data[pcm_BlockCount]; int g_counter_cache_hits = 0; int g_counter_cache_misses = 0; @@ -331,7 +321,7 @@ static __forceinline void CalculateADSR(V_Core& thiscore, uint voiceidx) return; } - if (!vc.ADSR.Calculate()) + if (!vc.ADSR.Calculate(voiceidx)) { if (IsDevBuild) { @@ -347,10 +337,10 @@ static __forceinline void CalculateADSR(V_Core& thiscore, uint voiceidx) __forceinline static s32 GaussianInterpolate(s32 pv4, s32 pv3, s32 pv2, s32 pv1, s32 i) { s32 out = 0; - out = (interpTable[0x0FF - i] * pv4) >> 15; - out += (interpTable[0x1FF - i] * pv3) >> 15; - out += (interpTable[0x100 + i] * pv2) >> 15; - out += (interpTable[0x000 + i] * pv1) >> 15; + out = (interpTable[i][0] * pv4) >> 15; + out += (interpTable[i][1] * pv3) >> 15; + out += (interpTable[i][2] * pv2) >> 15; + out += (interpTable[i][3] * pv1) >> 15; return out; } @@ -578,14 +568,6 @@ StereoOut32 V_Core::Mix(const VoiceMixSet& inVoices, const StereoOut32& Input, c // // On the other hand, updating the buffer is cheap and easy, so might as well. ;) - Reverb_AdvanceBuffer(); // Updates the reverb work area as well, if needed. - - // ToDo: - // Bad EndA causes memory corruption. Bad for us, unknown on PS2! - // According to no$psx, effects always run but don't always write back, so the FxEnable check may be wrong - if (!FxEnable || EffectsEndA >= 0x100000) - return TD; - StereoOut32 TW; // Mix Input, Voice, and External data: diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index d93e7e5..79db3ee 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -25,25 +25,10 @@ 550E0D462640C702008A1E48 /* PCSX2.icns in Resources */ = {isa = PBXBuildFile; fileRef = 550E0D452640C702008A1E48 /* PCSX2.icns */; }; 5517E8C0263D4361000219EC /* OpenEmuBase.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5517E8BF263D4361000219EC /* OpenEmuBase.framework */; }; 5517E8C7263D45F4000219EC /* PCSX2GameCore.mm in Sources */ = {isa = PBXBuildFile; fileRef = 5517E8C6263D45F4000219EC /* PCSX2GameCore.mm */; }; - 5517FE43263E1129000219EC /* libchdr_huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF51263D4837000219EC /* libchdr_huffman.c */; }; - 5517FE44263E1129000219EC /* libchdr_bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF50263D4837000219EC /* libchdr_bitstream.c */; }; - 5517FE45263E1129000219EC /* libchdr_chd.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF4F263D4837000219EC /* libchdr_chd.c */; }; - 5517FE46263E1129000219EC /* libchdr_flac.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF52263D4837000219EC /* libchdr_flac.c */; }; - 5517FE47263E1129000219EC /* libchdr_cdrom.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF54263D4837000219EC /* libchdr_cdrom.c */; }; 5517FE48263E114D000219EC /* libchdr-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5517FE3F263E1118000219EC /* libchdr-pcsx2.a */; }; 5517FE4C263E120F000219EC /* libz.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5517FE4B263E120F000219EC /* libz.tbd */; }; - 5517FE5F263E126A000219EC /* Bra86.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF46263D4837000219EC /* Bra86.c */; }; - 5517FE60263E126A000219EC /* BraIA64.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF49263D4837000219EC /* BraIA64.c */; }; - 5517FE61263E126A000219EC /* LzmaDec.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF48263D4837000219EC /* LzmaDec.c */; }; - 5517FE62263E126A000219EC /* LzFind.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF44263D4837000219EC /* LzFind.c */; }; - 5517FE63263E126A000219EC /* Alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF47263D4837000219EC /* Alloc.c */; }; - 5517FE64263E126A000219EC /* CpuArch.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF4C263D4837000219EC /* CpuArch.c */; }; - 5517FE65263E126A000219EC /* Sort.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF45263D4837000219EC /* Sort.c */; }; - 5517FE66263E126A000219EC /* Lzma86Dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF4A263D4837000219EC /* Lzma86Dec.c */; }; 5517FE69263E1281000219EC /* liblzma-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5517FE59263E124E000219EC /* liblzma-pcsx2.a */; }; 551AA1232792AB1700658151 /* GSRendererSW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA08D2792AB1700658151 /* GSRendererSW.cpp */; }; - 551AA1242792AB1700658151 /* GSVertexSW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA08E2792AB1700658151 /* GSVertexSW.cpp */; }; - 551AA1262792AB1700658151 /* GSTextureSW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0932792AB1700658151 /* GSTextureSW.cpp */; }; 551AA1282792AB1700658151 /* GSDrawScanline.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0952792AB1700658151 /* GSDrawScanline.cpp */; }; 551AA12B2792AB1700658151 /* GSRasterizer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA09D2792AB1700658151 /* GSRasterizer.cpp */; }; 551AA12C2792AB1700658151 /* GSTextureCacheSW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA09E2792AB1700658151 /* GSTextureCacheSW.cpp */; }; @@ -56,10 +41,7 @@ 551AA13F2792AB1700658151 /* GSRenderer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0CC2792AB1700658151 /* GSRenderer.cpp */; }; 551AA1402792AB1700658151 /* GSDirtyRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0CD2792AB1700658151 /* GSDirtyRect.cpp */; }; 551AA1482792AB1800658151 /* GLState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E12792AB1700658151 /* GLState.cpp */; }; - 551AA1492792AB1800658151 /* GLLoader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E22792AB1700658151 /* GLLoader.cpp */; }; 551AA14C2792AB1800658151 /* GSTextureOGL.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E82792AB1700658151 /* GSTextureOGL.cpp */; }; - 551AA16D2792B0EA00658151 /* MemoryCardFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA16B2792B0EA00658151 /* MemoryCardFile.cpp */; }; - 551AA16E2792B0EA00658151 /* MemoryCardFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA16C2792B0EA00658151 /* MemoryCardFolder.cpp */; }; 551AA1702792B1A100658151 /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 551AA16F2792B1A100658151 /* Metal.framework */; }; 551AA1782792B66400658151 /* DNS_Logger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1722792B66400658151 /* DNS_Logger.cpp */; }; 551AA1792792B66400658151 /* DNS_Server.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1742792B66400658151 /* DNS_Server.cpp */; }; @@ -67,9 +49,7 @@ 551AA17B2792BAD200658151 /* PrecompiledHeader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAA5263D48AE000219EC /* PrecompiledHeader.cpp */; }; 551AA3D52792BEC500658151 /* simd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6E263D48AE000219EC /* simd.cpp */; }; 551AA3D62792BEC500658151 /* bmi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA76263D48AE000219EC /* bmi.cpp */; }; - 551AA3D72792BEC500658151 /* LnxCpuDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA73263D48AE000219EC /* LnxCpuDetect.cpp */; }; 551AA3D82792BEC500658151 /* jmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA79263D48AE000219EC /* jmp.cpp */; }; - 551AA3D92792BEC500658151 /* cpudetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA71263D48AE000219EC /* cpudetect.cpp */; }; 551AA3DA2792BEC500658151 /* x86emitter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA78263D48AE000219EC /* x86emitter.cpp */; }; 551AA3DB2792BEC500658151 /* fpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA74263D48AE000219EC /* fpu.cpp */; }; 551AA3DC2792BEC500658151 /* legacy_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6F263D48AE000219EC /* legacy_sse.cpp */; }; @@ -88,11 +68,9 @@ 551AA3F12792BF1800658151 /* GS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1082792AB1700658151 /* GS.cpp */; }; 551AA3F32792BF1800658151 /* GSPng.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1052792AB1700658151 /* GSPng.cpp */; }; 551AA3F42792BF1800658151 /* GSClut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1152792AB1700658151 /* GSClut.cpp */; }; - 551AA3F52792BF1800658151 /* GSCrc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA11D2792AB1700658151 /* GSCrc.cpp */; }; 551AA3F62792BF1800658151 /* GSRingHeap.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0E92792AB1700658151 /* GSRingHeap.cpp */; }; 551AA3F92792BF1800658151 /* GSVector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1142792AB1700658151 /* GSVector.cpp */; }; 551AA3FA2792BF6300658151 /* libgs2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 551AA3E42792BEC500658151 /* libgs2.a */; }; - 551AA4102792C29800658151 /* GSAlignedClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA1212792AB1700658151 /* GSAlignedClass.cpp */; }; 551AA4122792C4F500658151 /* MTVU.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDEC263D49BC000219EC /* MTVU.cpp */; }; 551AA4172792C81900658151 /* PerformanceMetrics.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4152792C81900658151 /* PerformanceMetrics.cpp */; }; 551AA41A2792C82A00658151 /* PINE.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4182792C82A00658151 /* PINE.cpp */; }; @@ -160,21 +138,13 @@ 551AA4AE27935E9100658151 /* DNS_Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA49F27935E9100658151 /* DNS_Packet.cpp */; }; 551AA4AF27935E9100658151 /* IP_Options.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4A127935E9100658151 /* IP_Options.cpp */; }; 551AA4B027935E9100658151 /* IP_Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4A527935E9100658151 /* IP_Packet.cpp */; }; - 551AA4B327935F9400658151 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4B127935F9300658151 /* Timer.cpp */; }; - 551AA4B72793625B00658151 /* Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4B62793625B00658151 /* Misc.cpp */; }; - 551AA4BA279362BB00658151 /* FastJmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4B9279362BA00658151 /* FastJmp.cpp */; }; - 551AA4BF2793642B00658151 /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4BE2793642B00658151 /* FileSystem.cpp */; }; - 551AA4CF27936D7400658151 /* StreamBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4C127936D7400658151 /* StreamBuffer.cpp */; }; - 551AA4D227936D7500658151 /* Context.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4C427936D7400658151 /* Context.cpp */; }; 551AA4DE2793736B00658151 /* glad.c in Sources */ = {isa = PBXBuildFile; fileRef = 551AA40F2792C12E00658151 /* glad.c */; }; 551AA4E12793741F00658151 /* libglad-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 551AA4DA2793734900658151 /* libglad-pcsx2.a */; }; 551AA4E22793756000658151 /* Pcsx2Config.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB5E263D49BB000219EC /* Pcsx2Config.cpp */; }; - 551AA4E52793775E00658151 /* StringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4E42793775E00658151 /* StringUtil.cpp */; }; 551AA4E6279377A100658151 /* GSDrawScanlineCodeGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0A12792AB1700658151 /* GSDrawScanlineCodeGenerator.cpp */; settings = {COMPILER_FLAGS = "-fno-operator-names"; }; }; 551AA4E72793789300658151 /* GSSetupPrimCodeGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0982792AB1700658151 /* GSSetupPrimCodeGenerator.cpp */; settings = {COMPILER_FLAGS = "-fno-operator-names"; }; }; 551AA4E827937A4B00658151 /* GSDrawScanlineCodeGenerator.all.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0922792AB1700658151 /* GSDrawScanlineCodeGenerator.all.cpp */; settings = {COMPILER_FLAGS = "-fno-operator-names"; }; }; 551AA4EA27937B5800658151 /* GSSetupPrimCodeGenerator.all.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0962792AB1700658151 /* GSSetupPrimCodeGenerator.all.cpp */; settings = {COMPILER_FLAGS = "-fno-operator-names"; }; }; - 551AA4F027938D6900658151 /* GSNewCodeGenerator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA0942792AB1700658151 /* GSNewCodeGenerator.cpp */; settings = {COMPILER_FLAGS = "-fno-operator-names"; }; }; 551BF2E42641F5430008C529 /* Carbon.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 551BF2E32641F5430008C529 /* Carbon.framework */; }; 551BF3D72641F6B60008C529 /* libiconv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 551BF3D62641F6B60008C529 /* libiconv.tbd */; }; 551BF4912641F9530008C529 /* libpng-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 551BF48D2641F9470008C529 /* libpng-pcsx2.a */; }; @@ -196,7 +166,6 @@ 551BF53E264200030008C529 /* LnxHostSys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551BE8882641EF4E0008C529 /* LnxHostSys.cpp */; }; 551BF544264200220008C529 /* DarwinMisc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA9C263D48AE000219EC /* DarwinMisc.cpp */; }; 551BF545264200220008C529 /* Perf.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA85263D48AE000219EC /* Perf.cpp */; }; - 551BF547264200220008C529 /* Exceptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA7F263D48AE000219EC /* Exceptions.cpp */; }; 551BF548264200220008C529 /* AlignedMalloc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA90263D48AE000219EC /* AlignedMalloc.cpp */; }; 551BF54A264200220008C529 /* Console.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA87263D48AE000219EC /* Console.cpp */; }; 551BF54B264200220008C529 /* DarwinThreads.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA9B263D48AE000219EC /* DarwinThreads.cpp */; }; @@ -226,7 +195,6 @@ 551BF57926420E720008C529 /* Vif0_Dma.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAAF263D49BB000219EC /* Vif0_Dma.cpp */; }; 551BF57A26420E720008C529 /* VU1microInterp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FBDD263D49BC000219EC /* VU1microInterp.cpp */; }; 551BF57D26420E9A0008C529 /* ShiftJisToUnicode.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB5B263D49BB000219EC /* ShiftJisToUnicode.cpp */; }; - 551BF57E26420E9A0008C529 /* Sio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDF5263D49BC000219EC /* Sio.cpp */; }; 551BF57F26420E9A0008C529 /* Sif0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB31263D49BB000219EC /* Sif0.cpp */; }; 551BF58026420E9A0008C529 /* R5900OpcodeImpl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FE01263D49BC000219EC /* R5900OpcodeImpl.cpp */; }; 551BF58126420E9A0008C529 /* BiosTools.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB49263D49BB000219EC /* BiosTools.cpp */; }; @@ -278,7 +246,6 @@ 551BF5D2264212270008C529 /* MultipartFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAB8263D49BB000219EC /* MultipartFileReader.cpp */; }; 551BF5D4264212270008C529 /* Mdec.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB5C263D49BB000219EC /* Mdec.cpp */; }; 551BF5D5264212270008C529 /* MTGS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAAA263D49BB000219EC /* MTGS.cpp */; }; - 551BF5D7264212270008C529 /* Patch_Memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB75263D49BB000219EC /* Patch_Memory.cpp */; }; 551BF5DA264212270008C529 /* Memory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAAC263D49BB000219EC /* Memory.cpp */; }; 551BF5DB264212270008C529 /* MMI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FB61263D49BB000219EC /* MMI.cpp */; }; 551BF6042642135F0008C529 /* FIFOSampleBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517E8E5263D4831000219EC /* FIFOSampleBuffer.cpp */; }; @@ -303,12 +270,10 @@ 551BF619264214530008C529 /* iFPUd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD15263D49BC000219EC /* iFPUd.cpp */; }; 551BF61A264214530008C529 /* iR3000A.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD2B263D49BC000219EC /* iR3000A.cpp */; }; 551BF61B264214530008C529 /* iR5900Misc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD41263D49BC000219EC /* iR5900Misc.cpp */; }; - 551BF61C264214530008C529 /* ir5900tables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD1C263D49BC000219EC /* ir5900tables.cpp */; }; 551BF61D264214530008C529 /* BaseblockEx.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD11263D49BC000219EC /* BaseblockEx.cpp */; }; 551BF61E264214530008C529 /* iMMI.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD29263D49BC000219EC /* iMMI.cpp */; }; 551BF620264214530008C529 /* iCOP0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD0C263D49BC000219EC /* iCOP0.cpp */; }; 551BF621264214530008C529 /* iR3000Atables.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD42263D49BC000219EC /* iR3000Atables.cpp */; }; - 551BF628264216A40008C529 /* System.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD4A263D49BC000219EC /* System.cpp */; }; 551BF62B264216F50008C529 /* CDVDdiscReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC97263D49BC000219EC /* CDVDdiscReader.cpp */; }; 551BF62C264216F50008C529 /* GzippedFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC8B263D49BC000219EC /* GzippedFileReader.cpp */; }; 551BF62D264216F50008C529 /* OutputIsoFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCA3263D49BC000219EC /* OutputIsoFile.cpp */; }; @@ -321,14 +286,11 @@ 551BF635264216F50008C529 /* CDVDdiscThread.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCA8263D49BC000219EC /* CDVDdiscThread.cpp */; }; 551BF637264216F50008C529 /* BlockdumpFileReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCA2263D49BC000219EC /* BlockdumpFileReader.cpp */; }; 551BF638264216F50008C529 /* CDVD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC8F263D49BC000219EC /* CDVD.cpp */; }; - 551BF641264217670008C529 /* LzmaEnc.c in Sources */ = {isa = PBXBuildFile; fileRef = 5517EF43263D4837000219EC /* LzmaEnc.c */; }; - 551BF6422642181C0008C529 /* iR5900-32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD3C263D49BC000219EC /* iR5900-32.cpp */; }; 551BF643264218380008C529 /* iR5900Arit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD33263D49BC000219EC /* iR5900Arit.cpp */; }; 551BF644264218380008C529 /* iR5900Jump.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD34263D49BC000219EC /* iR5900Jump.cpp */; }; 551BF645264218380008C529 /* iR5900Branch.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD36263D49BC000219EC /* iR5900Branch.cpp */; }; 551BF646264218380008C529 /* iR5900AritImm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD3D263D49BC000219EC /* iR5900AritImm.cpp */; }; 551BF647264218380008C529 /* iR5900Move.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD35263D49BC000219EC /* iR5900Move.cpp */; }; - 551BF648264218380008C529 /* iCore-32.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD39263D49BC000219EC /* iCore-32.cpp */; }; 551BF649264218380008C529 /* iR5900MultDiv.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD3B263D49BC000219EC /* iR5900MultDiv.cpp */; }; 551BF64A264218380008C529 /* iR5900LoadStore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD37263D49BC000219EC /* iR5900LoadStore.cpp */; }; 551BF64B264218380008C529 /* iR5900Templates.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FD38263D49BC000219EC /* iR5900Templates.cpp */; }; @@ -346,9 +308,6 @@ 551BF67F264240660008C529 /* ATA_Transfer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAE9263D49BB000219EC /* ATA_Transfer.cpp */; }; 551BF680264240660008C529 /* ATA_State.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAEC263D49BB000219EC /* ATA_State.cpp */; }; 551BF6812642408B0008C529 /* IOCtlSrc.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC9F263D49BC000219EC /* IOCtlSrc.cpp */; }; - 551BF6822642414E0008C529 /* IsoFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCAA263D49BC000219EC /* IsoFile.cpp */; }; - 551BF683264241530008C529 /* IsoFSCDVD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCAE263D49BC000219EC /* IsoFSCDVD.cpp */; }; - 551BF684264241570008C529 /* IsoFS.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCAF263D49BC000219EC /* IsoFS.cpp */; }; 551BF685264241BF0008C529 /* DisR3000A.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDDB263D49BC000219EC /* DisR3000A.cpp */; }; 551BF686264241D80008C529 /* BiosDebugData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDD8263D49BC000219EC /* BiosDebugData.cpp */; }; 551BF687264241DB0008C529 /* Breakpoints.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDE4263D49BC000219EC /* Breakpoints.cpp */; }; @@ -397,12 +356,9 @@ 553CF83A2640D2F8003A437C /* legacy_sse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6F263D48AE000219EC /* legacy_sse.cpp */; }; 553CF83C2640D2F8003A437C /* bmi.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA76263D48AE000219EC /* bmi.cpp */; }; 553CF83D2640D2F8003A437C /* fpu.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA74263D48AE000219EC /* fpu.cpp */; }; - 553CF83E2640D2F8003A437C /* LnxCpuDetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA73263D48AE000219EC /* LnxCpuDetect.cpp */; }; 553CF83F2640D2F8003A437C /* movs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA72263D48AE000219EC /* movs.cpp */; }; - 553CF8402640D2F8003A437C /* cpudetect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA71263D48AE000219EC /* cpudetect.cpp */; }; 553CF8412640D2F8003A437C /* groups.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6B263D48AE000219EC /* groups.cpp */; }; 553CF8422640D2F8003A437C /* simd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6E263D48AE000219EC /* simd.cpp */; }; - 553CF8432640D2F8003A437C /* legacy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FA6D263D48AE000219EC /* legacy.cpp */; }; 553CF8462640D30F003A437C /* libemitter_PCSX2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 553CF8172640CCCD003A437C /* libemitter_PCSX2.a */; }; 5548492528853E4F0066EDEB /* libzstd in Frameworks */ = {isa = PBXBuildFile; productRef = 5548492428853E4F0066EDEB /* libzstd */; }; 55484927288545620066EDEB /* present.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55484926288545620066EDEB /* present.metal */; }; @@ -531,14 +487,9 @@ 55484D28288555800066EDEB /* zip_libzip_version.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4C288555370066EDEB /* zip_libzip_version.c */; }; 55484D2D288555EE0066EDEB /* libzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55484932288554F20066EDEB /* libzip.a */; }; 55484D312885595F0066EDEB /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484D302885595F0066EDEB /* config.h */; }; - 55484D3228855C780066EDEB /* zip_err_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 5548493A288555330066EDEB /* zip_err_str.c */; }; - 55484D3328855D070066EDEB /* Semaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAA2263D48AE000219EC /* Semaphore.cpp */; }; - 55484D3828855DC10066EDEB /* GameList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 556FBB31279E1067007B4F88 /* GameList.cpp */; }; 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */; }; 55484D3E28855EE70066EDEB /* InputRecordingFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551BF6E326424D020008C529 /* InputRecordingFile.cpp */; }; 555BCB75295CE0E5002E569F /* InputRecordingLogger.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5576A4812885E10B0078CFF8 /* InputRecordingLogger.cpp */; }; - 555BCB7B295CE2F5002E569F /* CommonHost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 555BCB7A295CE2F5002E569F /* CommonHost.cpp */; }; - 555BCB80295CE577002E569F /* HostSettings.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 555BCB7C295CE4AC002E569F /* HostSettings.cpp */; }; 5564D643279A07D300EECDEC /* ryml.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5564D57D279A07D300EECDEC /* ryml.hpp */; }; 5564D644279A07D300EECDEC /* ryml_std.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5564D57F279A07D300EECDEC /* ryml_std.hpp */; }; 5564D645279A07D300EECDEC /* common.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D582279A07D300EECDEC /* common.cpp */; }; @@ -564,30 +515,20 @@ 5564D659279A07D300EECDEC /* emit.def.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5564D598279A07D300EECDEC /* emit.def.hpp */; }; 5564D65A279A07D300EECDEC /* preprocess.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D599279A07D300EECDEC /* preprocess.cpp */; }; 5564D65B279A07D300EECDEC /* parse.hpp in Headers */ = {isa = PBXBuildFile; fileRef = 5564D59A279A07D300EECDEC /* parse.hpp */; }; - 5564D76C279A0CEA00EECDEC /* ShaderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D769279A0CEA00EECDEC /* ShaderCache.cpp */; }; - 5564D76D279A0CEA00EECDEC /* Program.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D76B279A0CEA00EECDEC /* Program.cpp */; }; - 5564D771279A0D1500EECDEC /* MD5Digest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D770279A0D1500EECDEC /* MD5Digest.cpp */; }; 5564D772279A0EB000EECDEC /* error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D6DC279A0A0500EECDEC /* error.cpp */; }; 556FBB29279E0EAB007B4F88 /* VMManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 556FBB28279E0E76007B4F88 /* VMManager.cpp */; }; - 556FBB48279E1067007B4F88 /* InputManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 556FBB36279E1067007B4F88 /* InputManager.cpp */; }; - 556FBB49279E1067007B4F88 /* LayeredSettingsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 556FBB39279E1067007B4F88 /* LayeredSettingsInterface.cpp */; }; - 556FBB4D279E1067007B4F88 /* InputSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 556FBB3F279E1067007B4F88 /* InputSource.cpp */; }; 5576A4802885E0C70078CFF8 /* InputRecordingControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551BF6BF26424D020008C529 /* InputRecordingControls.cpp */; }; 557D49CE27D00BE7006C2C69 /* interlace.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB627B70F0C0006ABDC /* interlace.metal */; }; 557D49CF27D00BE7006C2C69 /* tfx.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFBD27B70F0C0006ABDC /* tfx.metal */; }; 557D49D027D00BE7006C2C69 /* merge.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB727B70F0C0006ABDC /* merge.metal */; }; 557D49D127D00BE7006C2C69 /* convert.metal in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFC127B70F0C0006ABDC /* convert.metal */; }; - 5580639A27AB3262008CD5D2 /* KeyStatus.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639627AB3261008CD5D2 /* KeyStatus.cpp */; }; 558063A127AB346B008CD5D2 /* Host.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639F27AB346B008CD5D2 /* Host.cpp */; }; - 558063A727AB3D2D008CD5D2 /* ProgressCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A527AB3D2D008CD5D2 /* ProgressCallback.cpp */; }; - 558063AA27AB3E0B008CD5D2 /* WindowInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A827AB3E0B008CD5D2 /* WindowInfo.cpp */; }; 5580651E27AB4C23008CD5D2 /* cubeb.c in Sources */ = {isa = PBXBuildFile; fileRef = 558064CC27AB4B9E008CD5D2 /* cubeb.c */; }; 5580651F27AB4C85008CD5D2 /* cubeb_mixer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558064D427AB4B9E008CD5D2 /* cubeb_mixer.cpp */; }; 5580652027AB4C93008CD5D2 /* cubeb_strings.c in Sources */ = {isa = PBXBuildFile; fileRef = 558064C827AB4B9E008CD5D2 /* cubeb_strings.c */; }; 5580652127AB4CBA008CD5D2 /* cubeb_audiounit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558064C927AB4B9E008CD5D2 /* cubeb_audiounit.cpp */; }; 5580652427AB4CD7008CD5D2 /* libcubeb-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 5580651927AB4BBE008CD5D2 /* libcubeb-pcsx2.a */; }; 5580652527AB4DAF008CD5D2 /* cubeb_log.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558064E727AB4B9E008CD5D2 /* cubeb_log.cpp */; }; - 5580652827AB4DE9008CD5D2 /* SettingsWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580652727AB4DE9008CD5D2 /* SettingsWrapper.cpp */; }; 5580652D27AB504C008CD5D2 /* libxml2.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = 5580652C27AB504C008CD5D2 /* libxml2.tbd */; }; 5580662F27AD3A5D008CD5D2 /* GameIndex.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 558065D127AD3A31008CD5D2 /* GameIndex.yaml */; }; 5580663127AD3ADB008CD5D2 /* convert.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C427AD3A31008CD5D2 /* convert.glsl */; }; @@ -606,7 +547,6 @@ 5591D80C27B469200073E97D /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 5591D80B27B469200073E97D /* CoreAudio.framework */; }; 5591D80D27B4693D0073E97D /* cubeb_utils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558064CA27AB4B9E008CD5D2 /* cubeb_utils.cpp */; }; 5591D80E27B469600073E97D /* cubeb_osx_run_loop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558064C627AB4B9E008CD5D2 /* cubeb_osx_run_loop.cpp */; }; - 55AB8FB7298C57550024DCBC /* VirtualMemory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55AB8FB5298C57550024DCBC /* VirtualMemory.cpp */; }; 55B1EFAE295BA06F00DB297F /* SettingsInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1EFAD295BA06F00DB297F /* SettingsInterface.h */; }; 55B1EFB1295BA0CB00DB297F /* MemorySettingsInterface.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1EFAF295BA0CA00DB297F /* MemorySettingsInterface.h */; }; 55B1EFB2295BA0CB00DB297F /* MemorySettingsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFB0295BA0CB00DB297F /* MemorySettingsInterface.cpp */; }; @@ -622,13 +562,11 @@ 55B1EFD3295BA71D00DB297F /* GSXXH.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFD1295BA71D00DB297F /* GSXXH.cpp */; }; 55B1EFD5295BA74200DB297F /* GSLocalMemoryMultiISA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFD4295BA74200DB297F /* GSLocalMemoryMultiISA.cpp */; }; 55B1EFD8295BA7CF00DB297F /* StateWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFD7295BA7CF00DB297F /* StateWrapper.cpp */; }; - 55B1EFDB295BA84300DB297F /* MemoryCardProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFD9295BA84300DB297F /* MemoryCardProtocol.cpp */; }; 55B1EFE4295BA99C00DB297F /* Image.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1EFE2295BA99C00DB297F /* Image.h */; }; 55B1EFE5295BA99C00DB297F /* Image.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFE3295BA99C00DB297F /* Image.cpp */; }; 55B1EFF6295BAA5900DB297F /* jpgd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFED295BAA2B00DB297F /* jpgd.cpp */; }; 55B1EFF7295BAA5D00DB297F /* jpge.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFEC295BAA2B00DB297F /* jpge.cpp */; }; 55B1EFFA295BAA8900DB297F /* libjpgd.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55B1EFF2295BAA4700DB297F /* libjpgd.a */; }; - 55B1EFFD295BAB1600DB297F /* MultitapProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFFB295BAB1600DB297F /* MultitapProtocol.cpp */; }; 55B1F000295BAB4900DB297F /* ReadbackSpinManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1EFFE295BAB4900DB297F /* ReadbackSpinManager.cpp */; }; 55B1F001295BAB4900DB297F /* ReadbackSpinManager.h in Headers */ = {isa = PBXBuildFile; fileRef = 55B1EFFF295BAB4900DB297F /* ReadbackSpinManager.h */; }; 55B1F002295BAB8A00DB297F /* usb-ohci.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FBF2263D49BC000219EC /* usb-ohci.cpp */; }; @@ -662,6 +600,244 @@ 55BD3E7A295A5A37001DD03E /* cam-noop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E79295A5A37001DD03E /* cam-noop.cpp */; }; 55BD3E7D295A5ABC001DD03E /* misc.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E7B295A5ABC001DD03E /* misc.metal */; }; 55BD3E7E295A5ABC001DD03E /* cas.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E7C295A5ABC001DD03E /* cas.metal */; }; + 55DB5A352B59027B00B3BD75 /* RedumpDatabase.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */; }; + 55DB5A592B5903E400B3BD75 /* Assertions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A412B5903B000B3BD75 /* Assertions.cpp */; }; + 55DB5A5A2B5903EA00B3BD75 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A392B5903AE00B3BD75 /* CrashHandler.cpp */; }; + 55DB5A5B2B5903F600B3BD75 /* DynamicLibrary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A3E2B5903B000B3BD75 /* DynamicLibrary.cpp */; }; + 55DB5A5E2B59047700B3BD75 /* Error.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A4D2B5903B300B3BD75 /* Error.cpp */; }; + 55DB5A5F2B59047B00B3BD75 /* FastJmp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4B9279362BA00658151 /* FastJmp.cpp */; }; + 55DB5A602B59048A00B3BD75 /* FileSystem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4BE2793642B00658151 /* FileSystem.cpp */; }; + 55DB5A612B5904A400B3BD75 /* HostSys.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A462B5903B100B3BD75 /* HostSys.cpp */; }; + 55DB5A622B5904BB00B3BD75 /* MD5Digest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5564D770279A0D1500EECDEC /* MD5Digest.cpp */; }; + 55DB5A652B5904D000B3BD75 /* SettingsWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580652727AB4DE9008CD5D2 /* SettingsWrapper.cpp */; }; + 55DB5A662B5904D000B3BD75 /* StringUtil.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4E42793775E00658151 /* StringUtil.cpp */; }; + 55DB5A672B5904D000B3BD75 /* TextureDecompress.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A492B5903B200B3BD75 /* TextureDecompress.cpp */; }; + 55DB5A682B5904D000B3BD75 /* Timer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 551AA4B127935F9300658151 /* Timer.cpp */; }; + 55DB5A692B5904D000B3BD75 /* ProgressCallback.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A527AB3D2D008CD5D2 /* ProgressCallback.cpp */; }; + 55DB5A6B2B5904D000B3BD75 /* WindowInfo.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063A827AB3E0B008CD5D2 /* WindowInfo.cpp */; }; + 55DB5A6C2B5904D000B3BD75 /* Semaphore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FAA2263D48AE000219EC /* Semaphore.cpp */; }; + 55DB5A6D2B5904D000B3BD75 /* SmallString.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A4A2B5903B200B3BD75 /* SmallString.cpp */; }; + 55DB5A762B59095D00B3BD75 /* zipconf.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5A752B59095D00B3BD75 /* zipconf.h */; }; + 55DB5C172B590A6D00B3BD75 /* sharpyuv_gamma.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B092B590A6C00B3BD75 /* sharpyuv_gamma.c */; }; + 55DB5C182B590A6D00B3BD75 /* sharpyuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B0A2B590A6C00B3BD75 /* sharpyuv_sse2.c */; }; + 55DB5C192B590A6D00B3BD75 /* sharpyuv.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B0C2B590A6C00B3BD75 /* sharpyuv.c */; }; + 55DB5C1A2B590A6D00B3BD75 /* sharpyuv_csp.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B0D2B590A6C00B3BD75 /* sharpyuv_csp.h */; }; + 55DB5C1B2B590A6D00B3BD75 /* sharpyuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B0E2B590A6C00B3BD75 /* sharpyuv_neon.c */; }; + 55DB5C1C2B590A6D00B3BD75 /* sharpyuv_dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B0F2B590A6C00B3BD75 /* sharpyuv_dsp.h */; }; + 55DB5C1D2B590A6D00B3BD75 /* sharpyuv_cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B102B590A6C00B3BD75 /* sharpyuv_cpu.h */; }; + 55DB5C1E2B590A6D00B3BD75 /* sharpyuv_gamma.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B122B590A6C00B3BD75 /* sharpyuv_gamma.h */; }; + 55DB5C1F2B590A6D00B3BD75 /* sharpyuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B132B590A6C00B3BD75 /* sharpyuv.h */; }; + 55DB5C202B590A6D00B3BD75 /* sharpyuv_csp.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B142B590A6C00B3BD75 /* sharpyuv_csp.c */; }; + 55DB5C212B590A6D00B3BD75 /* sharpyuv_cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B152B590A6C00B3BD75 /* sharpyuv_cpu.c */; }; + 55DB5C222B590A6D00B3BD75 /* sharpyuv_dsp.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B172B590A6C00B3BD75 /* sharpyuv_dsp.c */; }; + 55DB5C232B590A6D00B3BD75 /* muxread.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B212B590A6C00B3BD75 /* muxread.c */; }; + 55DB5C242B590A6D00B3BD75 /* muxinternal.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B222B590A6C00B3BD75 /* muxinternal.c */; }; + 55DB5C252B590A6D00B3BD75 /* anim_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B252B590A6C00B3BD75 /* anim_encode.c */; }; + 55DB5C262B590A6D00B3BD75 /* animi.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B262B590A6C00B3BD75 /* animi.h */; }; + 55DB5C272B590A6D00B3BD75 /* muxedit.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B282B590A6C00B3BD75 /* muxedit.c */; }; + 55DB5C282B590A6D00B3BD75 /* muxi.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B292B590A6C00B3BD75 /* muxi.h */; }; + 55DB5C292B590A6D00B3BD75 /* bit_writer_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B2E2B590A6C00B3BD75 /* bit_writer_utils.c */; }; + 55DB5C2A2B590A6D00B3BD75 /* endian_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B2F2B590A6C00B3BD75 /* endian_inl_utils.h */; }; + 55DB5C2B2B590A6D00B3BD75 /* thread_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B302B590A6C00B3BD75 /* thread_utils.c */; }; + 55DB5C2C2B590A6D00B3BD75 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B312B590A6C00B3BD75 /* utils.h */; }; + 55DB5C2D2B590A6D00B3BD75 /* bit_reader_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B322B590A6C00B3BD75 /* bit_reader_utils.h */; }; + 55DB5C2E2B590A6D00B3BD75 /* bit_reader_inl_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B332B590A6C00B3BD75 /* bit_reader_inl_utils.h */; }; + 55DB5C2F2B590A6D00B3BD75 /* rescaler_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B342B590A6C00B3BD75 /* rescaler_utils.c */; }; + 55DB5C302B590A6D00B3BD75 /* quant_levels_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B352B590A6C00B3BD75 /* quant_levels_utils.h */; }; + 55DB5C312B590A6D00B3BD75 /* quant_levels_dec_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B362B590A6C00B3BD75 /* quant_levels_dec_utils.h */; }; + 55DB5C322B590A6D00B3BD75 /* huffman_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B372B590A6C00B3BD75 /* huffman_utils.c */; }; + 55DB5C332B590A6D00B3BD75 /* color_cache_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B382B590A6C00B3BD75 /* color_cache_utils.h */; }; + 55DB5C342B590A6D00B3BD75 /* filters_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B392B590A6C00B3BD75 /* filters_utils.h */; }; + 55DB5C352B590A6D00B3BD75 /* huffman_encode_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B3A2B590A6C00B3BD75 /* huffman_encode_utils.c */; }; + 55DB5C362B590A6D00B3BD75 /* random_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B3B2B590A6C00B3BD75 /* random_utils.h */; }; + 55DB5C372B590A6D00B3BD75 /* rescaler_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B3C2B590A6C00B3BD75 /* rescaler_utils.h */; }; + 55DB5C382B590A6D00B3BD75 /* quant_levels_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B3E2B590A6C00B3BD75 /* quant_levels_utils.c */; }; + 55DB5C392B590A6D00B3BD75 /* quant_levels_dec_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B3F2B590A6C00B3BD75 /* quant_levels_dec_utils.c */; }; + 55DB5C3A2B590A6D00B3BD75 /* bit_reader_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B402B590A6C00B3BD75 /* bit_reader_utils.c */; }; + 55DB5C3B2B590A6D00B3BD75 /* thread_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B412B590A6C00B3BD75 /* thread_utils.h */; }; + 55DB5C3C2B590A6D00B3BD75 /* utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B422B590A6C00B3BD75 /* utils.c */; }; + 55DB5C3D2B590A6D00B3BD75 /* bit_writer_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B432B590A6C00B3BD75 /* bit_writer_utils.h */; }; + 55DB5C3E2B590A6D00B3BD75 /* huffman_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B442B590A6C00B3BD75 /* huffman_utils.h */; }; + 55DB5C3F2B590A6D00B3BD75 /* huffman_encode_utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B452B590A6C00B3BD75 /* huffman_encode_utils.h */; }; + 55DB5C402B590A6D00B3BD75 /* color_cache_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B462B590A6C00B3BD75 /* color_cache_utils.c */; }; + 55DB5C412B590A6D00B3BD75 /* filters_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B472B590A6C00B3BD75 /* filters_utils.c */; }; + 55DB5C422B590A6D00B3BD75 /* random_utils.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B482B590A6C00B3BD75 /* random_utils.c */; }; + 55DB5C432B590A6D00B3BD75 /* format_constants.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4A2B590A6C00B3BD75 /* format_constants.h */; }; + 55DB5C442B590A6D00B3BD75 /* mux.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4B2B590A6C00B3BD75 /* mux.h */; }; + 55DB5C452B590A6D00B3BD75 /* types.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4C2B590A6C00B3BD75 /* types.h */; }; + 55DB5C462B590A6D00B3BD75 /* demux.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4D2B590A6C00B3BD75 /* demux.h */; }; + 55DB5C472B590A6D00B3BD75 /* mux_types.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4E2B590A6C00B3BD75 /* mux_types.h */; }; + 55DB5C482B590A6D00B3BD75 /* encode.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B4F2B590A6C00B3BD75 /* encode.h */; }; + 55DB5C492B590A6D00B3BD75 /* decode.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B502B590A6C00B3BD75 /* decode.h */; }; + 55DB5C4A2B590A6D00B3BD75 /* iterator_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B532B590A6C00B3BD75 /* iterator_enc.c */; }; + 55DB5C4B2B590A6D00B3BD75 /* backward_references_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B542B590A6C00B3BD75 /* backward_references_enc.h */; }; + 55DB5C4C2B590A6D00B3BD75 /* cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B552B590A6C00B3BD75 /* cost_enc.c */; }; + 55DB5C4D2B590A6D00B3BD75 /* alpha_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B562B590A6C00B3BD75 /* alpha_enc.c */; }; + 55DB5C4E2B590A6D00B3BD75 /* histogram_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B572B590A6C00B3BD75 /* histogram_enc.h */; }; + 55DB5C4F2B590A6D00B3BD75 /* picture_psnr_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B582B590A6C00B3BD75 /* picture_psnr_enc.c */; }; + 55DB5C502B590A6D00B3BD75 /* token_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B592B590A6C00B3BD75 /* token_enc.c */; }; + 55DB5C512B590A6D00B3BD75 /* vp8i_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B5A2B590A6C00B3BD75 /* vp8i_enc.h */; }; + 55DB5C522B590A6D00B3BD75 /* tree_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B5B2B590A6C00B3BD75 /* tree_enc.c */; }; + 55DB5C532B590A6D00B3BD75 /* filter_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B5C2B590A6C00B3BD75 /* filter_enc.c */; }; + 55DB5C542B590A6D00B3BD75 /* picture_csp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B5D2B590A6C00B3BD75 /* picture_csp_enc.c */; }; + 55DB5C552B590A6D00B3BD75 /* frame_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B5E2B590A6C00B3BD75 /* frame_enc.c */; }; + 55DB5C562B590A6D00B3BD75 /* syntax_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B5F2B590A6C00B3BD75 /* syntax_enc.c */; }; + 55DB5C572B590A6D00B3BD75 /* cost_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B602B590A6C00B3BD75 /* cost_enc.h */; }; + 55DB5C582B590A6D00B3BD75 /* predictor_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B622B590A6C00B3BD75 /* predictor_enc.c */; }; + 55DB5C592B590A6D00B3BD75 /* config_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B632B590A6C00B3BD75 /* config_enc.c */; }; + 55DB5C5A2B590A6D00B3BD75 /* backward_references_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B642B590A6C00B3BD75 /* backward_references_enc.c */; }; + 55DB5C5B2B590A6D00B3BD75 /* picture_tools_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B652B590A6C00B3BD75 /* picture_tools_enc.c */; }; + 55DB5C5C2B590A6D00B3BD75 /* webp_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B662B590A6C00B3BD75 /* webp_enc.c */; }; + 55DB5C5D2B590A6D00B3BD75 /* vp8l_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B672B590A6C00B3BD75 /* vp8l_enc.c */; }; + 55DB5C5E2B590A6D00B3BD75 /* histogram_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B682B590A6C00B3BD75 /* histogram_enc.c */; }; + 55DB5C5F2B590A6D00B3BD75 /* analysis_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B692B590A6C00B3BD75 /* analysis_enc.c */; }; + 55DB5C602B590A6D00B3BD75 /* vp8li_enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B6A2B590A6C00B3BD75 /* vp8li_enc.h */; }; + 55DB5C612B590A6D00B3BD75 /* quant_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B6B2B590A6C00B3BD75 /* quant_enc.c */; }; + 55DB5C622B590A6D00B3BD75 /* near_lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B6C2B590A6C00B3BD75 /* near_lossless_enc.c */; }; + 55DB5C632B590A6D00B3BD75 /* picture_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B6D2B590A6C00B3BD75 /* picture_enc.c */; }; + 55DB5C642B590A6D00B3BD75 /* backward_references_cost_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B6E2B590A6C00B3BD75 /* backward_references_cost_enc.c */; }; + 55DB5C652B590A6D00B3BD75 /* picture_rescale_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B6F2B590A6C00B3BD75 /* picture_rescale_enc.c */; }; + 55DB5C662B590A6D00B3BD75 /* demux.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B712B590A6C00B3BD75 /* demux.c */; }; + 55DB5C672B590A6D00B3BD75 /* anim_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B742B590A6C00B3BD75 /* anim_decode.c */; }; + 55DB5C682B590A6D00B3BD75 /* io_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B782B590A6C00B3BD75 /* io_dec.c */; }; + 55DB5C692B590A6D00B3BD75 /* frame_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B792B590A6C00B3BD75 /* frame_dec.c */; }; + 55DB5C6A2B590A6D00B3BD75 /* tree_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B7A2B590A6C00B3BD75 /* tree_dec.c */; }; + 55DB5C6B2B590A6D00B3BD75 /* vp8i_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B7B2B590A6C00B3BD75 /* vp8i_dec.h */; }; + 55DB5C6C2B590A6D00B3BD75 /* vp8_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B7C2B590A6C00B3BD75 /* vp8_dec.h */; }; + 55DB5C6D2B590A6D00B3BD75 /* alpha_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B7D2B590A6C00B3BD75 /* alpha_dec.c */; }; + 55DB5C6E2B590A6D00B3BD75 /* common_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B7E2B590A6C00B3BD75 /* common_dec.h */; }; + 55DB5C6F2B590A6D00B3BD75 /* buffer_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B802B590A6C00B3BD75 /* buffer_dec.c */; }; + 55DB5C702B590A6D00B3BD75 /* quant_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B812B590A6C00B3BD75 /* quant_dec.c */; }; + 55DB5C712B590A6D00B3BD75 /* vp8li_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B822B590A6C00B3BD75 /* vp8li_dec.h */; }; + 55DB5C722B590A6D00B3BD75 /* idec_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B832B590A6C00B3BD75 /* idec_dec.c */; }; + 55DB5C732B590A6D00B3BD75 /* webp_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B842B590A6C00B3BD75 /* webp_dec.c */; }; + 55DB5C742B590A6D00B3BD75 /* vp8l_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B852B590A6C00B3BD75 /* vp8l_dec.c */; }; + 55DB5C752B590A6D00B3BD75 /* alphai_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B862B590A6C00B3BD75 /* alphai_dec.h */; }; + 55DB5C762B590A6D00B3BD75 /* vp8_dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B872B590A6C00B3BD75 /* vp8_dec.c */; }; + 55DB5C772B590A6D00B3BD75 /* webpi_dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B882B590A6C00B3BD75 /* webpi_dec.h */; }; + 55DB5C782B590A6D00B3BD75 /* upsampling.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B8A2B590A6C00B3BD75 /* upsampling.c */; }; + 55DB5C792B590A6D00B3BD75 /* lossless_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B8B2B590A6C00B3BD75 /* lossless_sse2.c */; }; + 55DB5C7A2B590A6D00B3BD75 /* lossless.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B8C2B590A6C00B3BD75 /* lossless.h */; }; + 55DB5C7B2B590A6D00B3BD75 /* lossless_enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B8D2B590A6C00B3BD75 /* lossless_enc_mips_dsp_r2.c */; }; + 55DB5C7C2B590A6D00B3BD75 /* enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B8E2B590A6C00B3BD75 /* enc_msa.c */; }; + 55DB5C7D2B590A6D00B3BD75 /* msa_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B8F2B590A6C00B3BD75 /* msa_macro.h */; }; + 55DB5C7E2B590A6D00B3BD75 /* neon.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5B902B590A6C00B3BD75 /* neon.h */; }; + 55DB5C7F2B590A6D00B3BD75 /* filters_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B912B590A6C00B3BD75 /* filters_mips_dsp_r2.c */; }; + 55DB5C802B590A6D00B3BD75 /* rescaler.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B922B590A6C00B3BD75 /* rescaler.c */; }; + 55DB5C812B590A6D00B3BD75 /* dec_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B932B590A6C00B3BD75 /* dec_mips_dsp_r2.c */; }; + 55DB5C822B590A6D00B3BD75 /* rescaler_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B942B590A6C00B3BD75 /* rescaler_neon.c */; }; + 55DB5C832B590A6D00B3BD75 /* cost_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B952B590A6C00B3BD75 /* cost_sse2.c */; }; + 55DB5C842B590A6D00B3BD75 /* upsampling_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B962B590A6C00B3BD75 /* upsampling_sse41.c */; }; + 55DB5C852B590A6D00B3BD75 /* enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B972B590A6C00B3BD75 /* enc_sse41.c */; }; + 55DB5C862B590A6D00B3BD75 /* lossless_enc_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B982B590A6C00B3BD75 /* lossless_enc_sse41.c */; }; + 55DB5C872B590A6D00B3BD75 /* upsampling_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B992B590A6C00B3BD75 /* upsampling_neon.c */; }; + 55DB5C882B590A6D00B3BD75 /* filters_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9A2B590A6C00B3BD75 /* filters_sse2.c */; }; + 55DB5C892B590A6D00B3BD75 /* lossless_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9B2B590A6C00B3BD75 /* lossless_mips_dsp_r2.c */; }; + 55DB5C8A2B590A6D00B3BD75 /* enc_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9C2B590A6C00B3BD75 /* enc_mips_dsp_r2.c */; }; + 55DB5C8B2B590A6D00B3BD75 /* cpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9D2B590A6C00B3BD75 /* cpu.c */; }; + 55DB5C8C2B590A6D00B3BD75 /* yuv_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9E2B590A6C00B3BD75 /* yuv_neon.c */; }; + 55DB5C8D2B590A6D00B3BD75 /* alpha_processing.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5B9F2B590A6C00B3BD75 /* alpha_processing.c */; }; + 55DB5C8E2B590A6D00B3BD75 /* yuv.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BA02B590A6C00B3BD75 /* yuv.h */; }; + 55DB5C8F2B590A6D00B3BD75 /* quant.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BA12B590A6C00B3BD75 /* quant.h */; }; + 55DB5C902B590A6D00B3BD75 /* cost_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA22B590A6C00B3BD75 /* cost_neon.c */; }; + 55DB5C912B590A6D00B3BD75 /* enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA32B590A6C00B3BD75 /* enc_mips32.c */; }; + 55DB5C922B590A6D00B3BD75 /* filters_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA42B590A6C00B3BD75 /* filters_neon.c */; }; + 55DB5C932B590A6D00B3BD75 /* upsampling_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA52B590A6C00B3BD75 /* upsampling_sse2.c */; }; + 55DB5C942B590A6D00B3BD75 /* yuv_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA62B590A6C00B3BD75 /* yuv_sse2.c */; }; + 55DB5C952B590A6D00B3BD75 /* filters_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA72B590A6C00B3BD75 /* filters_msa.c */; }; + 55DB5C962B590A6D00B3BD75 /* mips_macro.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BA82B590A6C00B3BD75 /* mips_macro.h */; }; + 55DB5C972B590A6D00B3BD75 /* rescaler_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BA92B590A6C00B3BD75 /* rescaler_msa.c */; }; + 55DB5C982B590A6D00B3BD75 /* lossless_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAA2B590A6C00B3BD75 /* lossless_neon.c */; }; + 55DB5C992B590A6D00B3BD75 /* lossless_enc_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAB2B590A6C00B3BD75 /* lossless_enc_msa.c */; }; + 55DB5C9A2B590A6D00B3BD75 /* filters.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAC2B590A6C00B3BD75 /* filters.c */; }; + 55DB5C9B2B590A6D00B3BD75 /* alpha_processing_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAD2B590A6C00B3BD75 /* alpha_processing_mips_dsp_r2.c */; }; + 55DB5C9C2B590A6D00B3BD75 /* rescaler_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAE2B590A6C00B3BD75 /* rescaler_mips_dsp_r2.c */; }; + 55DB5C9D2B590A6D00B3BD75 /* ssim_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BAF2B590A6C00B3BD75 /* ssim_sse2.c */; }; + 55DB5C9E2B590A6D00B3BD75 /* rescaler_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB02B590A6C00B3BD75 /* rescaler_mips32.c */; }; + 55DB5C9F2B590A6D00B3BD75 /* dec_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB12B590A6C00B3BD75 /* dec_sse41.c */; }; + 55DB5CA02B590A6D00B3BD75 /* lossless_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB22B590A6C00B3BD75 /* lossless_sse41.c */; }; + 55DB5CA12B590A6D00B3BD75 /* yuv_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB32B590A6C00B3BD75 /* yuv_sse41.c */; }; + 55DB5CA22B590A6D00B3BD75 /* rescaler_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB42B590A6C00B3BD75 /* rescaler_sse2.c */; }; + 55DB5CA32B590A6D00B3BD75 /* lossless_enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB62B590A6C00B3BD75 /* lossless_enc.c */; }; + 55DB5CA42B590A6D00B3BD75 /* yuv_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB72B590A6C00B3BD75 /* yuv_mips_dsp_r2.c */; }; + 55DB5CA52B590A6D00B3BD75 /* alpha_processing_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB82B590A6C00B3BD75 /* alpha_processing_neon.c */; }; + 55DB5CA62B590A6D00B3BD75 /* dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BB92B590A6C00B3BD75 /* dec.c */; }; + 55DB5CA72B590A6D00B3BD75 /* lossless.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBA2B590A6C00B3BD75 /* lossless.c */; }; + 55DB5CA82B590A6D00B3BD75 /* ssim.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBB2B590A6C00B3BD75 /* ssim.c */; }; + 55DB5CA92B590A6D00B3BD75 /* upsampling_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBC2B590A6C00B3BD75 /* upsampling_msa.c */; }; + 55DB5CAA2B590A6D00B3BD75 /* lossless_enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBD2B590A6C00B3BD75 /* lossless_enc_sse2.c */; }; + 55DB5CAB2B590A6D00B3BD75 /* yuv.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBE2B590A6C00B3BD75 /* yuv.c */; }; + 55DB5CAC2B590A6D00B3BD75 /* enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BBF2B590A6C00B3BD75 /* enc_neon.c */; }; + 55DB5CAD2B590A6D00B3BD75 /* cpu.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BC02B590A6C00B3BD75 /* cpu.h */; }; + 55DB5CAE2B590A6D00B3BD75 /* dec_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC12B590A6C00B3BD75 /* dec_sse2.c */; }; + 55DB5CAF2B590A6D00B3BD75 /* dsp.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BC22B590A6C00B3BD75 /* dsp.h */; }; + 55DB5CB02B590A6D00B3BD75 /* enc_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC32B590A6C00B3BD75 /* enc_sse2.c */; }; + 55DB5CB12B590A6D00B3BD75 /* lossless_enc_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC42B590A6C00B3BD75 /* lossless_enc_neon.c */; }; + 55DB5CB22B590A6D00B3BD75 /* lossless_common.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BC52B590A6C00B3BD75 /* lossless_common.h */; }; + 55DB5CB32B590A6D00B3BD75 /* cost_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC62B590A6C00B3BD75 /* cost_mips32.c */; }; + 55DB5CB42B590A6D00B3BD75 /* alpha_processing_sse41.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC72B590A6C00B3BD75 /* alpha_processing_sse41.c */; }; + 55DB5CB52B590A6D00B3BD75 /* dec_neon.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC82B590A6C00B3BD75 /* dec_neon.c */; }; + 55DB5CB62B590A6D00B3BD75 /* cost.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BC92B590A6C00B3BD75 /* cost.c */; }; + 55DB5CB72B590A6D00B3BD75 /* dec_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCA2B590A6C00B3BD75 /* dec_mips32.c */; }; + 55DB5CB82B590A6D00B3BD75 /* cost_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCB2B590A6C00B3BD75 /* cost_mips_dsp_r2.c */; }; + 55DB5CB92B590A6D00B3BD75 /* alpha_processing_sse2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCC2B590A6C00B3BD75 /* alpha_processing_sse2.c */; }; + 55DB5CBA2B590A6D00B3BD75 /* dec_clip_tables.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCD2B590A6C00B3BD75 /* dec_clip_tables.c */; }; + 55DB5CBB2B590A6D00B3BD75 /* lossless_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCE2B590A6C00B3BD75 /* lossless_msa.c */; }; + 55DB5CBC2B590A6D00B3BD75 /* enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BCF2B590A6C00B3BD75 /* enc.c */; }; + 55DB5CBD2B590A6D00B3BD75 /* common_sse2.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BD02B590A6C00B3BD75 /* common_sse2.h */; }; + 55DB5CBE2B590A6D00B3BD75 /* lossless_enc_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BD12B590A6C00B3BD75 /* lossless_enc_mips32.c */; }; + 55DB5CBF2B590A6D00B3BD75 /* common_sse41.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5BD22B590A6C00B3BD75 /* common_sse41.h */; }; + 55DB5CC02B590A6D00B3BD75 /* yuv_mips32.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BD32B590A6C00B3BD75 /* yuv_mips32.c */; }; + 55DB5CC12B590A6D00B3BD75 /* upsampling_mips_dsp_r2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BD42B590A6C00B3BD75 /* upsampling_mips_dsp_r2.c */; }; + 55DB5CC22B590A6D00B3BD75 /* dec_msa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5BD52B590A6C00B3BD75 /* dec_msa.c */; }; + 55DB5CCB2B590AE200B3BD75 /* libwebp-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55DB5A7B2B590A2700B3BD75 /* libwebp-pcsx2.a */; }; + 55DB5D462B590FF300B3BD75 /* cpuinfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5CE62B590FF200B3BD75 /* cpuinfo.h */; }; + 55DB5D472B590FF300B3BD75 /* cpuinfo-mock.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5CE72B590FF200B3BD75 /* cpuinfo-mock.h */; }; + 55DB5D482B590FF300B3BD75 /* clog.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5CF02B590FF200B3BD75 /* clog.h */; }; + 55DB5D492B590FF300B3BD75 /* clog.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CF42B590FF200B3BD75 /* clog.c */; }; + 55DB5D4A2B590FF300B3BD75 /* log.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CF72B590FF200B3BD75 /* log.c */; }; + 55DB5D4B2B590FF300B3BD75 /* api.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CF82B590FF200B3BD75 /* api.c */; }; + 55DB5D4C2B590FF300B3BD75 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CF92B590FF200B3BD75 /* init.c */; }; + 55DB5D4E2B590FF300B3BD75 /* deterministic.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CFE2B590FF200B3BD75 /* deterministic.c */; }; + 55DB5D4F2B590FF300B3BD75 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5CFF2B590FF200B3BD75 /* init.c */; }; + 55DB5D502B590FF300B3BD75 /* descriptor.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D002B590FF200B3BD75 /* descriptor.c */; }; + 55DB5D512B590FF300B3BD75 /* cpuid.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D012B590FF200B3BD75 /* cpuid.h */; }; + 55DB5D522B590FF300B3BD75 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D022B590FF200B3BD75 /* init.c */; }; + 55DB5D532B590FF300B3BD75 /* vendor.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D032B590FF200B3BD75 /* vendor.c */; }; + 55DB5D542B590FF300B3BD75 /* info.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D042B590FF200B3BD75 /* info.c */; }; + 55DB5D552B590FF300B3BD75 /* topology.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D052B590FF200B3BD75 /* topology.c */; }; + 55DB5D572B590FF300B3BD75 /* uarch.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D072B590FF200B3BD75 /* uarch.c */; }; + 55DB5D582B590FF300B3BD75 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D082B590FF200B3BD75 /* api.h */; }; + 55DB5D5C2B590FF300B3BD75 /* name.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D0D2B590FF200B3BD75 /* name.c */; }; + 55DB5D5D2B590FF300B3BD75 /* isa.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D0E2B590FF200B3BD75 /* isa.c */; }; + 55DB5D5E2B590FF300B3BD75 /* init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D102B590FF300B3BD75 /* init.c */; }; + 55DB5D672B590FF300B3BD75 /* topology.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D1C2B590FF300B3BD75 /* topology.c */; }; + 55DB5D682B590FF300B3BD75 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D1D2B590FF300B3BD75 /* api.h */; }; + 55DB5D692B590FF300B3BD75 /* cache.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D1E2B590FF300B3BD75 /* cache.c */; }; + 55DB5D6A2B590FF300B3BD75 /* midr.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D202B590FF300B3BD75 /* midr.h */; }; + 55DB5D6C2B590FF300B3BD75 /* api.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D222B590FF300B3BD75 /* api.h */; }; + 55DB5D852B590FF300B3BD75 /* utils.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D422B590FF300B3BD75 /* utils.h */; }; + 55DB5D862B590FF300B3BD75 /* internal-api.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D432B590FF300B3BD75 /* internal-api.h */; }; + 55DB5D872B590FF300B3BD75 /* common.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D442B590FF300B3BD75 /* common.h */; }; + 55DB5D882B590FF300B3BD75 /* log.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5D452B590FF300B3BD75 /* log.h */; }; + 55DB5DB42B59144400B3BD75 /* iR5900.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5DB22B59144300B3BD75 /* iR5900.cpp */; }; + 55DB5DB52B59144400B3BD75 /* iCore.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5DB32B59144300B3BD75 /* iCore.cpp */; }; + 55DB5DB72B59149000B3BD75 /* GSJobQueue.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5DB62B59149000B3BD75 /* GSJobQueue.h */; }; + 55DB5DBC2B59163F00B3BD75 /* IsoHasher.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5DB82B59163E00B3BD75 /* IsoHasher.cpp */; }; + 55DB5DBD2B59163F00B3BD75 /* IsoReader.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5DBA2B59163E00B3BD75 /* IsoReader.cpp */; }; + 55DB5DC02B59172500B3BD75 /* libcpuinfo-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55DB5CDA2B590FBB00B3BD75 /* libcpuinfo-pcsx2.a */; }; + 55DB5F022B59174900B3BD75 /* xxhash.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E442B59174900B3BD75 /* xxhash.h */; }; + 55DB5F032B59174900B3BD75 /* lz4hc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5E462B59174900B3BD75 /* lz4hc.c */; }; + 55DB5F052B59174900B3BD75 /* lz4frame.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5E482B59174900B3BD75 /* lz4frame.c */; }; + 55DB5F062B59174900B3BD75 /* lz4.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E492B59174900B3BD75 /* lz4.h */; }; + 55DB5F072B59174900B3BD75 /* lz4file.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E4A2B59174900B3BD75 /* lz4file.h */; }; + 55DB5F082B59174900B3BD75 /* xxhash.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5E4C2B59174900B3BD75 /* xxhash.c */; }; + 55DB5F092B59174900B3BD75 /* lz4frame_static.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E4E2B59174900B3BD75 /* lz4frame_static.h */; }; + 55DB5F0A2B59174900B3BD75 /* lz4hc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E4F2B59174900B3BD75 /* lz4hc.h */; }; + 55DB5F0C2B59174900B3BD75 /* lz4.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5E562B59174900B3BD75 /* lz4.c */; }; + 55DB5F0D2B59174900B3BD75 /* lz4frame.h in Headers */ = {isa = PBXBuildFile; fileRef = 55DB5E582B59174900B3BD75 /* lz4frame.h */; }; + 55DB5F0E2B59174900B3BD75 /* lz4file.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5E592B59174900B3BD75 /* lz4file.c */; }; + 55DB5F242B5917BE00B3BD75 /* liblz4-pcsx2.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55DB5DC52B59173400B3BD75 /* liblz4-pcsx2.a */; }; 55DF028927D3273400B339A6 /* iR5900Analysis.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DF028727D3273400B339A6 /* iR5900Analysis.cpp */; }; 55EBA8AB295CDC8D0035A1FD /* SaveState.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FDFA263D49BC000219EC /* SaveState.cpp */; }; 55EBA8B2295CDDAC0035A1FD /* WavFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517E8F4263D4831000219EC /* WavFile.cpp */; }; @@ -675,8 +851,6 @@ DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B527C491020006ABDC /* OESndOut.cpp */; }; DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */; }; DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BC27C491160006ABDC /* ContextAGL.mm */; }; - DD0302C327C5423F0006ABDC /* PAD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639827AB3261008CD5D2 /* PAD.cpp */; }; - DD0302C927C549730006ABDC /* StateManagement.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5580639727AB3261008CD5D2 /* StateManagement.cpp */; }; DD03FFD827B721F20006ABDC /* GSTextureMTL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB927B70F0C0006ABDC /* GSTextureMTL.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD5A404E298CA9B700EFBE7A /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCD0263D49BC000219EC /* SndOut.cpp */; }; DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; @@ -789,6 +963,27 @@ remoteGlobalIDString = 55B1EFF1295BAA4700DB297F; remoteInfo = jpgd; }; + 55DB5CCC2B590AEC00B3BD75 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5517E8AC263D4213000219EC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55DB5A7A2B590A2700B3BD75; + remoteInfo = "webp-pcsx2"; + }; + 55DB5DBE2B59171C00B3BD75 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5517E8AC263D4213000219EC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55DB5CD92B590FBB00B3BD75; + remoteInfo = "cpuinfo-pcsx2"; + }; + 55DB5F222B5917AE00B3BD75 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 5517E8AC263D4213000219EC /* Project object */; + proxyType = 1; + remoteGlobalIDString = 55DB5DC42B59173400B3BD75; + remoteInfo = "lz4-pcsx2"; + }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -888,173 +1083,22 @@ 5517E8F1263D4831000219EC /* SoundTouch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SoundTouch.cpp; sourceTree = ""; }; 5517E8F3263D4831000219EC /* WavFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WavFile.h; sourceTree = ""; }; 5517E8F4263D4831000219EC /* WavFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WavFile.cpp; sourceTree = ""; }; - 5517E931263D4831000219EC /* jpeglib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jpeglib.h; sourceTree = ""; }; - 5517E932263D4831000219EC /* jddctmgr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jddctmgr.c; sourceTree = ""; }; - 5517E933263D4831000219EC /* jerror.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jerror.h; sourceTree = ""; }; - 5517E934263D4831000219EC /* jidctfst.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jidctfst.c; sourceTree = ""; }; - 5517E935263D4831000219EC /* libjpeg.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libjpeg.vcxproj.filters; sourceTree = ""; }; - 5517E936263D4831000219EC /* jdatasrc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdatasrc.c; sourceTree = ""; }; - 5517E937263D4831000219EC /* jdhuff.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdhuff.c; sourceTree = ""; }; - 5517E938263D4831000219EC /* jdinput.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdinput.c; sourceTree = ""; }; - 5517E939263D4831000219EC /* jdtrans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdtrans.c; sourceTree = ""; }; - 5517E93A263D4831000219EC /* jcmaster.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcmaster.c; sourceTree = ""; }; - 5517E93B263D4831000219EC /* jdapistd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdapistd.c; sourceTree = ""; }; - 5517E93C263D4831000219EC /* jcapimin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcapimin.c; sourceTree = ""; }; - 5517E93D263D4831000219EC /* jdmarker.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdmarker.c; sourceTree = ""; }; - 5517E93E263D4831000219EC /* jdmerge.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdmerge.c; sourceTree = ""; }; - 5517E93F263D4831000219EC /* jdcolor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdcolor.c; sourceTree = ""; }; - 5517E940263D4831000219EC /* jfdctflt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jfdctflt.c; sourceTree = ""; }; - 5517E941263D4831000219EC /* jcparam.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcparam.c; sourceTree = ""; }; - 5517E942263D4831000219EC /* jccoefct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jccoefct.c; sourceTree = ""; }; - 5517E943263D4831000219EC /* jfdctint.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jfdctint.c; sourceTree = ""; }; - 5517E944263D4831000219EC /* jcsample.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcsample.c; sourceTree = ""; }; - 5517E945263D4831000219EC /* jcmainct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcmainct.c; sourceTree = ""; }; - 5517E946263D4831000219EC /* jchuff.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jchuff.c; sourceTree = ""; }; - 5517E947263D4831000219EC /* jmemnobs.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jmemnobs.c; sourceTree = ""; }; - 5517E948263D4831000219EC /* jcarith.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcarith.c; sourceTree = ""; }; - 5517E949263D4831000219EC /* jmemmac.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jmemmac.c; sourceTree = ""; }; - 5517E94A263D4831000219EC /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; - 5517E94B263D4831000219EC /* jcprepct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcprepct.c; sourceTree = ""; }; - 5517E94C263D4831000219EC /* jmemsys.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jmemsys.h; sourceTree = ""; }; - 5517E94D263D4831000219EC /* change.log */ = {isa = PBXFileReference; lastKnownFileType = text; path = change.log; sourceTree = ""; }; - 5517E94E263D4831000219EC /* jccolor.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jccolor.c; sourceTree = ""; }; - 5517E94F263D4831000219EC /* jmemansi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jmemansi.c; sourceTree = ""; }; - 5517E950263D4831000219EC /* jerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jerror.c; sourceTree = ""; }; - 5517E951263D4831000219EC /* jquant1.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jquant1.c; sourceTree = ""; }; - 5517E952263D4831000219EC /* jcdctmgr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcdctmgr.c; sourceTree = ""; }; - 5517E953263D4831000219EC /* jutils.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jutils.c; sourceTree = ""; }; - 5517E954263D4831000219EC /* jconfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jconfig.h; sourceTree = ""; }; - 5517E955263D4831000219EC /* libjpeg.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libjpeg.vcxproj; sourceTree = ""; }; - 5517E956263D4831000219EC /* jcapistd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcapistd.c; sourceTree = ""; }; - 5517E957263D4831000219EC /* jmorecfg.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jmorecfg.h; sourceTree = ""; }; - 5517E958263D4831000219EC /* jfdctfst.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jfdctfst.c; sourceTree = ""; }; - 5517E959263D4831000219EC /* jaricom.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jaricom.c; sourceTree = ""; }; - 5517E95A263D4831000219EC /* jdarith.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdarith.c; sourceTree = ""; }; - 5517E95B263D4831000219EC /* jdmaster.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdmaster.c; sourceTree = ""; }; - 5517E95C263D4831000219EC /* jdct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jdct.h; sourceTree = ""; }; - 5517E95D263D4831000219EC /* jversion.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jversion.h; sourceTree = ""; }; - 5517E95E263D4831000219EC /* jinclude.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jinclude.h; sourceTree = ""; }; - 5517E95F263D4831000219EC /* jcomapi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcomapi.c; sourceTree = ""; }; - 5517E960263D4831000219EC /* jmemname.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jmemname.c; sourceTree = ""; }; - 5517E961263D4831000219EC /* jdatadst.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdatadst.c; sourceTree = ""; }; - 5517E962263D4831000219EC /* jmemmgr.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jmemmgr.c; sourceTree = ""; }; - 5517E963263D4831000219EC /* jcmarker.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcmarker.c; sourceTree = ""; }; - 5517E964263D4831000219EC /* jquant2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jquant2.c; sourceTree = ""; }; - 5517E965263D4831000219EC /* jidctint.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jidctint.c; sourceTree = ""; }; - 5517E966263D4831000219EC /* jdapimin.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdapimin.c; sourceTree = ""; }; - 5517E967263D4831000219EC /* jctrans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jctrans.c; sourceTree = ""; }; - 5517E968263D4831000219EC /* jidctflt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jidctflt.c; sourceTree = ""; }; - 5517E969263D4831000219EC /* jcinit.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jcinit.c; sourceTree = ""; }; - 5517E96A263D4831000219EC /* jdmainct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdmainct.c; sourceTree = ""; }; - 5517E96B263D4831000219EC /* jdcoefct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdcoefct.c; sourceTree = ""; }; - 5517E96C263D4831000219EC /* jdsample.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdsample.c; sourceTree = ""; }; - 5517E96D263D4831000219EC /* filelist.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = filelist.txt; sourceTree = ""; }; - 5517E96E263D4831000219EC /* jpegint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jpegint.h; sourceTree = ""; }; - 5517E96F263D4831000219EC /* jdpostct.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = jdpostct.c; sourceTree = ""; }; 5517E971263D4831000219EC /* pnginfo.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pnginfo.h; sourceTree = ""; }; - 5517E972263D4831000219EC /* pngtest.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngtest.c; sourceTree = ""; }; 5517E974263D4831000219EC /* pngrio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngrio.c; sourceTree = ""; }; 5517E975263D4831000219EC /* pngerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngerror.c; sourceTree = ""; }; 5517E978263D4831000219EC /* pngwio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngwio.c; sourceTree = ""; }; 5517E979263D4831000219EC /* pngstruct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pngstruct.h; sourceTree = ""; }; 5517E97C263D4831000219EC /* pngtrans.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngtrans.c; sourceTree = ""; }; 5517E97E263D4831000219EC /* pngpriv.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pngpriv.h; sourceTree = ""; }; - 5517E984263D4831000219EC /* pngstest.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pngstest.vcxproj; sourceTree = ""; }; - 5517E986263D4831000219EC /* libpng.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libpng.vcxproj; sourceTree = ""; }; - 5517E988263D4831000219EC /* pngunknown.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pngunknown.vcxproj; sourceTree = ""; }; - 5517E98A263D4831000219EC /* zlib.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = zlib.vcxproj; sourceTree = ""; }; - 5517E98B263D4831000219EC /* zlib.props */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = zlib.props; sourceTree = ""; }; - 5517E98C263D4831000219EC /* WARNING */ = {isa = PBXFileReference; lastKnownFileType = text; path = WARNING; sourceTree = ""; }; - 5517E98E263D4831000219EC /* pngvalid.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pngvalid.vcxproj; sourceTree = ""; }; - 5517E990263D4831000219EC /* pnglibconf.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pnglibconf.vcxproj; sourceTree = ""; }; - 5517E991263D4831000219EC /* vstudio.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = vstudio.sln; sourceTree = ""; }; - 5517E992263D4831000219EC /* readme.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - 5517E994263D4831000219EC /* pngtest.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pngtest.vcxproj; sourceTree = ""; }; - 5517E996263D4831000219EC /* PRJ0041.mak */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = PRJ0041.mak; sourceTree = ""; }; - 5517E997263D4831000219EC /* libpng.sln */ = {isa = PBXFileReference; lastKnownFileType = text; path = libpng.sln; sourceTree = ""; }; - 5517E998263D4831000219EC /* libpng.vcproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libpng.vcproj; sourceTree = ""; }; - 5517E999263D4831000219EC /* README_zlib.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README_zlib.txt; sourceTree = ""; }; - 5517E99A263D4831000219EC /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - 5517E99B263D4831000219EC /* pngtest.vcproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = pngtest.vcproj; sourceTree = ""; }; - 5517E99C263D4831000219EC /* zlib.vcproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = zlib.vcproj; sourceTree = ""; }; - 5517E99E263D4831000219EC /* pngstest.tgt */ = {isa = PBXFileReference; lastKnownFileType = text; path = pngstest.tgt; sourceTree = ""; }; - 5517E99F263D4831000219EC /* pngvalid.tgt */ = {isa = PBXFileReference; lastKnownFileType = text; path = pngvalid.tgt; sourceTree = ""; }; - 5517E9A0263D4831000219EC /* libpng.wpj */ = {isa = PBXFileReference; lastKnownFileType = text; path = libpng.wpj; sourceTree = ""; }; - 5517E9A1263D4831000219EC /* pngtest.tgt */ = {isa = PBXFileReference; lastKnownFileType = text; path = pngtest.tgt; sourceTree = ""; }; - 5517E9A2263D4831000219EC /* libpng.tgt */ = {isa = PBXFileReference; lastKnownFileType = text; path = libpng.tgt; sourceTree = ""; }; - 5517E9A3263D4831000219EC /* pngconfig.mak */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = pngconfig.mak; sourceTree = ""; }; 5517E9A6263D4831000219EC /* pngwrite.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngwrite.c; sourceTree = ""; }; 5517E9A7263D4831000219EC /* png.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = png.h; sourceTree = ""; }; - 5517E9A8263D4831000219EC /* README */ = {isa = PBXFileReference; lastKnownFileType = text; path = README; sourceTree = ""; }; 5517E9A9263D4831000219EC /* pngwutil.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngwutil.c; sourceTree = ""; }; - 5517E9AA263D4831000219EC /* TODO */ = {isa = PBXFileReference; lastKnownFileType = text; path = TODO; sourceTree = ""; }; 5517E9AB263D4831000219EC /* pngwtran.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngwtran.c; sourceTree = ""; }; 5517E9AD263D4831000219EC /* pnglibconf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pnglibconf.h; sourceTree = ""; }; 5517E9AE263D4831000219EC /* pngconf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pngconf.h; sourceTree = ""; }; 5517E9AF263D4831000219EC /* pngpread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngpread.c; sourceTree = ""; }; 5517E9B0263D4831000219EC /* pngdebug.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = pngdebug.h; sourceTree = ""; }; 5517E9B1263D4831000219EC /* pngread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngread.c; sourceTree = ""; }; - 5517E9B3263D4831000219EC /* makefile.bor */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.bor; sourceTree = ""; }; - 5517E9B4263D4831000219EC /* makefile.msc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.msc; sourceTree = ""; }; - 5517E9B5263D4831000219EC /* makefile.dec */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.dec; sourceTree = ""; }; - 5517E9B6263D4831000219EC /* symbols.def */ = {isa = PBXFileReference; lastKnownFileType = text; path = symbols.def; sourceTree = ""; }; - 5517E9B7263D4831000219EC /* smakefile.ppc */ = {isa = PBXFileReference; lastKnownFileType = text; path = smakefile.ppc; sourceTree = ""; }; - 5517E9B8263D4831000219EC /* makefile.linux */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.linux; sourceTree = ""; }; - 5517E9B9263D4831000219EC /* pnglibconf.mak */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.make; path = pnglibconf.mak; sourceTree = ""; }; - 5517E9BA263D4831000219EC /* makefile.tc3 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.tc3; sourceTree = ""; }; - 5517E9BB263D4832000219EC /* libpng-config-head.in */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "libpng-config-head.in"; sourceTree = ""; }; - 5517E9BC263D4832000219EC /* makefile.solaris */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.solaris; sourceTree = ""; }; - 5517E9BD263D4832000219EC /* makefile.msys */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.msys; sourceTree = ""; }; - 5517E9BE263D4832000219EC /* makefile.hpgcc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.hpgcc; sourceTree = ""; }; - 5517E9BF263D4832000219EC /* libpng.pc.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = libpng.pc.in; sourceTree = ""; }; - 5517E9C0263D4832000219EC /* makefile.beos */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.beos; sourceTree = ""; }; - 5517E9C1263D4832000219EC /* makefile.amiga */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.amiga; sourceTree = ""; }; - 5517E9C2263D4832000219EC /* makefile.darwin */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.darwin; sourceTree = ""; }; - 5517E9C3263D4832000219EC /* makefile.solaris-x86 */ = {isa = PBXFileReference; lastKnownFileType = text; path = "makefile.solaris-x86"; sourceTree = ""; }; - 5517E9C4263D4832000219EC /* pngwin.rc */ = {isa = PBXFileReference; lastKnownFileType = text; path = pngwin.rc; sourceTree = ""; }; - 5517E9C5263D4832000219EC /* prefix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = prefix.c; sourceTree = ""; }; - 5517E9C6263D4832000219EC /* makefile.64sunu */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.64sunu; sourceTree = ""; }; - 5517E9C7263D4832000219EC /* makefile.hpux */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.hpux; sourceTree = ""; }; - 5517E9C8263D4832000219EC /* makefile.cegcc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.cegcc; sourceTree = ""; }; - 5517E9C9263D4832000219EC /* def.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = def.c; sourceTree = ""; }; - 5517E9CA263D4832000219EC /* dfn.awk */ = {isa = PBXFileReference; lastKnownFileType = text; path = dfn.awk; sourceTree = ""; }; - 5517E9CB263D4832000219EC /* makefile.openbsd */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.openbsd; sourceTree = ""; }; - 5517E9CC263D4832000219EC /* makefile.hp64 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.hp64; sourceTree = ""; }; - 5517E9CD263D4832000219EC /* makefile.aix */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.aix; sourceTree = ""; }; - 5517E9CE263D4832000219EC /* makefile.vcwin32 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.vcwin32; sourceTree = ""; }; - 5517E9CF263D4832000219EC /* macro.lst */ = {isa = PBXFileReference; lastKnownFileType = text; path = macro.lst; sourceTree = ""; }; - 5517E9D0263D4832000219EC /* makefile.ibmc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.ibmc; sourceTree = ""; }; - 5517E9D1263D4832000219EC /* makefile.so9 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.so9; sourceTree = ""; }; - 5517E9D2263D4832000219EC /* makefile.ne12bsd */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.ne12bsd; sourceTree = ""; }; - 5517E9D3263D4832000219EC /* SCOPTIONS.ppc */ = {isa = PBXFileReference; lastKnownFileType = text; path = SCOPTIONS.ppc; sourceTree = ""; }; - 5517E9D4263D4832000219EC /* vers.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = vers.c; sourceTree = ""; }; - 5517E9D5263D4832000219EC /* makefile.bc32 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.bc32; sourceTree = ""; }; - 5517E9D6263D4832000219EC /* makefile.freebsd */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.freebsd; sourceTree = ""; }; - 5517E9D7263D4832000219EC /* pnglibconf.dfa */ = {isa = PBXFileReference; lastKnownFileType = text; path = pnglibconf.dfa; sourceTree = ""; }; - 5517E9D8263D4832000219EC /* makefile.dj2 */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.dj2; sourceTree = ""; }; - 5517E9D9263D4832000219EC /* makefile.intel */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.intel; sourceTree = ""; }; - 5517E9DA263D4832000219EC /* options.awk */ = {isa = PBXFileReference; lastKnownFileType = text; path = options.awk; sourceTree = ""; }; - 5517E9DB263D4832000219EC /* makefile.sgi */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.sgi; sourceTree = ""; }; - 5517E9DC263D4832000219EC /* makefile.mips */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.mips; sourceTree = ""; }; - 5517E9DD263D4832000219EC /* sym.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = sym.c; sourceTree = ""; }; - 5517E9DE263D4832000219EC /* makefile.netbsd */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.netbsd; sourceTree = ""; }; - 5517E9DF263D4832000219EC /* libpng-config-body.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "libpng-config-body.in"; sourceTree = ""; }; - 5517E9E0263D4832000219EC /* makefile.knr */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.knr; sourceTree = ""; }; - 5517E9E1263D4832000219EC /* makefile.sggcc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.sggcc; sourceTree = ""; }; - 5517E9E2263D4832000219EC /* makefile.sunos */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.sunos; sourceTree = ""; }; - 5517E9E3263D4832000219EC /* makefile.acorn */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.acorn; sourceTree = ""; }; - 5517E9E4263D4832000219EC /* symbols.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = symbols.c; sourceTree = ""; }; - 5517E9E5263D4832000219EC /* README.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = README.txt; sourceTree = ""; }; - 5517E9E6263D4832000219EC /* makefile.32sunu */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.32sunu; sourceTree = ""; }; - 5517E9E7263D4832000219EC /* descrip.mms */ = {isa = PBXFileReference; lastKnownFileType = text; path = descrip.mms; sourceTree = ""; }; - 5517E9E8263D4832000219EC /* checksym.awk */ = {isa = PBXFileReference; lastKnownFileType = text; path = checksym.awk; sourceTree = ""; }; - 5517E9E9263D4832000219EC /* makefile.std */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.std; sourceTree = ""; }; - 5517E9EA263D4832000219EC /* makefile.atari */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.atari; sourceTree = ""; }; - 5517E9EB263D4832000219EC /* makefile.gcc */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.gcc; sourceTree = ""; }; - 5517E9EC263D4832000219EC /* intprefix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = intprefix.c; sourceTree = ""; }; - 5517E9ED263D4832000219EC /* makefile.sco */ = {isa = PBXFileReference; lastKnownFileType = text; path = makefile.sco; sourceTree = ""; }; - 5517E9EE263D4832000219EC /* makevms.com */ = {isa = PBXFileReference; lastKnownFileType = text; path = makevms.com; sourceTree = ""; }; - 5517E9F1263D4832000219EC /* pngtest.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = pngtest.png; sourceTree = ""; }; 5517E9F2263D4832000219EC /* pngmem.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngmem.c; sourceTree = ""; }; 5517E9F3263D4832000219EC /* pngget.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = pngget.c; sourceTree = ""; }; 5517E9F4263D4832000219EC /* png.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = png.c; sourceTree = ""; }; @@ -1065,54 +1109,14 @@ 5517ECA0263D4834000219EC /* format-inl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "format-inl.h"; sourceTree = ""; }; 5517ECA1263D4834000219EC /* ranges.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ranges.h; sourceTree = ""; }; 5517ECA2263D4834000219EC /* core.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = core.h; sourceTree = ""; }; - 5517ECA3263D4834000219EC /* locale.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = locale.h; sourceTree = ""; }; 5517ECA4263D4834000219EC /* chrono.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chrono.h; sourceTree = ""; }; 5517ECA5263D4834000219EC /* os.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = os.h; sourceTree = ""; }; 5517ECA6263D4834000219EC /* color.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = color.h; sourceTree = ""; }; 5517ECA7263D4834000219EC /* printf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = printf.h; sourceTree = ""; }; 5517ECA8263D4834000219EC /* compile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compile.h; sourceTree = ""; }; - 5517ECA9263D4834000219EC /* posix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = posix.h; sourceTree = ""; }; 5517ECAA263D4834000219EC /* format.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = format.h; sourceTree = ""; }; 5517ED33263D4835000219EC /* os.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = os.cc; sourceTree = ""; }; 5517ED34263D4835000219EC /* format.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = format.cc; sourceTree = ""; }; - 5517EEE8263D4836000219EC /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 5517EEEB263D4836000219EC /* flac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flac.h; sourceTree = ""; }; - 5517EEEC263D4836000219EC /* chdconfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chdconfig.h; sourceTree = ""; }; - 5517EEED263D4836000219EC /* bitstream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bitstream.h; sourceTree = ""; }; - 5517EEEE263D4836000219EC /* cdrom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cdrom.h; sourceTree = ""; }; - 5517EEEF263D4836000219EC /* chd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chd.h; sourceTree = ""; }; - 5517EEF0263D4836000219EC /* huffman.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = ""; }; - 5517EEF1263D4836000219EC /* coretypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = coretypes.h; sourceTree = ""; }; - 5517EEF3263D4836000219EC /* dr_flac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dr_flac.h; sourceTree = ""; }; - 5517EF31263D4837000219EC /* LzHash.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzHash.h; sourceTree = ""; }; - 5517EF32263D4837000219EC /* 7zTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = 7zTypes.h; sourceTree = ""; }; - 5517EF33263D4837000219EC /* Compiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Compiler.h; sourceTree = ""; }; - 5517EF34263D4837000219EC /* Precomp.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Precomp.h; sourceTree = ""; }; - 5517EF35263D4837000219EC /* CpuArch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CpuArch.h; sourceTree = ""; }; - 5517EF36263D4837000219EC /* Delta.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Delta.h; sourceTree = ""; }; - 5517EF37263D4837000219EC /* LzmaLib.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaLib.h; sourceTree = ""; }; - 5517EF38263D4837000219EC /* Lzma86.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Lzma86.h; sourceTree = ""; }; - 5517EF39263D4837000219EC /* LzmaEnc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaEnc.h; sourceTree = ""; }; - 5517EF3A263D4837000219EC /* LzFind.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzFind.h; sourceTree = ""; }; - 5517EF3B263D4837000219EC /* Bra.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Bra.h; sourceTree = ""; }; - 5517EF3C263D4837000219EC /* Sort.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sort.h; sourceTree = ""; }; - 5517EF3D263D4837000219EC /* LzmaDec.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LzmaDec.h; sourceTree = ""; }; - 5517EF3E263D4837000219EC /* Alloc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Alloc.h; sourceTree = ""; }; - 5517EF43263D4837000219EC /* LzmaEnc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzmaEnc.c; sourceTree = ""; }; - 5517EF44263D4837000219EC /* LzFind.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzFind.c; sourceTree = ""; }; - 5517EF45263D4837000219EC /* Sort.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Sort.c; sourceTree = ""; }; - 5517EF46263D4837000219EC /* Bra86.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Bra86.c; sourceTree = ""; }; - 5517EF47263D4837000219EC /* Alloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Alloc.c; sourceTree = ""; }; - 5517EF48263D4837000219EC /* LzmaDec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = LzmaDec.c; sourceTree = ""; }; - 5517EF49263D4837000219EC /* BraIA64.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = BraIA64.c; sourceTree = ""; }; - 5517EF4A263D4837000219EC /* Lzma86Dec.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Lzma86Dec.c; sourceTree = ""; }; - 5517EF4B263D4837000219EC /* Delta.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = Delta.c; sourceTree = ""; }; - 5517EF4C263D4837000219EC /* CpuArch.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = CpuArch.c; sourceTree = ""; }; - 5517EF4F263D4837000219EC /* libchdr_chd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_chd.c; sourceTree = ""; }; - 5517EF50263D4837000219EC /* libchdr_bitstream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_bitstream.c; sourceTree = ""; }; - 5517EF51263D4837000219EC /* libchdr_huffman.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_huffman.c; sourceTree = ""; }; - 5517EF52263D4837000219EC /* libchdr_flac.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_flac.c; sourceTree = ""; }; - 5517EF54263D4837000219EC /* libchdr_cdrom.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_cdrom.c; sourceTree = ""; }; 5517EF83263D4837000219EC /* config.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 5517EF86263D4837000219EC /* manconv.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = manconv.sh; sourceTree = ""; }; 5517EF87263D4837000219EC /* version.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = version.sh; sourceTree = ""; }; @@ -1310,7 +1314,6 @@ 5517FA08263D48AD000219EC /* x86types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = x86types.h; sourceTree = ""; }; 5517FA09263D48AD000219EC /* legacy_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = legacy_internal.h; sourceTree = ""; }; 5517FA0A263D48AD000219EC /* instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = instructions.h; sourceTree = ""; }; - 5517FA0B263D48AD000219EC /* tools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tools.h; sourceTree = ""; }; 5517FA0D263D48AD000219EC /* simd_arithmetic.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = simd_arithmetic.h; sourceTree = ""; }; 5517FA0E263D48AD000219EC /* simd_shufflepack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = simd_shufflepack.h; sourceTree = ""; }; 5517FA0F263D48AD000219EC /* simd_templated_helpers.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = simd_templated_helpers.h; sourceTree = ""; }; @@ -1328,38 +1331,26 @@ 5517FA1B263D48AD000219EC /* movs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = movs.h; sourceTree = ""; }; 5517FA1C263D48AD000219EC /* group1.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = group1.h; sourceTree = ""; }; 5517FA1D263D48AD000219EC /* simd_moremovs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = simd_moremovs.h; sourceTree = ""; }; - 5517FA1E263D48AD000219EC /* x86_intrin.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = x86_intrin.h; sourceTree = ""; }; 5517FA1F263D48AD000219EC /* legacy_types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = legacy_types.h; sourceTree = ""; }; 5517FA20263D48AD000219EC /* legacy_instructions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = legacy_instructions.h; sourceTree = ""; }; 5517FA26263D48AD000219EC /* Console.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Console.h; sourceTree = ""; }; - 5517FA28263D48AD000219EC /* MemsetFast.inl */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = MemsetFast.inl; sourceTree = ""; }; 5517FA30263D48AD000219EC /* Assertions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Assertions.h; sourceTree = ""; }; 5517FA32263D48AD000219EC /* Path.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Path.h; sourceTree = ""; }; - 5517FA33263D48AD000219EC /* MemcpyFast.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MemcpyFast.h; sourceTree = ""; }; - 5517FA35263D48AD000219EC /* General.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = General.h; sourceTree = ""; }; 5517FA36263D48AD000219EC /* Threading.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Threading.h; sourceTree = ""; }; - 5517FA37263D48AD000219EC /* SafeArray.inl */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = SafeArray.inl; sourceTree = ""; }; 5517FA38263D48AD000219EC /* boost_spsc_queue.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = boost_spsc_queue.hpp; sourceTree = ""; }; - 5517FA3A263D48AD000219EC /* Exceptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Exceptions.h; sourceTree = ""; }; - 5517FA3C263D48AD000219EC /* SafeArray.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SafeArray.h; sourceTree = ""; }; 5517FA3F263D48AD000219EC /* TraceLog.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TraceLog.h; sourceTree = ""; }; 5517FA48263D48AD000219EC /* RedtapeWindows.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RedtapeWindows.h; sourceTree = ""; }; 5517FA4B263D48AD000219EC /* Perf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Perf.h; sourceTree = ""; }; - 5517FA4E263D48AD000219EC /* MathUtils.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MathUtils.h; sourceTree = ""; }; 5517FA53263D48AD000219EC /* Pcsx2Types.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Pcsx2Types.h; sourceTree = ""; }; 5517FA6B263D48AE000219EC /* groups.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = groups.cpp; sourceTree = ""; }; 5517FA6D263D48AE000219EC /* legacy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = legacy.cpp; sourceTree = ""; }; 5517FA6E263D48AE000219EC /* simd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = simd.cpp; sourceTree = ""; }; 5517FA6F263D48AE000219EC /* legacy_sse.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = legacy_sse.cpp; sourceTree = ""; }; - 5517FA71263D48AE000219EC /* cpudetect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = cpudetect.cpp; sourceTree = ""; }; 5517FA72263D48AE000219EC /* movs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = movs.cpp; sourceTree = ""; }; - 5517FA73263D48AE000219EC /* LnxCpuDetect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LnxCpuDetect.cpp; sourceTree = ""; }; 5517FA74263D48AE000219EC /* fpu.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = fpu.cpp; sourceTree = ""; }; 5517FA76263D48AE000219EC /* bmi.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = bmi.cpp; sourceTree = ""; }; - 5517FA77263D48AE000219EC /* cpudetect_internal.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cpudetect_internal.h; sourceTree = ""; }; 5517FA78263D48AE000219EC /* x86emitter.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = x86emitter.cpp; sourceTree = ""; }; 5517FA79263D48AE000219EC /* jmp.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = jmp.cpp; sourceTree = ""; }; - 5517FA7F263D48AE000219EC /* Exceptions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Exceptions.cpp; sourceTree = ""; }; 5517FA85263D48AE000219EC /* Perf.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Perf.cpp; sourceTree = ""; }; 5517FA87263D48AE000219EC /* Console.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Console.cpp; sourceTree = ""; }; 5517FA8B263D48AE000219EC /* PrecompiledHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrecompiledHeader.h; sourceTree = ""; }; @@ -1380,7 +1371,6 @@ 5517FAB3263D49BB000219EC /* Vif_Transfer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Vif_Transfer.cpp; sourceTree = ""; }; 5517FAB5263D49BB000219EC /* IopHw.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IopHw.cpp; sourceTree = ""; }; 5517FAB6263D49BB000219EC /* R5900.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = R5900.h; sourceTree = ""; }; - 5517FAB7263D49BB000219EC /* Sio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Sio.h; sourceTree = ""; }; 5517FAB8263D49BB000219EC /* MultipartFileReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = MultipartFileReader.cpp; sourceTree = ""; }; 5517FAB9263D49BB000219EC /* R5900OpcodeTables.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = R5900OpcodeTables.h; sourceTree = ""; }; 5517FABB263D49BB000219EC /* IopGte.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IopGte.cpp; sourceTree = ""; }; @@ -1477,9 +1467,7 @@ 5517FB62263D49BB000219EC /* Elfheader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Elfheader.cpp; sourceTree = ""; }; 5517FB63263D49BB000219EC /* PrecompiledHeader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PrecompiledHeader.h; sourceTree = ""; }; 5517FB64263D49BB000219EC /* SPR.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SPR.cpp; sourceTree = ""; }; - 5517FB75263D49BB000219EC /* Patch_Memory.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Patch_Memory.cpp; sourceTree = ""; }; 5517FB76263D49BB000219EC /* vtlb.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = vtlb.h; sourceTree = ""; }; - 5517FBAF263D49BC000219EC /* Gamepad.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Gamepad.h; sourceTree = ""; }; 5517FBDA263D49BC000219EC /* Sif.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Sif.cpp; sourceTree = ""; }; 5517FBDB263D49BC000219EC /* MTVU.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MTVU.h; sourceTree = ""; }; 5517FBDC263D49BC000219EC /* Dmac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Dmac.h; sourceTree = ""; }; @@ -1554,15 +1542,6 @@ 5517FCA3263D49BC000219EC /* OutputIsoFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OutputIsoFile.cpp; sourceTree = ""; }; 5517FCA4263D49BC000219EC /* CDVDisoReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CDVDisoReader.cpp; sourceTree = ""; }; 5517FCA8263D49BC000219EC /* CDVDdiscThread.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CDVDdiscThread.cpp; sourceTree = ""; }; - 5517FCAA263D49BC000219EC /* IsoFile.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IsoFile.cpp; sourceTree = ""; }; - 5517FCAB263D49BC000219EC /* IsoFile.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IsoFile.h; sourceTree = ""; }; - 5517FCAC263D49BC000219EC /* IsoFS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IsoFS.h; sourceTree = ""; }; - 5517FCAD263D49BC000219EC /* IsoFSCDVD.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IsoFSCDVD.h; sourceTree = ""; }; - 5517FCAE263D49BC000219EC /* IsoFSCDVD.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IsoFSCDVD.cpp; sourceTree = ""; }; - 5517FCAF263D49BC000219EC /* IsoFS.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IsoFS.cpp; sourceTree = ""; }; - 5517FCB0263D49BC000219EC /* IsoDirectory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IsoDirectory.h; sourceTree = ""; }; - 5517FCB1263D49BC000219EC /* SectorSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SectorSource.h; sourceTree = ""; }; - 5517FCB2263D49BC000219EC /* IsoFileDescriptor.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = IsoFileDescriptor.h; sourceTree = ""; }; 5517FCB3263D49BC000219EC /* zlib_indexed.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zlib_indexed.h; sourceTree = ""; }; 5517FCB4263D49BC000219EC /* ChunksCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ChunksCache.h; sourceTree = ""; }; 5517FCB5263D49BC000219EC /* CsoFileReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = CsoFileReader.cpp; sourceTree = ""; }; @@ -1623,7 +1602,6 @@ 5517FD19263D49BC000219EC /* iR5900Arit.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iR5900Arit.h; sourceTree = ""; }; 5517FD1A263D49BC000219EC /* microVU_Flags.inl */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = microVU_Flags.inl; sourceTree = ""; }; 5517FD1B263D49BC000219EC /* microVU.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = microVU.cpp; sourceTree = ""; }; - 5517FD1C263D49BC000219EC /* ir5900tables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ir5900tables.cpp; sourceTree = ""; }; 5517FD1D263D49BC000219EC /* newVif.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = newVif.h; sourceTree = ""; }; 5517FD1E263D49BC000219EC /* newVif_HashBucket.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = newVif_HashBucket.h; sourceTree = ""; }; 5517FD1F263D49BC000219EC /* iR5900LoadStore.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iR5900LoadStore.h; sourceTree = ""; }; @@ -1651,10 +1629,8 @@ 5517FD36263D49BC000219EC /* iR5900Branch.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900Branch.cpp; sourceTree = ""; }; 5517FD37263D49BC000219EC /* iR5900LoadStore.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900LoadStore.cpp; sourceTree = ""; }; 5517FD38263D49BC000219EC /* iR5900Templates.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900Templates.cpp; sourceTree = ""; }; - 5517FD39263D49BC000219EC /* iCore-32.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "iCore-32.cpp"; sourceTree = ""; }; 5517FD3A263D49BC000219EC /* iR5900Shift.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900Shift.cpp; sourceTree = ""; }; 5517FD3B263D49BC000219EC /* iR5900MultDiv.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900MultDiv.cpp; sourceTree = ""; }; - 5517FD3C263D49BC000219EC /* iR5900-32.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = "iR5900-32.cpp"; sourceTree = ""; }; 5517FD3D263D49BC000219EC /* iR5900AritImm.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900AritImm.cpp; sourceTree = ""; }; 5517FD3E263D49BC000219EC /* recVTLB.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = recVTLB.cpp; sourceTree = ""; }; 5517FD3F263D49BC000219EC /* iR5900Branch.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = iR5900Branch.h; sourceTree = ""; }; @@ -1663,7 +1639,6 @@ 5517FD42263D49BC000219EC /* iR3000Atables.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iR3000Atables.cpp; sourceTree = ""; }; 5517FD43263D49BC000219EC /* iCore.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = iCore.cpp; sourceTree = ""; }; 5517FD45263D49BC000219EC /* microVU_Lower.inl */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.h; path = microVU_Lower.inl; sourceTree = ""; }; - 5517FD4A263D49BC000219EC /* System.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = System.cpp; sourceTree = ""; }; 5517FD4B263D49BC000219EC /* VUmicro.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VUmicro.h; sourceTree = ""; }; 5517FD4C263D49BC000219EC /* IopMem.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = IopMem.cpp; sourceTree = ""; }; 5517FDCE263D49BC000219EC /* ExpressionParser.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ExpressionParser.h; sourceTree = ""; }; @@ -1705,16 +1680,13 @@ 5517FDF2263D49BC000219EC /* Counters.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Counters.cpp; sourceTree = ""; }; 5517FDF3263D49BC000219EC /* Memory.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Memory.h; sourceTree = ""; }; 5517FDF4263D49BC000219EC /* Hw.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Hw.h; sourceTree = ""; }; - 5517FDF5263D49BC000219EC /* Sio.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Sio.cpp; sourceTree = ""; }; 5517FDF6263D49BC000219EC /* FPU.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FPU.cpp; sourceTree = ""; }; 5517FDF7263D49BC000219EC /* GS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GS.h; sourceTree = ""; }; 5517FDF9263D49BC000219EC /* DarwinFlatFileReader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DarwinFlatFileReader.cpp; sourceTree = ""; }; 5517FDFA263D49BC000219EC /* SaveState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveState.cpp; sourceTree = ""; }; - 5517FDFB263D49BC000219EC /* System.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = System.h; sourceTree = ""; }; 5517FDFC263D49BC000219EC /* MemoryTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MemoryTypes.h; sourceTree = ""; }; 5517FDFD263D49BC000219EC /* Gif.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Gif.cpp; sourceTree = ""; }; 5517FDFF263D49BC000219EC /* SPR.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SPR.h; sourceTree = ""; }; - 5517FE00263D49BC000219EC /* SysForwardDefs.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SysForwardDefs.h; sourceTree = ""; }; 5517FE01263D49BC000219EC /* R5900OpcodeImpl.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = R5900OpcodeImpl.cpp; sourceTree = ""; }; 5517FE14263D49BC000219EC /* HwRead.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HwRead.cpp; sourceTree = ""; }; 5517FE15263D49BC000219EC /* R3000A.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = R3000A.cpp; sourceTree = ""; }; @@ -1736,17 +1708,13 @@ 5517FE3F263E1118000219EC /* libchdr-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libchdr-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5517FE4B263E120F000219EC /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; 5517FE59263E124E000219EC /* liblzma-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblzma-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - 551AA0882792AB1700658151 /* GSThread.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSThread.h; sourceTree = ""; }; 551AA0892792AB1700658151 /* GSUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSUtil.h; sourceTree = ""; }; 551AA08A2792AB1700658151 /* GSState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSState.h; sourceTree = ""; }; 551AA08D2792AB1700658151 /* GSRendererSW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRendererSW.cpp; sourceTree = ""; }; - 551AA08E2792AB1700658151 /* GSVertexSW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSVertexSW.cpp; sourceTree = ""; }; 551AA08F2792AB1700658151 /* GSVertexSW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVertexSW.h; sourceTree = ""; }; 551AA0902792AB1700658151 /* GSDrawScanlineCodeGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDrawScanlineCodeGenerator.h; sourceTree = ""; }; 551AA0912792AB1700658151 /* GSRendererSW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSRendererSW.h; sourceTree = ""; }; 551AA0922792AB1700658151 /* GSDrawScanlineCodeGenerator.all.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDrawScanlineCodeGenerator.all.cpp; sourceTree = ""; }; - 551AA0932792AB1700658151 /* GSTextureSW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSTextureSW.cpp; sourceTree = ""; }; - 551AA0942792AB1700658151 /* GSNewCodeGenerator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSNewCodeGenerator.cpp; sourceTree = ""; }; 551AA0952792AB1700658151 /* GSDrawScanline.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDrawScanline.cpp; sourceTree = ""; }; 551AA0962792AB1700658151 /* GSSetupPrimCodeGenerator.all.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSSetupPrimCodeGenerator.all.cpp; sourceTree = ""; }; 551AA0972792AB1700658151 /* GSSetupPrimCodeGenerator.all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSSetupPrimCodeGenerator.all.h; sourceTree = ""; }; @@ -1754,7 +1722,6 @@ 551AA0992792AB1700658151 /* GSDrawScanline.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDrawScanline.h; sourceTree = ""; }; 551AA09A2792AB1700658151 /* GSScanlineEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSScanlineEnvironment.h; sourceTree = ""; }; 551AA09B2792AB1700658151 /* GSNewCodeGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSNewCodeGenerator.h; sourceTree = ""; }; - 551AA09C2792AB1700658151 /* GSTextureSW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSTextureSW.h; sourceTree = ""; }; 551AA09D2792AB1700658151 /* GSRasterizer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRasterizer.cpp; sourceTree = ""; }; 551AA09E2792AB1700658151 /* GSTextureCacheSW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSTextureCacheSW.cpp; sourceTree = ""; }; 551AA09F2792AB1700658151 /* GSDrawScanlineCodeGenerator.all.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDrawScanlineCodeGenerator.all.h; sourceTree = ""; }; @@ -1782,9 +1749,7 @@ 551AA0CB2792AB1700658151 /* GSFunctionMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSFunctionMap.h; sourceTree = ""; }; 551AA0CC2792AB1700658151 /* GSRenderer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRenderer.cpp; sourceTree = ""; }; 551AA0CD2792AB1700658151 /* GSDirtyRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDirtyRect.cpp; sourceTree = ""; }; - 551AA0DF2792AB1700658151 /* GLLoader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLLoader.h; sourceTree = ""; }; 551AA0E12792AB1700658151 /* GLState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLState.cpp; sourceTree = ""; }; - 551AA0E22792AB1700658151 /* GLLoader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLLoader.cpp; sourceTree = ""; }; 551AA0E42792AB1700658151 /* GSDeviceOGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDeviceOGL.h; sourceTree = ""; }; 551AA0E52792AB1700658151 /* GSTextureOGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSTextureOGL.h; sourceTree = ""; }; 551AA0E62792AB1700658151 /* GLState.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLState.h; sourceTree = ""; }; @@ -1793,7 +1758,6 @@ 551AA0E92792AB1700658151 /* GSRingHeap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSRingHeap.cpp; sourceTree = ""; }; 551AA0EA2792AB1700658151 /* GSLocalMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSLocalMemory.h; sourceTree = ""; }; 551AA0EB2792AB1700658151 /* GSTables.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSTables.h; sourceTree = ""; }; - 551AA0EC2792AB1700658151 /* GSIntrin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSIntrin.h; sourceTree = ""; }; 551AA0ED2792AB1700658151 /* GSPerfMon.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSPerfMon.cpp; sourceTree = ""; }; 551AA0EE2792AB1700658151 /* GSDrawingEnvironment.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDrawingEnvironment.h; sourceTree = ""; }; 551AA0EF2792AB1700658151 /* GSCapture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSCapture.h; sourceTree = ""; }; @@ -1804,8 +1768,6 @@ 551AA0F52792AB1700658151 /* GSBlock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSBlock.cpp; sourceTree = ""; }; 551AA0F62792AB1700658151 /* GSVector.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVector.h; sourceTree = ""; }; 551AA0F72792AB1700658151 /* GSState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSState.cpp; sourceTree = ""; }; - 551AA0F82792AB1700658151 /* GSCrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSCrc.h; sourceTree = ""; }; - 551AA0FA2792AB1700658151 /* GSThread_CXX11.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSThread_CXX11.h; sourceTree = ""; }; 551AA0FB2792AB1700658151 /* GSVector4i.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVector4i.h; sourceTree = ""; }; 551AA0FC2792AB1700658151 /* GSAlignedClass.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSAlignedClass.h; sourceTree = ""; }; 551AA0FD2792AB1700658151 /* GSRingHeap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSRingHeap.h; sourceTree = ""; }; @@ -1828,14 +1790,8 @@ 551AA11A2792AB1700658151 /* GSDump.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDump.h; sourceTree = ""; }; 551AA11B2792AB1700658151 /* GSLzma.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSLzma.h; sourceTree = ""; }; 551AA11C2792AB1700658151 /* GS.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GS.h; sourceTree = ""; }; - 551AA11D2792AB1700658151 /* GSCrc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSCrc.cpp; sourceTree = ""; }; 551AA11F2792AB1700658151 /* GSCapture.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSCapture.cpp; sourceTree = ""; }; 551AA1202792AB1700658151 /* GSVector8i.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSVector8i.h; sourceTree = ""; }; - 551AA1212792AB1700658151 /* GSAlignedClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSAlignedClass.cpp; sourceTree = ""; }; - 551AA1692792B0EA00658151 /* MemoryCardFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardFile.h; sourceTree = ""; }; - 551AA16A2792B0EA00658151 /* MemoryCardFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardFolder.h; sourceTree = ""; }; - 551AA16B2792B0EA00658151 /* MemoryCardFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardFile.cpp; sourceTree = ""; }; - 551AA16C2792B0EA00658151 /* MemoryCardFolder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardFolder.cpp; sourceTree = ""; }; 551AA16F2792B1A100658151 /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = System/Library/Frameworks/Metal.framework; sourceTree = SDKROOT; }; 551AA1722792B66400658151 /* DNS_Logger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DNS_Logger.cpp; sourceTree = ""; }; 551AA1732792B66400658151 /* DHCP_Server.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DHCP_Server.h; sourceTree = ""; }; @@ -1856,12 +1812,10 @@ 551AA40E2792C12E00658151 /* glad_egl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = glad_egl.c; sourceTree = ""; }; 551AA40F2792C12E00658151 /* glad.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = glad.c; sourceTree = ""; }; 551AA4132792C76A00658151 /* Host.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Host.h; sourceTree = ""; }; - 551AA4142792C7F800658151 /* PCSX2Base.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PCSX2Base.h; sourceTree = ""; }; 551AA4152792C81900658151 /* PerformanceMetrics.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceMetrics.cpp; sourceTree = ""; }; 551AA4162792C81900658151 /* PerformanceMetrics.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PerformanceMetrics.h; sourceTree = ""; }; 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 = ""; }; 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 = ""; }; 551AA48E27935E9100658151 /* Payload.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Payload.h; sourceTree = ""; }; @@ -1888,17 +1842,10 @@ 551AA4A727935E9100658151 /* SimpleQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SimpleQueue.h; sourceTree = ""; }; 551AA4B127935F9300658151 /* Timer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Timer.cpp; sourceTree = ""; }; 551AA4B227935F9300658151 /* Timer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Timer.h; sourceTree = ""; }; - 551AA4B62793625B00658151 /* Misc.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Misc.cpp; sourceTree = ""; }; 551AA4B8279362BA00658151 /* FastJmp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FastJmp.h; sourceTree = ""; }; 551AA4B9279362BA00658151 /* FastJmp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FastJmp.cpp; sourceTree = ""; }; 551AA4BD2793642B00658151 /* FileSystem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystem.h; sourceTree = ""; }; 551AA4BE2793642B00658151 /* FileSystem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileSystem.cpp; sourceTree = ""; }; - 551AA4C127936D7400658151 /* StreamBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StreamBuffer.cpp; sourceTree = ""; }; - 551AA4C427936D7400658151 /* Context.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Context.cpp; sourceTree = ""; }; - 551AA4C727936D7400658151 /* Context.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Context.h; sourceTree = ""; }; - 551AA4C927936D7400658151 /* ContextAGL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ContextAGL.h; sourceTree = ""; }; - 551AA4CB27936D7400658151 /* StreamBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StreamBuffer.h; sourceTree = ""; }; - 551AA4CE27936D7400658151 /* ContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextAGL.mm; sourceTree = ""; }; 551AA4DA2793734900658151 /* libglad-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libglad-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 551AA4E32793775E00658151 /* StringUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StringUtil.h; sourceTree = ""; }; 551AA4E42793775E00658151 /* StringUtil.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StringUtil.cpp; sourceTree = ""; }; @@ -1971,7 +1918,6 @@ 5548492C288554CF0066EDEB /* Dmac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Dmac.cpp; sourceTree = ""; }; 55484932288554F20066EDEB /* libzip.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libzip.a; sourceTree = BUILT_PRODUCTS_DIR; }; 55484937288555330066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 5548493A288555330066EDEB /* zip_err_str.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_err_str.c; sourceTree = ""; }; 5548493B288555330066EDEB /* libzip.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libzip.vcxproj.filters; sourceTree = ""; }; 5548493E288555330066EDEB /* zip_set_archive_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_archive_comment.html; sourceTree = ""; }; 5548493F288555330066EDEB /* ZIP_SOURCE_GET_ARGS.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = ZIP_SOURCE_GET_ARGS.mdoc; sourceTree = ""; }; @@ -2767,21 +2713,16 @@ 55484C76288555370066EDEB /* zipcmp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zipcmp.c; sourceTree = ""; }; 55484C77288555370066EDEB /* diff_output.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = diff_output.c; sourceTree = ""; }; 55484C78288555370066EDEB /* getopt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = ""; }; - 55484C79288555370066EDEB /* zipconf.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zipconf.h; sourceTree = ""; }; 55484C7A288555370066EDEB /* libzip.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libzip.vcxproj; sourceTree = ""; }; 55484D302885595F0066EDEB /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 55484D3928855E1D0066EDEB /* GSDumpReplayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDumpReplayer.h; sourceTree = ""; }; 55484D3A28855E1D0066EDEB /* GSDumpReplayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDumpReplayer.cpp; sourceTree = ""; }; 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSDumpReplayer.cpp; sourceTree = ""; }; - 555BCB79295CE2F5002E569F /* CommonHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CommonHost.h; sourceTree = ""; }; - 555BCB7A295CE2F5002E569F /* CommonHost.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CommonHost.cpp; sourceTree = ""; }; - 555BCB7C295CE4AC002E569F /* HostSettings.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HostSettings.cpp; sourceTree = ""; }; 5564D439279A07D200EECDEC /* 0.2.1.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = 0.2.1.md; sourceTree = ""; }; 5564D43A279A07D200EECDEC /* 0.2.0.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = 0.2.0.md; sourceTree = ""; }; 5564D43B279A07D200EECDEC /* 0.1.0.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = 0.1.0.md; sourceTree = ""; }; 5564D43C279A07D200EECDEC /* 0.2.3.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = 0.2.3.md; sourceTree = ""; }; 5564D43D279A07D200EECDEC /* 0.2.2.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = 0.2.2.md; sourceTree = ""; }; - 5564D43E279A07D200EECDEC /* current.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = current.md; sourceTree = ""; }; 5564D57B279A07D300EECDEC /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; 5564D57D279A07D300EECDEC /* ryml.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ryml.hpp; sourceTree = ""; }; 5564D57E279A07D300EECDEC /* ryml-gdbtypes.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = "ryml-gdbtypes.py"; sourceTree = ""; }; @@ -2947,37 +2888,17 @@ 5564D75D279A0A0500EECDEC /* format.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = format.hpp; sourceTree = ""; }; 5564D75E279A0A0500EECDEC /* base64.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = base64.hpp; sourceTree = ""; }; 5564D75F279A0A0500EECDEC /* compiler.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = compiler.hpp; sourceTree = ""; }; - 5564D768279A0CEA00EECDEC /* Program.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Program.h; sourceTree = ""; }; - 5564D769279A0CEA00EECDEC /* ShaderCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ShaderCache.cpp; sourceTree = ""; }; - 5564D76A279A0CEA00EECDEC /* ShaderCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ShaderCache.h; sourceTree = ""; }; - 5564D76B279A0CEA00EECDEC /* Program.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Program.cpp; sourceTree = ""; }; 5564D76E279A0D1500EECDEC /* MD5Digest.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MD5Digest.h; sourceTree = ""; }; 5564D76F279A0D1500EECDEC /* HashCombine.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HashCombine.h; sourceTree = ""; }; 5564D770279A0D1500EECDEC /* MD5Digest.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MD5Digest.cpp; sourceTree = ""; }; 556FBB27279E0E76007B4F88 /* VMManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = VMManager.h; sourceTree = ""; }; 556FBB28279E0E76007B4F88 /* VMManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = VMManager.cpp; sourceTree = ""; }; - 556FBB2C279E1067007B4F88 /* InputManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputManager.h; sourceTree = ""; }; - 556FBB31279E1067007B4F88 /* GameList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameList.cpp; sourceTree = ""; }; - 556FBB36279E1067007B4F88 /* InputManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputManager.cpp; sourceTree = ""; }; - 556FBB37279E1067007B4F88 /* InputSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InputSource.h; sourceTree = ""; }; - 556FBB38279E1067007B4F88 /* LayeredSettingsInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayeredSettingsInterface.h; sourceTree = ""; }; - 556FBB39279E1067007B4F88 /* LayeredSettingsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayeredSettingsInterface.cpp; sourceTree = ""; }; - 556FBB3B279E1067007B4F88 /* GameList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameList.h; sourceTree = ""; }; - 556FBB3F279E1067007B4F88 /* InputSource.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputSource.cpp; sourceTree = ""; }; 5576A4812885E10B0078CFF8 /* InputRecordingLogger.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InputRecordingLogger.cpp; sourceTree = ""; }; - 5580639327AB3261008CD5D2 /* Global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Global.h; sourceTree = ""; }; - 5580639427AB3261008CD5D2 /* StateManagement.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StateManagement.h; sourceTree = ""; }; - 5580639527AB3261008CD5D2 /* PAD.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PAD.h; sourceTree = ""; }; - 5580639627AB3261008CD5D2 /* KeyStatus.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KeyStatus.cpp; sourceTree = ""; }; - 5580639727AB3261008CD5D2 /* StateManagement.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StateManagement.cpp; sourceTree = ""; }; - 5580639827AB3261008CD5D2 /* PAD.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PAD.cpp; sourceTree = ""; }; - 5580639927AB3261008CD5D2 /* KeyStatus.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KeyStatus.h; sourceTree = ""; }; 5580639F27AB346B008CD5D2 /* Host.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Host.cpp; sourceTree = ""; }; 558063A527AB3D2D008CD5D2 /* ProgressCallback.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ProgressCallback.cpp; sourceTree = ""; }; 558063A627AB3D2D008CD5D2 /* ProgressCallback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ProgressCallback.h; sourceTree = ""; }; 558063A827AB3E0B008CD5D2 /* WindowInfo.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WindowInfo.cpp; sourceTree = ""; }; 558063A927AB3E0B008CD5D2 /* WindowInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WindowInfo.h; sourceTree = ""; }; - 558063AB27AB4069008CD5D2 /* HostSettings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HostSettings.h; sourceTree = ""; }; 558063BB27AB4B6C008CD5D2 /* SndOut_Cubeb.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SndOut_Cubeb.cpp; sourceTree = ""; }; 558063C227AB4B9E008CD5D2 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; name = LICENSE; path = pcsx2/3rdparty/cubeb/LICENSE; sourceTree = SOURCE_ROOT; }; 558063EB27AB4B9E008CD5D2 /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; name = AUTHORS; path = pcsx2/3rdparty/cubeb/AUTHORS; sourceTree = SOURCE_ROOT; }; @@ -3065,33 +2986,10 @@ 5580662D27AD3A31008CD5D2 /* portable.ini */ = {isa = PBXFileReference; lastKnownFileType = text; path = portable.ini; sourceTree = ""; }; 5591D80927B468F70073E97D /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; 5591D80B27B469200073E97D /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; - 5591D81027B5BF170073E97D /* Builders.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Builders.cpp; sourceTree = ""; }; - 5591D81127B5BF170073E97D /* StreamBuffer.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = StreamBuffer.cpp; sourceTree = ""; }; - 5591D81227B5BF170073E97D /* ShaderCompiler.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShaderCompiler.h; sourceTree = ""; }; - 5591D81327B5BF170073E97D /* ShaderCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ShaderCache.cpp; sourceTree = ""; }; - 5591D81427B5BF170073E97D /* Util.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Util.cpp; sourceTree = ""; }; - 5591D81527B5BF170073E97D /* EntryPoints.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EntryPoints.h; sourceTree = ""; }; - 5591D81627B5BF170073E97D /* Context.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Context.cpp; sourceTree = ""; }; - 5591D81727B5BF170073E97D /* Context.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Context.h; sourceTree = ""; }; - 5591D81827B5BF170073E97D /* SwapChain.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SwapChain.h; sourceTree = ""; }; - 5591D81927B5BF170073E97D /* Texture.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Texture.cpp; sourceTree = ""; }; - 5591D81A27B5BF170073E97D /* EntryPoints.inl */ = {isa = PBXFileReference; lastKnownFileType = text; path = EntryPoints.inl; sourceTree = ""; }; - 5591D81B27B5BF170073E97D /* SwapChain.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SwapChain.cpp; sourceTree = ""; }; - 5591D81C27B5BF170073E97D /* StreamBuffer.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = StreamBuffer.h; sourceTree = ""; }; - 5591D81D27B5BF170073E97D /* Loader.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Loader.h; sourceTree = ""; }; - 5591D81E27B5BF170073E97D /* Util.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Util.h; sourceTree = ""; }; - 5591D81F27B5BF170073E97D /* Texture.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Texture.h; sourceTree = ""; }; - 5591D82027B5BF170073E97D /* ShaderCompiler.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ShaderCompiler.cpp; sourceTree = ""; }; - 5591D82127B5BF170073E97D /* Builders.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Builders.h; sourceTree = ""; }; - 5591D82227B5BF170073E97D /* Loader.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Loader.cpp; sourceTree = ""; }; - 5591D82327B5BF170073E97D /* ShaderCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ShaderCache.h; sourceTree = ""; }; - 5591D82427B5BF170073E97D /* vk_mem_alloc.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = vk_mem_alloc.cpp; sourceTree = ""; }; 5591D82627B5C12D0073E97D /* GSTextureVK.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSTextureVK.cpp; sourceTree = ""; }; 5591D82727B5C12D0073E97D /* GSDeviceVK.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSDeviceVK.cpp; sourceTree = ""; }; 5591D82827B5C12D0073E97D /* GSTextureVK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GSTextureVK.h; sourceTree = ""; }; 5591D82927B5C12D0073E97D /* GSDeviceVK.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GSDeviceVK.h; sourceTree = ""; }; - 55AB8FB5298C57550024DCBC /* VirtualMemory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VirtualMemory.cpp; sourceTree = ""; }; - 55AB8FB6298C57550024DCBC /* VirtualMemory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VirtualMemory.h; sourceTree = ""; }; 55B1EFAD295BA06F00DB297F /* SettingsInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsInterface.h; sourceTree = ""; }; 55B1EFAF295BA0CA00DB297F /* MemorySettingsInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemorySettingsInterface.h; sourceTree = ""; }; 55B1EFB0295BA0CB00DB297F /* MemorySettingsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemorySettingsInterface.cpp; sourceTree = ""; }; @@ -3118,8 +3016,6 @@ 55B1EFD4295BA74200DB297F /* GSLocalMemoryMultiISA.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GSLocalMemoryMultiISA.cpp; sourceTree = ""; }; 55B1EFD6295BA7CF00DB297F /* StateWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StateWrapper.h; sourceTree = ""; }; 55B1EFD7295BA7CF00DB297F /* StateWrapper.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StateWrapper.cpp; sourceTree = ""; }; - 55B1EFD9295BA84300DB297F /* MemoryCardProtocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardProtocol.cpp; sourceTree = ""; }; - 55B1EFDA295BA84300DB297F /* MemoryCardProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardProtocol.h; sourceTree = ""; }; 55B1EFE2295BA99C00DB297F /* Image.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Image.h; sourceTree = ""; }; 55B1EFE3295BA99C00DB297F /* Image.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Image.cpp; sourceTree = ""; }; 55B1EFE7295BAA2B00DB297F /* jpgd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = jpgd.h; sourceTree = ""; }; @@ -3130,8 +3026,6 @@ 55B1EFEC295BAA2B00DB297F /* jpge.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = jpge.cpp; sourceTree = ""; }; 55B1EFED295BAA2B00DB297F /* jpgd.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = jpgd.cpp; sourceTree = ""; }; 55B1EFF2295BAA4700DB297F /* libjpgd.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libjpgd.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 55B1EFFB295BAB1600DB297F /* MultitapProtocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultitapProtocol.cpp; sourceTree = ""; }; - 55B1EFFC295BAB1600DB297F /* MultitapProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultitapProtocol.h; sourceTree = ""; }; 55B1EFFE295BAB4900DB297F /* ReadbackSpinManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadbackSpinManager.cpp; sourceTree = ""; }; 55B1EFFF295BAB4900DB297F /* ReadbackSpinManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ReadbackSpinManager.h; sourceTree = ""; }; 55B1F007295BAC7100DB297F /* sockets.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = sockets.cpp; sourceTree = ""; }; @@ -3181,6 +3075,337 @@ 55BD3E79295A5A37001DD03E /* cam-noop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "cam-noop.cpp"; sourceTree = ""; }; 55BD3E7B295A5ABC001DD03E /* misc.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = misc.metal; sourceTree = ""; }; 55BD3E7C295A5ABC001DD03E /* cas.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = cas.metal; sourceTree = ""; }; + 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = RedumpDatabase.yaml; sourceTree = ""; }; + 55DB5A362B5903AE00B3BD75 /* StackWalker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StackWalker.cpp; sourceTree = ""; }; + 55DB5A372B5903AE00B3BD75 /* FPControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FPControl.h; sourceTree = ""; }; + 55DB5A382B5903AE00B3BD75 /* SingleRegisterTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SingleRegisterTypes.h; sourceTree = ""; }; + 55DB5A392B5903AE00B3BD75 /* CrashHandler.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CrashHandler.cpp; sourceTree = ""; }; + 55DB5A3A2B5903AF00B3BD75 /* Easing.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Easing.h; sourceTree = ""; }; + 55DB5A3B2B5903AF00B3BD75 /* Error.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Error.h; sourceTree = ""; }; + 55DB5A3C2B5903AF00B3BD75 /* LRUCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LRUCache.h; sourceTree = ""; }; + 55DB5A3D2B5903AF00B3BD75 /* TextureDecompress.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TextureDecompress.h; sourceTree = ""; }; + 55DB5A3E2B5903B000B3BD75 /* DynamicLibrary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicLibrary.cpp; sourceTree = ""; }; + 55DB5A3F2B5903B000B3BD75 /* BitUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BitUtils.h; sourceTree = ""; }; + 55DB5A402B5903B000B3BD75 /* ByteSwap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ByteSwap.h; sourceTree = ""; }; + 55DB5A412B5903B000B3BD75 /* Assertions.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Assertions.cpp; sourceTree = ""; }; + 55DB5A422B5903B100B3BD75 /* SmallString.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SmallString.h; sourceTree = ""; }; + 55DB5A432B5903B100B3BD75 /* CrashHandler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CrashHandler.h; sourceTree = ""; }; + 55DB5A442B5903B100B3BD75 /* WrappedMemCopy.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WrappedMemCopy.h; sourceTree = ""; }; + 55DB5A452B5903B100B3BD75 /* VectorIntrin.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = VectorIntrin.h; sourceTree = ""; }; + 55DB5A462B5903B100B3BD75 /* HostSys.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = HostSys.cpp; sourceTree = ""; }; + 55DB5A472B5903B200B3BD75 /* DynamicLibrary.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicLibrary.h; sourceTree = ""; }; + 55DB5A482B5903B200B3BD75 /* EnumOps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EnumOps.h; sourceTree = ""; }; + 55DB5A492B5903B200B3BD75 /* TextureDecompress.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TextureDecompress.cpp; sourceTree = ""; }; + 55DB5A4A2B5903B200B3BD75 /* SmallString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SmallString.cpp; sourceTree = ""; }; + 55DB5A4B2B5903B200B3BD75 /* StackWalker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = StackWalker.h; sourceTree = ""; }; + 55DB5A4C2B5903B300B3BD75 /* AlignedMalloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = AlignedMalloc.h; sourceTree = ""; }; + 55DB5A4D2B5903B300B3BD75 /* Error.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Error.cpp; sourceTree = ""; }; + 55DB5A4E2B5903B300B3BD75 /* HostSys.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = HostSys.h; sourceTree = ""; }; + 55DB5A572B5903D700B3BD75 /* DarwinMisc.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DarwinMisc.h; sourceTree = ""; }; + 55DB5A5C2B59045800B3BD75 /* avx.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = avx.h; sourceTree = ""; }; + 55DB5A702B59051D00B3BD75 /* std.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = std.h; sourceTree = ""; }; + 55DB5A712B59051D00B3BD75 /* args.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = args.h; sourceTree = ""; }; + 55DB5A722B59051E00B3BD75 /* xchar.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = xchar.h; sourceTree = ""; }; + 55DB5A732B59053900B3BD75 /* fmt.cc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fmt.cc; sourceTree = ""; }; + 55DB5A752B59095D00B3BD75 /* zipconf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zipconf.h; sourceTree = ""; }; + 55DB5A7B2B590A2700B3BD75 /* libwebp-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libwebp-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 55DB5A912B590A6C00B3BD75 /* Android.mk */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Android.mk; sourceTree = ""; }; + 55DB5A922B590A6C00B3BD75 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + 55DB5AA42B590A6C00B3BD75 /* Makefile.vc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.vc; sourceTree = ""; }; + 55DB5AA52B590A6C00B3BD75 /* ChangeLog */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = ChangeLog; sourceTree = ""; }; + 55DB5AA62B590A6C00B3BD75 /* AUTHORS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; + 55DB5AB72B590A6C00B3BD75 /* codereview.settings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = codereview.settings; sourceTree = ""; }; + 55DB5AB82B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5AD52B590A6C00B3BD75 /* COPYING */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = COPYING; sourceTree = ""; }; + 55DB5AD72B590A6C00B3BD75 /* makefile.unix */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = makefile.unix; sourceTree = ""; }; + 55DB5ADA2B590A6C00B3BD75 /* xcframeworkbuild.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = xcframeworkbuild.sh; sourceTree = ""; }; + 55DB5ADB2B590A6C00B3BD75 /* CONTRIBUTING.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = CONTRIBUTING.md; sourceTree = ""; }; + 55DB5AF72B590A6C00B3BD75 /* iosbuild.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = iosbuild.sh; sourceTree = ""; }; + 55DB5AFC2B590A6C00B3BD75 /* webp-lossless-bitstream-spec.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "webp-lossless-bitstream-spec.txt"; sourceTree = ""; }; + 55DB5AFD2B590A6C00B3BD75 /* api.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = api.md; sourceTree = ""; }; + 55DB5AFE2B590A6C00B3BD75 /* TODO */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = TODO; sourceTree = ""; }; + 55DB5AFF2B590A6C00B3BD75 /* template.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = template.html; sourceTree = ""; }; + 55DB5B002B590A6C00B3BD75 /* webp-container-spec.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "webp-container-spec.txt"; sourceTree = ""; }; + 55DB5B012B590A6C00B3BD75 /* building.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = building.md; sourceTree = ""; }; + 55DB5B022B590A6C00B3BD75 /* specs_generation.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = specs_generation.md; sourceTree = ""; }; + 55DB5B032B590A6C00B3BD75 /* tools.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = tools.md; sourceTree = ""; }; + 55DB5B092B590A6C00B3BD75 /* sharpyuv_gamma.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_gamma.c; sourceTree = ""; }; + 55DB5B0A2B590A6C00B3BD75 /* sharpyuv_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_sse2.c; sourceTree = ""; }; + 55DB5B0B2B590A6C00B3BD75 /* libsharpyuv.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libsharpyuv.rc; sourceTree = ""; }; + 55DB5B0C2B590A6C00B3BD75 /* sharpyuv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv.c; sourceTree = ""; }; + 55DB5B0D2B590A6C00B3BD75 /* sharpyuv_csp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv_csp.h; sourceTree = ""; }; + 55DB5B0E2B590A6C00B3BD75 /* sharpyuv_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_neon.c; sourceTree = ""; }; + 55DB5B0F2B590A6C00B3BD75 /* sharpyuv_dsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv_dsp.h; sourceTree = ""; }; + 55DB5B102B590A6C00B3BD75 /* sharpyuv_cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv_cpu.h; sourceTree = ""; }; + 55DB5B112B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B122B590A6C00B3BD75 /* sharpyuv_gamma.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv_gamma.h; sourceTree = ""; }; + 55DB5B132B590A6C00B3BD75 /* sharpyuv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = sharpyuv.h; sourceTree = ""; }; + 55DB5B142B590A6C00B3BD75 /* sharpyuv_csp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_csp.c; sourceTree = ""; }; + 55DB5B152B590A6C00B3BD75 /* sharpyuv_cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_cpu.c; sourceTree = ""; }; + 55DB5B162B590A6C00B3BD75 /* libsharpyuv.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libsharpyuv.pc.in; sourceTree = ""; }; + 55DB5B172B590A6C00B3BD75 /* sharpyuv_dsp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = sharpyuv_dsp.c; sourceTree = ""; }; + 55DB5B1E2B590A6C00B3BD75 /* autogen.sh */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.sh; path = autogen.sh; sourceTree = ""; }; + 55DB5B212B590A6C00B3BD75 /* muxread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = muxread.c; sourceTree = ""; }; + 55DB5B222B590A6C00B3BD75 /* muxinternal.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = muxinternal.c; sourceTree = ""; }; + 55DB5B232B590A6C00B3BD75 /* libwebpmux.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpmux.rc; sourceTree = ""; }; + 55DB5B242B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B252B590A6C00B3BD75 /* anim_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = anim_encode.c; sourceTree = ""; }; + 55DB5B262B590A6C00B3BD75 /* animi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = animi.h; sourceTree = ""; }; + 55DB5B272B590A6C00B3BD75 /* libwebpmux.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpmux.pc.in; sourceTree = ""; }; + 55DB5B282B590A6C00B3BD75 /* muxedit.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = muxedit.c; sourceTree = ""; }; + 55DB5B292B590A6C00B3BD75 /* muxi.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = muxi.h; sourceTree = ""; }; + 55DB5B2A2B590A6C00B3BD75 /* libwebp.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebp.pc.in; sourceTree = ""; }; + 55DB5B2B2B590A6C00B3BD75 /* libwebpdecoder.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpdecoder.rc; sourceTree = ""; }; + 55DB5B2C2B590A6C00B3BD75 /* libwebpdecoder.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpdecoder.pc.in; sourceTree = ""; }; + 55DB5B2E2B590A6C00B3BD75 /* bit_writer_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bit_writer_utils.c; sourceTree = ""; }; + 55DB5B2F2B590A6C00B3BD75 /* endian_inl_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = endian_inl_utils.h; sourceTree = ""; }; + 55DB5B302B590A6C00B3BD75 /* thread_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = thread_utils.c; sourceTree = ""; }; + 55DB5B312B590A6C00B3BD75 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; + 55DB5B322B590A6C00B3BD75 /* bit_reader_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_reader_utils.h; sourceTree = ""; }; + 55DB5B332B590A6C00B3BD75 /* bit_reader_inl_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_reader_inl_utils.h; sourceTree = ""; }; + 55DB5B342B590A6C00B3BD75 /* rescaler_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_utils.c; sourceTree = ""; }; + 55DB5B352B590A6C00B3BD75 /* quant_levels_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quant_levels_utils.h; sourceTree = ""; }; + 55DB5B362B590A6C00B3BD75 /* quant_levels_dec_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quant_levels_dec_utils.h; sourceTree = ""; }; + 55DB5B372B590A6C00B3BD75 /* huffman_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = huffman_utils.c; sourceTree = ""; }; + 55DB5B382B590A6C00B3BD75 /* color_cache_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = color_cache_utils.h; sourceTree = ""; }; + 55DB5B392B590A6C00B3BD75 /* filters_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filters_utils.h; sourceTree = ""; }; + 55DB5B3A2B590A6C00B3BD75 /* huffman_encode_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = huffman_encode_utils.c; sourceTree = ""; }; + 55DB5B3B2B590A6C00B3BD75 /* random_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = random_utils.h; sourceTree = ""; }; + 55DB5B3C2B590A6C00B3BD75 /* rescaler_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rescaler_utils.h; sourceTree = ""; }; + 55DB5B3D2B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B3E2B590A6C00B3BD75 /* quant_levels_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_levels_utils.c; sourceTree = ""; }; + 55DB5B3F2B590A6C00B3BD75 /* quant_levels_dec_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_levels_dec_utils.c; sourceTree = ""; }; + 55DB5B402B590A6C00B3BD75 /* bit_reader_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = bit_reader_utils.c; sourceTree = ""; }; + 55DB5B412B590A6C00B3BD75 /* thread_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = thread_utils.h; sourceTree = ""; }; + 55DB5B422B590A6C00B3BD75 /* utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = utils.c; sourceTree = ""; }; + 55DB5B432B590A6C00B3BD75 /* bit_writer_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bit_writer_utils.h; sourceTree = ""; }; + 55DB5B442B590A6C00B3BD75 /* huffman_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = huffman_utils.h; sourceTree = ""; }; + 55DB5B452B590A6C00B3BD75 /* huffman_encode_utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = huffman_encode_utils.h; sourceTree = ""; }; + 55DB5B462B590A6C00B3BD75 /* color_cache_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = color_cache_utils.c; sourceTree = ""; }; + 55DB5B472B590A6C00B3BD75 /* filters_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters_utils.c; sourceTree = ""; }; + 55DB5B482B590A6C00B3BD75 /* random_utils.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = random_utils.c; sourceTree = ""; }; + 55DB5B4A2B590A6C00B3BD75 /* format_constants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = format_constants.h; sourceTree = ""; }; + 55DB5B4B2B590A6C00B3BD75 /* mux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mux.h; sourceTree = ""; }; + 55DB5B4C2B590A6C00B3BD75 /* types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = types.h; sourceTree = ""; }; + 55DB5B4D2B590A6C00B3BD75 /* demux.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = demux.h; sourceTree = ""; }; + 55DB5B4E2B590A6C00B3BD75 /* mux_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mux_types.h; sourceTree = ""; }; + 55DB5B4F2B590A6C00B3BD75 /* encode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = encode.h; sourceTree = ""; }; + 55DB5B502B590A6C00B3BD75 /* decode.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = decode.h; sourceTree = ""; }; + 55DB5B512B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B532B590A6C00B3BD75 /* iterator_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iterator_enc.c; sourceTree = ""; }; + 55DB5B542B590A6C00B3BD75 /* backward_references_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = backward_references_enc.h; sourceTree = ""; }; + 55DB5B552B590A6C00B3BD75 /* cost_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost_enc.c; sourceTree = ""; }; + 55DB5B562B590A6C00B3BD75 /* alpha_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_enc.c; sourceTree = ""; }; + 55DB5B572B590A6C00B3BD75 /* histogram_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = histogram_enc.h; sourceTree = ""; }; + 55DB5B582B590A6C00B3BD75 /* picture_psnr_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = picture_psnr_enc.c; sourceTree = ""; }; + 55DB5B592B590A6C00B3BD75 /* token_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = token_enc.c; sourceTree = ""; }; + 55DB5B5A2B590A6C00B3BD75 /* vp8i_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8i_enc.h; sourceTree = ""; }; + 55DB5B5B2B590A6C00B3BD75 /* tree_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree_enc.c; sourceTree = ""; }; + 55DB5B5C2B590A6C00B3BD75 /* filter_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filter_enc.c; sourceTree = ""; }; + 55DB5B5D2B590A6C00B3BD75 /* picture_csp_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = picture_csp_enc.c; sourceTree = ""; }; + 55DB5B5E2B590A6C00B3BD75 /* frame_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frame_enc.c; sourceTree = ""; }; + 55DB5B5F2B590A6C00B3BD75 /* syntax_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = syntax_enc.c; sourceTree = ""; }; + 55DB5B602B590A6C00B3BD75 /* cost_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cost_enc.h; sourceTree = ""; }; + 55DB5B612B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B622B590A6C00B3BD75 /* predictor_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = predictor_enc.c; sourceTree = ""; }; + 55DB5B632B590A6C00B3BD75 /* config_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = config_enc.c; sourceTree = ""; }; + 55DB5B642B590A6C00B3BD75 /* backward_references_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = backward_references_enc.c; sourceTree = ""; }; + 55DB5B652B590A6C00B3BD75 /* picture_tools_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = picture_tools_enc.c; sourceTree = ""; }; + 55DB5B662B590A6C00B3BD75 /* webp_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = webp_enc.c; sourceTree = ""; }; + 55DB5B672B590A6C00B3BD75 /* vp8l_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8l_enc.c; sourceTree = ""; }; + 55DB5B682B590A6C00B3BD75 /* histogram_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = histogram_enc.c; sourceTree = ""; }; + 55DB5B692B590A6C00B3BD75 /* analysis_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = analysis_enc.c; sourceTree = ""; }; + 55DB5B6A2B590A6C00B3BD75 /* vp8li_enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8li_enc.h; sourceTree = ""; }; + 55DB5B6B2B590A6C00B3BD75 /* quant_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_enc.c; sourceTree = ""; }; + 55DB5B6C2B590A6C00B3BD75 /* near_lossless_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = near_lossless_enc.c; sourceTree = ""; }; + 55DB5B6D2B590A6C00B3BD75 /* picture_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = picture_enc.c; sourceTree = ""; }; + 55DB5B6E2B590A6C00B3BD75 /* backward_references_cost_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = backward_references_cost_enc.c; sourceTree = ""; }; + 55DB5B6F2B590A6C00B3BD75 /* picture_rescale_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = picture_rescale_enc.c; sourceTree = ""; }; + 55DB5B712B590A6C00B3BD75 /* demux.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = demux.c; sourceTree = ""; }; + 55DB5B722B590A6C00B3BD75 /* libwebpdemux.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpdemux.rc; sourceTree = ""; }; + 55DB5B732B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B742B590A6C00B3BD75 /* anim_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = anim_decode.c; sourceTree = ""; }; + 55DB5B752B590A6C00B3BD75 /* libwebpdemux.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebpdemux.pc.in; sourceTree = ""; }; + 55DB5B762B590A6C00B3BD75 /* libwebp.rc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = libwebp.rc; sourceTree = ""; }; + 55DB5B782B590A6C00B3BD75 /* io_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = io_dec.c; sourceTree = ""; }; + 55DB5B792B590A6C00B3BD75 /* frame_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = frame_dec.c; sourceTree = ""; }; + 55DB5B7A2B590A6C00B3BD75 /* tree_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tree_dec.c; sourceTree = ""; }; + 55DB5B7B2B590A6C00B3BD75 /* vp8i_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8i_dec.h; sourceTree = ""; }; + 55DB5B7C2B590A6C00B3BD75 /* vp8_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8_dec.h; sourceTree = ""; }; + 55DB5B7D2B590A6C00B3BD75 /* alpha_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_dec.c; sourceTree = ""; }; + 55DB5B7E2B590A6C00B3BD75 /* common_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common_dec.h; sourceTree = ""; }; + 55DB5B7F2B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5B802B590A6C00B3BD75 /* buffer_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = buffer_dec.c; sourceTree = ""; }; + 55DB5B812B590A6C00B3BD75 /* quant_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = quant_dec.c; sourceTree = ""; }; + 55DB5B822B590A6C00B3BD75 /* vp8li_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = vp8li_dec.h; sourceTree = ""; }; + 55DB5B832B590A6C00B3BD75 /* idec_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = idec_dec.c; sourceTree = ""; }; + 55DB5B842B590A6C00B3BD75 /* webp_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = webp_dec.c; sourceTree = ""; }; + 55DB5B852B590A6C00B3BD75 /* vp8l_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8l_dec.c; sourceTree = ""; }; + 55DB5B862B590A6C00B3BD75 /* alphai_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = alphai_dec.h; sourceTree = ""; }; + 55DB5B872B590A6C00B3BD75 /* vp8_dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vp8_dec.c; sourceTree = ""; }; + 55DB5B882B590A6C00B3BD75 /* webpi_dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = webpi_dec.h; sourceTree = ""; }; + 55DB5B8A2B590A6C00B3BD75 /* upsampling.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling.c; sourceTree = ""; }; + 55DB5B8B2B590A6C00B3BD75 /* lossless_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_sse2.c; sourceTree = ""; }; + 55DB5B8C2B590A6C00B3BD75 /* lossless.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lossless.h; sourceTree = ""; }; + 55DB5B8D2B590A6C00B3BD75 /* lossless_enc_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5B8E2B590A6C00B3BD75 /* enc_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_msa.c; sourceTree = ""; }; + 55DB5B8F2B590A6C00B3BD75 /* msa_macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = msa_macro.h; sourceTree = ""; }; + 55DB5B902B590A6C00B3BD75 /* neon.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = neon.h; sourceTree = ""; }; + 55DB5B912B590A6C00B3BD75 /* filters_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5B922B590A6C00B3BD75 /* rescaler.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler.c; sourceTree = ""; }; + 55DB5B932B590A6C00B3BD75 /* dec_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5B942B590A6C00B3BD75 /* rescaler_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_neon.c; sourceTree = ""; }; + 55DB5B952B590A6C00B3BD75 /* cost_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost_sse2.c; sourceTree = ""; }; + 55DB5B962B590A6C00B3BD75 /* upsampling_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling_sse41.c; sourceTree = ""; }; + 55DB5B972B590A6C00B3BD75 /* enc_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_sse41.c; sourceTree = ""; }; + 55DB5B982B590A6C00B3BD75 /* lossless_enc_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_sse41.c; sourceTree = ""; }; + 55DB5B992B590A6C00B3BD75 /* upsampling_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling_neon.c; sourceTree = ""; }; + 55DB5B9A2B590A6C00B3BD75 /* filters_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters_sse2.c; sourceTree = ""; }; + 55DB5B9B2B590A6C00B3BD75 /* lossless_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5B9C2B590A6C00B3BD75 /* enc_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5B9D2B590A6C00B3BD75 /* cpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cpu.c; sourceTree = ""; }; + 55DB5B9E2B590A6C00B3BD75 /* yuv_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_neon.c; sourceTree = ""; }; + 55DB5B9F2B590A6C00B3BD75 /* alpha_processing.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_processing.c; sourceTree = ""; }; + 55DB5BA02B590A6C00B3BD75 /* yuv.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = yuv.h; sourceTree = ""; }; + 55DB5BA12B590A6C00B3BD75 /* quant.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = quant.h; sourceTree = ""; }; + 55DB5BA22B590A6C00B3BD75 /* cost_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost_neon.c; sourceTree = ""; }; + 55DB5BA32B590A6C00B3BD75 /* enc_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_mips32.c; sourceTree = ""; }; + 55DB5BA42B590A6C00B3BD75 /* filters_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters_neon.c; sourceTree = ""; }; + 55DB5BA52B590A6C00B3BD75 /* upsampling_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling_sse2.c; sourceTree = ""; }; + 55DB5BA62B590A6C00B3BD75 /* yuv_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_sse2.c; sourceTree = ""; }; + 55DB5BA72B590A6C00B3BD75 /* filters_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters_msa.c; sourceTree = ""; }; + 55DB5BA82B590A6C00B3BD75 /* mips_macro.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mips_macro.h; sourceTree = ""; }; + 55DB5BA92B590A6C00B3BD75 /* rescaler_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_msa.c; sourceTree = ""; }; + 55DB5BAA2B590A6C00B3BD75 /* lossless_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_neon.c; sourceTree = ""; }; + 55DB5BAB2B590A6C00B3BD75 /* lossless_enc_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_msa.c; sourceTree = ""; }; + 55DB5BAC2B590A6C00B3BD75 /* filters.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = filters.c; sourceTree = ""; }; + 55DB5BAD2B590A6C00B3BD75 /* alpha_processing_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_processing_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5BAE2B590A6C00B3BD75 /* rescaler_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5BAF2B590A6C00B3BD75 /* ssim_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ssim_sse2.c; sourceTree = ""; }; + 55DB5BB02B590A6C00B3BD75 /* rescaler_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_mips32.c; sourceTree = ""; }; + 55DB5BB12B590A6C00B3BD75 /* dec_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_sse41.c; sourceTree = ""; }; + 55DB5BB22B590A6C00B3BD75 /* lossless_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_sse41.c; sourceTree = ""; }; + 55DB5BB32B590A6C00B3BD75 /* yuv_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_sse41.c; sourceTree = ""; }; + 55DB5BB42B590A6C00B3BD75 /* rescaler_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rescaler_sse2.c; sourceTree = ""; }; + 55DB5BB52B590A6C00B3BD75 /* Makefile.am */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Makefile.am; sourceTree = ""; }; + 55DB5BB62B590A6C00B3BD75 /* lossless_enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc.c; sourceTree = ""; }; + 55DB5BB72B590A6C00B3BD75 /* yuv_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5BB82B590A6C00B3BD75 /* alpha_processing_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_processing_neon.c; sourceTree = ""; }; + 55DB5BB92B590A6C00B3BD75 /* dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec.c; sourceTree = ""; }; + 55DB5BBA2B590A6C00B3BD75 /* lossless.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless.c; sourceTree = ""; }; + 55DB5BBB2B590A6C00B3BD75 /* ssim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ssim.c; sourceTree = ""; }; + 55DB5BBC2B590A6C00B3BD75 /* upsampling_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling_msa.c; sourceTree = ""; }; + 55DB5BBD2B590A6C00B3BD75 /* lossless_enc_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_sse2.c; sourceTree = ""; }; + 55DB5BBE2B590A6C00B3BD75 /* yuv.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv.c; sourceTree = ""; }; + 55DB5BBF2B590A6C00B3BD75 /* enc_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_neon.c; sourceTree = ""; }; + 55DB5BC02B590A6C00B3BD75 /* cpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpu.h; sourceTree = ""; }; + 55DB5BC12B590A6C00B3BD75 /* dec_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_sse2.c; sourceTree = ""; }; + 55DB5BC22B590A6C00B3BD75 /* dsp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dsp.h; sourceTree = ""; }; + 55DB5BC32B590A6C00B3BD75 /* enc_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc_sse2.c; sourceTree = ""; }; + 55DB5BC42B590A6C00B3BD75 /* lossless_enc_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_neon.c; sourceTree = ""; }; + 55DB5BC52B590A6C00B3BD75 /* lossless_common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lossless_common.h; sourceTree = ""; }; + 55DB5BC62B590A6C00B3BD75 /* cost_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost_mips32.c; sourceTree = ""; }; + 55DB5BC72B590A6C00B3BD75 /* alpha_processing_sse41.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_processing_sse41.c; sourceTree = ""; }; + 55DB5BC82B590A6C00B3BD75 /* dec_neon.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_neon.c; sourceTree = ""; }; + 55DB5BC92B590A6C00B3BD75 /* cost.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost.c; sourceTree = ""; }; + 55DB5BCA2B590A6C00B3BD75 /* dec_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_mips32.c; sourceTree = ""; }; + 55DB5BCB2B590A6C00B3BD75 /* cost_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cost_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5BCC2B590A6C00B3BD75 /* alpha_processing_sse2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = alpha_processing_sse2.c; sourceTree = ""; }; + 55DB5BCD2B590A6C00B3BD75 /* dec_clip_tables.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_clip_tables.c; sourceTree = ""; }; + 55DB5BCE2B590A6C00B3BD75 /* lossless_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_msa.c; sourceTree = ""; }; + 55DB5BCF2B590A6C00B3BD75 /* enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = enc.c; sourceTree = ""; }; + 55DB5BD02B590A6C00B3BD75 /* common_sse2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common_sse2.h; sourceTree = ""; }; + 55DB5BD12B590A6C00B3BD75 /* lossless_enc_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lossless_enc_mips32.c; sourceTree = ""; }; + 55DB5BD22B590A6C00B3BD75 /* common_sse41.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common_sse41.h; sourceTree = ""; }; + 55DB5BD32B590A6C00B3BD75 /* yuv_mips32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = yuv_mips32.c; sourceTree = ""; }; + 55DB5BD42B590A6C00B3BD75 /* upsampling_mips_dsp_r2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = upsampling_mips_dsp_r2.c; sourceTree = ""; }; + 55DB5BD52B590A6C00B3BD75 /* dec_msa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = dec_msa.c; sourceTree = ""; }; + 55DB5CDA2B590FBB00B3BD75 /* libcpuinfo-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libcpuinfo-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 55DB5CE62B590FF200B3BD75 /* cpuinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpuinfo.h; sourceTree = ""; }; + 55DB5CE72B590FF200B3BD75 /* cpuinfo-mock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "cpuinfo-mock.h"; sourceTree = ""; }; + 55DB5CED2B590FF200B3BD75 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + 55DB5CEE2B590FF200B3BD75 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 55DB5CF02B590FF200B3BD75 /* clog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clog.h; sourceTree = ""; }; + 55DB5CF12B590FF200B3BD75 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 55DB5CF22B590FF200B3BD75 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 55DB5CF42B590FF200B3BD75 /* clog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = clog.c; sourceTree = ""; }; + 55DB5CF72B590FF200B3BD75 /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = ""; }; + 55DB5CF82B590FF200B3BD75 /* api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = api.c; sourceTree = ""; }; + 55DB5CF92B590FF200B3BD75 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = ""; }; + 55DB5CFE2B590FF200B3BD75 /* deterministic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = deterministic.c; sourceTree = ""; }; + 55DB5CFF2B590FF200B3BD75 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = ""; }; + 55DB5D002B590FF200B3BD75 /* descriptor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = descriptor.c; sourceTree = ""; }; + 55DB5D012B590FF200B3BD75 /* cpuid.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpuid.h; sourceTree = ""; }; + 55DB5D022B590FF200B3BD75 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = ""; }; + 55DB5D032B590FF200B3BD75 /* vendor.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = vendor.c; sourceTree = ""; }; + 55DB5D042B590FF200B3BD75 /* info.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = info.c; sourceTree = ""; }; + 55DB5D052B590FF200B3BD75 /* topology.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = topology.c; sourceTree = ""; }; + 55DB5D062B590FF200B3BD75 /* mockcpuid.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = mockcpuid.c; sourceTree = ""; }; + 55DB5D072B590FF200B3BD75 /* uarch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = uarch.c; sourceTree = ""; }; + 55DB5D082B590FF200B3BD75 /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = ""; }; + 55DB5D0D2B590FF200B3BD75 /* name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = name.c; sourceTree = ""; }; + 55DB5D0E2B590FF200B3BD75 /* isa.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = isa.c; sourceTree = ""; }; + 55DB5D102B590FF300B3BD75 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = ""; }; + 55DB5D1C2B590FF300B3BD75 /* topology.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = topology.c; sourceTree = ""; }; + 55DB5D1D2B590FF300B3BD75 /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = ""; }; + 55DB5D1E2B590FF300B3BD75 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cache.c; sourceTree = ""; }; + 55DB5D202B590FF300B3BD75 /* midr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = midr.h; sourceTree = ""; }; + 55DB5D212B590FF300B3BD75 /* uarch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = uarch.c; sourceTree = ""; }; + 55DB5D222B590FF300B3BD75 /* api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = api.h; sourceTree = ""; }; + 55DB5D322B590FF300B3BD75 /* init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = init.c; sourceTree = ""; }; + 55DB5D332B590FF300B3BD75 /* cache.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = cache.c; sourceTree = ""; }; + 55DB5D382B590FF300B3BD75 /* tlb.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = tlb.c; sourceTree = ""; }; + 55DB5D422B590FF300B3BD75 /* utils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = utils.h; sourceTree = ""; }; + 55DB5D432B590FF300B3BD75 /* internal-api.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "internal-api.h"; sourceTree = ""; }; + 55DB5D442B590FF300B3BD75 /* common.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = common.h; sourceTree = ""; }; + 55DB5D452B590FF300B3BD75 /* log.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = log.h; sourceTree = ""; }; + 55DB5D8A2B59127500B3BD75 /* libchdr_chd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_chd.c; sourceTree = ""; }; + 55DB5D8B2B59127500B3BD75 /* libchdr_bitstream.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_bitstream.c; sourceTree = ""; }; + 55DB5D8C2B59127500B3BD75 /* libchdr_huffman.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_huffman.c; sourceTree = ""; }; + 55DB5D8D2B59127500B3BD75 /* libchdr_flac.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_flac.c; sourceTree = ""; }; + 55DB5D8E2B59127500B3BD75 /* libchdr_cdrom.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = libchdr_cdrom.c; sourceTree = ""; }; + 55DB5D962B59127600B3BD75 /* flac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = flac.h; sourceTree = ""; }; + 55DB5D972B59127600B3BD75 /* chdconfig.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chdconfig.h; sourceTree = ""; }; + 55DB5D982B59127600B3BD75 /* bitstream.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = bitstream.h; sourceTree = ""; }; + 55DB5D992B59127600B3BD75 /* cdrom.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = cdrom.h; sourceTree = ""; }; + 55DB5D9A2B59127600B3BD75 /* chd.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = chd.h; sourceTree = ""; }; + 55DB5D9B2B59127600B3BD75 /* huffman.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = huffman.h; sourceTree = ""; }; + 55DB5D9C2B59127600B3BD75 /* coretypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = coretypes.h; sourceTree = ""; }; + 55DB5D9E2B59127600B3BD75 /* dr_flac.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = dr_flac.h; sourceTree = ""; }; + 55DB5DB12B59136400B3BD75 /* GSHwHack.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GSHwHack.h; sourceTree = ""; }; + 55DB5DB22B59144300B3BD75 /* iR5900.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900.cpp; sourceTree = ""; }; + 55DB5DB32B59144300B3BD75 /* iCore.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iCore.cpp; sourceTree = ""; }; + 55DB5DB62B59149000B3BD75 /* GSJobQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSJobQueue.h; sourceTree = ""; }; + 55DB5DB82B59163E00B3BD75 /* IsoHasher.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IsoHasher.cpp; sourceTree = ""; }; + 55DB5DB92B59163E00B3BD75 /* IsoHasher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IsoHasher.h; sourceTree = ""; }; + 55DB5DBA2B59163E00B3BD75 /* IsoReader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = IsoReader.cpp; sourceTree = ""; }; + 55DB5DBB2B59163E00B3BD75 /* IsoReader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = IsoReader.h; sourceTree = ""; }; + 55DB5DC52B59173400B3BD75 /* liblz4-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "liblz4-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 55DB5DCC2B59174800B3BD75 /* INSTALL */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = INSTALL; sourceTree = ""; }; + 55DB5DCD2B59174800B3BD75 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 55DB5DCE2B59174800B3BD75 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + 55DB5E0F2B59174800B3BD75 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 55DB5E212B59174800B3BD75 /* appveyor.yml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = appveyor.yml; sourceTree = ""; }; + 55DB5E222B59174800B3BD75 /* NEWS */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = NEWS; sourceTree = ""; }; + 55DB5E432B59174900B3BD75 /* liblz4-dll.rc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "liblz4-dll.rc.in"; sourceTree = ""; }; + 55DB5E442B59174900B3BD75 /* xxhash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xxhash.h; sourceTree = ""; }; + 55DB5E452B59174900B3BD75 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; + 55DB5E462B59174900B3BD75 /* lz4hc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4hc.c; sourceTree = ""; }; + 55DB5E472B59174900B3BD75 /* Makefile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.make; path = Makefile; sourceTree = ""; }; + 55DB5E482B59174900B3BD75 /* lz4frame.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4frame.c; sourceTree = ""; }; + 55DB5E492B59174900B3BD75 /* lz4.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4.h; sourceTree = ""; }; + 55DB5E4A2B59174900B3BD75 /* lz4file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4file.h; sourceTree = ""; }; + 55DB5E4B2B59174900B3BD75 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; + 55DB5E4C2B59174900B3BD75 /* xxhash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = xxhash.c; sourceTree = ""; }; + 55DB5E4D2B59174900B3BD75 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; + 55DB5E4E2B59174900B3BD75 /* lz4frame_static.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4frame_static.h; sourceTree = ""; }; + 55DB5E4F2B59174900B3BD75 /* lz4hc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4hc.h; sourceTree = ""; }; + 55DB5E562B59174900B3BD75 /* lz4.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4.c; sourceTree = ""; }; + 55DB5E572B59174900B3BD75 /* liblz4.pc.in */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = liblz4.pc.in; sourceTree = ""; }; + 55DB5E582B59174900B3BD75 /* lz4frame.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = lz4frame.h; sourceTree = ""; }; + 55DB5E592B59174900B3BD75 /* lz4file.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = lz4file.c; sourceTree = ""; }; + 55DB5E602B59174900B3BD75 /* Makefile.inc */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.pascal; path = Makefile.inc; sourceTree = ""; }; + 55DB5EDB2B59174900B3BD75 /* SECURITY.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = ""; }; 55DF028727D3273400B339A6 /* iR5900Analysis.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = iR5900Analysis.cpp; sourceTree = ""; }; 55DF028827D3273400B339A6 /* iR5900Analysis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = iR5900Analysis.h; sourceTree = ""; }; 55EBA8B3295CDDF00035A1FD /* WAVWriter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WAVWriter.h; sourceTree = ""; }; @@ -3218,6 +3443,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 55DB5F242B5917BE00B3BD75 /* liblz4-pcsx2.a in Frameworks */, + 55DB5DC02B59172500B3BD75 /* libcpuinfo-pcsx2.a in Frameworks */, + 55DB5CCB2B590AE200B3BD75 /* libwebp-pcsx2.a in Frameworks */, 55B1EFFA295BAA8900DB297F /* libjpgd.a in Frameworks */, 55484D2D288555EE0066EDEB /* libzip.a in Frameworks */, 5591D80C27B469200073E97D /* CoreAudio.framework in Frameworks */, @@ -3331,6 +3559,27 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 55DB5A792B590A2700B3BD75 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5CD82B590FBB00B3BD75 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5DC32B59173400B3BD75 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ @@ -3362,6 +3611,9 @@ 5580651927AB4BBE008CD5D2 /* libcubeb-pcsx2.a */, 55484932288554F20066EDEB /* libzip.a */, 55B1EFF2295BAA4700DB297F /* libjpgd.a */, + 55DB5A7B2B590A2700B3BD75 /* libwebp-pcsx2.a */, + 55DB5CDA2B590FBB00B3BD75 /* libcpuinfo-pcsx2.a */, + 55DB5DC52B59173400B3BD75 /* liblz4-pcsx2.a */, ); name = Products; sourceTree = ""; @@ -3428,13 +3680,15 @@ 5517E8D0263D4831000219EC /* 3rdparty */ = { isa = PBXGroup; children = ( + 55DB5DC92B59174800B3BD75 /* lz4 */, + 55DB5CDE2B590FF200B3BD75 /* cpuinfo */, + 55DB5A7F2B590A6C00B3BD75 /* libwebp */, 558063BD27AB4B9E008CD5D2 /* cubeb */, 5517EC5E263D4834000219EC /* fmt */, 551AA4032792C12E00658151 /* glad */, 551BF59126420F3B0008C529 /* include */, 55B1EFE6295BAA2B00DB297F /* jpgd */, 5517EEE4263D4836000219EC /* libchdr */, - 5517E930263D4831000219EC /* libjpeg */, 5517E970263D4831000219EC /* libpng */, 55484936288555330066EDEB /* libzip */, 5564D3FE279A07D200EECDEC /* rapidyaml */, @@ -3517,76 +3771,6 @@ path = SoundStretch; sourceTree = ""; }; - 5517E930263D4831000219EC /* libjpeg */ = { - isa = PBXGroup; - children = ( - 5517E931263D4831000219EC /* jpeglib.h */, - 5517E932263D4831000219EC /* jddctmgr.c */, - 5517E933263D4831000219EC /* jerror.h */, - 5517E934263D4831000219EC /* jidctfst.c */, - 5517E935263D4831000219EC /* libjpeg.vcxproj.filters */, - 5517E936263D4831000219EC /* jdatasrc.c */, - 5517E937263D4831000219EC /* jdhuff.c */, - 5517E938263D4831000219EC /* jdinput.c */, - 5517E939263D4831000219EC /* jdtrans.c */, - 5517E93A263D4831000219EC /* jcmaster.c */, - 5517E93B263D4831000219EC /* jdapistd.c */, - 5517E93C263D4831000219EC /* jcapimin.c */, - 5517E93D263D4831000219EC /* jdmarker.c */, - 5517E93E263D4831000219EC /* jdmerge.c */, - 5517E93F263D4831000219EC /* jdcolor.c */, - 5517E940263D4831000219EC /* jfdctflt.c */, - 5517E941263D4831000219EC /* jcparam.c */, - 5517E942263D4831000219EC /* jccoefct.c */, - 5517E943263D4831000219EC /* jfdctint.c */, - 5517E944263D4831000219EC /* jcsample.c */, - 5517E945263D4831000219EC /* jcmainct.c */, - 5517E946263D4831000219EC /* jchuff.c */, - 5517E947263D4831000219EC /* jmemnobs.c */, - 5517E948263D4831000219EC /* jcarith.c */, - 5517E949263D4831000219EC /* jmemmac.c */, - 5517E94A263D4831000219EC /* README */, - 5517E94B263D4831000219EC /* jcprepct.c */, - 5517E94C263D4831000219EC /* jmemsys.h */, - 5517E94D263D4831000219EC /* change.log */, - 5517E94E263D4831000219EC /* jccolor.c */, - 5517E94F263D4831000219EC /* jmemansi.c */, - 5517E950263D4831000219EC /* jerror.c */, - 5517E951263D4831000219EC /* jquant1.c */, - 5517E952263D4831000219EC /* jcdctmgr.c */, - 5517E953263D4831000219EC /* jutils.c */, - 5517E954263D4831000219EC /* jconfig.h */, - 5517E955263D4831000219EC /* libjpeg.vcxproj */, - 5517E956263D4831000219EC /* jcapistd.c */, - 5517E957263D4831000219EC /* jmorecfg.h */, - 5517E958263D4831000219EC /* jfdctfst.c */, - 5517E959263D4831000219EC /* jaricom.c */, - 5517E95A263D4831000219EC /* jdarith.c */, - 5517E95B263D4831000219EC /* jdmaster.c */, - 5517E95C263D4831000219EC /* jdct.h */, - 5517E95D263D4831000219EC /* jversion.h */, - 5517E95E263D4831000219EC /* jinclude.h */, - 5517E95F263D4831000219EC /* jcomapi.c */, - 5517E960263D4831000219EC /* jmemname.c */, - 5517E961263D4831000219EC /* jdatadst.c */, - 5517E962263D4831000219EC /* jmemmgr.c */, - 5517E963263D4831000219EC /* jcmarker.c */, - 5517E964263D4831000219EC /* jquant2.c */, - 5517E965263D4831000219EC /* jidctint.c */, - 5517E966263D4831000219EC /* jdapimin.c */, - 5517E967263D4831000219EC /* jctrans.c */, - 5517E968263D4831000219EC /* jidctflt.c */, - 5517E969263D4831000219EC /* jcinit.c */, - 5517E96A263D4831000219EC /* jdmainct.c */, - 5517E96B263D4831000219EC /* jdcoefct.c */, - 5517E96C263D4831000219EC /* jdsample.c */, - 5517E96D263D4831000219EC /* filelist.txt */, - 5517E96E263D4831000219EC /* jpegint.h */, - 5517E96F263D4831000219EC /* jdpostct.c */, - ); - path = libjpeg; - sourceTree = ""; - }; 5517E970263D4831000219EC /* libpng */ = { isa = PBXGroup; children = ( @@ -3607,199 +3791,15 @@ 5517E9F6263D4832000219EC /* pngrutil.c */, 5517E9F8263D4832000219EC /* pngset.c */, 5517E979263D4831000219EC /* pngstruct.h */, - 5517E972263D4831000219EC /* pngtest.c */, - 5517E9F1263D4832000219EC /* pngtest.png */, 5517E97C263D4831000219EC /* pngtrans.c */, 5517E978263D4831000219EC /* pngwio.c */, 5517E9A6263D4831000219EC /* pngwrite.c */, 5517E9AB263D4831000219EC /* pngwtran.c */, 5517E9A9263D4831000219EC /* pngwutil.c */, - 5517E981263D4831000219EC /* projects */, - 5517E9A8263D4831000219EC /* README */, - 5517E9B2263D4831000219EC /* scripts */, - 5517E9AA263D4831000219EC /* TODO */, ); path = libpng; sourceTree = ""; }; - 5517E981263D4831000219EC /* projects */ = { - isa = PBXGroup; - children = ( - 5517E982263D4831000219EC /* vstudio */, - 5517E995263D4831000219EC /* visualc71 */, - 5517E99D263D4831000219EC /* owatcom */, - ); - path = projects; - sourceTree = ""; - }; - 5517E982263D4831000219EC /* vstudio */ = { - isa = PBXGroup; - children = ( - 5517E983263D4831000219EC /* pngstest */, - 5517E985263D4831000219EC /* libpng */, - 5517E987263D4831000219EC /* pngunknown */, - 5517E989263D4831000219EC /* zlib */, - 5517E98B263D4831000219EC /* zlib.props */, - 5517E98C263D4831000219EC /* WARNING */, - 5517E98D263D4831000219EC /* pngvalid */, - 5517E98F263D4831000219EC /* pnglibconf */, - 5517E991263D4831000219EC /* vstudio.sln */, - 5517E992263D4831000219EC /* readme.txt */, - 5517E993263D4831000219EC /* pngtest */, - ); - path = vstudio; - sourceTree = ""; - }; - 5517E983263D4831000219EC /* pngstest */ = { - isa = PBXGroup; - children = ( - 5517E984263D4831000219EC /* pngstest.vcxproj */, - ); - path = pngstest; - sourceTree = ""; - }; - 5517E985263D4831000219EC /* libpng */ = { - isa = PBXGroup; - children = ( - 5517E986263D4831000219EC /* libpng.vcxproj */, - ); - path = libpng; - sourceTree = ""; - }; - 5517E987263D4831000219EC /* pngunknown */ = { - isa = PBXGroup; - children = ( - 5517E988263D4831000219EC /* pngunknown.vcxproj */, - ); - path = pngunknown; - sourceTree = ""; - }; - 5517E989263D4831000219EC /* zlib */ = { - isa = PBXGroup; - children = ( - 5517E98A263D4831000219EC /* zlib.vcxproj */, - ); - path = zlib; - sourceTree = ""; - }; - 5517E98D263D4831000219EC /* pngvalid */ = { - isa = PBXGroup; - children = ( - 5517E98E263D4831000219EC /* pngvalid.vcxproj */, - ); - path = pngvalid; - sourceTree = ""; - }; - 5517E98F263D4831000219EC /* pnglibconf */ = { - isa = PBXGroup; - children = ( - 5517E990263D4831000219EC /* pnglibconf.vcxproj */, - ); - path = pnglibconf; - sourceTree = ""; - }; - 5517E993263D4831000219EC /* pngtest */ = { - isa = PBXGroup; - children = ( - 5517E994263D4831000219EC /* pngtest.vcxproj */, - ); - path = pngtest; - sourceTree = ""; - }; - 5517E995263D4831000219EC /* visualc71 */ = { - isa = PBXGroup; - children = ( - 5517E996263D4831000219EC /* PRJ0041.mak */, - 5517E997263D4831000219EC /* libpng.sln */, - 5517E998263D4831000219EC /* libpng.vcproj */, - 5517E999263D4831000219EC /* README_zlib.txt */, - 5517E99A263D4831000219EC /* README.txt */, - 5517E99B263D4831000219EC /* pngtest.vcproj */, - 5517E99C263D4831000219EC /* zlib.vcproj */, - ); - path = visualc71; - sourceTree = ""; - }; - 5517E99D263D4831000219EC /* owatcom */ = { - isa = PBXGroup; - children = ( - 5517E99E263D4831000219EC /* pngstest.tgt */, - 5517E99F263D4831000219EC /* pngvalid.tgt */, - 5517E9A0263D4831000219EC /* libpng.wpj */, - 5517E9A1263D4831000219EC /* pngtest.tgt */, - 5517E9A2263D4831000219EC /* libpng.tgt */, - 5517E9A3263D4831000219EC /* pngconfig.mak */, - ); - path = owatcom; - sourceTree = ""; - }; - 5517E9B2263D4831000219EC /* scripts */ = { - isa = PBXGroup; - children = ( - 5517E9B3263D4831000219EC /* makefile.bor */, - 5517E9B4263D4831000219EC /* makefile.msc */, - 5517E9B5263D4831000219EC /* makefile.dec */, - 5517E9B6263D4831000219EC /* symbols.def */, - 5517E9B7263D4831000219EC /* smakefile.ppc */, - 5517E9B8263D4831000219EC /* makefile.linux */, - 5517E9B9263D4831000219EC /* pnglibconf.mak */, - 5517E9BA263D4831000219EC /* makefile.tc3 */, - 5517E9BB263D4832000219EC /* libpng-config-head.in */, - 5517E9BC263D4832000219EC /* makefile.solaris */, - 5517E9BD263D4832000219EC /* makefile.msys */, - 5517E9BE263D4832000219EC /* makefile.hpgcc */, - 5517E9BF263D4832000219EC /* libpng.pc.in */, - 5517E9C0263D4832000219EC /* makefile.beos */, - 5517E9C1263D4832000219EC /* makefile.amiga */, - 5517E9C2263D4832000219EC /* makefile.darwin */, - 5517E9C3263D4832000219EC /* makefile.solaris-x86 */, - 5517E9C4263D4832000219EC /* pngwin.rc */, - 5517E9C5263D4832000219EC /* prefix.c */, - 5517E9C6263D4832000219EC /* makefile.64sunu */, - 5517E9C7263D4832000219EC /* makefile.hpux */, - 5517E9C8263D4832000219EC /* makefile.cegcc */, - 5517E9C9263D4832000219EC /* def.c */, - 5517E9CA263D4832000219EC /* dfn.awk */, - 5517E9CB263D4832000219EC /* makefile.openbsd */, - 5517E9CC263D4832000219EC /* makefile.hp64 */, - 5517E9CD263D4832000219EC /* makefile.aix */, - 5517E9CE263D4832000219EC /* makefile.vcwin32 */, - 5517E9CF263D4832000219EC /* macro.lst */, - 5517E9D0263D4832000219EC /* makefile.ibmc */, - 5517E9D1263D4832000219EC /* makefile.so9 */, - 5517E9D2263D4832000219EC /* makefile.ne12bsd */, - 5517E9D3263D4832000219EC /* SCOPTIONS.ppc */, - 5517E9D4263D4832000219EC /* vers.c */, - 5517E9D5263D4832000219EC /* makefile.bc32 */, - 5517E9D6263D4832000219EC /* makefile.freebsd */, - 5517E9D7263D4832000219EC /* pnglibconf.dfa */, - 5517E9D8263D4832000219EC /* makefile.dj2 */, - 5517E9D9263D4832000219EC /* makefile.intel */, - 5517E9DA263D4832000219EC /* options.awk */, - 5517E9DB263D4832000219EC /* makefile.sgi */, - 5517E9DC263D4832000219EC /* makefile.mips */, - 5517E9DD263D4832000219EC /* sym.c */, - 5517E9DE263D4832000219EC /* makefile.netbsd */, - 5517E9DF263D4832000219EC /* libpng-config-body.in */, - 5517E9E0263D4832000219EC /* makefile.knr */, - 5517E9E1263D4832000219EC /* makefile.sggcc */, - 5517E9E2263D4832000219EC /* makefile.sunos */, - 5517E9E3263D4832000219EC /* makefile.acorn */, - 5517E9E4263D4832000219EC /* symbols.c */, - 5517E9E5263D4832000219EC /* README.txt */, - 5517E9E6263D4832000219EC /* makefile.32sunu */, - 5517E9E7263D4832000219EC /* descrip.mms */, - 5517E9E8263D4832000219EC /* checksym.awk */, - 5517E9E9263D4832000219EC /* makefile.std */, - 5517E9EA263D4832000219EC /* makefile.atari */, - 5517E9EB263D4832000219EC /* makefile.gcc */, - 5517E9EC263D4832000219EC /* intprefix.c */, - 5517E9ED263D4832000219EC /* makefile.sco */, - 5517E9EE263D4832000219EC /* makevms.com */, - ); - path = scripts; - sourceTree = ""; - }; 5517EC5E263D4834000219EC /* fmt */ = { isa = PBXGroup; children = ( @@ -3821,18 +3821,19 @@ 5517EC9E263D4834000219EC /* fmt */ = { isa = PBXGroup; children = ( + 55DB5A712B59051D00B3BD75 /* args.h */, 5517ECA4263D4834000219EC /* chrono.h */, 5517ECA6263D4834000219EC /* color.h */, 5517ECA8263D4834000219EC /* compile.h */, 5517ECA2263D4834000219EC /* core.h */, 5517ECA0263D4834000219EC /* format-inl.h */, 5517ECAA263D4834000219EC /* format.h */, - 5517ECA3263D4834000219EC /* locale.h */, 5517ECA5263D4834000219EC /* os.h */, 5517EC9F263D4834000219EC /* ostream.h */, - 5517ECA9263D4834000219EC /* posix.h */, 5517ECA7263D4834000219EC /* printf.h */, 5517ECA1263D4834000219EC /* ranges.h */, + 55DB5A702B59051D00B3BD75 /* std.h */, + 55DB5A722B59051E00B3BD75 /* xchar.h */, ); path = fmt; sourceTree = ""; @@ -3840,6 +3841,7 @@ 5517ED32263D4835000219EC /* src */ = { isa = PBXGroup; children = ( + 55DB5A732B59053900B3BD75 /* fmt.cc */, 5517ED34263D4835000219EC /* format.cc */, 5517ED33263D4835000219EC /* os.cc */, ); @@ -3850,120 +3852,12 @@ 5517EEE4263D4836000219EC /* libchdr */ = { isa = PBXGroup; children = ( - 5517EEE6263D4836000219EC /* libchdr */, + 55DB5D942B59127600B3BD75 /* include */, + 55DB5D892B59127500B3BD75 /* src */, ); path = libchdr; sourceTree = ""; }; - 5517EEE6263D4836000219EC /* libchdr */ = { - isa = PBXGroup; - children = ( - 5517EEE8263D4836000219EC /* CMakeLists.txt */, - 5517EEE9263D4836000219EC /* include */, - 5517EEF8263D4836000219EC /* deps */, - 5517EF4E263D4837000219EC /* src */, - ); - path = libchdr; - sourceTree = ""; - }; - 5517EEE9263D4836000219EC /* include */ = { - isa = PBXGroup; - children = ( - 5517EEEA263D4836000219EC /* libchdr */, - 5517EEF2263D4836000219EC /* dr_libs */, - ); - path = include; - sourceTree = ""; - }; - 5517EEEA263D4836000219EC /* libchdr */ = { - isa = PBXGroup; - children = ( - 5517EEEB263D4836000219EC /* flac.h */, - 5517EEEC263D4836000219EC /* chdconfig.h */, - 5517EEED263D4836000219EC /* bitstream.h */, - 5517EEEE263D4836000219EC /* cdrom.h */, - 5517EEEF263D4836000219EC /* chd.h */, - 5517EEF0263D4836000219EC /* huffman.h */, - 5517EEF1263D4836000219EC /* coretypes.h */, - ); - path = libchdr; - sourceTree = ""; - }; - 5517EEF2263D4836000219EC /* dr_libs */ = { - isa = PBXGroup; - children = ( - 5517EEF3263D4836000219EC /* dr_flac.h */, - ); - path = dr_libs; - sourceTree = ""; - }; - 5517EEF8263D4836000219EC /* deps */ = { - isa = PBXGroup; - children = ( - 5517EF2C263D4837000219EC /* lzma-19.00 */, - ); - path = deps; - sourceTree = ""; - }; - 5517EF2C263D4837000219EC /* lzma-19.00 */ = { - isa = PBXGroup; - children = ( - 5517EF30263D4837000219EC /* include */, - 5517EF42263D4837000219EC /* src */, - ); - path = "lzma-19.00"; - sourceTree = ""; - }; - 5517EF30263D4837000219EC /* include */ = { - isa = PBXGroup; - children = ( - 5517EF32263D4837000219EC /* 7zTypes.h */, - 5517EF3E263D4837000219EC /* Alloc.h */, - 5517EF3B263D4837000219EC /* Bra.h */, - 5517EF33263D4837000219EC /* Compiler.h */, - 5517EF35263D4837000219EC /* CpuArch.h */, - 5517EF36263D4837000219EC /* Delta.h */, - 5517EF3A263D4837000219EC /* LzFind.h */, - 5517EF31263D4837000219EC /* LzHash.h */, - 5517EF38263D4837000219EC /* Lzma86.h */, - 5517EF3D263D4837000219EC /* LzmaDec.h */, - 5517EF39263D4837000219EC /* LzmaEnc.h */, - 5517EF37263D4837000219EC /* LzmaLib.h */, - 5517EF34263D4837000219EC /* Precomp.h */, - 5517EF3C263D4837000219EC /* Sort.h */, - ); - path = include; - sourceTree = ""; - }; - 5517EF42263D4837000219EC /* src */ = { - isa = PBXGroup; - children = ( - 5517EF47263D4837000219EC /* Alloc.c */, - 5517EF46263D4837000219EC /* Bra86.c */, - 5517EF49263D4837000219EC /* BraIA64.c */, - 5517EF4C263D4837000219EC /* CpuArch.c */, - 5517EF4B263D4837000219EC /* Delta.c */, - 5517EF44263D4837000219EC /* LzFind.c */, - 5517EF4A263D4837000219EC /* Lzma86Dec.c */, - 5517EF48263D4837000219EC /* LzmaDec.c */, - 5517EF43263D4837000219EC /* LzmaEnc.c */, - 5517EF45263D4837000219EC /* Sort.c */, - ); - path = src; - sourceTree = ""; - }; - 5517EF4E263D4837000219EC /* src */ = { - isa = PBXGroup; - children = ( - 5517EF4F263D4837000219EC /* libchdr_chd.c */, - 5517EF50263D4837000219EC /* libchdr_bitstream.c */, - 5517EF51263D4837000219EC /* libchdr_huffman.c */, - 5517EF52263D4837000219EC /* libchdr_flac.c */, - 5517EF54263D4837000219EC /* libchdr_cdrom.c */, - ); - path = src; - sourceTree = ""; - }; 5517EF81263D4837000219EC /* xz */ = { isa = PBXGroup; children = ( @@ -4318,34 +4212,42 @@ isa = PBXGroup; children = ( 5517FA90263D48AE000219EC /* AlignedMalloc.cpp */, + 55DB5A4C2B5903B300B3BD75 /* AlignedMalloc.h */, + 55DB5A412B5903B000B3BD75 /* Assertions.cpp */, 5517FA30263D48AD000219EC /* Assertions.h */, + 55DB5A3F2B5903B000B3BD75 /* BitUtils.h */, 5517FA38263D48AD000219EC /* boost_spsc_queue.hpp */, + 55DB5A402B5903B000B3BD75 /* ByteSwap.h */, 5517FA87263D48AE000219EC /* Console.cpp */, 5517FA26263D48AD000219EC /* Console.h */, + 55DB5A392B5903AE00B3BD75 /* CrashHandler.cpp */, + 55DB5A432B5903B100B3BD75 /* CrashHandler.h */, 5517FA9A263D48AE000219EC /* Darwin */, + 55DB5A3E2B5903B000B3BD75 /* DynamicLibrary.cpp */, + 55DB5A472B5903B200B3BD75 /* DynamicLibrary.h */, + 55DB5A3A2B5903AF00B3BD75 /* Easing.h */, 5517FA6A263D48AE000219EC /* emitter */, - 5517FA7F263D48AE000219EC /* Exceptions.cpp */, - 5517FA3A263D48AD000219EC /* Exceptions.h */, + 55DB5A482B5903B200B3BD75 /* EnumOps.h */, + 55DB5A4D2B5903B300B3BD75 /* Error.cpp */, + 55DB5A3B2B5903AF00B3BD75 /* Error.h */, 551AA4B9279362BA00658151 /* FastJmp.cpp */, 551AA4B8279362BA00658151 /* FastJmp.h */, 551AA4BE2793642B00658151 /* FileSystem.cpp */, 551AA4BD2793642B00658151 /* FileSystem.h */, - 5517FA35263D48AD000219EC /* General.h */, - 551AA4C027936D7400658151 /* GL */, + 55DB5A372B5903AE00B3BD75 /* FPControl.h */, 5564D76F279A0D1500EECDEC /* HashCombine.h */, 55B1EFB3295BA0F000DB297F /* HeapArray.h */, 55B1EFB4295BA0F000DB297F /* HeterogeneousContainers.h */, + 55DB5A462B5903B100B3BD75 /* HostSys.cpp */, + 55DB5A4E2B5903B300B3BD75 /* HostSys.h */, 55B1EFE3295BA99C00DB297F /* Image.cpp */, 55B1EFE2295BA99C00DB297F /* Image.h */, 551BE8872641EF4E0008C529 /* Linux */, - 5517FA4E263D48AD000219EC /* MathUtils.h */, + 55DB5A3C2B5903AF00B3BD75 /* LRUCache.h */, 5564D770279A0D1500EECDEC /* MD5Digest.cpp */, 5564D76E279A0D1500EECDEC /* MD5Digest.h */, - 5517FA33263D48AD000219EC /* MemcpyFast.h */, 55B1EFB0295BA0CB00DB297F /* MemorySettingsInterface.cpp */, 55B1EFAF295BA0CA00DB297F /* MemorySettingsInterface.h */, - 5517FA28263D48AD000219EC /* MemsetFast.inl */, - 551AA4B62793625B00658151 /* Misc.cpp */, 55300EA527C744E70049E2CC /* MRCHelpers.h */, 5517FA32263D48AD000219EC /* Path.h */, 5517FA04263D48AD000219EC /* Pcsx2Defs.h */, @@ -4359,23 +4261,29 @@ 55B1EFFE295BAB4900DB297F /* ReadbackSpinManager.cpp */, 55B1EFFF295BAB4900DB297F /* ReadbackSpinManager.h */, 5517FA48263D48AD000219EC /* RedtapeWindows.h */, - 5517FA3C263D48AD000219EC /* SafeArray.h */, - 5517FA37263D48AD000219EC /* SafeArray.inl */, 5517FAA2263D48AE000219EC /* Semaphore.cpp */, 55B1EFAD295BA06F00DB297F /* SettingsInterface.h */, 5580652727AB4DE9008CD5D2 /* SettingsWrapper.cpp */, 5580652627AB4DE9008CD5D2 /* SettingsWrapper.h */, + 55DB5A382B5903AE00B3BD75 /* SingleRegisterTypes.h */, + 55DB5A4A2B5903B200B3BD75 /* SmallString.cpp */, + 55DB5A422B5903B100B3BD75 /* SmallString.h */, + 55DB5A362B5903AE00B3BD75 /* StackWalker.cpp */, + 55DB5A4B2B5903B200B3BD75 /* StackWalker.h */, 551AA4E42793775E00658151 /* StringUtil.cpp */, 551AA4E32793775E00658151 /* StringUtil.h */, + 55DB5A492B5903B200B3BD75 /* TextureDecompress.cpp */, + 55DB5A3D2B5903AF00B3BD75 /* TextureDecompress.h */, 5517FA36263D48AD000219EC /* Threading.h */, 551AA4B127935F9300658151 /* Timer.cpp */, 551AA4B227935F9300658151 /* Timer.h */, 5517FA3F263D48AD000219EC /* TraceLog.h */, - 5591D80F27B5BF170073E97D /* Vulkan */, + 55DB5A452B5903B100B3BD75 /* VectorIntrin.h */, 55EBA8B4295CDDF00035A1FD /* WAVWriter.cpp */, 55EBA8B3295CDDF00035A1FD /* WAVWriter.h */, 558063A827AB3E0B008CD5D2 /* WindowInfo.cpp */, 558063A927AB3E0B008CD5D2 /* WindowInfo.h */, + 55DB5A442B5903B100B3BD75 /* WrappedMemCopy.h */, 55484928288549140066EDEB /* ZipHelpers.h */, ); path = common; @@ -4384,6 +4292,7 @@ 5517FA0C263D48AD000219EC /* implement */ = { isa = PBXGroup; children = ( + 55DB5A5C2B59045800B3BD75 /* avx.h */, 5517FA19263D48AD000219EC /* bmi.h */, 5517FA14263D48AD000219EC /* dwshift.h */, 5517FA1C263D48AD000219EC /* group1.h */, @@ -4408,14 +4317,12 @@ 5517FA6A263D48AE000219EC /* emitter */ = { isa = PBXGroup; children = ( + 55B1EFCC295BA67200DB297F /* avx.cpp */, 5517FA76263D48AE000219EC /* bmi.cpp */, - 5517FA77263D48AE000219EC /* cpudetect_internal.h */, - 5517FA71263D48AE000219EC /* cpudetect.cpp */, 5517FA74263D48AE000219EC /* fpu.cpp */, 5517FA6B263D48AE000219EC /* groups.cpp */, 5517FA0C263D48AD000219EC /* implement */, 5517FA0A263D48AD000219EC /* instructions.h */, - 55B1EFCC295BA67200DB297F /* avx.cpp */, 5517FA07263D48AD000219EC /* internal.h */, 5517FA79263D48AE000219EC /* jmp.cpp */, 5517FA20263D48AD000219EC /* legacy_instructions.h */, @@ -4423,11 +4330,8 @@ 5517FA6F263D48AE000219EC /* legacy_sse.cpp */, 5517FA1F263D48AD000219EC /* legacy_types.h */, 5517FA6D263D48AE000219EC /* legacy.cpp */, - 5517FA73263D48AE000219EC /* LnxCpuDetect.cpp */, 5517FA72263D48AE000219EC /* movs.cpp */, 5517FA6E263D48AE000219EC /* simd.cpp */, - 5517FA0B263D48AD000219EC /* tools.h */, - 5517FA1E263D48AD000219EC /* x86_intrin.h */, 5517FA78263D48AE000219EC /* x86emitter.cpp */, 5517FA06263D48AD000219EC /* x86emitter.h */, 5517FA08263D48AD000219EC /* x86types.h */, @@ -4438,9 +4342,10 @@ 5517FA9A263D48AE000219EC /* Darwin */ = { isa = PBXGroup; children = ( - 5517FA9B263D48AE000219EC /* DarwinThreads.cpp */, 5517FA9C263D48AE000219EC /* DarwinMisc.cpp */, + 55DB5A572B5903D700B3BD75 /* DarwinMisc.h */, 5517FA9D263D48AE000219EC /* DarwinSemaphore.cpp */, + 5517FA9B263D48AE000219EC /* DarwinThreads.cpp */, ); path = Darwin; sourceTree = ""; @@ -4468,7 +4373,6 @@ 5517FE21263D49BC000219EC /* Elfheader.h */, 5517FAA9263D49BB000219EC /* FiFo.cpp */, 5517FDF6263D49BC000219EC /* FPU.cpp */, - 556FBB2A279E1067007B4F88 /* Frontend */, 5517FCC0263D49BC000219EC /* FW.cpp */, 5517FE1C263D49BC000219EC /* FW.h */, 5517FE18263D49BC000219EC /* GameDatabase.cpp */, @@ -4486,7 +4390,6 @@ 5517FE19263D49BC000219EC /* Hardware.h */, 5580639F27AB346B008CD5D2 /* Host.cpp */, 551AA4132792C76A00658151 /* Host.h */, - 558063AB27AB4069008CD5D2 /* HostSettings.h */, 5517FB03263D49BB000219EC /* Hw.cpp */, 5517FDF4263D49BC000219EC /* Hw.h */, 5517FE14263D49BC000219EC /* HwRead.cpp */, @@ -4513,25 +4416,14 @@ 5517FE1B263D49BC000219EC /* Mdec.h */, 5517FAAC263D49BB000219EC /* Memory.cpp */, 5517FDF3263D49BC000219EC /* Memory.h */, - 551AA16B2792B0EA00658151 /* MemoryCardFile.cpp */, - 551AA1692792B0EA00658151 /* MemoryCardFile.h */, - 551AA16C2792B0EA00658151 /* MemoryCardFolder.cpp */, - 551AA16A2792B0EA00658151 /* MemoryCardFolder.h */, - 55B1EFD9295BA84300DB297F /* MemoryCardProtocol.cpp */, - 55B1EFDA295BA84300DB297F /* MemoryCardProtocol.h */, 5517FDFC263D49BC000219EC /* MemoryTypes.h */, 5517FB61263D49BB000219EC /* MMI.cpp */, 5517FAAA263D49BB000219EC /* MTGS.cpp */, 5517FDEC263D49BC000219EC /* MTVU.cpp */, 5517FBDB263D49BC000219EC /* MTVU.h */, 5517FAB8263D49BB000219EC /* MultipartFileReader.cpp */, - 55B1EFFB295BAB1600DB297F /* MultitapProtocol.cpp */, - 55B1EFFC295BAB1600DB297F /* MultitapProtocol.h */, - 5517FB77263D49BB000219EC /* PAD */, - 5517FB75263D49BB000219EC /* Patch_Memory.cpp */, 5517FAFC263D49BB000219EC /* Patch.cpp */, 5517FDF1263D49BC000219EC /* Patch.h */, - 551AA4142792C7F800658151 /* PCSX2Base.h */, 5517FB5E263D49BB000219EC /* Pcsx2Config.cpp */, 551AA4152792C81900658151 /* PerformanceMetrics.cpp */, 551AA4162792C81900658151 /* PerformanceMetrics.h */, @@ -4560,18 +4452,12 @@ 5517FB45263D49BB000219EC /* Sif1.cpp */, 5517FB00263D49BB000219EC /* sif2.cpp */, 5517FCBE263D49BC000219EC /* Sifcmd.h */, - 551AA41B2792C85500658151 /* SingleRegisterTypes.h */, - 5517FDF5263D49BC000219EC /* Sio.cpp */, - 5517FAB7263D49BB000219EC /* Sio.h */, 5517FAAD263D49BB000219EC /* SourceLog.cpp */, 5517FB64263D49BB000219EC /* SPR.cpp */, 5517FDFF263D49BC000219EC /* SPR.h */, 5517FCC8263D49BC000219EC /* SPU2 */, 55B1EFD7295BA7CF00DB297F /* StateWrapper.cpp */, 55B1EFD6295BA7CF00DB297F /* StateWrapper.h */, - 5517FE00263D49BC000219EC /* SysForwardDefs.h */, - 5517FD4A263D49BC000219EC /* System.cpp */, - 5517FDFB263D49BC000219EC /* System.h */, 5517FBE4263D49BC000219EC /* USB */, 5517FABF263D49BB000219EC /* Vif_Codes.cpp */, 5517FCC5263D49BC000219EC /* Vif_Dma.h */, @@ -4583,8 +4469,6 @@ 5517FAAF263D49BB000219EC /* Vif0_Dma.cpp */, 5517FAF8263D49BB000219EC /* Vif1_Dma.cpp */, 5517FE16263D49BC000219EC /* Vif1_MFIFO.cpp */, - 55AB8FB5298C57550024DCBC /* VirtualMemory.cpp */, - 55AB8FB6298C57550024DCBC /* VirtualMemory.h */, 556FBB28279E0E76007B4F88 /* VMManager.cpp */, 556FBB27279E0E76007B4F88 /* VMManager.h */, 5517FE26263D49BC000219EC /* vtlb.cpp */, @@ -4727,15 +4611,6 @@ path = Iop; sourceTree = ""; }; - 5517FB77263D49BB000219EC /* PAD */ = { - isa = PBXGroup; - children = ( - 5517FBAF263D49BC000219EC /* Gamepad.h */, - 5580639227AB3261008CD5D2 /* Host */, - ); - path = PAD; - sourceTree = ""; - }; 5517FBE4263D49BC000219EC /* USB */ = { isa = PBXGroup; children = ( @@ -4887,7 +4762,10 @@ 5517FC91263D49BC000219EC /* GzippedFileReader.h */, 5517FCA1263D49BC000219EC /* InputIsoFile.cpp */, 5517FC8A263D49BC000219EC /* IsoFileFormats.h */, - 5517FCA9263D49BC000219EC /* IsoFS */, + 55DB5DB82B59163E00B3BD75 /* IsoHasher.cpp */, + 55DB5DB92B59163E00B3BD75 /* IsoHasher.h */, + 55DB5DBA2B59163E00B3BD75 /* IsoReader.cpp */, + 55DB5DBB2B59163E00B3BD75 /* IsoReader.h */, 5517FCA3263D49BC000219EC /* OutputIsoFile.cpp */, 5548492A288554210066EDEB /* Ps1CD.cpp */, 55484929288554210066EDEB /* Ps1CD.h */, @@ -4907,22 +4785,6 @@ path = Darwin; sourceTree = ""; }; - 5517FCA9263D49BC000219EC /* IsoFS */ = { - isa = PBXGroup; - children = ( - 5517FCAA263D49BC000219EC /* IsoFile.cpp */, - 5517FCAB263D49BC000219EC /* IsoFile.h */, - 5517FCAC263D49BC000219EC /* IsoFS.h */, - 5517FCAD263D49BC000219EC /* IsoFSCDVD.h */, - 5517FCAE263D49BC000219EC /* IsoFSCDVD.cpp */, - 5517FCAF263D49BC000219EC /* IsoFS.cpp */, - 5517FCB0263D49BC000219EC /* IsoDirectory.h */, - 5517FCB1263D49BC000219EC /* SectorSource.h */, - 5517FCB2263D49BC000219EC /* IsoFileDescriptor.h */, - ); - path = IsoFS; - sourceTree = ""; - }; 5517FCC8263D49BC000219EC /* SPU2 */ = { isa = PBXGroup; children = ( @@ -4983,7 +4845,6 @@ 5517FD0A263D49BC000219EC /* iR5900Move.h */, 5517FD28263D49BC000219EC /* iR5900MultDiv.h */, 5517FD12263D49BC000219EC /* iR5900Shift.h */, - 5517FD1C263D49BC000219EC /* ir5900tables.cpp */, 5517FD32263D49BC000219EC /* ix86-32 */, 5517FD40263D49BC000219EC /* microVU_Alloc.inl */, 5517FD23263D49BC000219EC /* microVU_Analyze.inl */, @@ -5017,17 +4878,17 @@ 5517FD32263D49BC000219EC /* ix86-32 */ = { isa = PBXGroup; children = ( + 55DB5DB32B59144300B3BD75 /* iCore.cpp */, + 55DB5DB22B59144300B3BD75 /* iR5900.cpp */, 5517FD33263D49BC000219EC /* iR5900Arit.cpp */, - 5517FD34263D49BC000219EC /* iR5900Jump.cpp */, - 5517FD35263D49BC000219EC /* iR5900Move.cpp */, + 5517FD3D263D49BC000219EC /* iR5900AritImm.cpp */, 5517FD36263D49BC000219EC /* iR5900Branch.cpp */, + 5517FD34263D49BC000219EC /* iR5900Jump.cpp */, 5517FD37263D49BC000219EC /* iR5900LoadStore.cpp */, - 5517FD38263D49BC000219EC /* iR5900Templates.cpp */, - 5517FD39263D49BC000219EC /* iCore-32.cpp */, - 5517FD3A263D49BC000219EC /* iR5900Shift.cpp */, + 5517FD35263D49BC000219EC /* iR5900Move.cpp */, 5517FD3B263D49BC000219EC /* iR5900MultDiv.cpp */, - 5517FD3C263D49BC000219EC /* iR5900-32.cpp */, - 5517FD3D263D49BC000219EC /* iR5900AritImm.cpp */, + 5517FD3A263D49BC000219EC /* iR5900Shift.cpp */, + 5517FD38263D49BC000219EC /* iR5900Templates.cpp */, 5517FD3E263D49BC000219EC /* recVTLB.cpp */, ); path = "ix86-32"; @@ -5081,7 +4942,6 @@ children = ( 551AA1082792AB1700658151 /* GS.cpp */, 551AA11C2792AB1700658151 /* GS.h */, - 551AA1212792AB1700658151 /* GSAlignedClass.cpp */, 551AA0FC2792AB1700658151 /* GSAlignedClass.h */, 551AA0F52792AB1700658151 /* GSBlock.cpp */, 551AA1002792AB1700658151 /* GSBlock.h */, @@ -5089,8 +4949,6 @@ 551AA0EF2792AB1700658151 /* GSCapture.h */, 551AA1152792AB1700658151 /* GSClut.cpp */, 551AA0F02792AB1700658151 /* GSClut.h */, - 551AA11D2792AB1700658151 /* GSCrc.cpp */, - 551AA0F82792AB1700658151 /* GSCrc.h */, 551AA0F22792AB1700658151 /* GSDrawingContext.cpp */, 551AA10A2792AB1700658151 /* GSDrawingContext.h */, 551AA0EE2792AB1700658151 /* GSDrawingEnvironment.h */, @@ -5098,7 +4956,7 @@ 551AA11A2792AB1700658151 /* GSDump.h */, 551AA1012792AB1700658151 /* GSExtra.h */, 551AA1172792AB1700658151 /* GSGL.h */, - 551AA0EC2792AB1700658151 /* GSIntrin.h */, + 55DB5DB62B59149000B3BD75 /* GSJobQueue.h */, 551AA1062792AB1700658151 /* GSLocalMemory.cpp */, 551AA0EA2792AB1700658151 /* GSLocalMemory.h */, 55B1EFD4295BA74200DB297F /* GSLocalMemoryMultiISA.cpp */, @@ -5115,8 +4973,6 @@ 551AA08A2792AB1700658151 /* GSState.h */, 551AA0F42792AB1700658151 /* GSTables.cpp */, 551AA0EB2792AB1700658151 /* GSTables.h */, - 551AA0FA2792AB1700658151 /* GSThread_CXX11.h */, - 551AA0882792AB1700658151 /* GSThread.h */, 551AA1072792AB1700658151 /* GSUtil.cpp */, 551AA0892792AB1700658151 /* GSUtil.h */, 551AA1142792AB1700658151 /* GSVector.cpp */, @@ -5157,7 +5013,6 @@ 551AA09F2792AB1700658151 /* GSDrawScanlineCodeGenerator.all.h */, 551AA0A12792AB1700658151 /* GSDrawScanlineCodeGenerator.cpp */, 551AA0902792AB1700658151 /* GSDrawScanlineCodeGenerator.h */, - 551AA0942792AB1700658151 /* GSNewCodeGenerator.cpp */, 551AA09B2792AB1700658151 /* GSNewCodeGenerator.h */, 551AA09D2792AB1700658151 /* GSRasterizer.cpp */, 551AA0A02792AB1700658151 /* GSRasterizer.h */, @@ -5170,9 +5025,6 @@ 551AA0A22792AB1700658151 /* GSSetupPrimCodeGenerator.h */, 551AA09E2792AB1700658151 /* GSTextureCacheSW.cpp */, 551AA0A32792AB1700658151 /* GSTextureCacheSW.h */, - 551AA0932792AB1700658151 /* GSTextureSW.cpp */, - 551AA09C2792AB1700658151 /* GSTextureSW.h */, - 551AA08E2792AB1700658151 /* GSVertexSW.cpp */, 551AA08F2792AB1700658151 /* GSVertexSW.h */, ); path = SW; @@ -5182,6 +5034,7 @@ isa = PBXGroup; children = ( 551AA0A92792AB1700658151 /* GSHwHack.cpp */, + 55DB5DB12B59136400B3BD75 /* GSHwHack.h */, 551AA0A82792AB1700658151 /* GSRendererHW.cpp */, 551AA0A72792AB1700658151 /* GSRendererHW.h */, 55B1F039295BAF0900DB297F /* GSRendererHWMultiISA.cpp */, @@ -5220,8 +5073,6 @@ 551AA0DD2792AB1700658151 /* OpenGL */ = { isa = PBXGroup; children = ( - 551AA0E22792AB1700658151 /* GLLoader.cpp */, - 551AA0DF2792AB1700658151 /* GLLoader.h */, 551AA0E12792AB1700658151 /* GLState.cpp */, 551AA0E62792AB1700658151 /* GLState.h */, 551AA0E72792AB1700658151 /* GSDeviceOGL.cpp */, @@ -5368,23 +5219,6 @@ path = DNS; sourceTree = ""; }; - 551AA4C027936D7400658151 /* GL */ = { - isa = PBXGroup; - children = ( - 551AA4C427936D7400658151 /* Context.cpp */, - 551AA4C727936D7400658151 /* Context.h */, - 551AA4C927936D7400658151 /* ContextAGL.h */, - 551AA4CE27936D7400658151 /* ContextAGL.mm */, - 5564D76B279A0CEA00EECDEC /* Program.cpp */, - 5564D768279A0CEA00EECDEC /* Program.h */, - 5564D769279A0CEA00EECDEC /* ShaderCache.cpp */, - 5564D76A279A0CEA00EECDEC /* ShaderCache.h */, - 551AA4C127936D7400658151 /* StreamBuffer.cpp */, - 551AA4CB27936D7400658151 /* StreamBuffer.h */, - ); - path = GL; - sourceTree = ""; - }; 551BE8872641EF4E0008C529 /* Linux */ = { isa = PBXGroup; children = ( @@ -5472,20 +5306,10 @@ 5548493C288555330066EDEB /* libzip */, 55484C7A288555370066EDEB /* libzip.vcxproj */, 5548493B288555330066EDEB /* libzip.vcxproj.filters */, - 55484938288555330066EDEB /* private */, - 55484C79288555370066EDEB /* zipconf.h */, ); path = libzip; sourceTree = ""; }; - 55484938288555330066EDEB /* private */ = { - isa = PBXGroup; - children = ( - 5548493A288555330066EDEB /* zip_err_str.c */, - ); - path = private; - sourceTree = ""; - }; 5548493C288555330066EDEB /* libzip */ = { isa = PBXGroup; children = ( @@ -6386,6 +6210,7 @@ 55484D2F2885595F0066EDEB /* private */ = { isa = PBXGroup; children = ( + 55DB5A752B59095D00B3BD75 /* zipconf.h */, 55484D302885595F0066EDEB /* config.h */, ); path = private; @@ -6418,7 +6243,6 @@ 5564D43B279A07D200EECDEC /* 0.1.0.md */, 5564D43C279A07D200EECDEC /* 0.2.3.md */, 5564D43D279A07D200EECDEC /* 0.2.2.md */, - 5564D43E279A07D200EECDEC /* current.md */, ); path = changelog; sourceTree = ""; @@ -6843,38 +6667,6 @@ path = std; sourceTree = ""; }; - 556FBB2A279E1067007B4F88 /* Frontend */ = { - isa = PBXGroup; - children = ( - 555BCB7A295CE2F5002E569F /* CommonHost.cpp */, - 555BCB79295CE2F5002E569F /* CommonHost.h */, - 556FBB31279E1067007B4F88 /* GameList.cpp */, - 556FBB3B279E1067007B4F88 /* GameList.h */, - 555BCB7C295CE4AC002E569F /* HostSettings.cpp */, - 556FBB36279E1067007B4F88 /* InputManager.cpp */, - 556FBB2C279E1067007B4F88 /* InputManager.h */, - 556FBB3F279E1067007B4F88 /* InputSource.cpp */, - 556FBB37279E1067007B4F88 /* InputSource.h */, - 556FBB39279E1067007B4F88 /* LayeredSettingsInterface.cpp */, - 556FBB38279E1067007B4F88 /* LayeredSettingsInterface.h */, - ); - path = Frontend; - sourceTree = ""; - }; - 5580639227AB3261008CD5D2 /* Host */ = { - isa = PBXGroup; - children = ( - 5580639327AB3261008CD5D2 /* Global.h */, - 5580639627AB3261008CD5D2 /* KeyStatus.cpp */, - 5580639927AB3261008CD5D2 /* KeyStatus.h */, - 5580639827AB3261008CD5D2 /* PAD.cpp */, - 5580639527AB3261008CD5D2 /* PAD.h */, - 5580639727AB3261008CD5D2 /* StateManagement.cpp */, - 5580639427AB3261008CD5D2 /* StateManagement.h */, - ); - path = Host; - sourceTree = ""; - }; 558063BD27AB4B9E008CD5D2 /* cubeb */ = { isa = PBXGroup; children = ( @@ -6995,6 +6787,7 @@ 558065CB27AD3A31008CD5D2 /* cover-placeholder.png */, 558065CC27AD3A31008CD5D2 /* fonts */, 558065B427AD3A31008CD5D2 /* game_controller_db.txt */, + 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */, 558065D127AD3A31008CD5D2 /* GameIndex.yaml */, 558065B527AD3A31008CD5D2 /* shaders */, ); @@ -7074,34 +6867,6 @@ path = docs; sourceTree = ""; }; - 5591D80F27B5BF170073E97D /* Vulkan */ = { - isa = PBXGroup; - children = ( - 5591D81027B5BF170073E97D /* Builders.cpp */, - 5591D82127B5BF170073E97D /* Builders.h */, - 5591D81627B5BF170073E97D /* Context.cpp */, - 5591D81727B5BF170073E97D /* Context.h */, - 5591D81527B5BF170073E97D /* EntryPoints.h */, - 5591D81A27B5BF170073E97D /* EntryPoints.inl */, - 5591D82227B5BF170073E97D /* Loader.cpp */, - 5591D81D27B5BF170073E97D /* Loader.h */, - 5591D81327B5BF170073E97D /* ShaderCache.cpp */, - 5591D82327B5BF170073E97D /* ShaderCache.h */, - 5591D82027B5BF170073E97D /* ShaderCompiler.cpp */, - 5591D81227B5BF170073E97D /* ShaderCompiler.h */, - 5591D81127B5BF170073E97D /* StreamBuffer.cpp */, - 5591D81C27B5BF170073E97D /* StreamBuffer.h */, - 5591D81B27B5BF170073E97D /* SwapChain.cpp */, - 5591D81827B5BF170073E97D /* SwapChain.h */, - 5591D81927B5BF170073E97D /* Texture.cpp */, - 5591D81F27B5BF170073E97D /* Texture.h */, - 5591D81427B5BF170073E97D /* Util.cpp */, - 5591D81E27B5BF170073E97D /* Util.h */, - 5591D82427B5BF170073E97D /* vk_mem_alloc.cpp */, - ); - path = Vulkan; - sourceTree = ""; - }; 5591D82527B5C12D0073E97D /* Vulkan */ = { isa = PBXGroup; children = ( @@ -7241,6 +7006,545 @@ path = "usb-lightgun"; sourceTree = ""; }; + 55DB5A7F2B590A6C00B3BD75 /* libwebp */ = { + isa = PBXGroup; + children = ( + 55DB5A912B590A6C00B3BD75 /* Android.mk */, + 55DB5AA62B590A6C00B3BD75 /* AUTHORS */, + 55DB5B1E2B590A6C00B3BD75 /* autogen.sh */, + 55DB5AA52B590A6C00B3BD75 /* ChangeLog */, + 55DB5A922B590A6C00B3BD75 /* CMakeLists.txt */, + 55DB5AB72B590A6C00B3BD75 /* codereview.settings */, + 55DB5ADB2B590A6C00B3BD75 /* CONTRIBUTING.md */, + 55DB5AD52B590A6C00B3BD75 /* COPYING */, + 55DB5AFB2B590A6C00B3BD75 /* doc */, + 55DB5AF72B590A6C00B3BD75 /* iosbuild.sh */, + 55DB5AB82B590A6C00B3BD75 /* Makefile.am */, + 55DB5AD72B590A6C00B3BD75 /* makefile.unix */, + 55DB5AA42B590A6C00B3BD75 /* Makefile.vc */, + 55DB5B082B590A6C00B3BD75 /* sharpyuv */, + 55DB5B1F2B590A6C00B3BD75 /* src */, + 55DB5ADA2B590A6C00B3BD75 /* xcframeworkbuild.sh */, + ); + name = libwebp; + path = libwebp/libwebp; + sourceTree = ""; + }; + 55DB5AFB2B590A6C00B3BD75 /* doc */ = { + isa = PBXGroup; + children = ( + 55DB5AFC2B590A6C00B3BD75 /* webp-lossless-bitstream-spec.txt */, + 55DB5AFD2B590A6C00B3BD75 /* api.md */, + 55DB5AFE2B590A6C00B3BD75 /* TODO */, + 55DB5AFF2B590A6C00B3BD75 /* template.html */, + 55DB5B002B590A6C00B3BD75 /* webp-container-spec.txt */, + 55DB5B012B590A6C00B3BD75 /* building.md */, + 55DB5B022B590A6C00B3BD75 /* specs_generation.md */, + 55DB5B032B590A6C00B3BD75 /* tools.md */, + ); + path = doc; + sourceTree = ""; + }; + 55DB5B082B590A6C00B3BD75 /* sharpyuv */ = { + isa = PBXGroup; + children = ( + 55DB5B092B590A6C00B3BD75 /* sharpyuv_gamma.c */, + 55DB5B0A2B590A6C00B3BD75 /* sharpyuv_sse2.c */, + 55DB5B0B2B590A6C00B3BD75 /* libsharpyuv.rc */, + 55DB5B0C2B590A6C00B3BD75 /* sharpyuv.c */, + 55DB5B0D2B590A6C00B3BD75 /* sharpyuv_csp.h */, + 55DB5B0E2B590A6C00B3BD75 /* sharpyuv_neon.c */, + 55DB5B0F2B590A6C00B3BD75 /* sharpyuv_dsp.h */, + 55DB5B102B590A6C00B3BD75 /* sharpyuv_cpu.h */, + 55DB5B112B590A6C00B3BD75 /* Makefile.am */, + 55DB5B122B590A6C00B3BD75 /* sharpyuv_gamma.h */, + 55DB5B132B590A6C00B3BD75 /* sharpyuv.h */, + 55DB5B142B590A6C00B3BD75 /* sharpyuv_csp.c */, + 55DB5B152B590A6C00B3BD75 /* sharpyuv_cpu.c */, + 55DB5B162B590A6C00B3BD75 /* libsharpyuv.pc.in */, + 55DB5B172B590A6C00B3BD75 /* sharpyuv_dsp.c */, + ); + path = sharpyuv; + sourceTree = ""; + }; + 55DB5B1F2B590A6C00B3BD75 /* src */ = { + isa = PBXGroup; + children = ( + 55DB5B772B590A6C00B3BD75 /* dec */, + 55DB5B702B590A6C00B3BD75 /* demux */, + 55DB5B892B590A6C00B3BD75 /* dsp */, + 55DB5B522B590A6C00B3BD75 /* enc */, + 55DB5B2A2B590A6C00B3BD75 /* libwebp.pc.in */, + 55DB5B762B590A6C00B3BD75 /* libwebp.rc */, + 55DB5B2C2B590A6C00B3BD75 /* libwebpdecoder.pc.in */, + 55DB5B2B2B590A6C00B3BD75 /* libwebpdecoder.rc */, + 55DB5B512B590A6C00B3BD75 /* Makefile.am */, + 55DB5B202B590A6C00B3BD75 /* mux */, + 55DB5B2D2B590A6C00B3BD75 /* utils */, + 55DB5B492B590A6C00B3BD75 /* webp */, + ); + path = src; + sourceTree = ""; + }; + 55DB5B202B590A6C00B3BD75 /* mux */ = { + isa = PBXGroup; + children = ( + 55DB5B212B590A6C00B3BD75 /* muxread.c */, + 55DB5B222B590A6C00B3BD75 /* muxinternal.c */, + 55DB5B232B590A6C00B3BD75 /* libwebpmux.rc */, + 55DB5B242B590A6C00B3BD75 /* Makefile.am */, + 55DB5B252B590A6C00B3BD75 /* anim_encode.c */, + 55DB5B262B590A6C00B3BD75 /* animi.h */, + 55DB5B272B590A6C00B3BD75 /* libwebpmux.pc.in */, + 55DB5B282B590A6C00B3BD75 /* muxedit.c */, + 55DB5B292B590A6C00B3BD75 /* muxi.h */, + ); + path = mux; + sourceTree = ""; + }; + 55DB5B2D2B590A6C00B3BD75 /* utils */ = { + isa = PBXGroup; + children = ( + 55DB5B2E2B590A6C00B3BD75 /* bit_writer_utils.c */, + 55DB5B2F2B590A6C00B3BD75 /* endian_inl_utils.h */, + 55DB5B302B590A6C00B3BD75 /* thread_utils.c */, + 55DB5B312B590A6C00B3BD75 /* utils.h */, + 55DB5B322B590A6C00B3BD75 /* bit_reader_utils.h */, + 55DB5B332B590A6C00B3BD75 /* bit_reader_inl_utils.h */, + 55DB5B342B590A6C00B3BD75 /* rescaler_utils.c */, + 55DB5B352B590A6C00B3BD75 /* quant_levels_utils.h */, + 55DB5B362B590A6C00B3BD75 /* quant_levels_dec_utils.h */, + 55DB5B372B590A6C00B3BD75 /* huffman_utils.c */, + 55DB5B382B590A6C00B3BD75 /* color_cache_utils.h */, + 55DB5B392B590A6C00B3BD75 /* filters_utils.h */, + 55DB5B3A2B590A6C00B3BD75 /* huffman_encode_utils.c */, + 55DB5B3B2B590A6C00B3BD75 /* random_utils.h */, + 55DB5B3C2B590A6C00B3BD75 /* rescaler_utils.h */, + 55DB5B3D2B590A6C00B3BD75 /* Makefile.am */, + 55DB5B3E2B590A6C00B3BD75 /* quant_levels_utils.c */, + 55DB5B3F2B590A6C00B3BD75 /* quant_levels_dec_utils.c */, + 55DB5B402B590A6C00B3BD75 /* bit_reader_utils.c */, + 55DB5B412B590A6C00B3BD75 /* thread_utils.h */, + 55DB5B422B590A6C00B3BD75 /* utils.c */, + 55DB5B432B590A6C00B3BD75 /* bit_writer_utils.h */, + 55DB5B442B590A6C00B3BD75 /* huffman_utils.h */, + 55DB5B452B590A6C00B3BD75 /* huffman_encode_utils.h */, + 55DB5B462B590A6C00B3BD75 /* color_cache_utils.c */, + 55DB5B472B590A6C00B3BD75 /* filters_utils.c */, + 55DB5B482B590A6C00B3BD75 /* random_utils.c */, + ); + path = utils; + sourceTree = ""; + }; + 55DB5B492B590A6C00B3BD75 /* webp */ = { + isa = PBXGroup; + children = ( + 55DB5B4A2B590A6C00B3BD75 /* format_constants.h */, + 55DB5B4B2B590A6C00B3BD75 /* mux.h */, + 55DB5B4C2B590A6C00B3BD75 /* types.h */, + 55DB5B4D2B590A6C00B3BD75 /* demux.h */, + 55DB5B4E2B590A6C00B3BD75 /* mux_types.h */, + 55DB5B4F2B590A6C00B3BD75 /* encode.h */, + 55DB5B502B590A6C00B3BD75 /* decode.h */, + ); + path = webp; + sourceTree = ""; + }; + 55DB5B522B590A6C00B3BD75 /* enc */ = { + isa = PBXGroup; + children = ( + 55DB5B532B590A6C00B3BD75 /* iterator_enc.c */, + 55DB5B542B590A6C00B3BD75 /* backward_references_enc.h */, + 55DB5B552B590A6C00B3BD75 /* cost_enc.c */, + 55DB5B562B590A6C00B3BD75 /* alpha_enc.c */, + 55DB5B572B590A6C00B3BD75 /* histogram_enc.h */, + 55DB5B582B590A6C00B3BD75 /* picture_psnr_enc.c */, + 55DB5B592B590A6C00B3BD75 /* token_enc.c */, + 55DB5B5A2B590A6C00B3BD75 /* vp8i_enc.h */, + 55DB5B5B2B590A6C00B3BD75 /* tree_enc.c */, + 55DB5B5C2B590A6C00B3BD75 /* filter_enc.c */, + 55DB5B5D2B590A6C00B3BD75 /* picture_csp_enc.c */, + 55DB5B5E2B590A6C00B3BD75 /* frame_enc.c */, + 55DB5B5F2B590A6C00B3BD75 /* syntax_enc.c */, + 55DB5B602B590A6C00B3BD75 /* cost_enc.h */, + 55DB5B612B590A6C00B3BD75 /* Makefile.am */, + 55DB5B622B590A6C00B3BD75 /* predictor_enc.c */, + 55DB5B632B590A6C00B3BD75 /* config_enc.c */, + 55DB5B642B590A6C00B3BD75 /* backward_references_enc.c */, + 55DB5B652B590A6C00B3BD75 /* picture_tools_enc.c */, + 55DB5B662B590A6C00B3BD75 /* webp_enc.c */, + 55DB5B672B590A6C00B3BD75 /* vp8l_enc.c */, + 55DB5B682B590A6C00B3BD75 /* histogram_enc.c */, + 55DB5B692B590A6C00B3BD75 /* analysis_enc.c */, + 55DB5B6A2B590A6C00B3BD75 /* vp8li_enc.h */, + 55DB5B6B2B590A6C00B3BD75 /* quant_enc.c */, + 55DB5B6C2B590A6C00B3BD75 /* near_lossless_enc.c */, + 55DB5B6D2B590A6C00B3BD75 /* picture_enc.c */, + 55DB5B6E2B590A6C00B3BD75 /* backward_references_cost_enc.c */, + 55DB5B6F2B590A6C00B3BD75 /* picture_rescale_enc.c */, + ); + path = enc; + sourceTree = ""; + }; + 55DB5B702B590A6C00B3BD75 /* demux */ = { + isa = PBXGroup; + children = ( + 55DB5B712B590A6C00B3BD75 /* demux.c */, + 55DB5B722B590A6C00B3BD75 /* libwebpdemux.rc */, + 55DB5B732B590A6C00B3BD75 /* Makefile.am */, + 55DB5B742B590A6C00B3BD75 /* anim_decode.c */, + 55DB5B752B590A6C00B3BD75 /* libwebpdemux.pc.in */, + ); + path = demux; + sourceTree = ""; + }; + 55DB5B772B590A6C00B3BD75 /* dec */ = { + isa = PBXGroup; + children = ( + 55DB5B782B590A6C00B3BD75 /* io_dec.c */, + 55DB5B792B590A6C00B3BD75 /* frame_dec.c */, + 55DB5B7A2B590A6C00B3BD75 /* tree_dec.c */, + 55DB5B7B2B590A6C00B3BD75 /* vp8i_dec.h */, + 55DB5B7C2B590A6C00B3BD75 /* vp8_dec.h */, + 55DB5B7D2B590A6C00B3BD75 /* alpha_dec.c */, + 55DB5B7E2B590A6C00B3BD75 /* common_dec.h */, + 55DB5B7F2B590A6C00B3BD75 /* Makefile.am */, + 55DB5B802B590A6C00B3BD75 /* buffer_dec.c */, + 55DB5B812B590A6C00B3BD75 /* quant_dec.c */, + 55DB5B822B590A6C00B3BD75 /* vp8li_dec.h */, + 55DB5B832B590A6C00B3BD75 /* idec_dec.c */, + 55DB5B842B590A6C00B3BD75 /* webp_dec.c */, + 55DB5B852B590A6C00B3BD75 /* vp8l_dec.c */, + 55DB5B862B590A6C00B3BD75 /* alphai_dec.h */, + 55DB5B872B590A6C00B3BD75 /* vp8_dec.c */, + 55DB5B882B590A6C00B3BD75 /* webpi_dec.h */, + ); + path = dec; + sourceTree = ""; + }; + 55DB5B892B590A6C00B3BD75 /* dsp */ = { + isa = PBXGroup; + children = ( + 55DB5B8A2B590A6C00B3BD75 /* upsampling.c */, + 55DB5B8B2B590A6C00B3BD75 /* lossless_sse2.c */, + 55DB5B8C2B590A6C00B3BD75 /* lossless.h */, + 55DB5B8D2B590A6C00B3BD75 /* lossless_enc_mips_dsp_r2.c */, + 55DB5B8E2B590A6C00B3BD75 /* enc_msa.c */, + 55DB5B8F2B590A6C00B3BD75 /* msa_macro.h */, + 55DB5B902B590A6C00B3BD75 /* neon.h */, + 55DB5B912B590A6C00B3BD75 /* filters_mips_dsp_r2.c */, + 55DB5B922B590A6C00B3BD75 /* rescaler.c */, + 55DB5B932B590A6C00B3BD75 /* dec_mips_dsp_r2.c */, + 55DB5B942B590A6C00B3BD75 /* rescaler_neon.c */, + 55DB5B952B590A6C00B3BD75 /* cost_sse2.c */, + 55DB5B962B590A6C00B3BD75 /* upsampling_sse41.c */, + 55DB5B972B590A6C00B3BD75 /* enc_sse41.c */, + 55DB5B982B590A6C00B3BD75 /* lossless_enc_sse41.c */, + 55DB5B992B590A6C00B3BD75 /* upsampling_neon.c */, + 55DB5B9A2B590A6C00B3BD75 /* filters_sse2.c */, + 55DB5B9B2B590A6C00B3BD75 /* lossless_mips_dsp_r2.c */, + 55DB5B9C2B590A6C00B3BD75 /* enc_mips_dsp_r2.c */, + 55DB5B9D2B590A6C00B3BD75 /* cpu.c */, + 55DB5B9E2B590A6C00B3BD75 /* yuv_neon.c */, + 55DB5B9F2B590A6C00B3BD75 /* alpha_processing.c */, + 55DB5BA02B590A6C00B3BD75 /* yuv.h */, + 55DB5BA12B590A6C00B3BD75 /* quant.h */, + 55DB5BA22B590A6C00B3BD75 /* cost_neon.c */, + 55DB5BA32B590A6C00B3BD75 /* enc_mips32.c */, + 55DB5BA42B590A6C00B3BD75 /* filters_neon.c */, + 55DB5BA52B590A6C00B3BD75 /* upsampling_sse2.c */, + 55DB5BA62B590A6C00B3BD75 /* yuv_sse2.c */, + 55DB5BA72B590A6C00B3BD75 /* filters_msa.c */, + 55DB5BA82B590A6C00B3BD75 /* mips_macro.h */, + 55DB5BA92B590A6C00B3BD75 /* rescaler_msa.c */, + 55DB5BAA2B590A6C00B3BD75 /* lossless_neon.c */, + 55DB5BAB2B590A6C00B3BD75 /* lossless_enc_msa.c */, + 55DB5BAC2B590A6C00B3BD75 /* filters.c */, + 55DB5BAD2B590A6C00B3BD75 /* alpha_processing_mips_dsp_r2.c */, + 55DB5BAE2B590A6C00B3BD75 /* rescaler_mips_dsp_r2.c */, + 55DB5BAF2B590A6C00B3BD75 /* ssim_sse2.c */, + 55DB5BB02B590A6C00B3BD75 /* rescaler_mips32.c */, + 55DB5BB12B590A6C00B3BD75 /* dec_sse41.c */, + 55DB5BB22B590A6C00B3BD75 /* lossless_sse41.c */, + 55DB5BB32B590A6C00B3BD75 /* yuv_sse41.c */, + 55DB5BB42B590A6C00B3BD75 /* rescaler_sse2.c */, + 55DB5BB52B590A6C00B3BD75 /* Makefile.am */, + 55DB5BB62B590A6C00B3BD75 /* lossless_enc.c */, + 55DB5BB72B590A6C00B3BD75 /* yuv_mips_dsp_r2.c */, + 55DB5BB82B590A6C00B3BD75 /* alpha_processing_neon.c */, + 55DB5BB92B590A6C00B3BD75 /* dec.c */, + 55DB5BBA2B590A6C00B3BD75 /* lossless.c */, + 55DB5BBB2B590A6C00B3BD75 /* ssim.c */, + 55DB5BBC2B590A6C00B3BD75 /* upsampling_msa.c */, + 55DB5BBD2B590A6C00B3BD75 /* lossless_enc_sse2.c */, + 55DB5BBE2B590A6C00B3BD75 /* yuv.c */, + 55DB5BBF2B590A6C00B3BD75 /* enc_neon.c */, + 55DB5BC02B590A6C00B3BD75 /* cpu.h */, + 55DB5BC12B590A6C00B3BD75 /* dec_sse2.c */, + 55DB5BC22B590A6C00B3BD75 /* dsp.h */, + 55DB5BC32B590A6C00B3BD75 /* enc_sse2.c */, + 55DB5BC42B590A6C00B3BD75 /* lossless_enc_neon.c */, + 55DB5BC52B590A6C00B3BD75 /* lossless_common.h */, + 55DB5BC62B590A6C00B3BD75 /* cost_mips32.c */, + 55DB5BC72B590A6C00B3BD75 /* alpha_processing_sse41.c */, + 55DB5BC82B590A6C00B3BD75 /* dec_neon.c */, + 55DB5BC92B590A6C00B3BD75 /* cost.c */, + 55DB5BCA2B590A6C00B3BD75 /* dec_mips32.c */, + 55DB5BCB2B590A6C00B3BD75 /* cost_mips_dsp_r2.c */, + 55DB5BCC2B590A6C00B3BD75 /* alpha_processing_sse2.c */, + 55DB5BCD2B590A6C00B3BD75 /* dec_clip_tables.c */, + 55DB5BCE2B590A6C00B3BD75 /* lossless_msa.c */, + 55DB5BCF2B590A6C00B3BD75 /* enc.c */, + 55DB5BD02B590A6C00B3BD75 /* common_sse2.h */, + 55DB5BD12B590A6C00B3BD75 /* lossless_enc_mips32.c */, + 55DB5BD22B590A6C00B3BD75 /* common_sse41.h */, + 55DB5BD32B590A6C00B3BD75 /* yuv_mips32.c */, + 55DB5BD42B590A6C00B3BD75 /* upsampling_mips_dsp_r2.c */, + 55DB5BD52B590A6C00B3BD75 /* dec_msa.c */, + ); + path = dsp; + sourceTree = ""; + }; + 55DB5CDE2B590FF200B3BD75 /* cpuinfo */ = { + isa = PBXGroup; + children = ( + 55DB5CEB2B590FF200B3BD75 /* deps */, + 55DB5CE52B590FF200B3BD75 /* include */, + 55DB5CF62B590FF200B3BD75 /* src */, + ); + path = cpuinfo; + sourceTree = ""; + }; + 55DB5CE52B590FF200B3BD75 /* include */ = { + isa = PBXGroup; + children = ( + 55DB5CE62B590FF200B3BD75 /* cpuinfo.h */, + 55DB5CE72B590FF200B3BD75 /* cpuinfo-mock.h */, + ); + path = include; + sourceTree = ""; + }; + 55DB5CEB2B590FF200B3BD75 /* deps */ = { + isa = PBXGroup; + children = ( + 55DB5CEC2B590FF200B3BD75 /* clog */, + ); + path = deps; + sourceTree = ""; + }; + 55DB5CEC2B590FF200B3BD75 /* clog */ = { + isa = PBXGroup; + children = ( + 55DB5CED2B590FF200B3BD75 /* CMakeLists.txt */, + 55DB5CEE2B590FF200B3BD75 /* LICENSE */, + 55DB5CEF2B590FF200B3BD75 /* include */, + 55DB5CF12B590FF200B3BD75 /* README.md */, + 55DB5CF22B590FF200B3BD75 /* .gitignore */, + 55DB5CF32B590FF200B3BD75 /* src */, + ); + path = clog; + sourceTree = ""; + }; + 55DB5CEF2B590FF200B3BD75 /* include */ = { + isa = PBXGroup; + children = ( + 55DB5CF02B590FF200B3BD75 /* clog.h */, + ); + path = include; + sourceTree = ""; + }; + 55DB5CF32B590FF200B3BD75 /* src */ = { + isa = PBXGroup; + children = ( + 55DB5CF42B590FF200B3BD75 /* clog.c */, + ); + path = src; + sourceTree = ""; + }; + 55DB5CF62B590FF200B3BD75 /* src */ = { + isa = PBXGroup; + children = ( + 55DB5CF82B590FF200B3BD75 /* api.c */, + 55DB5D1F2B590FF300B3BD75 /* arm */, + 55DB5D1E2B590FF300B3BD75 /* cache.c */, + 55DB5D412B590FF300B3BD75 /* cpuinfo */, + 55DB5CF92B590FF200B3BD75 /* init.c */, + 55DB5CF72B590FF200B3BD75 /* log.c */, + 55DB5D1B2B590FF300B3BD75 /* mach */, + 55DB5CFC2B590FF200B3BD75 /* x86 */, + ); + path = src; + sourceTree = ""; + }; + 55DB5CFC2B590FF200B3BD75 /* x86 */ = { + isa = PBXGroup; + children = ( + 55DB5CFD2B590FF200B3BD75 /* cache */, + 55DB5D012B590FF200B3BD75 /* cpuid.h */, + 55DB5D022B590FF200B3BD75 /* init.c */, + 55DB5D032B590FF200B3BD75 /* vendor.c */, + 55DB5D042B590FF200B3BD75 /* info.c */, + 55DB5D052B590FF200B3BD75 /* topology.c */, + 55DB5D062B590FF200B3BD75 /* mockcpuid.c */, + 55DB5D072B590FF200B3BD75 /* uarch.c */, + 55DB5D082B590FF200B3BD75 /* api.h */, + 55DB5D0D2B590FF200B3BD75 /* name.c */, + 55DB5D0E2B590FF200B3BD75 /* isa.c */, + 55DB5D0F2B590FF300B3BD75 /* mach */, + ); + path = x86; + sourceTree = ""; + }; + 55DB5CFD2B590FF200B3BD75 /* cache */ = { + isa = PBXGroup; + children = ( + 55DB5CFE2B590FF200B3BD75 /* deterministic.c */, + 55DB5CFF2B590FF200B3BD75 /* init.c */, + 55DB5D002B590FF200B3BD75 /* descriptor.c */, + ); + path = cache; + sourceTree = ""; + }; + 55DB5D0F2B590FF300B3BD75 /* mach */ = { + isa = PBXGroup; + children = ( + 55DB5D102B590FF300B3BD75 /* init.c */, + ); + path = mach; + sourceTree = ""; + }; + 55DB5D1B2B590FF300B3BD75 /* mach */ = { + isa = PBXGroup; + children = ( + 55DB5D1C2B590FF300B3BD75 /* topology.c */, + 55DB5D1D2B590FF300B3BD75 /* api.h */, + ); + path = mach; + sourceTree = ""; + }; + 55DB5D1F2B590FF300B3BD75 /* arm */ = { + isa = PBXGroup; + children = ( + 55DB5D202B590FF300B3BD75 /* midr.h */, + 55DB5D212B590FF300B3BD75 /* uarch.c */, + 55DB5D222B590FF300B3BD75 /* api.h */, + 55DB5D312B590FF300B3BD75 /* mach */, + 55DB5D332B590FF300B3BD75 /* cache.c */, + 55DB5D382B590FF300B3BD75 /* tlb.c */, + ); + path = arm; + sourceTree = ""; + }; + 55DB5D312B590FF300B3BD75 /* mach */ = { + isa = PBXGroup; + children = ( + 55DB5D322B590FF300B3BD75 /* init.c */, + ); + path = mach; + sourceTree = ""; + }; + 55DB5D412B590FF300B3BD75 /* cpuinfo */ = { + isa = PBXGroup; + children = ( + 55DB5D422B590FF300B3BD75 /* utils.h */, + 55DB5D432B590FF300B3BD75 /* internal-api.h */, + 55DB5D442B590FF300B3BD75 /* common.h */, + 55DB5D452B590FF300B3BD75 /* log.h */, + ); + path = cpuinfo; + sourceTree = ""; + }; + 55DB5D892B59127500B3BD75 /* src */ = { + isa = PBXGroup; + children = ( + 55DB5D8A2B59127500B3BD75 /* libchdr_chd.c */, + 55DB5D8B2B59127500B3BD75 /* libchdr_bitstream.c */, + 55DB5D8C2B59127500B3BD75 /* libchdr_huffman.c */, + 55DB5D8D2B59127500B3BD75 /* libchdr_flac.c */, + 55DB5D8E2B59127500B3BD75 /* libchdr_cdrom.c */, + ); + path = src; + sourceTree = ""; + }; + 55DB5D942B59127600B3BD75 /* include */ = { + isa = PBXGroup; + children = ( + 55DB5D952B59127600B3BD75 /* libchdr */, + 55DB5D9D2B59127600B3BD75 /* dr_libs */, + ); + path = include; + sourceTree = ""; + }; + 55DB5D952B59127600B3BD75 /* libchdr */ = { + isa = PBXGroup; + children = ( + 55DB5D982B59127600B3BD75 /* bitstream.h */, + 55DB5D992B59127600B3BD75 /* cdrom.h */, + 55DB5D9A2B59127600B3BD75 /* chd.h */, + 55DB5D972B59127600B3BD75 /* chdconfig.h */, + 55DB5D9C2B59127600B3BD75 /* coretypes.h */, + 55DB5D962B59127600B3BD75 /* flac.h */, + 55DB5D9B2B59127600B3BD75 /* huffman.h */, + ); + path = libchdr; + sourceTree = ""; + }; + 55DB5D9D2B59127600B3BD75 /* dr_libs */ = { + isa = PBXGroup; + children = ( + 55DB5D9E2B59127600B3BD75 /* dr_flac.h */, + ); + path = dr_libs; + sourceTree = ""; + }; + 55DB5DC92B59174800B3BD75 /* lz4 */ = { + isa = PBXGroup; + children = ( + 55DB5DCB2B59174800B3BD75 /* lz4 */, + ); + path = lz4; + sourceTree = ""; + }; + 55DB5DCB2B59174800B3BD75 /* lz4 */ = { + isa = PBXGroup; + children = ( + 55DB5E212B59174800B3BD75 /* appveyor.yml */, + 55DB5DCC2B59174800B3BD75 /* INSTALL */, + 55DB5E422B59174900B3BD75 /* lib */, + 55DB5DCD2B59174800B3BD75 /* LICENSE */, + 55DB5DCE2B59174800B3BD75 /* Makefile */, + 55DB5E602B59174900B3BD75 /* Makefile.inc */, + 55DB5E222B59174800B3BD75 /* NEWS */, + 55DB5E0F2B59174800B3BD75 /* README.md */, + 55DB5EDB2B59174900B3BD75 /* SECURITY.md */, + ); + path = lz4; + sourceTree = ""; + }; + 55DB5E422B59174900B3BD75 /* lib */ = { + isa = PBXGroup; + children = ( + 55DB5E4D2B59174900B3BD75 /* .gitignore */, + 55DB5E432B59174900B3BD75 /* liblz4-dll.rc.in */, + 55DB5E572B59174900B3BD75 /* liblz4.pc.in */, + 55DB5E452B59174900B3BD75 /* LICENSE */, + 55DB5E562B59174900B3BD75 /* lz4.c */, + 55DB5E492B59174900B3BD75 /* lz4.h */, + 55DB5E592B59174900B3BD75 /* lz4file.c */, + 55DB5E4A2B59174900B3BD75 /* lz4file.h */, + 55DB5E4E2B59174900B3BD75 /* lz4frame_static.h */, + 55DB5E482B59174900B3BD75 /* lz4frame.c */, + 55DB5E582B59174900B3BD75 /* lz4frame.h */, + 55DB5E462B59174900B3BD75 /* lz4hc.c */, + 55DB5E4F2B59174900B3BD75 /* lz4hc.h */, + 55DB5E472B59174900B3BD75 /* Makefile */, + 55DB5E4B2B59174900B3BD75 /* README.md */, + 55DB5E4C2B59174900B3BD75 /* xxhash.c */, + 55DB5E442B59174900B3BD75 /* xxhash.h */, + ); + path = lib; + sourceTree = ""; + }; DD0302B327C491020006ABDC /* Audio */ = { isa = PBXGroup; children = ( @@ -7336,6 +7640,7 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 55DB5DB72B59149000B3BD75 /* GSJobQueue.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7416,6 +7721,7 @@ 55484CC5288555800066EDEB /* zip_crypto.h in Headers */, 55484CF6288555800066EDEB /* zip_source_file.h in Headers */, 55484CBE288555800066EDEB /* zip_source_file_stdio.h in Headers */, + 55DB5A762B59095D00B3BD75 /* zipconf.h in Headers */, 55484D312885595F0066EDEB /* config.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; @@ -7435,6 +7741,95 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 55DB5A772B590A2700B3BD75 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5CBF2B590A6D00B3BD75 /* common_sse41.h in Headers */, + 55DB5C442B590A6D00B3BD75 /* mux.h in Headers */, + 55DB5C492B590A6D00B3BD75 /* decode.h in Headers */, + 55DB5C8F2B590A6D00B3BD75 /* quant.h in Headers */, + 55DB5C1A2B590A6D00B3BD75 /* sharpyuv_csp.h in Headers */, + 55DB5C1F2B590A6D00B3BD75 /* sharpyuv.h in Headers */, + 55DB5C8E2B590A6D00B3BD75 /* yuv.h in Headers */, + 55DB5C262B590A6D00B3BD75 /* animi.h in Headers */, + 55DB5C342B590A6D00B3BD75 /* filters_utils.h in Headers */, + 55DB5C7E2B590A6D00B3BD75 /* neon.h in Headers */, + 55DB5C7A2B590A6D00B3BD75 /* lossless.h in Headers */, + 55DB5C2D2B590A6D00B3BD75 /* bit_reader_utils.h in Headers */, + 55DB5C462B590A6D00B3BD75 /* demux.h in Headers */, + 55DB5C6B2B590A6D00B3BD75 /* vp8i_dec.h in Headers */, + 55DB5C1D2B590A6D00B3BD75 /* sharpyuv_cpu.h in Headers */, + 55DB5C302B590A6D00B3BD75 /* quant_levels_utils.h in Headers */, + 55DB5CBD2B590A6D00B3BD75 /* common_sse2.h in Headers */, + 55DB5CAF2B590A6D00B3BD75 /* dsp.h in Headers */, + 55DB5C472B590A6D00B3BD75 /* mux_types.h in Headers */, + 55DB5C282B590A6D00B3BD75 /* muxi.h in Headers */, + 55DB5C1E2B590A6D00B3BD75 /* sharpyuv_gamma.h in Headers */, + 55DB5C602B590A6D00B3BD75 /* vp8li_enc.h in Headers */, + 55DB5C482B590A6D00B3BD75 /* encode.h in Headers */, + 55DB5C3E2B590A6D00B3BD75 /* huffman_utils.h in Headers */, + 55DB5C2A2B590A6D00B3BD75 /* endian_inl_utils.h in Headers */, + 55DB5CAD2B590A6D00B3BD75 /* cpu.h in Headers */, + 55DB5C4B2B590A6D00B3BD75 /* backward_references_enc.h in Headers */, + 55DB5C1C2B590A6D00B3BD75 /* sharpyuv_dsp.h in Headers */, + 55DB5C3D2B590A6D00B3BD75 /* bit_writer_utils.h in Headers */, + 55DB5C4E2B590A6D00B3BD75 /* histogram_enc.h in Headers */, + 55DB5C772B590A6D00B3BD75 /* webpi_dec.h in Headers */, + 55DB5C2C2B590A6D00B3BD75 /* utils.h in Headers */, + 55DB5C962B590A6D00B3BD75 /* mips_macro.h in Headers */, + 55DB5CB22B590A6D00B3BD75 /* lossless_common.h in Headers */, + 55DB5C332B590A6D00B3BD75 /* color_cache_utils.h in Headers */, + 55DB5C712B590A6D00B3BD75 /* vp8li_dec.h in Headers */, + 55DB5C2E2B590A6D00B3BD75 /* bit_reader_inl_utils.h in Headers */, + 55DB5C6E2B590A6D00B3BD75 /* common_dec.h in Headers */, + 55DB5C452B590A6D00B3BD75 /* types.h in Headers */, + 55DB5C3F2B590A6D00B3BD75 /* huffman_encode_utils.h in Headers */, + 55DB5C752B590A6D00B3BD75 /* alphai_dec.h in Headers */, + 55DB5C372B590A6D00B3BD75 /* rescaler_utils.h in Headers */, + 55DB5C362B590A6D00B3BD75 /* random_utils.h in Headers */, + 55DB5C572B590A6D00B3BD75 /* cost_enc.h in Headers */, + 55DB5C312B590A6D00B3BD75 /* quant_levels_dec_utils.h in Headers */, + 55DB5C3B2B590A6D00B3BD75 /* thread_utils.h in Headers */, + 55DB5C432B590A6D00B3BD75 /* format_constants.h in Headers */, + 55DB5C7D2B590A6D00B3BD75 /* msa_macro.h in Headers */, + 55DB5C6C2B590A6D00B3BD75 /* vp8_dec.h in Headers */, + 55DB5C512B590A6D00B3BD75 /* vp8i_enc.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5CD62B590FBB00B3BD75 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5D852B590FF300B3BD75 /* utils.h in Headers */, + 55DB5D6C2B590FF300B3BD75 /* api.h in Headers */, + 55DB5D6A2B590FF300B3BD75 /* midr.h in Headers */, + 55DB5D462B590FF300B3BD75 /* cpuinfo.h in Headers */, + 55DB5D482B590FF300B3BD75 /* clog.h in Headers */, + 55DB5D582B590FF300B3BD75 /* api.h in Headers */, + 55DB5D862B590FF300B3BD75 /* internal-api.h in Headers */, + 55DB5D872B590FF300B3BD75 /* common.h in Headers */, + 55DB5D682B590FF300B3BD75 /* api.h in Headers */, + 55DB5D882B590FF300B3BD75 /* log.h in Headers */, + 55DB5D512B590FF300B3BD75 /* cpuid.h in Headers */, + 55DB5D472B590FF300B3BD75 /* cpuinfo-mock.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5DC12B59173400B3BD75 /* Headers */ = { + isa = PBXHeadersBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5F0D2B59174900B3BD75 /* lz4frame.h in Headers */, + 55DB5F072B59174900B3BD75 /* lz4file.h in Headers */, + 55DB5F092B59174900B3BD75 /* lz4frame_static.h in Headers */, + 55DB5F022B59174900B3BD75 /* xxhash.h in Headers */, + 55DB5F062B59174900B3BD75 /* lz4.h in Headers */, + 55DB5F0A2B59174900B3BD75 /* lz4hc.h in Headers */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ @@ -7454,6 +7849,9 @@ buildRules = ( ); dependencies = ( + 55DB5F232B5917AE00B3BD75 /* PBXTargetDependency */, + 55DB5DBF2B59171C00B3BD75 /* PBXTargetDependency */, + 55DB5CCD2B590AEC00B3BD75 /* PBXTargetDependency */, 55B1EFF9295BAA7A00DB297F /* PBXTargetDependency */, 55484D2A288555E10066EDEB /* PBXTargetDependency */, 55484D2C288555E10066EDEB /* PBXTargetDependency */, @@ -7680,6 +8078,57 @@ productReference = 55B1EFF2295BAA4700DB297F /* libjpgd.a */; productType = "com.apple.product-type.library.static"; }; + 55DB5A7A2B590A2700B3BD75 /* webp-pcsx2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55DB5A7C2B590A2700B3BD75 /* Build configuration list for PBXNativeTarget "webp-pcsx2" */; + buildPhases = ( + 55DB5A772B590A2700B3BD75 /* Headers */, + 55DB5A782B590A2700B3BD75 /* Sources */, + 55DB5A792B590A2700B3BD75 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "webp-pcsx2"; + productName = "webp-pcsx2"; + productReference = 55DB5A7B2B590A2700B3BD75 /* libwebp-pcsx2.a */; + productType = "com.apple.product-type.library.static"; + }; + 55DB5CD92B590FBB00B3BD75 /* cpuinfo-pcsx2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55DB5CDB2B590FBB00B3BD75 /* Build configuration list for PBXNativeTarget "cpuinfo-pcsx2" */; + buildPhases = ( + 55DB5CD62B590FBB00B3BD75 /* Headers */, + 55DB5CD72B590FBB00B3BD75 /* Sources */, + 55DB5CD82B590FBB00B3BD75 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "cpuinfo-pcsx2"; + productName = "cpuinfo-pcsx2"; + productReference = 55DB5CDA2B590FBB00B3BD75 /* libcpuinfo-pcsx2.a */; + productType = "com.apple.product-type.library.static"; + }; + 55DB5DC42B59173400B3BD75 /* lz4-pcsx2 */ = { + isa = PBXNativeTarget; + buildConfigurationList = 55DB5DC62B59173500B3BD75 /* Build configuration list for PBXNativeTarget "lz4-pcsx2" */; + buildPhases = ( + 55DB5DC12B59173400B3BD75 /* Headers */, + 55DB5DC22B59173400B3BD75 /* Sources */, + 55DB5DC32B59173400B3BD75 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = "lz4-pcsx2"; + productName = "lz4-pcsx2"; + productReference = 55DB5DC52B59173400B3BD75 /* liblz4-pcsx2.a */; + productType = "com.apple.product-type.library.static"; + }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -7728,6 +8177,15 @@ 55B1EFF1295BAA4700DB297F = { CreatedOnToolsVersion = 14.2; }; + 55DB5A7A2B590A2700B3BD75 = { + CreatedOnToolsVersion = 15.2; + }; + 55DB5CD92B590FBB00B3BD75 = { + CreatedOnToolsVersion = 15.2; + }; + 55DB5DC42B59173400B3BD75 = { + CreatedOnToolsVersion = 15.2; + }; }; }; buildConfigurationList = 5517E8AF263D4213000219EC /* Build configuration list for PBXProject "PCSX2" */; @@ -7757,6 +8215,9 @@ 551AA4D92793734900658151 /* glad-pcsx2 */, 5580651827AB4BBE008CD5D2 /* cubeb-pcsx2 */, 55B1EFF1295BAA4700DB297F /* jpgd */, + 55DB5A7A2B590A2700B3BD75 /* webp-pcsx2 */, + 55DB5CD92B590FBB00B3BD75 /* cpuinfo-pcsx2 */, + 55DB5DC42B59173400B3BD75 /* lz4-pcsx2 */, ); }; /* End PBXProject section */ @@ -7767,6 +8228,7 @@ buildActionMask = 2147483647; files = ( 550E0D462640C702008A1E48 /* PCSX2.icns in Resources */, + 55DB5A352B59027B00B3BD75 /* RedumpDatabase.yaml in Resources */, 5580662F27AD3A5D008CD5D2 /* GameIndex.yaml in Resources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -7855,8 +8317,8 @@ 551BF58526420E9A0008C529 /* SourceLog.cpp in Sources */, 551BF5CE264212070008C529 /* IPU_Fifo.cpp in Sources */, 551BF5D4264212270008C529 /* Mdec.cpp in Sources */, - 551AA4CF27936D7400658151 /* StreamBuffer.cpp in Sources */, 551BF619264214530008C529 /* iFPUd.cpp in Sources */, + 55DB5DBD2B59163F00B3BD75 /* IsoReader.cpp in Sources */, 55BD3E7E295A5ABC001DD03E /* cas.metal in Sources */, 551BF5C7264211540008C529 /* os.cc in Sources */, 551BF59026420E9A0008C529 /* SPR.cpp in Sources */, @@ -7867,7 +8329,6 @@ 551BF6812642408B0008C529 /* IOCtlSrc.cpp in Sources */, 551AA4AC27935E9100658151 /* DHCP_Options.cpp in Sources */, DDE1B42D298C68210028DF05 /* usb-pad.cpp in Sources */, - 555BCB7B295CE2F5002E569F /* CommonHost.cpp in Sources */, 55B1F014295BACF000DB297F /* TCP_Options.cpp in Sources */, 551BF57126420E720008C529 /* VUflags.cpp in Sources */, 551BF5BF264210A30008C529 /* FPU.cpp in Sources */, @@ -7875,7 +8336,6 @@ 551AA12B2792AB1700658151 /* GSRasterizer.cpp in Sources */, DD771F8D298AE19F007BE4EA /* GSDeviceMTL.mm in Sources */, 551AA4E22793756000658151 /* Pcsx2Config.cpp in Sources */, - 551AA4F027938D6900658151 /* GSNewCodeGenerator.cpp in Sources */, 551AA12C2792AB1700658151 /* GSTextureCacheSW.cpp in Sources */, 551BF5B326420FA50008C529 /* IopMem.cpp in Sources */, 55B1EFD3295BA71D00DB297F /* GSXXH.cpp in Sources */, @@ -7887,7 +8347,6 @@ 551AA12F2792AB1700658151 /* GSRendererHW.cpp in Sources */, 55B1F02A295BAD5600DB297F /* UDP_Session.cpp in Sources */, 551BF5C0264210A50008C529 /* GameDatabase.cpp in Sources */, - 555BCB80295CE577002E569F /* HostSettings.cpp in Sources */, 551BF5BA2642108D0008C529 /* DarwinFlatFileReader.cpp in Sources */, 551BF5B026420FA50008C529 /* IopIrq.cpp in Sources */, DDE1B423298C68050028DF05 /* usb-hid.cpp in Sources */, @@ -7895,10 +8354,8 @@ 551BF56D26420E710008C529 /* Vif_Codes.cpp in Sources */, 55B1EFB9295BA12E00DB297F /* INISettingsInterface.cpp in Sources */, 55B1F029295BAD5600DB297F /* BaseSession.cpp in Sources */, - 5564D76C279A0CEA00EECDEC /* ShaderCache.cpp in Sources */, 551BF62E264216F50008C529 /* CsoFileReader.cpp in Sources */, 551AA13B2792AB1700658151 /* GSFunctionMap.cpp in Sources */, - DD0302C327C5423F0006ABDC /* PAD.cpp in Sources */, 55BD3E78295A5A13001DD03E /* guncon2.cpp in Sources */, 551AA13A2792AB1700658151 /* GSVertexTrace.cpp in Sources */, 551AA4B027935E9100658151 /* IP_Packet.cpp in Sources */, @@ -7920,36 +8377,29 @@ 5548492B288554210066EDEB /* Ps1CD.cpp in Sources */, 551BF64B264218380008C529 /* iR5900Templates.cpp in Sources */, 551BF61D264214530008C529 /* BaseblockEx.cpp in Sources */, - 551BF683264241530008C529 /* IsoFSCDVD.cpp in Sources */, 551BF69D264243B60008C529 /* ATA_CmdSMART.cpp in Sources */, 551BF64C264218380008C529 /* recVTLB.cpp in Sources */, 551BF617264214530008C529 /* iFPU.cpp in Sources */, 551BF58926420E9A0008C529 /* Sif1.cpp in Sources */, - 558063A727AB3D2D008CD5D2 /* ProgressCallback.cpp in Sources */, 55B1F03C295BAF4300DB297F /* GSVertexTraceFMM.cpp in Sources */, 551AA4122792C4F500658151 /* MTVU.cpp in Sources */, 551BF57026420E710008C529 /* VU0.cpp in Sources */, 551BF67C264240560008C529 /* pcap_io.cpp in Sources */, 551BF67F264240660008C529 /* ATA_Transfer.cpp in Sources */, 551BF5BE264210A30008C529 /* FW.cpp in Sources */, - 551AA4BF2793642B00658151 /* FileSystem.cpp in Sources */, 55B1EFD5295BA74200DB297F /* GSLocalMemoryMultiISA.cpp in Sources */, 551BF6AC264244590008C529 /* ReadInput.cpp in Sources */, DDE1B429298C68130028DF05 /* usb-mic-singstar.cpp in Sources */, - 551AA16E2792B0EA00658151 /* MemoryCardFolder.cpp in Sources */, - 5580652827AB4DE9008CD5D2 /* SettingsWrapper.cpp in Sources */, 55325A072A00FB0800D4CFFA /* GSDevice.cpp in Sources */, 551AA4AA27935E9100658151 /* UDP_Packet.cpp in Sources */, 551BF689264241E80008C529 /* DisR5900asm.cpp in Sources */, DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */, 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */, - 551BF57E26420E9A0008C529 /* Sio.cpp in Sources */, DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */, 551BF5CC264212070008C529 /* IPU.cpp in Sources */, 551BF56726420DE90008C529 /* SymbolMap.cpp in Sources */, 551BF5B9264210860008C529 /* Counters.cpp in Sources */, 551BF694264242510008C529 /* Cache.cpp in Sources */, - 5580639A27AB3262008CD5D2 /* KeyStatus.cpp in Sources */, 551BF58826420E9A0008C529 /* R5900OpcodeTables.cpp in Sources */, 55B1F030295BAD5600DB297F /* AdapterUtils.cpp in Sources */, 551BF6AF264244640008C529 /* Reverb.cpp in Sources */, @@ -7965,7 +8415,6 @@ 551BF57A26420E720008C529 /* VU1microInterp.cpp in Sources */, 551AA4E6279377A100658151 /* GSDrawScanlineCodeGenerator.cpp in Sources */, 551BF647264218380008C529 /* iR5900Move.cpp in Sources */, - 551AA4B327935F9400658151 /* Timer.cpp in Sources */, 551BF57D26420E9A0008C529 /* ShiftJisToUnicode.cpp in Sources */, 551BF6A6264244400008C529 /* ADSR.cpp in Sources */, 55B1F02B295BAD5600DB297F /* UDP_FixedPort.cpp in Sources */, @@ -7980,20 +8429,17 @@ 55BD3E7D295A5ABC001DD03E /* misc.metal in Sources */, 551BF58426420E9A0008C529 /* R3000AInterpreter.cpp in Sources */, 551BF5C9264212070008C529 /* IPUdma.cpp in Sources */, - 551AA1262792AB1700658151 /* GSTextureSW.cpp in Sources */, 55300EAE27C9A28B0049E2CC /* GSTextureReplacementLoaders.cpp in Sources */, 551BF5B526420FA50008C529 /* HwRead.cpp in Sources */, 551BF646264218380008C529 /* iR5900AritImm.cpp in Sources */, 551BF5CF264212070008C529 /* yuv2rgb.cpp in Sources */, 551BF68C264241F10008C529 /* MIPSAnalyst.cpp in Sources */, - 551BF628264216A40008C529 /* System.cpp in Sources */, 551AA4AD27935E9100658151 /* DNS_Classes.cpp in Sources */, 551BF6A2264244050008C529 /* spu2freeze.cpp in Sources */, 551AA4E72793789300658151 /* GSSetupPrimCodeGenerator.cpp in Sources */, 55B1EFD2295BA71D00DB297F /* MultiISA.cpp in Sources */, 557D49D127D00BE7006C2C69 /* convert.metal in Sources */, 551BF68A264241E80008C529 /* DisVU0Micro.cpp in Sources */, - 551AA4D227936D7500658151 /* Context.cpp in Sources */, 551BF633264216F50008C529 /* ChdFileReader.cpp in Sources */, 551BF6912642420B0008C529 /* spu2.cpp in Sources */, 551BF685264241BF0008C529 /* DisR3000A.cpp in Sources */, @@ -8004,22 +8450,16 @@ 551BF5AA26420FA50008C529 /* Hw.cpp in Sources */, 55B1F037295BAE5100DB297F /* IPU_MultiISA.cpp in Sources */, 551AA1792792B66400658151 /* DNS_Server.cpp in Sources */, - 551BF648264218380008C529 /* iCore-32.cpp in Sources */, 551BF61B264214530008C529 /* iR5900Misc.cpp in Sources */, 551BF5B7264210860008C529 /* COP0.cpp in Sources */, - 551AA4B72793625B00658151 /* Misc.cpp in Sources */, 551BF68F264241F10008C529 /* MipsAssemblerTables.cpp in Sources */, 551AA4172792C81900658151 /* PerformanceMetrics.cpp in Sources */, 551BF643264218380008C529 /* iR5900Arit.cpp in Sources */, 551AA13F2792AB1700658151 /* GSRenderer.cpp in Sources */, 55B1F013295BACF000DB297F /* TCP_Packet.cpp in Sources */, 551BF620264214530008C529 /* iCOP0.cpp in Sources */, - 55484D3328855D070066EDEB /* Semaphore.cpp in Sources */, 5576A4802885E0C70078CFF8 /* InputRecordingControls.cpp in Sources */, - 551AA4BA279362BB00658151 /* FastJmp.cpp in Sources */, - 5564D76D279A0CEA00EECDEC /* Program.cpp in Sources */, 551AA13D2792AB1700658151 /* GSTexture.cpp in Sources */, - 551BF6822642414E0008C529 /* IsoFile.cpp in Sources */, 551BF69B264243680008C529 /* ATA_Command.cpp in Sources */, 551BF635264216F50008C529 /* CDVDdiscThread.cpp in Sources */, DDE1B42E298C68210028DF05 /* usb-pad-ff.cpp in Sources */, @@ -8040,46 +8480,40 @@ 55BD3E70295A59CE001DD03E /* usb-pad-sdl-ff.cpp in Sources */, 551BF56826420E3B0008C529 /* newVif_Unpack.cpp in Sources */, 557D49D027D00BE7006C2C69 /* merge.metal in Sources */, - 55B1EFFD295BAB1600DB297F /* MultitapProtocol.cpp in Sources */, 551AA4AB27935E9100658151 /* DHCP_Packet.cpp in Sources */, 55B1F002295BAB8A00DB297F /* usb-ohci.cpp in Sources */, DD0302B127C435760006ABDC /* SndOut_Cubeb.cpp in Sources */, 551BF6A8264244480008C529 /* Dma.cpp in Sources */, 551BF62F264216F50008C529 /* CDVDisoReader.cpp in Sources */, DD5A404E298CA9B700EFBE7A /* SndOut.cpp in Sources */, - 55B1EFDB295BA84300DB297F /* MemoryCardProtocol.cpp in Sources */, 551BF5AE26420FA50008C529 /* IopCounters.cpp in Sources */, - 551BF684264241570008C529 /* IsoFS.cpp in Sources */, 55BD3E7A295A5A37001DD03E /* cam-noop.cpp in Sources */, DDE1B42A298C68130028DF05 /* usb-mic-logitech.cpp in Sources */, 551BF67D264240660008C529 /* HddCreate.cpp in Sources */, - 551BF6422642181C0008C529 /* iR5900-32.cpp in Sources */, 551BF58026420E9A0008C529 /* R5900OpcodeImpl.cpp in Sources */, 551BF69A264243310008C529 /* DriveUtility.cpp in Sources */, 55B1EFD8295BA7CF00DB297F /* StateWrapper.cpp in Sources */, 551BF678264240560008C529 /* net.cpp in Sources */, 55B1F006295BABDB00DB297F /* desc.cpp in Sources */, 55EBA8B9295CDEF90035A1FD /* GSCaptureStub.cpp in Sources */, - 551BF61C264214530008C529 /* ir5900tables.cpp in Sources */, 551AA48B27935DF400658151 /* GSRendererNull.cpp in Sources */, 551BF5C4264210AB0008C529 /* Gif_Logger.cpp in Sources */, + 55DB5DB42B59144400B3BD75 /* iR5900.cpp in Sources */, 55325A092A01025600D4CFFA /* GSDeviceOGL.cpp in Sources */, - 556FBB48279E1067007B4F88 /* InputManager.cpp in Sources */, 551BF58A26420E9A0008C529 /* R3000A.cpp in Sources */, - 551AA16D2792B0EA00658151 /* MemoryCardFile.cpp in Sources */, 551BF5D2264212270008C529 /* MultipartFileReader.cpp in Sources */, + 55DB5DBC2B59163F00B3BD75 /* IsoHasher.cpp in Sources */, 551BF5AC26420FA50008C529 /* IopHw.cpp in Sources */, 551BF67E264240660008C529 /* ATA_Info.cpp in Sources */, 551BF5A826420FA50008C529 /* HwWrite.cpp in Sources */, 551BF57826420E720008C529 /* vtlb.cpp in Sources */, - 551AA4E52793775E00658151 /* StringUtil.cpp in Sources */, 551BF5D5264212270008C529 /* MTGS.cpp in Sources */, 551BF616264214320008C529 /* newVif_Dynarec.cpp in Sources */, DDE1B42F298C68210028DF05 /* lg_ff.cpp in Sources */, 551BF6A1264243C90008C529 /* ATA_CmdNoData.cpp in Sources */, - 551AA1242792AB1700658151 /* GSVertexSW.cpp in Sources */, 55B1F034295BADAC00DB297F /* ICMP_Packet.cpp in Sources */, 551BF57426420E720008C529 /* VU0microInterp.cpp in Sources */, + 55DB5DB52B59144400B3BD75 /* iCore.cpp in Sources */, 551BF57226420E720008C529 /* VUmicro.cpp in Sources */, 551BF6B8264249D00008C529 /* Patch.cpp in Sources */, DDE1B433298C68320028DF05 /* usb-printer.cpp in Sources */, @@ -8110,15 +8544,10 @@ 551AA1402792AB1700658151 /* GSDirtyRect.cpp in Sources */, 551BF5AD26420FA50008C529 /* IopBios.cpp in Sources */, 551BF5B226420FA50008C529 /* IopGte.cpp in Sources */, - 551AA1492792AB1800658151 /* GLLoader.cpp in Sources */, - 556FBB49279E1067007B4F88 /* LayeredSettingsInterface.cpp in Sources */, 551BF58126420E9A0008C529 /* BiosTools.cpp in Sources */, - 55484D3828855DC10066EDEB /* GameList.cpp in Sources */, - 551BF5D7264212270008C529 /* Patch_Memory.cpp in Sources */, 551AA4EA27937B5800658151 /* GSSetupPrimCodeGenerator.all.cpp in Sources */, 551BF68E264241F10008C529 /* MipsAssembler.cpp in Sources */, 551BF638264216F50008C529 /* CDVD.cpp in Sources */, - 5564D771279A0D1500EECDEC /* MD5Digest.cpp in Sources */, 551BF62B264216F50008C529 /* CDVDdiscReader.cpp in Sources */, DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */, 551BF6A92642444F0008C529 /* DplIIdecoder.cpp in Sources */, @@ -8128,7 +8557,6 @@ 551BF69E264243BC0008C529 /* ATA_SCE.cpp in Sources */, 55B1F02F295BAD5600DB297F /* TCP_Session_In.cpp in Sources */, 551BF58F26420E9A0008C529 /* R5900.cpp in Sources */, - DD0302C927C549730006ABDC /* StateManagement.cpp in Sources */, 551BF58D26420E9A0008C529 /* Sif.cpp in Sources */, 551BF64D264218380008C529 /* iR5900Shift.cpp in Sources */, 551BF68B264241E80008C529 /* DisVU1Micro.cpp in Sources */, @@ -8140,15 +8568,12 @@ 551AA1482792AB1800658151 /* GLState.cpp in Sources */, 557D49CE27D00BE7006C2C69 /* interlace.metal in Sources */, 551BF62D264216F50008C529 /* OutputIsoFile.cpp in Sources */, - 55AB8FB7298C57550024DCBC /* VirtualMemory.cpp in Sources */, 551BF645264218380008C529 /* iR5900Branch.cpp in Sources */, 55324EDC29973BBF00A8FF1A /* EthernetFrameEditor.cpp in Sources */, 55EBA8AB295CDC8D0035A1FD /* SaveState.cpp in Sources */, 551BF6A4264244280008C529 /* Wavedump_wav.cpp in Sources */, 551BF69F264243C20008C529 /* ATA_CmdExecuteDeviceDiag.cpp in Sources */, 55300EAD27C9A28B0049E2CC /* GSTextureReplacements.cpp in Sources */, - 558063AA27AB3E0B008CD5D2 /* WindowInfo.cpp in Sources */, - 556FBB4D279E1067007B4F88 /* InputSource.cpp in Sources */, 551BF621264214530008C529 /* iR3000Atables.cpp in Sources */, 55B1F02D295BAD5600DB297F /* TCP_Session_Out.cpp in Sources */, ); @@ -8158,11 +8583,6 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 5517FE46263E1129000219EC /* libchdr_flac.c in Sources */, - 5517FE45263E1129000219EC /* libchdr_chd.c in Sources */, - 5517FE44263E1129000219EC /* libchdr_bitstream.c in Sources */, - 5517FE47263E1129000219EC /* libchdr_cdrom.c in Sources */, - 5517FE43263E1129000219EC /* libchdr_huffman.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8171,8 +8591,6 @@ buildActionMask = 2147483647; files = ( 551AA46F2793586400658151 /* index.c in Sources */, - 5517FE64263E126A000219EC /* CpuArch.c in Sources */, - 5517FE61263E126A000219EC /* LzmaDec.c in Sources */, 551AA46D2793586400658151 /* block_decoder.c in Sources */, 551AA45D2793586400658151 /* vli_encoder.c in Sources */, 551AA47C27935CD800658151 /* check.c in Sources */, @@ -8182,12 +8600,10 @@ 551AA48027935D9200658151 /* crc64_table.c in Sources */, 551AA4522793586400658151 /* filter_buffer_encoder.c in Sources */, 551AA47D27935D1400658151 /* sha256.c in Sources */, - 5517FE5F263E126A000219EC /* Bra86.c in Sources */, 551AA45F2793586400658151 /* filter_encoder.c in Sources */, 551AA44C279357AC00658151 /* easy_preset.c in Sources */, 551AA45A2793586400658151 /* alone_encoder.c in Sources */, 551AA476279358A400658151 /* lzma_encoder_presets.c in Sources */, - 551BF641264217670008C529 /* LzmaEnc.c in Sources */, 551AA4502793586400658151 /* block_encoder.c in Sources */, 551AA4592793586400658151 /* block_header_encoder.c in Sources */, 551AA46C2793586400658151 /* block_buffer_decoder.c in Sources */, @@ -8199,22 +8615,18 @@ 551AA4562793586400658151 /* index_hash.c in Sources */, 551AA47B279358A400658151 /* lzma2_encoder.c in Sources */, 551AA4542793586400658151 /* index_encoder.c in Sources */, - 5517FE63263E126A000219EC /* Alloc.c in Sources */, 551AA4572793586400658151 /* filter_buffer_decoder.c in Sources */, 551AA47F27935D8800658151 /* crc64_fast.c in Sources */, 551AA44B2792D1CA00658151 /* common.c in Sources */, 551AA44D279357D000658151 /* stream_encoder.c in Sources */, 551AA48127935D9A00658151 /* crc32_table.c in Sources */, - 5517FE66263E126A000219EC /* Lzma86Dec.c in Sources */, 551AA4672793586400658151 /* filter_common.c in Sources */, 551AA45C2793586400658151 /* stream_buffer_decoder.c in Sources */, 551AA4612793586400658151 /* easy_decoder_memusage.c in Sources */, 551AA4512793586400658151 /* easy_encoder_memusage.c in Sources */, 551AA4662793586400658151 /* filter_flags_decoder.c in Sources */, 551AA478279358A400658151 /* lzma_encoder_optimum_normal.c in Sources */, - 5517FE62263E126A000219EC /* LzFind.c in Sources */, 551AA4682793586400658151 /* stream_flags_encoder.c in Sources */, - 5517FE65263E126A000219EC /* Sort.c in Sources */, 551AA4622793586400658151 /* filter_decoder.c in Sources */, 551AA4692793586400658151 /* block_util.c in Sources */, 551AA45E2793586400658151 /* filter_flags_encoder.c in Sources */, @@ -8229,7 +8641,6 @@ 551AA47E27935D6E00658151 /* crc32_fast.c in Sources */, 551AA46E2793586400658151 /* stream_decoder.c in Sources */, 551AA4722793586400658151 /* stream_buffer_encoder.c in Sources */, - 5517FE60263E126A000219EC /* BraIA64.c in Sources */, 551AA46A2793586400658151 /* vli_decoder.c in Sources */, 551AA4552793586400658151 /* easy_buffer_encoder.c in Sources */, 551AA4642793586400658151 /* vli_size.c in Sources */, @@ -8245,14 +8656,11 @@ 551AA3F12792BF1800658151 /* GS.cpp in Sources */, 551AA3D62792BEC500658151 /* bmi.cpp in Sources */, 551AA3F32792BF1800658151 /* GSPng.cpp in Sources */, - 551AA3D72792BEC500658151 /* LnxCpuDetect.cpp in Sources */, 551AA3EE2792BF1800658151 /* GSState.cpp in Sources */, - 551AA4102792C29800658151 /* GSAlignedClass.cpp in Sources */, 551AA3D82792BEC500658151 /* jmp.cpp in Sources */, 551AA3ED2792BF1800658151 /* GSLocalMemory.cpp in Sources */, 551AA3F92792BF1800658151 /* GSVector.cpp in Sources */, 551AA3EF2792BF1800658151 /* GSPerfMon.cpp in Sources */, - 551AA3D92792BEC500658151 /* cpudetect.cpp in Sources */, 551AA3E82792BF1800658151 /* GSDrawingContext.cpp in Sources */, 551AA3DA2792BEC500658151 /* x86emitter.cpp in Sources */, 551AA3EA2792BF1800658151 /* GSTables.cpp in Sources */, @@ -8261,7 +8669,6 @@ 551AA3DC2792BEC500658151 /* legacy_sse.cpp in Sources */, 551AA3E92792BF1800658151 /* GSDump.cpp in Sources */, 551AA3F62792BF1800658151 /* GSRingHeap.cpp in Sources */, - 551AA3F52792BF1800658151 /* GSCrc.cpp in Sources */, 551AA3DD2792BEC500658151 /* legacy.cpp in Sources */, 551AA3F02792BF1800658151 /* GSBlock.cpp in Sources */, 551AA3DE2792BEC500658151 /* movs.cpp in Sources */, @@ -8307,16 +8714,31 @@ files = ( 551BF544264200220008C529 /* DarwinMisc.cpp in Sources */, 55B1F000295BAB4900DB297F /* ReadbackSpinManager.cpp in Sources */, - 551BF547264200220008C529 /* Exceptions.cpp in Sources */, + 55DB5A662B5904D000B3BD75 /* StringUtil.cpp in Sources */, + 55DB5A682B5904D000B3BD75 /* Timer.cpp in Sources */, + 55DB5A612B5904A400B3BD75 /* HostSys.cpp in Sources */, + 55DB5A6B2B5904D000B3BD75 /* WindowInfo.cpp in Sources */, 551BF53E264200030008C529 /* LnxHostSys.cpp in Sources */, + 55DB5A652B5904D000B3BD75 /* SettingsWrapper.cpp in Sources */, + 55DB5A672B5904D000B3BD75 /* TextureDecompress.cpp in Sources */, 551BF548264200220008C529 /* AlignedMalloc.cpp in Sources */, + 55DB5A602B59048A00B3BD75 /* FileSystem.cpp in Sources */, + 55DB5A5E2B59047700B3BD75 /* Error.cpp in Sources */, 551AA17B2792BAD200658151 /* PrecompiledHeader.cpp in Sources */, + 55DB5A622B5904BB00B3BD75 /* MD5Digest.cpp in Sources */, + 55DB5A6C2B5904D000B3BD75 /* Semaphore.cpp in Sources */, 551BF54B264200220008C529 /* DarwinThreads.cpp in Sources */, 55EBA8B6295CDDF00035A1FD /* WAVWriter.cpp in Sources */, + 55DB5A692B5904D000B3BD75 /* ProgressCallback.cpp in Sources */, 551BF54C264200220008C529 /* DarwinSemaphore.cpp in Sources */, 551BF54A264200220008C529 /* Console.cpp in Sources */, 55B1EFB2295BA0CB00DB297F /* MemorySettingsInterface.cpp in Sources */, + 55DB5A592B5903E400B3BD75 /* Assertions.cpp in Sources */, 55B1EFE5295BA99C00DB297F /* Image.cpp in Sources */, + 55DB5A6D2B5904D000B3BD75 /* SmallString.cpp in Sources */, + 55DB5A5F2B59047B00B3BD75 /* FastJmp.cpp in Sources */, + 55DB5A5A2B5903EA00B3BD75 /* CrashHandler.cpp in Sources */, + 55DB5A5B2B5903F600B3BD75 /* DynamicLibrary.cpp in Sources */, 551BF545264200220008C529 /* Perf.cpp in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -8363,14 +8785,11 @@ files = ( 553CF8422640D2F8003A437C /* simd.cpp in Sources */, 553CF83C2640D2F8003A437C /* bmi.cpp in Sources */, - 553CF83E2640D2F8003A437C /* LnxCpuDetect.cpp in Sources */, 55B1EFCD295BA67300DB297F /* avx.cpp in Sources */, 553CF8382640D2F8003A437C /* jmp.cpp in Sources */, - 553CF8402640D2F8003A437C /* cpudetect.cpp in Sources */, 553CF8392640D2F8003A437C /* x86emitter.cpp in Sources */, 553CF83D2640D2F8003A437C /* fpu.cpp in Sources */, 553CF83A2640D2F8003A437C /* legacy_sse.cpp in Sources */, - 553CF8432640D2F8003A437C /* legacy.cpp in Sources */, 553CF83F2640D2F8003A437C /* movs.cpp in Sources */, 553CF8412640D2F8003A437C /* groups.cpp in Sources */, ); @@ -8443,7 +8862,6 @@ 55484CBA288555800066EDEB /* zip_source_seek_write.c in Sources */, 55484CD2288555800066EDEB /* zip_file_set_external_attributes.c in Sources */, 55484CB9288555800066EDEB /* zip_source_close.c in Sources */, - 55484D3228855C780066EDEB /* zip_err_str.c in Sources */, 55484CBD288555800066EDEB /* zip_file_strerror.c in Sources */, 55484CA8288555730066EDEB /* zip_crypto_commoncrypto.c in Sources */, 55484CB4288555800066EDEB /* zip_source_winzip_aes_encode.c in Sources */, @@ -8526,6 +8944,171 @@ ); runOnlyForDeploymentPostprocessing = 0; }; + 55DB5A782B590A2700B3BD75 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5CB32B590A6D00B3BD75 /* cost_mips32.c in Sources */, + 55DB5C7F2B590A6D00B3BD75 /* filters_mips_dsp_r2.c in Sources */, + 55DB5C202B590A6D00B3BD75 /* sharpyuv_csp.c in Sources */, + 55DB5CA72B590A6D00B3BD75 /* lossless.c in Sources */, + 55DB5C652B590A6D00B3BD75 /* picture_rescale_enc.c in Sources */, + 55DB5C502B590A6D00B3BD75 /* token_enc.c in Sources */, + 55DB5C8B2B590A6D00B3BD75 /* cpu.c in Sources */, + 55DB5C762B590A6D00B3BD75 /* vp8_dec.c in Sources */, + 55DB5C5E2B590A6D00B3BD75 /* histogram_enc.c in Sources */, + 55DB5C692B590A6D00B3BD75 /* frame_dec.c in Sources */, + 55DB5C932B590A6D00B3BD75 /* upsampling_sse2.c in Sources */, + 55DB5C322B590A6D00B3BD75 /* huffman_utils.c in Sources */, + 55DB5CA12B590A6D00B3BD75 /* yuv_sse41.c in Sources */, + 55DB5CA02B590A6D00B3BD75 /* lossless_sse41.c in Sources */, + 55DB5C252B590A6D00B3BD75 /* anim_encode.c in Sources */, + 55DB5C422B590A6D00B3BD75 /* random_utils.c in Sources */, + 55DB5C702B590A6D00B3BD75 /* quant_dec.c in Sources */, + 55DB5CB52B590A6D00B3BD75 /* dec_neon.c in Sources */, + 55DB5CB02B590A6D00B3BD75 /* enc_sse2.c in Sources */, + 55DB5C182B590A6D00B3BD75 /* sharpyuv_sse2.c in Sources */, + 55DB5C242B590A6D00B3BD75 /* muxinternal.c in Sources */, + 55DB5CB82B590A6D00B3BD75 /* cost_mips_dsp_r2.c in Sources */, + 55DB5C582B590A6D00B3BD75 /* predictor_enc.c in Sources */, + 55DB5C1B2B590A6D00B3BD75 /* sharpyuv_neon.c in Sources */, + 55DB5CAC2B590A6D00B3BD75 /* enc_neon.c in Sources */, + 55DB5C982B590A6D00B3BD75 /* lossless_neon.c in Sources */, + 55DB5C412B590A6D00B3BD75 /* filters_utils.c in Sources */, + 55DB5C192B590A6D00B3BD75 /* sharpyuv.c in Sources */, + 55DB5C832B590A6D00B3BD75 /* cost_sse2.c in Sources */, + 55DB5CC02B590A6D00B3BD75 /* yuv_mips32.c in Sources */, + 55DB5C732B590A6D00B3BD75 /* webp_dec.c in Sources */, + 55DB5C942B590A6D00B3BD75 /* yuv_sse2.c in Sources */, + 55DB5C562B590A6D00B3BD75 /* syntax_enc.c in Sources */, + 55DB5C392B590A6D00B3BD75 /* quant_levels_dec_utils.c in Sources */, + 55DB5C952B590A6D00B3BD75 /* filters_msa.c in Sources */, + 55DB5C172B590A6D00B3BD75 /* sharpyuv_gamma.c in Sources */, + 55DB5CBA2B590A6D00B3BD75 /* dec_clip_tables.c in Sources */, + 55DB5C662B590A6D00B3BD75 /* demux.c in Sources */, + 55DB5C7B2B590A6D00B3BD75 /* lossless_enc_mips_dsp_r2.c in Sources */, + 55DB5CA32B590A6D00B3BD75 /* lossless_enc.c in Sources */, + 55DB5CB12B590A6D00B3BD75 /* lossless_enc_neon.c in Sources */, + 55DB5C542B590A6D00B3BD75 /* picture_csp_enc.c in Sources */, + 55DB5C2F2B590A6D00B3BD75 /* rescaler_utils.c in Sources */, + 55DB5CB42B590A6D00B3BD75 /* alpha_processing_sse41.c in Sources */, + 55DB5C8D2B590A6D00B3BD75 /* alpha_processing.c in Sources */, + 55DB5CBE2B590A6D00B3BD75 /* lossless_enc_mips32.c in Sources */, + 55DB5C9E2B590A6D00B3BD75 /* rescaler_mips32.c in Sources */, + 55DB5C992B590A6D00B3BD75 /* lossless_enc_msa.c in Sources */, + 55DB5C5A2B590A6D00B3BD75 /* backward_references_enc.c in Sources */, + 55DB5C402B590A6D00B3BD75 /* color_cache_utils.c in Sources */, + 55DB5C4C2B590A6D00B3BD75 /* cost_enc.c in Sources */, + 55DB5CAA2B590A6D00B3BD75 /* lossless_enc_sse2.c in Sources */, + 55DB5CC22B590A6D00B3BD75 /* dec_msa.c in Sources */, + 55DB5C922B590A6D00B3BD75 /* filters_neon.c in Sources */, + 55DB5C872B590A6D00B3BD75 /* upsampling_neon.c in Sources */, + 55DB5CB72B590A6D00B3BD75 /* dec_mips32.c in Sources */, + 55DB5C9A2B590A6D00B3BD75 /* filters.c in Sources */, + 55DB5C2B2B590A6D00B3BD75 /* thread_utils.c in Sources */, + 55DB5C9F2B590A6D00B3BD75 /* dec_sse41.c in Sources */, + 55DB5CAE2B590A6D00B3BD75 /* dec_sse2.c in Sources */, + 55DB5C642B590A6D00B3BD75 /* backward_references_cost_enc.c in Sources */, + 55DB5C8C2B590A6D00B3BD75 /* yuv_neon.c in Sources */, + 55DB5C8A2B590A6D00B3BD75 /* enc_mips_dsp_r2.c in Sources */, + 55DB5C862B590A6D00B3BD75 /* lossless_enc_sse41.c in Sources */, + 55DB5CA62B590A6D00B3BD75 /* dec.c in Sources */, + 55DB5C722B590A6D00B3BD75 /* idec_dec.c in Sources */, + 55DB5C592B590A6D00B3BD75 /* config_enc.c in Sources */, + 55DB5C742B590A6D00B3BD75 /* vp8l_dec.c in Sources */, + 55DB5CAB2B590A6D00B3BD75 /* yuv.c in Sources */, + 55DB5C532B590A6D00B3BD75 /* filter_enc.c in Sources */, + 55DB5C892B590A6D00B3BD75 /* lossless_mips_dsp_r2.c in Sources */, + 55DB5C822B590A6D00B3BD75 /* rescaler_neon.c in Sources */, + 55DB5C5C2B590A6D00B3BD75 /* webp_enc.c in Sources */, + 55DB5CA52B590A6D00B3BD75 /* alpha_processing_neon.c in Sources */, + 55DB5C672B590A6D00B3BD75 /* anim_decode.c in Sources */, + 55DB5C5D2B590A6D00B3BD75 /* vp8l_enc.c in Sources */, + 55DB5C882B590A6D00B3BD75 /* filters_sse2.c in Sources */, + 55DB5CA22B590A6D00B3BD75 /* rescaler_sse2.c in Sources */, + 55DB5C352B590A6D00B3BD75 /* huffman_encode_utils.c in Sources */, + 55DB5C6D2B590A6D00B3BD75 /* alpha_dec.c in Sources */, + 55DB5CBC2B590A6D00B3BD75 /* enc.c in Sources */, + 55DB5CB62B590A6D00B3BD75 /* cost.c in Sources */, + 55DB5C632B590A6D00B3BD75 /* picture_enc.c in Sources */, + 55DB5C7C2B590A6D00B3BD75 /* enc_msa.c in Sources */, + 55DB5C812B590A6D00B3BD75 /* dec_mips_dsp_r2.c in Sources */, + 55DB5C6A2B590A6D00B3BD75 /* tree_dec.c in Sources */, + 55DB5C4F2B590A6D00B3BD75 /* picture_psnr_enc.c in Sources */, + 55DB5CA42B590A6D00B3BD75 /* yuv_mips_dsp_r2.c in Sources */, + 55DB5CA82B590A6D00B3BD75 /* ssim.c in Sources */, + 55DB5C6F2B590A6D00B3BD75 /* buffer_dec.c in Sources */, + 55DB5C212B590A6D00B3BD75 /* sharpyuv_cpu.c in Sources */, + 55DB5C522B590A6D00B3BD75 /* tree_enc.c in Sources */, + 55DB5C912B590A6D00B3BD75 /* enc_mips32.c in Sources */, + 55DB5C842B590A6D00B3BD75 /* upsampling_sse41.c in Sources */, + 55DB5C222B590A6D00B3BD75 /* sharpyuv_dsp.c in Sources */, + 55DB5C792B590A6D00B3BD75 /* lossless_sse2.c in Sources */, + 55DB5C382B590A6D00B3BD75 /* quant_levels_utils.c in Sources */, + 55DB5C552B590A6D00B3BD75 /* frame_enc.c in Sources */, + 55DB5C852B590A6D00B3BD75 /* enc_sse41.c in Sources */, + 55DB5C3A2B590A6D00B3BD75 /* bit_reader_utils.c in Sources */, + 55DB5C9C2B590A6D00B3BD75 /* rescaler_mips_dsp_r2.c in Sources */, + 55DB5C5F2B590A6D00B3BD75 /* analysis_enc.c in Sources */, + 55DB5C4A2B590A6D00B3BD75 /* iterator_enc.c in Sources */, + 55DB5C972B590A6D00B3BD75 /* rescaler_msa.c in Sources */, + 55DB5C292B590A6D00B3BD75 /* bit_writer_utils.c in Sources */, + 55DB5C682B590A6D00B3BD75 /* io_dec.c in Sources */, + 55DB5C9D2B590A6D00B3BD75 /* ssim_sse2.c in Sources */, + 55DB5C4D2B590A6D00B3BD75 /* alpha_enc.c in Sources */, + 55DB5C612B590A6D00B3BD75 /* quant_enc.c in Sources */, + 55DB5C3C2B590A6D00B3BD75 /* utils.c in Sources */, + 55DB5C9B2B590A6D00B3BD75 /* alpha_processing_mips_dsp_r2.c in Sources */, + 55DB5CA92B590A6D00B3BD75 /* upsampling_msa.c in Sources */, + 55DB5C232B590A6D00B3BD75 /* muxread.c in Sources */, + 55DB5C5B2B590A6D00B3BD75 /* picture_tools_enc.c in Sources */, + 55DB5C272B590A6D00B3BD75 /* muxedit.c in Sources */, + 55DB5CB92B590A6D00B3BD75 /* alpha_processing_sse2.c in Sources */, + 55DB5C802B590A6D00B3BD75 /* rescaler.c in Sources */, + 55DB5C902B590A6D00B3BD75 /* cost_neon.c in Sources */, + 55DB5C782B590A6D00B3BD75 /* upsampling.c in Sources */, + 55DB5CC12B590A6D00B3BD75 /* upsampling_mips_dsp_r2.c in Sources */, + 55DB5CBB2B590A6D00B3BD75 /* lossless_msa.c in Sources */, + 55DB5C622B590A6D00B3BD75 /* near_lossless_enc.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5CD72B590FBB00B3BD75 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5D4B2B590FF300B3BD75 /* api.c in Sources */, + 55DB5D5D2B590FF300B3BD75 /* isa.c in Sources */, + 55DB5D4E2B590FF300B3BD75 /* deterministic.c in Sources */, + 55DB5D572B590FF300B3BD75 /* uarch.c in Sources */, + 55DB5D532B590FF300B3BD75 /* vendor.c in Sources */, + 55DB5D552B590FF300B3BD75 /* topology.c in Sources */, + 55DB5D4A2B590FF300B3BD75 /* log.c in Sources */, + 55DB5D502B590FF300B3BD75 /* descriptor.c in Sources */, + 55DB5D5C2B590FF300B3BD75 /* name.c in Sources */, + 55DB5D542B590FF300B3BD75 /* info.c in Sources */, + 55DB5D5E2B590FF300B3BD75 /* init.c in Sources */, + 55DB5D672B590FF300B3BD75 /* topology.c in Sources */, + 55DB5D492B590FF300B3BD75 /* clog.c in Sources */, + 55DB5D692B590FF300B3BD75 /* cache.c in Sources */, + 55DB5D522B590FF300B3BD75 /* init.c in Sources */, + 55DB5D4F2B590FF300B3BD75 /* init.c in Sources */, + 55DB5D4C2B590FF300B3BD75 /* init.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 55DB5DC22B59173400B3BD75 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 55DB5F032B59174900B3BD75 /* lz4hc.c in Sources */, + 55DB5F0E2B59174900B3BD75 /* lz4file.c in Sources */, + 55DB5F082B59174900B3BD75 /* xxhash.c in Sources */, + 55DB5F052B59174900B3BD75 /* lz4frame.c in Sources */, + 55DB5F0C2B59174900B3BD75 /* lz4.c in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -8598,6 +9181,21 @@ target = 55B1EFF1295BAA4700DB297F /* jpgd */; targetProxy = 55B1EFF8295BAA7A00DB297F /* PBXContainerItemProxy */; }; + 55DB5CCD2B590AEC00B3BD75 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 55DB5A7A2B590A2700B3BD75 /* webp-pcsx2 */; + targetProxy = 55DB5CCC2B590AEC00B3BD75 /* PBXContainerItemProxy */; + }; + 55DB5DBF2B59171C00B3BD75 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 55DB5CD92B590FBB00B3BD75 /* cpuinfo-pcsx2 */; + targetProxy = 55DB5DBE2B59171C00B3BD75 /* PBXContainerItemProxy */; + }; + 55DB5F232B5917AE00B3BD75 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 55DB5DC42B59173400B3BD75 /* lz4-pcsx2 */; + targetProxy = 55DB5F222B5917AE00B3BD75 /* PBXContainerItemProxy */; + }; /* End PBXTargetDependency section */ /* Begin XCBuildConfiguration section */ @@ -8607,7 +9205,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -8675,7 +9273,7 @@ ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++17"; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -8745,12 +9343,13 @@ GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "__WXOSX_COCOA__=1", "GIT_TAGGED_COMMIT=1", "GIT_TAG=\"\\\"Oh dear...\\\"\"", DISABLE_RECORDING, SPU2X_CUBEB, GL_SILENCE_DEPRECATION, + __POSIX__, + "GIT_REV=\"\\\"huh...\\\"\"", ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _M_X86, @@ -8773,7 +9372,7 @@ SYSTEM_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/Classes/Utilities\"", "\"$(SRCROOT)/Classes\"", - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/include\"", "\"$(SRCROOT)/pcsx2/common/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/fmt/fmt/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/include\"", @@ -8789,6 +9388,7 @@ "\"$(SRCROOT)/pcsx2\"", "\"$(SRCROOT)/pcsx2/pcsx2/GS/Renderers/Metal\"", "\"$(SRCROOT)/pcsx2/3rdparty/libzip/\"", + "\"$(SRCROOT)/libzip/private\"", ); USER_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2/pcsx2\"", @@ -8806,6 +9406,8 @@ "\"$(SRCROOT)/pcsx2/3rdparty/simpleini/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/cubeb/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/lz4/lz4/lib\"", ); USE_HEADERMAP = NO; WRAPPER_EXTENSION = oecoreplugin; @@ -8825,12 +9427,13 @@ GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( "$(inherited)", - "__WXOSX_COCOA__=1", "GIT_TAGGED_COMMIT=1", "GIT_TAG=\"\\\"Oh dear...\\\"\"", DISABLE_RECORDING, SPU2X_CUBEB, GL_SILENCE_DEPRECATION, + __POSIX__, + "GIT_REV=\"\\\"huh...\\\"\"", ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _M_X86, @@ -8854,7 +9457,7 @@ SYSTEM_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/Classes/Utilities\"", "\"$(SRCROOT)/Classes\"", - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/include\"", "\"$(SRCROOT)/pcsx2/common/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/fmt/fmt/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/include\"", @@ -8870,6 +9473,7 @@ "\"$(SRCROOT)/pcsx2\"", "\"$(SRCROOT)/pcsx2/pcsx2/GS/Renderers/Metal\"", "\"$(SRCROOT)/pcsx2/3rdparty/libzip/\"", + "\"$(SRCROOT)/libzip/private\"", ); USER_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2/pcsx2\"", @@ -8887,6 +9491,8 @@ "\"$(SRCROOT)/pcsx2/3rdparty/simpleini/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/cubeb/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/lz4/lz4/lib\"", ); USE_HEADERMAP = NO; WRAPPER_EXTENSION = oecoreplugin; @@ -9022,8 +9628,8 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "__M_X86_64=1", _M_X86_64, + _M_X86, "$(inherited)", - "__WXOSX_COCOA__=1", "__unix__=1", ); HEADER_SEARCH_PATHS = ( @@ -9077,8 +9683,8 @@ GCC_PREPROCESSOR_DEFINITIONS = ( "__M_X86_64=1", _M_X86_64, + _M_X86, "$(inherited)", - "__WXOSX_COCOA__=1", "__unix__=1", ); HEADER_SEARCH_PATHS = ( @@ -9183,9 +9789,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/common/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( - "__WXOSX_COCOA__=1", __M_X86_64, _M_X86_64, + _M_X86, "$(inherited)", ); HEADER_SEARCH_PATHS = ( @@ -9198,7 +9804,10 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libpng\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/pcsx2/3rdparty/libpng\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libwebp/libwebp/src\"", + ); USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/jpgd\""; }; name = Debug; @@ -9213,9 +9822,9 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/common/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( - "__WXOSX_COCOA__=1", __M_X86_64, _M_X86_64, + _M_X86, "$(inherited)", ); HEADER_SEARCH_PATHS = ( @@ -9229,7 +9838,10 @@ PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libpng\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/pcsx2/3rdparty/libpng\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libwebp/libwebp/src\"", + ); USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/jpgd\""; }; name = Release; @@ -9499,6 +10111,111 @@ }; name = Release; }; + 55DB5A7D2B590A2700B3BD75 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libwebp/libwebp\""; + }; + name = Debug; + }; + 55DB5A7E2B590A2700B3BD75 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libwebp/libwebp\""; + }; + name = Release; + }; + 55DB5CDC2B590FBB00B3BD75 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + "CPUINFO_LOG_LEVEL=CPUINFO_LOG_ERROR", + "$(inherited)", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src\""; + }; + name = Debug; + }; + 55DB5CDD2B590FBB00B3BD75 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = ( + "CPUINFO_LOG_LEVEL=CPUINFO_LOG_ERROR", + "$(inherited)", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src\""; + }; + name = Release; + }; + 55DB5DC72B59173500B3BD75 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 13.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Debug; + }; + 55DB5DC82B59173500B3BD75 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CODE_SIGN_STYLE = Automatic; + ENABLE_USER_SCRIPT_SANDBOXING = YES; + EXECUTABLE_PREFIX = lib; + GCC_C_LANGUAGE_STANDARD = gnu17; + LOCALIZATION_PREFERS_STRING_CATALOGS = YES; + MACOSX_DEPLOYMENT_TARGET = 13.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + SKIP_INSTALL = YES; + }; + name = Release; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -9637,6 +10354,33 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; + 55DB5A7C2B590A2700B3BD75 /* Build configuration list for PBXNativeTarget "webp-pcsx2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55DB5A7D2B590A2700B3BD75 /* Debug */, + 55DB5A7E2B590A2700B3BD75 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 55DB5CDB2B590FBB00B3BD75 /* Build configuration list for PBXNativeTarget "cpuinfo-pcsx2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55DB5CDC2B590FBB00B3BD75 /* Debug */, + 55DB5CDD2B590FBB00B3BD75 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 55DB5DC62B59173500B3BD75 /* Build configuration list for PBXNativeTarget "lz4-pcsx2" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 55DB5DC72B59173500B3BD75 /* Debug */, + 55DB5DC82B59173500B3BD75 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; /* End XCConfigurationList section */ /* Begin XCSwiftPackageProductDependency section */ diff --git a/libzip/private/zipconf.h b/libzip/private/zipconf.h new file mode 100644 index 0000000..99b3f07 --- /dev/null +++ b/libzip/private/zipconf.h @@ -0,0 +1,47 @@ +#ifndef _HAD_ZIPCONF_H +#define _HAD_ZIPCONF_H + +/* + zipconf.h -- platform specific include file + + This file was generated automatically by CMake + based on ../cmake-zipconf.h.in. + */ + +#define LIBZIP_VERSION "1.5.2a" +#define LIBZIP_VERSION_MAJOR 1 +#define LIBZIP_VERSION_MINOR 5 +#define LIBZIP_VERSION_MICRO 2a + +/* #undef ZIP_STATIC */ + + +#define __STDC_FORMAT_MACROS 1 +#include + +typedef int8_t zip_int8_t; +typedef uint8_t zip_uint8_t; +typedef int16_t zip_int16_t; +typedef uint16_t zip_uint16_t; +typedef int32_t zip_int32_t; +typedef uint32_t zip_uint32_t; +typedef int64_t zip_int64_t; +typedef uint64_t zip_uint64_t; + +#define ZIP_INT8_MIN (-ZIP_INT8_MAX - 1) +#define ZIP_INT8_MAX 0x7f +#define ZIP_UINT8_MAX 0xff + +#define ZIP_INT16_MIN (-ZIP_INT16_MAX - 1) +#define ZIP_INT16_MAX 0x7fff +#define ZIP_UINT16_MAX 0xffff + +#define ZIP_INT32_MIN (-ZIP_INT32_MAX - 1L) +#define ZIP_INT32_MAX 0x7fffffffL +#define ZIP_UINT32_MAX 0xffffffffLU + +#define ZIP_INT64_MIN (-ZIP_INT64_MAX - 1LL) +#define ZIP_INT64_MAX 0x7fffffffffffffffLL +#define ZIP_UINT64_MAX 0xffffffffffffffffULL + +#endif /* zipconf.h */ diff --git a/pcsx2 b/pcsx2 index e462f1f..507fafd 160000 --- a/pcsx2 +++ b/pcsx2 @@ -1 +1 @@ -Subproject commit e462f1ff9c8f4b1a35076096c8eaca959f97f1d0 +Subproject commit 507fafd601d5ef0274829863c748ed713e690b9a From 08989953a43411118f5d7cdde2c23b43a2a454f8 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 10 Feb 2024 02:27:19 -0700 Subject: [PATCH 03/16] More modernization work. --- Classes/DiscordStubs.cpp | 72 + Classes/PCSX2GameCore.mm | 70 +- Classes/Video/ContextAGL.mm | 170 -- Classes/Video/GLContextAGL.mm | 204 ++ Classes/Video/GSDevice.cpp | 231 +- Classes/Video/GSDeviceMTL.mm | 1038 ++++--- Classes/Video/GSDeviceOGL.cpp | 846 +++--- Classes/Video/GSDumpReplayer.cpp | 12 +- Classes/Video/OpenGLHostDisplayOverride.cpp | 2 +- PCSX2.xcodeproj/project.pbxproj | 3022 +++++++------------ libzip/private/zip_err_str.c | 79 + 11 files changed, 2668 insertions(+), 3078 deletions(-) create mode 100644 Classes/DiscordStubs.cpp delete mode 100644 Classes/Video/ContextAGL.mm create mode 100644 Classes/Video/GLContextAGL.mm create mode 100644 libzip/private/zip_err_str.c diff --git a/Classes/DiscordStubs.cpp b/Classes/DiscordStubs.cpp new file mode 100644 index 0000000..53f8dda --- /dev/null +++ b/Classes/DiscordStubs.cpp @@ -0,0 +1,72 @@ +// Copyright (c) 2024, OpenEmu Team +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of the OpenEmu Team nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "discord_rpc.h" + +void Discord_Initialize(const char* applicationId, + DiscordEventHandlers* handlers, + int autoRegister, + const char* optionalSteamId) +{ + +} + +void Discord_Shutdown(void) +{ + +} + +/* checks for incoming messages, dispatches callbacks */ +void Discord_RunCallbacks(void) +{ + +} + +/* If you disable the lib starting its own io thread, you'll need to call this from your own */ +#ifdef DISCORD_DISABLE_IO_THREAD +void Discord_UpdateConnection(void) +{ + +} +#endif + +void Discord_UpdatePresence(const DiscordRichPresence* presence) +{ + +} + +void Discord_ClearPresence(void) +{ + +} + +void Discord_Respond(const char* userid, /* DISCORD_REPLY_ */ int reply) +{ + +} + +void Discord_UpdateHandlers(DiscordEventHandlers* handlers) +{ + +} diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index cc6f970..ff8926e 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -27,26 +27,24 @@ #import #include "Video/OEHostDisplay.h" #include "Audio/OESndOut.h" -#include "Input/keymap.h" +//#include "Input/keymap.h" #define BOOL PCSX2BOOL #include "PrecompiledHeader.h" #include "GS.h" -#include "HostSettings.h" +//#include "HostSettings.h" #include "Host.h" //#include "core/host_display.h" #include "VMManager.h" //#include "AppConfig.h" -#include "Frontend/InputManager.h" +#include "Input/InputManager.h" #include "pcsx2/INISettingsInterface.h" -#include "Frontend/CommonHost.h" -#include "Frontend/FullscreenUI.h" -#include "Frontend/LogSink.h" +#include "MTGS.h" #include "common/SettingsWrapper.h" #include "CDVD/CDVD.h" #include "SPU2/Global.h" #include "SPU2/SndOut.h" -#include "PAD/Host/KeyStatus.h" +//#include "PAD/Host/KeyStatus.h" #include "R3000A.h" #include "MTVU.h" #include "Elfheader.h" @@ -71,7 +69,7 @@ bool isRunning = false; } -alignas(16) static SysMtgsThread s_mtgs_thread; +//alignas(16) static MTGS::Thread s_mtgs_thread; PCSX2GameCore *_current; @implementation PCSX2GameCore { @@ -100,7 +98,7 @@ - (instancetype)init { if (self = [super init]) { _current = self; - VMManager::Internal::InitializeMemory(); +// VMManager::Internal::InitializeMemory(); _maxDiscs = 0; _displayModes = [[NSMutableDictionary alloc] initWithDictionary: @{OEPSCSX2InternalResolution: @1, @@ -164,7 +162,7 @@ - (BOOL)loadFileAtURL:(NSURL *)url error:(NSError **)error //Lets get the Disc ID with some Magic out of PCSX2 CDVD :) VMManager::ChangeDisc(CDVD_SourceType::Iso, url.fileSystemRepresentation); std::string DiscName; - GetPS2ElfName(DiscName); + cdvdGetDiscInfo(nullptr, &DiscName, nullptr, nullptr, nullptr); //TODO: update! // std::string fname = DiscName.AfterLast('\\').BeforeFirst('_'); @@ -212,7 +210,7 @@ - (void)setupEmulation EmuFolders::Savestates = [self.supportDirectory URLByAppendingPathComponent:@"sstates" isDirectory:YES].fileSystemRepresentation; EmuFolders::Logs = [self.supportDirectory URLByAppendingPathComponent:@"Logs" isDirectory:YES].fileSystemRepresentation; EmuFolders::Cheats = [self.supportDirectory URLByAppendingPathComponent:@"Cheats" isDirectory:YES].fileSystemRepresentation; - EmuFolders::CheatsWS = [self.supportDirectory URLByAppendingPathComponent:@"cheats_ws" isDirectory:YES].fileSystemRepresentation; + EmuFolders::Patches = [self.supportDirectory URLByAppendingPathComponent:@"Patches" isDirectory:YES].fileSystemRepresentation; EmuFolders::Covers = [self.supportDirectory URLByAppendingPathComponent:@"Covers" isDirectory:YES].fileSystemRepresentation; EmuFolders::GameSettings = [self.supportDirectory URLByAppendingPathComponent:@"gamesettings" isDirectory:YES].fileSystemRepresentation; EmuFolders::EnsureFoldersExist(); @@ -308,7 +306,7 @@ - (void)startEmulation wi.surface_height = screenRect.size.height ; // g_host_display->CreateDevice(wi, VsyncMode::Adaptive); - VMManager::Internal::InitializeGlobals(); +// VMManager::Internal::InitializeGlobals(); if (VMManager::Initialize(params)) { @@ -447,17 +445,17 @@ - (double)audioSampleRate #pragma mark Input - (oneway void)didMovePS2JoystickDirection:(OEPS2Button)button withValue:(CGFloat)value forPlayer:(NSUInteger)player { - g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , value); +// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , value); } - (oneway void)didPushPS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { - g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , 1.0f); +// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , 1.0f); } - (oneway void)didReleasePS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { - g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key, 0.0f); +// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key, 0.0f); } @@ -593,13 +591,14 @@ - (void)changeDisplayWithMode:(NSString *)displayMode @end -SysMtgsThread& GetMTGS() -{ - return s_mtgs_thread; -} +//SysMtgsThread& GetMTGS() +//{ +// return s_mtgs_thread; +//} #pragma mark - Host Namespace +#if 0 std::optional> Host::ReadResourceFile(const char* filename) { @autoreleasepool { @@ -664,6 +663,7 @@ - (void)changeDisplayWithMode:(NSString *)displayMode return ret; } } +#endif void Host::WriteToSoundBuffer(s16 Left, s16 Right) { @@ -687,7 +687,7 @@ - (void)changeDisplayWithMode:(NSString *)displayMode return {}; } -void Host::SetRelativeMouseMode(bool enabled) +void Host::SetMouseMode(bool relative_mode, bool hide_cursor) { } @@ -701,14 +701,6 @@ - (void)changeDisplayWithMode:(NSString *)displayMode { } -void Host::AddFormattedOSDMessage(float duration, const char* format, ...) -{ -} - -void Host::AddKeyedFormattedOSDMessage(std::string key, float duration, const char* format, ...) -{ -} - void Host::RemoveKeyedOSDMessage(std::string key) { } @@ -726,11 +718,6 @@ - (void)changeDisplayWithMode:(NSString *)displayMode // Stub, do nothing. } -void CommonHost::UpdateLogging(SettingsInterface& si) -{ - -} - #pragma mark Host Thread void Host::OnVMStarting() @@ -765,12 +752,12 @@ - (void)changeDisplayWithMode:(NSString *)displayMode { } -void Host::OnGameChanged(const std::string& disc_path, const std::string& elf_override, const std::string& game_serial, - const std::string& game_name, u32 game_crc) +void Host::OnGameChanged(const std::string& title, const std::string& elf_override, const std::string& disc_path, + const std::string& disc_serial, u32 disc_crc, u32 current_crc) { } -void Host::CPUThreadVSync() +void Host::VSyncOnCPUThread() { } @@ -859,23 +846,16 @@ - (void)changeDisplayWithMode:(NSString *)displayMode void Host::LoadSettings(SettingsInterface& si, std::unique_lock& lock) { - CommonHost::LoadSettings(si, lock); +// CommonHost::LoadSettings(si, lock); } void Host::CheckForSettingsChanges(const Pcsx2Config& old_config) { - CommonHost::CheckForSettingsChanges(old_config); -} - -void FullscreenUI::CheckForConfigChanges(const Pcsx2Config& old_config) -{ - // do nothing +// CommonHost::CheckForSettingsChanges(old_config); } #pragma mark - -const IConsoleWriter* PatchesCon = &ConsoleWriter_Null; - std::optional InputManager::ConvertHostKeyboardStringToCode(const std::string_view& str) { return std::nullopt; diff --git a/Classes/Video/ContextAGL.mm b/Classes/Video/ContextAGL.mm deleted file mode 100644 index 72ff0ff..0000000 --- a/Classes/Video/ContextAGL.mm +++ /dev/null @@ -1,170 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2021 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PCSX2GameCore.h" -#include "common/GL/ContextAGL.h" -#include "common/Assertions.h" -#include "common/Console.h" -#include "glad.h" -#include - -#if ! __has_feature(objc_arc) -#error "Compile this with -fobjc-arc" -#endif - -namespace GL -{ - ContextAGL::ContextAGL(const WindowInfo& wi) - : Context(wi) - { - m_opengl_module_handle = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_NOW); - if (!m_opengl_module_handle) - Console.Error("Could not open OpenGL.framework, function lookups will probably fail"); - } - - ContextAGL::~ContextAGL() - { - CleanupView(); - - if (m_opengl_module_handle) - dlclose(m_opengl_module_handle); - } - - std::unique_ptr ContextAGL::Create(const WindowInfo& wi, gsl::span versions_to_try) - { - std::unique_ptr context = std::make_unique(wi); - if (!context->Initialize(versions_to_try)) - return nullptr; - - return context; - } - - bool ContextAGL::Initialize(gsl::span versions_to_try) - { - for (const Version& cv : versions_to_try) - { - if (cv.profile == Profile::NoProfile && CreateContext(nullptr, NSOpenGLProfileVersionLegacy, true)) - { - // we already have the dummy context, so just use that - m_version = cv; - return true; - } - else if (cv.profile == Profile::Core) - { - if (cv.major_version > 4 || cv.minor_version > 1) - continue; - - const NSOpenGLPixelFormatAttribute profile = (cv.major_version > 3 || cv.minor_version > 2) ? NSOpenGLProfileVersion4_1Core : NSOpenGLProfileVersion3_2Core; - if (CreateContext(nullptr, static_cast(profile), true)) - { - m_version = cv; - return true; - } - } - } - - return false; - } - - void* ContextAGL::GetProcAddress(const char* name) - { - void* addr = m_opengl_module_handle ? dlsym(m_opengl_module_handle, name) : nullptr; - if (addr) - return addr; - - return dlsym(RTLD_NEXT, name); - } - - bool ContextAGL::ChangeSurface(const WindowInfo& new_wi) - { - m_wi = new_wi; - BindContextToView(); - return true; - } - - void ContextAGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) - { - UpdateDimensions(); - } - - bool ContextAGL::UpdateDimensions() - { - if (![NSThread isMainThread]) - { - bool ret; - dispatch_sync(dispatch_get_main_queue(), [this, &ret]{ ret = UpdateDimensions(); }); - return ret; - } - - const NSSize window_size = [m_view frame].size; - const CGFloat window_scale = [[m_view window] backingScaleFactor]; - const u32 new_width = static_cast(window_size.width * window_scale); - const u32 new_height = static_cast(window_size.height * window_scale); - - if (m_wi.surface_width == new_width && m_wi.surface_height == new_height) - return false; - - m_wi.surface_width = new_width; - m_wi.surface_height = new_height; - - [m_context update]; - - return true; - } - - bool ContextAGL::SwapBuffers() - { - [_current.renderDelegate didRenderFrameOnAlternateThread]; - - return true; - } - - bool ContextAGL::MakeCurrent() - { - [_current.renderDelegate willRenderFrameOnAlternateThread]; - - return true; - } - - bool ContextAGL::DoneCurrent() - { - return true; - } - - bool ContextAGL::SetSwapInterval(s32 interval) - { - return true; - } - - std::unique_ptr ContextAGL::CreateSharedContext(const WindowInfo& wi) - { - return nullptr; - } - - bool ContextAGL::CreateContext(NSOpenGLContext* share_context, int profile, bool make_current) - { - return true; - } - - void ContextAGL::BindContextToView() - { - - } - - void ContextAGL::CleanupView() - { - m_view = nullptr; - } -} // namespace GL diff --git a/Classes/Video/GLContextAGL.mm b/Classes/Video/GLContextAGL.mm new file mode 100644 index 0000000..2f78186 --- /dev/null +++ b/Classes/Video/GLContextAGL.mm @@ -0,0 +1,204 @@ +// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team +// SPDX-License-Identifier: LGPL-3.0+ + +#include "GS/Renderers/OpenGL/GLContextAGL.h" + +#include "common/Assertions.h" +#include "common/Console.h" + +#include "glad.h" + +#include + +GLContextAGL::GLContextAGL(const WindowInfo& wi) + : GLContext(wi) +{ + m_opengl_module_handle = dlopen("/System/Library/Frameworks/OpenGL.framework/Versions/Current/OpenGL", RTLD_NOW); + if (!m_opengl_module_handle) + Console.Error("Could not open OpenGL.framework, function lookups will probably fail"); +} + +GLContextAGL::~GLContextAGL() +{ + if ([NSOpenGLContext currentContext] == m_context) + [NSOpenGLContext clearCurrentContext]; + + CleanupView(); + + if (m_opengl_module_handle) + dlclose(m_opengl_module_handle); + + [m_pixel_format release]; + [m_context release]; +} + +std::unique_ptr GLContextAGL::Create(const WindowInfo& wi, std::span versions_to_try) +{ + std::unique_ptr context = std::make_unique(wi); + if (!context->Initialize(versions_to_try)) + return nullptr; + + return context; +} + +bool GLContextAGL::Initialize(std::span versions_to_try) +{ + for (const Version& cv : versions_to_try) + { + if (cv.major_version > 4 || cv.minor_version > 1) + continue; + + const NSOpenGLPixelFormatAttribute profile = (cv.major_version > 3 || cv.minor_version > 2) ? NSOpenGLProfileVersion4_1Core : NSOpenGLProfileVersion3_2Core; + if (CreateContext(nullptr, static_cast(profile), true)) + { + m_version = cv; + return true; + } + } + + return false; +} + +void* GLContextAGL::GetProcAddress(const char* name) +{ + void* addr = m_opengl_module_handle ? dlsym(m_opengl_module_handle, name) : nullptr; + if (addr) + return addr; + + return dlsym(RTLD_NEXT, name); +} + +bool GLContextAGL::ChangeSurface(const WindowInfo& new_wi) +{ + m_wi = new_wi; + BindContextToView(); + return true; +} + +void GLContextAGL::ResizeSurface(u32 new_surface_width /*= 0*/, u32 new_surface_height /*= 0*/) +{ + UpdateDimensions(); +} + +bool GLContextAGL::UpdateDimensions() +{ + if (![NSThread isMainThread]) + { + bool ret; + dispatch_sync(dispatch_get_main_queue(), [this, &ret]{ ret = UpdateDimensions(); }); + return ret; + } + + const NSSize window_size = [m_view frame].size; + const CGFloat window_scale = [[m_view window] backingScaleFactor]; + const u32 new_width = static_cast(window_size.width * window_scale); + const u32 new_height = static_cast(window_size.height * window_scale); + + if (m_wi.surface_width == new_width && m_wi.surface_height == new_height) + return false; + + m_wi.surface_width = new_width; + m_wi.surface_height = new_height; + + [m_context update]; + + return true; +} + +bool GLContextAGL::SwapBuffers() +{ + [m_context flushBuffer]; + return true; +} + +bool GLContextAGL::MakeCurrent() +{ + [m_context makeCurrentContext]; + return true; +} + +bool GLContextAGL::DoneCurrent() +{ + [NSOpenGLContext clearCurrentContext]; + return true; +} + +bool GLContextAGL::SetSwapInterval(s32 interval) +{ + GLint gl_interval = static_cast(interval); + [m_context setValues:&gl_interval forParameter:NSOpenGLCPSwapInterval]; + return true; +} + +std::unique_ptr GLContextAGL::CreateSharedContext(const WindowInfo& wi) +{ + std::unique_ptr context = std::make_unique(wi); + + context->m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:m_context]; + if (context->m_context == nil) + return nullptr; + + context->m_version = m_version; + context->m_pixel_format = m_pixel_format; + + if (wi.type == WindowInfo::Type::MacOS) + context->BindContextToView(); + + return context; +} + +bool GLContextAGL::CreateContext(NSOpenGLContext* share_context, int profile, bool make_current) +{ + [m_context release]; + [m_pixel_format release]; + m_context = nullptr; + m_pixel_format = nullptr; + + const NSOpenGLPixelFormatAttribute attribs[] = { + NSOpenGLPFADoubleBuffer, + NSOpenGLPFAOpenGLProfile, static_cast(profile), + NSOpenGLPFAAccelerated, + 0 + }; + + m_pixel_format = [[NSOpenGLPixelFormat alloc] initWithAttributes:attribs]; + if (m_pixel_format == nil) + { + Console.Error("(GLContextAGL) Failed to initialize pixel format"); + return false; + } + + m_context = [[NSOpenGLContext alloc] initWithFormat:m_pixel_format shareContext:nil]; + if (m_context == nil) + return false; + + if (m_wi.type == WindowInfo::Type::MacOS) + BindContextToView(); + + if (make_current) + [m_context makeCurrentContext]; + + return true; +} + +void GLContextAGL::BindContextToView() +{ + if (![NSThread isMainThread]) + { + dispatch_sync(dispatch_get_main_queue(), [this]{ BindContextToView(); }); + return; + } + + m_view = [static_cast(m_wi.window_handle) retain]; + [m_view setWantsBestResolutionOpenGLSurface:YES]; + + UpdateDimensions(); + + [m_context setView:m_view]; +} + +void GLContextAGL::CleanupView() +{ + [m_view release]; + m_view = nullptr; +} diff --git a/Classes/Video/GSDevice.cpp b/Classes/Video/GSDevice.cpp index d0b1882..c96e1bd 100644 --- a/Classes/Video/GSDevice.cpp +++ b/Classes/Video/GSDevice.cpp @@ -1,25 +1,16 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2021 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" +// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team +// SPDX-License-Identifier: LGPL-3.0+ + #include "GS/Renderers/Common/GSDevice.h" #include "GS/GSGL.h" #include "GS/GS.h" #include "Host.h" -#include "HostSettings.h" -#include "common/Align.h" + +#include "common/Console.h" +#include "common/BitUtils.h" +#include "common/FileSystem.h" +#include "common/Path.h" +#include "common/SmallString.h" #include "common/StringUtil.h" //#include "imgui.h" @@ -41,6 +32,7 @@ const char* shaderName(ShaderConvert value) case ShaderConvert::FLOAT32_TO_16_BITS: return "ps_convert_float32_32bits"; case ShaderConvert::FLOAT32_TO_32_BITS: return "ps_convert_float32_32bits"; case ShaderConvert::FLOAT32_TO_RGBA8: return "ps_convert_float32_rgba8"; + case ShaderConvert::FLOAT32_TO_RGB8: return "ps_convert_float32_rgba8"; case ShaderConvert::FLOAT16_TO_RGB5A1: return "ps_convert_float16_rgb5a1"; case ShaderConvert::RGBA8_TO_FLOAT32: return "ps_convert_rgba8_float32"; case ShaderConvert::RGBA8_TO_FLOAT24: return "ps_convert_rgba8_float24"; @@ -57,7 +49,7 @@ const char* shaderName(ShaderConvert value) case ShaderConvert::YUV: return "ps_yuv"; // clang-format on default: - ASSERT(0); + pxAssert(0); return "ShaderConvertUnknownShader"; } } @@ -67,15 +59,17 @@ const char* shaderName(PresentShader value) switch (value) { // clang-format off - case PresentShader::COPY: return "ps_copy"; - case PresentShader::SCANLINE: return "ps_filter_scanlines"; - case PresentShader::DIAGONAL_FILTER: return "ps_filter_diagonal"; - case PresentShader::TRIANGULAR_FILTER: return "ps_filter_triangular"; - case PresentShader::COMPLEX_FILTER: return "ps_filter_complex"; - case PresentShader::LOTTES_FILTER: return "ps_filter_lottes"; + case PresentShader::COPY: return "ps_copy"; + case PresentShader::SCANLINE: return "ps_filter_scanlines"; + case PresentShader::DIAGONAL_FILTER: return "ps_filter_diagonal"; + case PresentShader::TRIANGULAR_FILTER: return "ps_filter_triangular"; + case PresentShader::COMPLEX_FILTER: return "ps_filter_complex"; + case PresentShader::LOTTES_FILTER: return "ps_filter_lottes"; + case PresentShader::SUPERSAMPLE_4xRGSS: return "ps_4x_rgss"; + case PresentShader::SUPERSAMPLE_AUTO: return "ps_automagical_supersampling"; // clang-format on default: - ASSERT(0); + pxAssert(0); return "DisplayShaderUnknownShader"; } } @@ -85,9 +79,111 @@ static int MipmapLevelsForSize(int width, int height) return std::min(static_cast(std::log2(std::max(width, height))) + 1, MAXIMUM_TEXTURE_MIPMAP_LEVELS); } +#ifdef PCSX2_DEVBUILD + +enum class TextureLabel +{ + ColorRT, + HDRRT, + U16RT, + U32RT, + DepthStencil, + PrimIDTexture, + RWTexture, + CLUTTexture, + Texture, + ReplacementTexture, + Other, + Last = Other, +}; + +static std::array(TextureLabel::Last) + 1> s_texture_counts; + +static TextureLabel GetTextureLabel(GSTexture::Type type, GSTexture::Format format) +{ + switch (type) + { + case GSTexture::Type::RenderTarget: + switch (format) + { + case GSTexture::Format::Color: + return TextureLabel::ColorRT; + case GSTexture::Format::HDRColor: + return TextureLabel::HDRRT; + case GSTexture::Format::UInt16: + return TextureLabel::U16RT; + case GSTexture::Format::UInt32: + return TextureLabel::U32RT; + case GSTexture::Format::PrimID: + return TextureLabel::PrimIDTexture; + default: + return TextureLabel::Other; + } + case GSTexture::Type::Texture: + switch (format) + { + case GSTexture::Format::Color: + return TextureLabel::Texture; + case GSTexture::Format::UNorm8: + return TextureLabel::CLUTTexture; + case GSTexture::Format::BC1: + case GSTexture::Format::BC2: + case GSTexture::Format::BC3: + case GSTexture::Format::BC7: + return TextureLabel::ReplacementTexture; + default: + return TextureLabel::Other; + } + case GSTexture::Type::DepthStencil: + return TextureLabel::DepthStencil; + case GSTexture::Type::RWTexture: + return TextureLabel::RWTexture; + case GSTexture::Type::Invalid: + default: + return TextureLabel::Other; + } +} + +static const char* TextureLabelString(TextureLabel label) +{ + switch (label) + { + case TextureLabel::ColorRT: + return "Color RT"; + case TextureLabel::HDRRT: + return "HDR RT"; + case TextureLabel::U16RT: + return "U16 RT"; + case TextureLabel::U32RT: + return "U32 RT"; + case TextureLabel::DepthStencil: + return "Depth Stencil"; + case TextureLabel::PrimIDTexture: + return "PrimID"; + case TextureLabel::RWTexture: + return "RW Texture"; + case TextureLabel::CLUTTexture: + return "CLUT Texture"; + case TextureLabel::Texture: + return "Texture"; + case TextureLabel::ReplacementTexture: + return "Replacement Texture"; + case TextureLabel::Other: + default: + return "Unknown Texture"; + } +} + +#endif + std::unique_ptr g_gs_device; -GSDevice::GSDevice() = default; +GSDevice::GSDevice() +{ +#ifdef PCSX2_DEVBUILD + s_texture_counts.fill(0); +#endif +} GSDevice::~GSDevice() { @@ -184,6 +280,11 @@ void GSDevice::GenerateExpansionIndexBuffer(void* buffer) } } +std::optional GSDevice::ReadShaderSource(const char* filename) +{ + return FileSystem::ReadFileToString(Path::Combine(EmuFolders::Resources, filename).c_str()); +} + bool GSDevice::Create() { m_vsync_mode = Host::GetEffectiveVSyncMode(); @@ -227,15 +328,29 @@ bool GSDevice::GetHostRefreshRate(float* refresh_rate) return WindowInfo::QueryRefreshRateForWindow(m_window_info, refresh_rate); } +void GSDevice::ClearRenderTarget(GSTexture* t, u32 c) +{ + t->SetClearColor(c); +} + +void GSDevice::ClearDepth(GSTexture* t, float d) +{ + t->SetClearDepth(d); +} + +void GSDevice::InvalidateRenderTarget(GSTexture* t) +{ + t->SetState(GSTexture::State::Invalidated); +} + bool GSDevice::UpdateImGuiFontTexture() { return true; } -GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_reuse) +GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, int levels, GSTexture::Format format, bool clear, bool prefer_unused_texture) { const GSVector2i size(width, height); - const bool prefer_new_texture = (m_features.prefer_new_textures && type == GSTexture::Type::Texture && !prefer_reuse); FastList& pool = m_pool[type != GSTexture::Type::Texture]; GSTexture* t = nullptr; @@ -245,11 +360,11 @@ GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, i { t = *i; - assert(t); + pxAssert(t); if (t->GetType() == type && t->GetFormat() == format && t->GetSize() == size && t->GetMipmapLevels() == levels) { - if (!prefer_new_texture || t->GetLastFrameUsed() != m_frame) + if (!prefer_unused_texture || t->GetLastFrameUsed() != m_frame) { m_pool_memory_usage -= t->GetMemUsage(); pool.erase(i); @@ -277,7 +392,24 @@ GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, i { t = CreateSurface(type, width, height, levels, format); if (!t) - throw std::bad_alloc(); + { + Console.Error("GS: Memory allocation failure for %dx%d texture. Purging pool and retrying.", width, height); + PurgePool(); + if (!t) + { + Console.Error("GS: Memory allocation failure for %dx%d texture after purging pool.", width, height); + return nullptr; + } + } + +#ifdef PCSX2_DEVBUILD + if (GSConfig.UseDebugDevice) + { + const TextureLabel label = GetTextureLabel(type, format); + const u32 id = ++s_texture_counts[static_cast(label)]; + t->SetDebugName(TinyString::from_fmt("{} {}", TextureLabelString(label), id)); + } +#endif } } @@ -294,7 +426,7 @@ GSTexture* GSDevice::FetchSurface(GSTexture::Type type, int width, int height, i case GSTexture::Type::DepthStencil: { if (clear) - ClearDepth(t); + ClearDepth(t, 0.0f); else InvalidateRenderTarget(t); } @@ -374,20 +506,20 @@ void GSDevice::PurgePool() m_pool_memory_usage = 0; } -GSTexture* GSDevice::CreateRenderTarget(int w, int h, GSTexture::Format format, bool clear) +GSTexture* GSDevice::CreateRenderTarget(int w, int h, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, format, clear, true); + return FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, format, clear, !prefer_reuse); } -GSTexture* GSDevice::CreateDepthStencil(int w, int h, GSTexture::Format format, bool clear) +GSTexture* GSDevice::CreateDepthStencil(int w, int h, GSTexture::Format format, bool clear, bool prefer_reuse) { - return FetchSurface(GSTexture::Type::DepthStencil, w, h, 1, format, clear, true); + return FetchSurface(GSTexture::Type::DepthStencil, w, h, 1, format, clear, !prefer_reuse); } GSTexture* GSDevice::CreateTexture(int w, int h, int mipmap_levels, GSTexture::Format format, bool prefer_reuse /* = false */) { const int levels = mipmap_levels < 0 ? MipmapLevelsForSize(w, h) : mipmap_levels; - return FetchSurface(GSTexture::Type::Texture, w, h, levels, format, false, prefer_reuse); + return FetchSurface(GSTexture::Type::Texture, w, h, levels, format, false, m_features.prefer_new_textures && !prefer_reuse); } void GSDevice::StretchRect(GSTexture* sTex, GSTexture* dTex, const GSVector4& dRect, ShaderConvert shader, bool linear) @@ -441,7 +573,7 @@ void GSDevice::ClearCurrent() m_cas = nullptr; } -void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c) +void GSDevice::Merge(GSTexture* sTex[3], GSVector4* sRect, GSVector4* dRect, const GSVector2i& fs, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, u32 c) { if (ResizeRenderTarget(&m_merge, fs.x, fs.y, false, false)) DoMerge(sTex, sRect, m_merge, dRect, PMODE, EXTBUF, c, GSConfig.PCRTCOffsets); @@ -578,19 +710,16 @@ bool GSDevice::ResizeRenderTarget(GSTexture** t, int w, int h, bool preserve_con return true; } - GSTexture* new_tex; - try - { - const GSTexture::Format fmt = orig_tex ? orig_tex->GetFormat() : GSTexture::Format::Color; - new_tex = FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, fmt, !preserve_contents, true); - } - catch (std::bad_alloc&) + const GSTexture::Format fmt = orig_tex ? orig_tex->GetFormat() : GSTexture::Format::Color; + const bool really_preserve_contents = (preserve_contents && orig_tex); + GSTexture* new_tex = FetchSurface(GSTexture::Type::RenderTarget, w, h, 1, fmt, !really_preserve_contents, true); + if (!new_tex) { Console.WriteLn("%dx%d texture allocation failed in ResizeTexture()", w, h); return false; } - if (preserve_contents && orig_tex) + if (really_preserve_contents) { constexpr GSVector4 sRect = GSVector4::cxpr(0, 0, 1, 1); const GSVector4 dRect = GSVector4(orig_tex->GetRect()); @@ -658,8 +787,8 @@ void GSDevice::SetHWDrawConfigForAlphaPass(GSHWDrawConfig::PSSelector* ps, bool GSDevice::GetCASShaderSource(std::string* source) { - std::optional ffx_a_source(Host::ReadResourceFileToString("shaders/common/ffx_a.h")); - std::optional ffx_cas_source(Host::ReadResourceFileToString("shaders/common/ffx_cas.h")); + std::optional ffx_a_source = ReadShaderSource("shaders/common/ffx_a.h"); + std::optional ffx_cas_source = ReadShaderSource("shaders/common/ffx_cas.h"); if (!ffx_a_source.has_value() || !ffx_cas_source.has_value()) return false; @@ -799,10 +928,10 @@ const std::array GSDevice::m_blendMap = { 0 , OP_SUBTRACT , CONST_ZERO , SRC1_ALPHA} , // 2102: (0 - Cd)*As + 0 ==> 0 - Cd*As { 0 , OP_SUBTRACT , CONST_ONE , DST_ALPHA} , // 2110: (0 - Cd)*Ad + Cs ==> Cs - Cd*Ad { 0 , OP_ADD , CONST_ZERO , INV_DST_ALPHA} , // 2111: (0 - Cd)*Ad + Cd ==> Cd*(1 - Ad) - { 0 , OP_SUBTRACT , CONST_ONE , DST_ALPHA} , // 2112: (0 - Cd)*Ad + 0 ==> 0 - Cd*Ad + { 0 , OP_SUBTRACT , CONST_ZERO , DST_ALPHA} , // 2112: (0 - Cd)*Ad + 0 ==> 0 - Cd*Ad { 0 , OP_SUBTRACT , CONST_ONE , CONST_COLOR} , // 2120: (0 - Cd)*F + Cs ==> Cs - Cd*F { 0 , OP_ADD , CONST_ZERO , INV_CONST_COLOR} , // 2121: (0 - Cd)*F + Cd ==> Cd*(1 - F) - { 0 , OP_SUBTRACT , CONST_ONE , CONST_COLOR} , // 2122: (0 - Cd)*F + 0 ==> 0 - Cd*F + { 0 , OP_SUBTRACT , CONST_ZERO , CONST_COLOR} , // 2122: (0 - Cd)*F + 0 ==> 0 - Cd*F { BLEND_NO_REC , OP_ADD , CONST_ONE , CONST_ZERO} , // 2200: (0 - 0)*As + Cs ==> Cs { BLEND_CD , OP_ADD , CONST_ZERO , CONST_ONE} , // 2201: (0 - 0)*As + Cd ==> Cd { BLEND_NO_REC , OP_ADD , CONST_ZERO , CONST_ZERO} , // 2202: (0 - 0)*As + 0 ==> 0 diff --git a/Classes/Video/GSDeviceMTL.mm b/Classes/Video/GSDeviceMTL.mm index 1a9130e..0295ce7 100644 --- a/Classes/Video/GSDeviceMTL.mm +++ b/Classes/Video/GSDeviceMTL.mm @@ -1,19 +1,5 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2021 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" +// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team +// SPDX-License-Identifier: LGPL-3.0+ #include "Host.h" #include "GS/Renderers/Metal/GSMetalCPPAccessible.h" @@ -21,6 +7,11 @@ #include "GS/Renderers/Metal/GSTextureMTL.h" #include "GS/GSPerfMon.h" +#include "common/Console.h" +#include "common/HostSys.h" + +//#include "imgui.h" + #ifdef __APPLE__ #include "GSMTLSharedHeader.h" @@ -97,7 +88,7 @@ amt = (amt + 31) & ~31ull; u64 last_draw = m_last_finished_draw.load(std::memory_order_acquire); bool needs_new = buffer.usage.PrepareForAllocation(last_draw, amt); - if (unlikely(needs_new)) + if (needs_new) [[unlikely]] { // Orphan buffer size_t newsize = std::max(buffer.usage.Size() * 2, 4096); @@ -113,7 +104,7 @@ size_t pos = buffer.usage.Allocate(m_current_draw, amt); Map ret = {buffer.mtlbuffer, pos, reinterpret_cast(buffer.buffer) + pos}; - ASSERT(pos <= buffer.usage.Size() && "Previous code should have guaranteed there was enough space"); + pxAssertMsg(pos <= buffer.usage.Size(), "Previous code should have guaranteed there was enough space"); return ret; } @@ -131,14 +122,14 @@ { id enc = GetVertexUploadEncoder(); [enc copyFromBuffer:buffer.cpubuffer - sourceOffset:buffer.last_upload - toBuffer:buffer.gpubuffer + sourceOffset:buffer.last_upload + toBuffer:buffer.gpubuffer destinationOffset:buffer.last_upload - size:base_pos - buffer.last_upload]; + size:base_pos - buffer.last_upload]; } buffer.last_upload = 0; } - if (unlikely(needs_new)) + if (needs_new) [[unlikely]] { // Orphan buffer size_t newsize = std::max(buffer.usage.Size() * 2, 4096); @@ -160,7 +151,7 @@ size_t pos = buffer.usage.Allocate(m_current_draw, amt); Map ret = {nil, pos, reinterpret_cast(buffer.buffer) + pos}; ret.gpu_buffer = m_dev.features.unified_memory ? buffer.cpubuffer : buffer.gpubuffer; - ASSERT(pos <= buffer.usage.Size() && "Previous code should have guaranteed there was enough space"); + pxAssertMsg(pos <= buffer.usage.Size(), "Previous code should have guaranteed there was enough space"); return ret; } @@ -171,10 +162,10 @@ id enc = GetVertexUploadEncoder(); [enc copyFromBuffer:buffer.cpubuffer - sourceOffset:buffer.last_upload - toBuffer:buffer.gpubuffer + sourceOffset:buffer.last_upload + toBuffer:buffer.gpubuffer destinationOffset:buffer.last_upload - size:buffer.usage.Pos() - buffer.last_upload]; + size:buffer.usage.Pos() - buffer.last_upload]; [enc updateFence:m_draw_sync_fence]; buffer.last_upload = buffer.usage.Pos(); } @@ -258,7 +249,7 @@ } if (m_dev.features.unified_memory) { - ASSERT(!m_vertex_upload_cmdbuf && "Should never be used!"); + pxAssertMsg(!m_vertex_upload_cmdbuf, "Should never be used!"); } else if (m_vertex_upload_cmdbuf) { @@ -389,23 +380,38 @@ GSTextureMTL* md = static_cast(depth); GSTextureMTL* ms = static_cast(stencil); bool needs_new = color != m_current_render.color_target - || depth != m_current_render.depth_target - || stencil != m_current_render.stencil_target; + || depth != m_current_render.depth_target + || stencil != m_current_render.stencil_target; GSVector4 color_clear; - float depth_clear=0; - int stencil_clear=0; - bool needs_color_clear = false; - bool needs_depth_clear = false; - bool needs_stencil_clear = false; - if (mc) needs_color_clear = mc->GetResetNeedsColorClear(color_clear); - if (md) needs_depth_clear = md->GetResetNeedsDepthClear(depth_clear); - if (ms) needs_stencil_clear = ms->GetResetNeedsStencilClear(stencil_clear); - if (needs_color_clear && color_load != MTLLoadActionDontCare) color_load = MTLLoadActionClear; - if (needs_depth_clear && depth_load != MTLLoadActionDontCare) depth_load = MTLLoadActionClear; - if (needs_stencil_clear && stencil_load != MTLLoadActionDontCare) stencil_load = MTLLoadActionClear; + float depth_clear; + // Depth and stencil might be the same, so do all invalidation checks before resetting invalidation +#define CHECK_CLEAR(tex, load_action, clear, ClearGetter) \ + if (tex) \ + { \ + if (tex->GetState() == GSTexture::State::Invalidated) \ + { \ + load_action = MTLLoadActionDontCare; \ + } \ + else if (tex->GetState() == GSTexture::State::Cleared && load_action != MTLLoadActionDontCare) \ + { \ + clear = tex->ClearGetter(); \ + load_action = MTLLoadActionClear; \ + } \ + } + + CHECK_CLEAR(mc, color_load, color_clear, GetUNormClearColor) + CHECK_CLEAR(md, depth_load, depth_clear, GetClearDepth) +#undef CHECK_CLEAR + // Stencil and depth are one texture, stencil clears aren't supported + if (ms && ms->GetState() == GSTexture::State::Invalidated) + stencil_load = MTLLoadActionDontCare; needs_new |= mc && color_load == MTLLoadActionClear; needs_new |= md && depth_load == MTLLoadActionClear; - needs_new |= ms && stencil_load == MTLLoadActionClear; + + // Reset texture state + if (mc) mc->SetState(GSTexture::State::Dirty); + if (md) md->SetState(GSTexture::State::Dirty); + if (ms) ms->SetState(GSTexture::State::Dirty); if (!needs_new) { @@ -451,8 +457,7 @@ { ms->m_last_write = m_current_draw; desc.stencilAttachment.texture = ms->GetTexture(); - if (stencil_load == MTLLoadActionClear) - desc.stencilAttachment.clearStencil = stencil_clear; + pxAssert(stencil_load != MTLLoadActionClear); desc.stencilAttachment.loadAction = stencil_load; } @@ -462,7 +467,7 @@ [m_current_render.encoder setLabel:name]; if (!m_dev.features.unified_memory) [m_current_render.encoder waitForFence:m_draw_sync_fence - beforeStages:MTLRenderStageVertex]; + beforeStages:MTLRenderStageVertex]; m_current_render.color_target = color; m_current_render.depth_target = depth; m_current_render.stencil_target = stencil; @@ -502,9 +507,9 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) 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]; @@ -538,7 +543,7 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) ClearRenderTarget(t, 0); break; case GSTexture::Type::DepthStencil: - ClearDepth(t); + ClearDepth(t, 0.0f); break; default: break; @@ -551,7 +556,7 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) } }} -void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c, const bool linear) +void GSDeviceMTL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, u32 c, const bool linear) { @autoreleasepool { id cmdbuf = GetRenderCmdBuf(); GSScopedDebugGroupMTL dbg(cmdbuf, @"DoMerge"); @@ -563,7 +568,8 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) ClearRenderTarget(dTex, c); - vector_float4 cb_c = { c.r, c.g, c.b, c.a }; + const GSVector4 unorm_c = GSVector4::unorm8(c); + vector_float4 cb_c = { unorm_c.r, unorm_c.g, unorm_c.b, unorm_c.a }; GSMTLConvertPSUniform cb_yuv = {}; cb_yuv.emoda = EXTBUF.EMODA; cb_yuv.emodc = EXTBUF.EMODC; @@ -623,8 +629,8 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) { BeginRenderPass(@"ShadeBoost", dTex, MTLLoadActionDontCare, nullptr, MTLLoadActionDontCare); [m_current_render.encoder setFragmentBytes:params - length:sizeof(float) * 4 - atIndex:GSMTLBufferIndexUniforms]; + length:sizeof(float) * 4 + atIndex:GSMTLBufferIndexUniforms]; RenderCopy(sTex, m_shadeboost_pipeline, GSVector4i(0, 0, dTex->GetSize().x, dTex->GetSize().y)); } @@ -643,7 +649,7 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) [enc setTexture:static_cast(dTex)->GetTexture() atIndex:1]; [enc setBytes:&constants length:sizeof(constants) atIndex:GSMTLBufferIndexUniforms]; [enc dispatchThreadgroups:MTLSizeMake(dispatchX, dispatchY, 1) - threadsPerThreadgroup:MTLSizeMake(64, 1, 1)]; + threadsPerThreadgroup:MTLSizeMake(64, 1, 1)]; [enc endEncoding]; return true; }} @@ -652,11 +658,11 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) { NSError* err = nil; MRCOwned> fn = MRCTransfer([m_dev.shaders newFunctionWithName:name constantValues:m_fn_constants error:&err]); - if (unlikely(err)) + if (err) [[unlikely]] { NSString* msg = [NSString stringWithFormat:@"Failed to load shader %@: %@", name, [err localizedDescription]]; Console.Error("%s", [msg UTF8String]); - throw GSRecoverableError(); + pxFailRel([msg UTF8String]); } return fn; } @@ -668,11 +674,11 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) [desc setFragmentFunction:fragment]; NSError* err; MRCOwned> res = MRCTransfer([m_dev.dev newRenderPipelineStateWithDescriptor:desc error:&err]); - if (unlikely(err)) + if (err) [[unlikely]] { NSString* msg = [NSString stringWithFormat:@"Failed to create pipeline %@: %@", name, [err localizedDescription]]; Console.Error("%s", [msg UTF8String]); - throw GSRecoverableError(); + pxFailRel([msg UTF8String]); } return res; } @@ -685,14 +691,14 @@ static constexpr MTLPixelFormat ConvertPixelFormat(GSTexture::Format format) NSError* err; MRCOwned> res = MRCTransfer([m_dev.dev newComputePipelineStateWithDescriptor:desc - options:0 - reflection:nil - error:&err]); - if (unlikely(err)) + options:0 + reflection:nil + error:&err]); + if (err) [[unlikely]] { NSString* msg = [NSString stringWithFormat:@"Failed to create pipeline %@: %@", name, [err localizedDescription]]; Console.Error("%s", [msg UTF8String]); - throw GSRecoverableError(); + pxFailRel([msg UTF8String]); } return res; } @@ -733,7 +739,7 @@ static void OnMainThread(Fn&& fn) void GSDeviceMTL::AttachSurfaceOnMainThread() { - ASSERT([NSThread isMainThread]); + pxAssert([NSThread isMainThread]); m_layer = MRCRetain([CAMetalLayer layer]); [m_layer setDrawableSize:CGSizeMake(m_window_info.surface_width, m_window_info.surface_height)]; [m_layer setDevice:m_dev.dev]; @@ -744,7 +750,7 @@ static void OnMainThread(Fn&& fn) void GSDeviceMTL::DetachSurfaceOnMainThread() { - ASSERT([NSThread isMainThread]); + pxAssert([NSThread isMainThread]); [m_view setLayer:nullptr]; [m_view setWantsLayer:NO]; m_view = nullptr; @@ -766,12 +772,62 @@ static void OnMainThread(Fn&& fn) return actual; } +static MRCOwned> CreateSampler(id dev, GSHWDrawConfig::SamplerSelector sel) +{ + MRCOwned sdesc = MRCTransfer([MTLSamplerDescriptor new]); + const char* minname = sel.biln ? "Ln" : "Pt"; + const char* magname = minname; + [sdesc setMinFilter:sel.biln ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest]; + [sdesc setMagFilter:sel.biln ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest]; + switch (static_cast(sel.triln)) + { + case GS_MIN_FILTER::Nearest: + case GS_MIN_FILTER::Linear: + [sdesc setMipFilter:MTLSamplerMipFilterNotMipmapped]; + break; + case GS_MIN_FILTER::Nearest_Mipmap_Nearest: + minname = "PtPt"; + [sdesc setMinFilter:MTLSamplerMinMagFilterNearest]; + [sdesc setMipFilter:MTLSamplerMipFilterNearest]; + break; + case GS_MIN_FILTER::Nearest_Mipmap_Linear: + minname = "PtLn"; + [sdesc setMinFilter:MTLSamplerMinMagFilterNearest]; + [sdesc setMipFilter:MTLSamplerMipFilterLinear]; + break; + case GS_MIN_FILTER::Linear_Mipmap_Nearest: + minname = "LnPt"; + [sdesc setMinFilter:MTLSamplerMinMagFilterLinear]; + [sdesc setMipFilter:MTLSamplerMipFilterNearest]; + break; + case GS_MIN_FILTER::Linear_Mipmap_Linear: + minname = "LnLn"; + [sdesc setMinFilter:MTLSamplerMinMagFilterLinear]; + [sdesc setMipFilter:MTLSamplerMipFilterLinear]; + break; + } + + const char* taudesc = sel.tau ? "Repeat" : "Clamp"; + const char* tavdesc = sel.tav == sel.tau ? "" : sel.tav ? "Repeat" : "Clamp"; + [sdesc setSAddressMode:sel.tau ? MTLSamplerAddressModeRepeat : MTLSamplerAddressModeClampToEdge]; + [sdesc setTAddressMode:sel.tav ? MTLSamplerAddressModeRepeat : MTLSamplerAddressModeClampToEdge]; + [sdesc setRAddressMode:MTLSamplerAddressModeClampToEdge]; + + [sdesc setMaxAnisotropy:GSConfig.MaxAnisotropy && sel.aniso ? GSConfig.MaxAnisotropy : 1]; + [sdesc setLodMaxClamp:(sel.lodclamp || sel.UseMipmapFiltering()) ? 0.25f : FLT_MAX]; + + [sdesc setLabel:[NSString stringWithFormat:@"%s%s %s%s", taudesc, tavdesc, magname, minname]]; + MRCOwned> ret = MRCTransfer([dev newSamplerStateWithDescriptor:sdesc]); + pxAssertRel(ret, "Failed to create sampler!"); + return ret; +} + bool GSDeviceMTL::Create() { @autoreleasepool { if (!GSDevice::Create()) return false; - NSString* ns_adapter_name = [NSString stringWithUTF8String:EmuConfig.GS.Adapter.c_str()]; + NSString* ns_adapter_name = [NSString stringWithUTF8String:GSConfig.Adapter.c_str()]; auto devs = MRCTransfer(MTLCopyAllDevices()); for (id dev in devs.Get()) { @@ -780,8 +836,8 @@ static void OnMainThread(Fn&& fn) } if (!m_dev.dev) { - if (!EmuConfig.GS.Adapter.empty()) - Console.Warning("Metal: Couldn't find adapter %s, using default", EmuConfig.GS.Adapter.c_str()); + if (!GSConfig.Adapter.empty()) + Console.Warning("Metal: Couldn't find adapter %s, using default", GSConfig.Adapter.c_str()); m_dev = GSMTLDevice(MRCTransfer(MTLCreateSystemDefaultDevice())); if (!m_dev.dev) Host::ReportErrorAsync("No Metal Devices Available", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all macs from 2012 onwards)."); @@ -831,7 +887,7 @@ static void OnMainThread(Fn&& fn) MTLPixelFormat layer_px_fmt = [m_layer pixelFormat]; m_features.broken_point_sampler = [[m_dev.dev name] containsString:@"AMD"]; - m_features.vs_expand = true; + m_features.vs_expand = !GSConfig.DisableVertexShaderExpand; m_features.primitive_id = m_dev.features.primid; m_features.texture_barrier = true; m_features.provoking_vertex_last = false; @@ -840,322 +896,272 @@ static void OnMainThread(Fn&& fn) m_features.prefer_new_textures = true; m_features.dxt_textures = true; m_features.bptc_textures = true; - m_features.framebuffer_fetch = m_dev.features.framebuffer_fetch; + m_features.framebuffer_fetch = m_dev.features.framebuffer_fetch && !GSConfig.DisableFramebufferFetch; m_features.dual_source_blend = true; m_features.clip_control = true; m_features.stencil_buffer = true; m_features.cas_sharpening = true; m_features.test_and_sample_depth = true; - try - { - // Init metal stuff - m_fn_constants = MRCTransfer([MTLFunctionConstantValues new]); - setFnConstantB(m_fn_constants, m_dev.features.framebuffer_fetch, GSMTLConstantIndex_FRAMEBUFFER_FETCH); - - m_draw_sync_fence = MRCTransfer([m_dev.dev newFence]); - [m_draw_sync_fence setLabel:@"Draw Sync Fence"]; - m_spin_fence = MRCTransfer([m_dev.dev newFence]); - [m_spin_fence setLabel:@"Spin Fence"]; - constexpr MTLResourceOptions spin_opts = MTLResourceStorageModePrivate | MTLResourceHazardTrackingModeUntracked; - m_spin_buffer = MRCTransfer([m_dev.dev newBufferWithLength:4 options:spin_opts]); - [m_spin_buffer setLabel:@"Spin Buffer"]; - id initCommands = [m_queue commandBuffer]; - id clearSpinBuffer = [initCommands blitCommandEncoder]; - [clearSpinBuffer fillBuffer:m_spin_buffer range:NSMakeRange(0, 4) value:0]; - [clearSpinBuffer updateFence:m_spin_fence]; - [clearSpinBuffer endEncoding]; - m_spin_pipeline = MakeComputePipeline(LoadShader(@"waste_time"), @"waste_time"); - - for (int sharpen_only = 0; sharpen_only < 2; sharpen_only++) + // Init metal stuff + m_fn_constants = MRCTransfer([MTLFunctionConstantValues new]); + setFnConstantB(m_fn_constants, m_dev.features.framebuffer_fetch, GSMTLConstantIndex_FRAMEBUFFER_FETCH); + + m_draw_sync_fence = MRCTransfer([m_dev.dev newFence]); + [m_draw_sync_fence setLabel:@"Draw Sync Fence"]; + m_spin_fence = MRCTransfer([m_dev.dev newFence]); + [m_spin_fence setLabel:@"Spin Fence"]; + constexpr MTLResourceOptions spin_opts = MTLResourceStorageModePrivate | MTLResourceHazardTrackingModeUntracked; + m_spin_buffer = MRCTransfer([m_dev.dev newBufferWithLength:4 options:spin_opts]); + [m_spin_buffer setLabel:@"Spin Buffer"]; + id initCommands = [m_queue commandBuffer]; + id clearSpinBuffer = [initCommands blitCommandEncoder]; + [clearSpinBuffer fillBuffer:m_spin_buffer range:NSMakeRange(0, 4) value:0]; + [clearSpinBuffer updateFence:m_spin_fence]; + [clearSpinBuffer endEncoding]; + m_spin_pipeline = MakeComputePipeline(LoadShader(@"waste_time"), @"waste_time"); + + for (int sharpen_only = 0; sharpen_only < 2; sharpen_only++) + { + setFnConstantB(m_fn_constants, sharpen_only, GSMTLConstantIndex_CAS_SHARPEN_ONLY); + NSString* shader = m_dev.features.has_fast_half ? @"CASHalf" : @"CASFloat"; + m_cas_pipeline[sharpen_only] = MakeComputePipeline(LoadShader(shader), sharpen_only ? @"CAS Sharpen" : @"CAS Upscale"); + } + + m_expand_index_buffer = CreatePrivateBufferWithContent(m_dev.dev, initCommands, MTLResourceHazardTrackingModeUntracked, EXPAND_BUFFER_SIZE, GenerateExpansionIndexBuffer); + [m_expand_index_buffer setLabel:@"Point/Sprite Expand Indices"]; + + m_hw_vertex = MRCTransfer([MTLVertexDescriptor new]); + [[[m_hw_vertex layouts] objectAtIndexedSubscript:GSMTLBufferIndexHWVertices] setStride:sizeof(GSVertex)]; + applyAttribute(m_hw_vertex, GSMTLAttributeIndexST, MTLVertexFormatFloat2, offsetof(GSVertex, ST), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexC, MTLVertexFormatUChar4, offsetof(GSVertex, RGBAQ.R), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexQ, MTLVertexFormatFloat, offsetof(GSVertex, RGBAQ.Q), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexXY, MTLVertexFormatUShort2, offsetof(GSVertex, XYZ.X), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexZ, MTLVertexFormatUInt, offsetof(GSVertex, XYZ.Z), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexUV, MTLVertexFormatUShort2, offsetof(GSVertex, UV), GSMTLBufferIndexHWVertices); + applyAttribute(m_hw_vertex, GSMTLAttributeIndexF, MTLVertexFormatUChar4Normalized, offsetof(GSVertex, FOG), GSMTLBufferIndexHWVertices); + + for (auto& desc : m_render_pass_desc) + { + desc = MRCTransfer([MTLRenderPassDescriptor new]); + [[desc depthAttachment] setStoreAction:MTLStoreActionStore]; + [[desc stencilAttachment] setStoreAction:MTLStoreActionStore]; + } + + // Init samplers + m_sampler_hw[SamplerSelector::Linear().key] = CreateSampler(m_dev.dev, SamplerSelector::Linear()); + m_sampler_hw[SamplerSelector::Point().key] = CreateSampler(m_dev.dev, SamplerSelector::Point()); + + // Init depth stencil states + MTLDepthStencilDescriptor* dssdesc = [[MTLDepthStencilDescriptor new] autorelease]; + MTLStencilDescriptor* stencildesc = [[MTLStencilDescriptor new] autorelease]; + stencildesc.stencilCompareFunction = MTLCompareFunctionAlways; + stencildesc.depthFailureOperation = MTLStencilOperationKeep; + stencildesc.stencilFailureOperation = MTLStencilOperationKeep; + stencildesc.depthStencilPassOperation = MTLStencilOperationReplace; + dssdesc.frontFaceStencil = stencildesc; + dssdesc.backFaceStencil = stencildesc; + [dssdesc setLabel:@"Stencil Write"]; + m_dss_stencil_write = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); + dssdesc.frontFaceStencil.depthStencilPassOperation = MTLStencilOperationZero; + dssdesc.backFaceStencil.depthStencilPassOperation = MTLStencilOperationZero; + [dssdesc setLabel:@"Stencil Zero"]; + m_dss_stencil_zero = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); + stencildesc.stencilCompareFunction = MTLCompareFunctionEqual; + stencildesc.readMask = 1; + stencildesc.writeMask = 1; + for (size_t i = 0; i < std::size(m_dss_hw); i++) + { + GSHWDrawConfig::DepthStencilSelector sel; + sel.key = i; + if (sel.date) { - setFnConstantB(m_fn_constants, sharpen_only, GSMTLConstantIndex_CAS_SHARPEN_ONLY); - NSString* shader = m_dev.features.has_fast_half ? @"CASHalf" : @"CASFloat"; - m_cas_pipeline[sharpen_only] = MakeComputePipeline(LoadShader(shader), sharpen_only ? @"CAS Sharpen" : @"CAS Upscale"); - } - - m_expand_index_buffer = CreatePrivateBufferWithContent(m_dev.dev, initCommands, MTLResourceHazardTrackingModeUntracked, EXPAND_BUFFER_SIZE, GenerateExpansionIndexBuffer); - [m_expand_index_buffer setLabel:@"Point/Sprite Expand Indices"]; - - m_hw_vertex = MRCTransfer([MTLVertexDescriptor new]); - [[[m_hw_vertex layouts] objectAtIndexedSubscript:GSMTLBufferIndexHWVertices] setStride:sizeof(GSVertex)]; - applyAttribute(m_hw_vertex, GSMTLAttributeIndexST, MTLVertexFormatFloat2, offsetof(GSVertex, ST), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexC, MTLVertexFormatUChar4, offsetof(GSVertex, RGBAQ.R), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexQ, MTLVertexFormatFloat, offsetof(GSVertex, RGBAQ.Q), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexXY, MTLVertexFormatUShort2, offsetof(GSVertex, XYZ.X), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexZ, MTLVertexFormatUInt, offsetof(GSVertex, XYZ.Z), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexUV, MTLVertexFormatUShort2, offsetof(GSVertex, UV), GSMTLBufferIndexHWVertices); - applyAttribute(m_hw_vertex, GSMTLAttributeIndexF, MTLVertexFormatUChar4Normalized, offsetof(GSVertex, FOG), GSMTLBufferIndexHWVertices); - - for (auto& desc : m_render_pass_desc) - { - desc = MRCTransfer([MTLRenderPassDescriptor new]); - [[desc depthAttachment] setStoreAction:MTLStoreActionStore]; - [[desc stencilAttachment] setStoreAction:MTLStoreActionStore]; - } - - // Init samplers - MTLSamplerDescriptor* sdesc = [[MTLSamplerDescriptor new] autorelease]; - for (size_t i = 0; i < std::size(m_sampler_hw); i++) - { - GSHWDrawConfig::SamplerSelector sel; - sel.key = i; - const char* minname = sel.biln ? "Ln" : "Pt"; - const char* magname = minname; - sdesc.minFilter = sel.biln ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest; - sdesc.magFilter = sel.biln ? MTLSamplerMinMagFilterLinear : MTLSamplerMinMagFilterNearest; - switch (static_cast(sel.triln)) - { - case GS_MIN_FILTER::Nearest: - case GS_MIN_FILTER::Linear: - sdesc.mipFilter = MTLSamplerMipFilterNotMipmapped; - break; - case GS_MIN_FILTER::Nearest_Mipmap_Nearest: - minname = "PtPt"; - sdesc.minFilter = MTLSamplerMinMagFilterNearest; - sdesc.mipFilter = MTLSamplerMipFilterNearest; - break; - case GS_MIN_FILTER::Nearest_Mipmap_Linear: - minname = "PtLn"; - sdesc.minFilter = MTLSamplerMinMagFilterNearest; - sdesc.mipFilter = MTLSamplerMipFilterLinear; - break; - case GS_MIN_FILTER::Linear_Mipmap_Nearest: - minname = "LnPt"; - sdesc.minFilter = MTLSamplerMinMagFilterLinear; - sdesc.mipFilter = MTLSamplerMipFilterNearest; - break; - case GS_MIN_FILTER::Linear_Mipmap_Linear: - minname = "LnLn"; - sdesc.minFilter = MTLSamplerMinMagFilterLinear; - sdesc.mipFilter = MTLSamplerMipFilterLinear; - break; - } - - const char* taudesc = sel.tau ? "Repeat" : "Clamp"; - const char* tavdesc = sel.tav == sel.tau ? "" : sel.tav ? "Repeat" : "Clamp"; - sdesc.sAddressMode = sel.tau ? MTLSamplerAddressModeRepeat : MTLSamplerAddressModeClampToEdge; - sdesc.tAddressMode = sel.tav ? MTLSamplerAddressModeRepeat : MTLSamplerAddressModeClampToEdge; - sdesc.rAddressMode = MTLSamplerAddressModeClampToEdge; - - sdesc.maxAnisotropy = GSConfig.MaxAnisotropy && sel.aniso ? GSConfig.MaxAnisotropy : 1; - sdesc.lodMaxClamp = sel.lodclamp ? 0.25f : FLT_MAX; - - [sdesc setLabel:[NSString stringWithFormat:@"%s%s %s%s", taudesc, tavdesc, magname, minname]]; - m_sampler_hw[i] = MRCTransfer([m_dev.dev newSamplerStateWithDescriptor:sdesc]); - } - - // Init depth stencil states - MTLDepthStencilDescriptor* dssdesc = [[MTLDepthStencilDescriptor new] autorelease]; - MTLStencilDescriptor* stencildesc = [[MTLStencilDescriptor new] autorelease]; - stencildesc.stencilCompareFunction = MTLCompareFunctionAlways; - stencildesc.depthFailureOperation = MTLStencilOperationKeep; - stencildesc.stencilFailureOperation = MTLStencilOperationKeep; - stencildesc.depthStencilPassOperation = MTLStencilOperationReplace; - dssdesc.frontFaceStencil = stencildesc; - dssdesc.backFaceStencil = stencildesc; - [dssdesc setLabel:@"Stencil Write"]; - m_dss_stencil_write = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); - dssdesc.frontFaceStencil.depthStencilPassOperation = MTLStencilOperationZero; - dssdesc.backFaceStencil.depthStencilPassOperation = MTLStencilOperationZero; - [dssdesc setLabel:@"Stencil Zero"]; - m_dss_stencil_zero = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); - stencildesc.stencilCompareFunction = MTLCompareFunctionEqual; - stencildesc.readMask = 1; - stencildesc.writeMask = 1; - for (size_t i = 0; i < std::size(m_dss_hw); i++) - { - GSHWDrawConfig::DepthStencilSelector sel; - sel.key = i; - if (sel.date) - { - if (sel.date_one) - stencildesc.depthStencilPassOperation = MTLStencilOperationZero; - else - stencildesc.depthStencilPassOperation = MTLStencilOperationKeep; - dssdesc.frontFaceStencil = stencildesc; - dssdesc.backFaceStencil = stencildesc; - } + if (sel.date_one) + stencildesc.depthStencilPassOperation = MTLStencilOperationZero; else - { - dssdesc.frontFaceStencil = nil; - dssdesc.backFaceStencil = nil; - } - dssdesc.depthWriteEnabled = sel.zwe ? YES : NO; - static constexpr MTLCompareFunction ztst[] = - { - MTLCompareFunctionNever, - MTLCompareFunctionAlways, - MTLCompareFunctionGreaterEqual, - MTLCompareFunctionGreater, - }; - static constexpr const char* ztstname[] = - { - "DepthNever", - "DepthAlways", - "DepthGEq", - "DepthEq", - }; - const char* datedesc = sel.date ? (sel.date_one ? " DATE_ONE" : " DATE") : ""; - const char* zwedesc = sel.zwe ? " ZWE" : ""; - dssdesc.depthCompareFunction = ztst[sel.ztst]; - [dssdesc setLabel:[NSString stringWithFormat:@"%s%s%s", ztstname[sel.ztst], zwedesc, datedesc]]; - m_dss_hw[i] = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); - } - - // Init HW Vertex Shaders - for (size_t i = 0; i < std::size(m_hw_vs); i++) - { - VSSelector sel; - sel.key = i; - if (sel.point_size && sel.expand != GSMTLExpandType::None) - continue; - setFnConstantB(m_fn_constants, sel.fst, GSMTLConstantIndex_FST); - setFnConstantB(m_fn_constants, sel.iip, GSMTLConstantIndex_IIP); - setFnConstantB(m_fn_constants, sel.point_size, GSMTLConstantIndex_VS_POINT_SIZE); - NSString* shader = @"vs_main"; - if (sel.expand != GSMTLExpandType::None) - { - setFnConstantI(m_fn_constants, static_cast(sel.expand), GSMTLConstantIndex_VS_EXPAND_TYPE); - shader = @"vs_main_expand"; - } - m_hw_vs[i] = LoadShader(shader); + stencildesc.depthStencilPassOperation = MTLStencilOperationKeep; + dssdesc.frontFaceStencil = stencildesc; + dssdesc.backFaceStencil = stencildesc; } - - // Init pipelines - auto vs_convert = LoadShader(@"vs_convert"); - auto fs_triangle = LoadShader(@"fs_triangle"); - auto ps_copy = LoadShader(@"ps_copy"); - auto pdesc = [[MTLRenderPipelineDescriptor new] autorelease]; - // FS Triangle Pipelines - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); - m_hdr_resolve_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_hdr_resolve"), @"HDR Resolve"); - m_fxaa_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_fxaa"), @"fxaa"); - m_shadeboost_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_shadeboost"), @"shadeboost"); - m_clut_pipeline[0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_convert_clut_4"), @"4-bit CLUT Update"); - m_clut_pipeline[1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_convert_clut_8"), @"8-bit CLUT Update"); - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::HDRColor); - m_hdr_init_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_hdr_init"), @"HDR Init"); - pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatInvalid; - pdesc.stencilAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8; - m_datm_pipeline[0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_datm0"), @"datm0"); - m_datm_pipeline[1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_datm1"), @"datm1"); - m_stencil_clear_pipeline = MakePipeline(pdesc, fs_triangle, nil, @"Stencil Clear"); - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::PrimID); - pdesc.stencilAttachmentPixelFormat = MTLPixelFormatInvalid; - pdesc.depthAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8; - m_primid_init_pipeline[1][0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm0"), @"PrimID DATM0 Clear"); - m_primid_init_pipeline[1][1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm1"), @"PrimID DATM1 Clear"); - pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; - m_primid_init_pipeline[0][0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm0"), @"PrimID DATM0 Clear"); - m_primid_init_pipeline[0][1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm1"), @"PrimID DATM1 Clear"); - - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); - applyAttribute(pdesc.vertexDescriptor, 0, MTLVertexFormatFloat2, offsetof(ConvertShaderVertex, pos), 0); - applyAttribute(pdesc.vertexDescriptor, 1, MTLVertexFormatFloat2, offsetof(ConvertShaderVertex, texpos), 0); - pdesc.vertexDescriptor.layouts[0].stride = sizeof(ConvertShaderVertex); - - for (size_t i = 0; i < std::size(m_interlace_pipeline); i++) + else { - NSString* name = [NSString stringWithFormat:@"ps_interlace%zu", i]; - m_interlace_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), name); + dssdesc.frontFaceStencil = nil; + dssdesc.backFaceStencil = nil; } - for (size_t i = 0; i < std::size(m_convert_pipeline); i++) + dssdesc.depthWriteEnabled = sel.zwe ? YES : NO; + static constexpr MTLCompareFunction ztst[] = { - ShaderConvert conv = static_cast(i); - NSString* name = [NSString stringWithCString:shaderName(conv) encoding:NSUTF8StringEncoding]; - switch (conv) - { - case ShaderConvert::COPY: - case ShaderConvert::Count: - case ShaderConvert::DATM_0: - case ShaderConvert::DATM_1: - case ShaderConvert::CLUT_4: - case ShaderConvert::CLUT_8: - case ShaderConvert::HDR_INIT: - case ShaderConvert::HDR_RESOLVE: - continue; - case ShaderConvert::FLOAT32_TO_32_BITS: - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::UInt32); - pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; - break; - case ShaderConvert::FLOAT32_TO_16_BITS: - case ShaderConvert::RGBA8_TO_16_BITS: - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::UInt16); - pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; - break; - case ShaderConvert::DEPTH_COPY: - case ShaderConvert::RGBA8_TO_FLOAT32: - case ShaderConvert::RGBA8_TO_FLOAT24: - case ShaderConvert::RGBA8_TO_FLOAT16: - case ShaderConvert::RGB5A1_TO_FLOAT16: - case ShaderConvert::RGBA8_TO_FLOAT32_BILN: - case ShaderConvert::RGBA8_TO_FLOAT24_BILN: - case ShaderConvert::RGBA8_TO_FLOAT16_BILN: - case ShaderConvert::RGB5A1_TO_FLOAT16_BILN: - pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatInvalid; - pdesc.depthAttachmentPixelFormat = ConvertPixelFormat(GSTexture::Format::DepthStencil); - break; - case ShaderConvert::RGBA_TO_8I: // Yes really - case ShaderConvert::TRANSPARENCY_FILTER: - case ShaderConvert::FLOAT32_TO_RGBA8: - case ShaderConvert::FLOAT16_TO_RGB5A1: - case ShaderConvert::YUV: - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); - pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; - break; - } - m_convert_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), name); - } - pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; - for (size_t i = 0; i < std::size(m_present_pipeline); i++) + MTLCompareFunctionNever, + MTLCompareFunctionAlways, + MTLCompareFunctionGreaterEqual, + MTLCompareFunctionGreater, + }; + static constexpr const char* ztstname[] = { - PresentShader conv = static_cast(i); - NSString* name = [NSString stringWithCString:shaderName(conv) encoding:NSUTF8StringEncoding]; - pdesc.colorAttachments[0].pixelFormat = layer_px_fmt; - m_present_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), [NSString stringWithFormat:@"present_%s", shaderName(conv) + 3]); - } - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); - m_convert_pipeline_copy[0] = MakePipeline(pdesc, vs_convert, ps_copy, @"copy_color"); - pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::HDRColor); - m_convert_pipeline_copy[1] = MakePipeline(pdesc, vs_convert, ps_copy, @"copy_hdr"); - - pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatRGBA8Unorm; - for (size_t i = 0; i < std::size(m_convert_pipeline_copy_mask); i++) + "DepthNever", + "DepthAlways", + "DepthGEq", + "DepthEq", + }; + const char* datedesc = sel.date ? (sel.date_one ? " DATE_ONE" : " DATE") : ""; + const char* zwedesc = sel.zwe ? " ZWE" : ""; + dssdesc.depthCompareFunction = ztst[sel.ztst]; + [dssdesc setLabel:[NSString stringWithFormat:@"%s%s%s", ztstname[sel.ztst], zwedesc, datedesc]]; + m_dss_hw[i] = MRCTransfer([m_dev.dev newDepthStencilStateWithDescriptor:dssdesc]); + } + + // Init HW Vertex Shaders + for (size_t i = 0; i < std::size(m_hw_vs); i++) + { + VSSelector sel; + sel.key = i; + if (sel.point_size && sel.expand != GSMTLExpandType::None) + continue; + setFnConstantB(m_fn_constants, sel.fst, GSMTLConstantIndex_FST); + setFnConstantB(m_fn_constants, sel.iip, GSMTLConstantIndex_IIP); + setFnConstantB(m_fn_constants, sel.point_size, GSMTLConstantIndex_VS_POINT_SIZE); + NSString* shader = @"vs_main"; + if (sel.expand != GSMTLExpandType::None) { - MTLColorWriteMask mask = MTLColorWriteMaskNone; - if (i & 1) mask |= MTLColorWriteMaskRed; - if (i & 2) mask |= MTLColorWriteMaskGreen; - if (i & 4) mask |= MTLColorWriteMaskBlue; - if (i & 8) mask |= MTLColorWriteMaskAlpha; - NSString* name = [NSString stringWithFormat:@"copy_%s%s%s%s", i & 1 ? "r" : "", i & 2 ? "g" : "", i & 4 ? "b" : "", i & 8 ? "a" : ""]; - pdesc.colorAttachments[0].writeMask = mask; - m_convert_pipeline_copy_mask[i] = MakePipeline(pdesc, vs_convert, ps_copy, name); + setFnConstantI(m_fn_constants, static_cast(sel.expand), GSMTLConstantIndex_VS_EXPAND_TYPE); + shader = @"vs_main_expand"; } - - pdesc.colorAttachments[0].blendingEnabled = YES; - pdesc.colorAttachments[0].rgbBlendOperation = MTLBlendOperationAdd; - pdesc.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactorSourceAlpha; - pdesc.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactorOneMinusSourceAlpha; - for (size_t i = 0; i < std::size(m_merge_pipeline); i++) + m_hw_vs[i] = LoadShader(shader); + } + + // Init pipelines + auto vs_convert = LoadShader(@"vs_convert"); + auto fs_triangle = LoadShader(@"fs_triangle"); + auto ps_copy = LoadShader(@"ps_copy"); + auto pdesc = [[MTLRenderPipelineDescriptor new] autorelease]; + // FS Triangle Pipelines + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); + m_hdr_resolve_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_hdr_resolve"), @"HDR Resolve"); + m_fxaa_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_fxaa"), @"fxaa"); + m_shadeboost_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_shadeboost"), @"shadeboost"); + m_clut_pipeline[0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_convert_clut_4"), @"4-bit CLUT Update"); + m_clut_pipeline[1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_convert_clut_8"), @"8-bit CLUT Update"); + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::HDRColor); + m_hdr_init_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_hdr_init"), @"HDR Init"); + m_hdr_clear_pipeline = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_clear"), @"HDR Clear"); + pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatInvalid; + pdesc.stencilAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8; + m_datm_pipeline[0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_datm0"), @"datm0"); + m_datm_pipeline[1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_datm1"), @"datm1"); + m_stencil_clear_pipeline = MakePipeline(pdesc, fs_triangle, nil, @"Stencil Clear"); + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::PrimID); + pdesc.stencilAttachmentPixelFormat = MTLPixelFormatInvalid; + pdesc.depthAttachmentPixelFormat = MTLPixelFormatDepth32Float_Stencil8; + m_primid_init_pipeline[1][0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm0"), @"PrimID DATM0 Clear"); + m_primid_init_pipeline[1][1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm1"), @"PrimID DATM1 Clear"); + pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; + m_primid_init_pipeline[0][0] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm0"), @"PrimID DATM0 Clear"); + m_primid_init_pipeline[0][1] = MakePipeline(pdesc, fs_triangle, LoadShader(@"ps_primid_init_datm1"), @"PrimID DATM1 Clear"); + + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); + applyAttribute(pdesc.vertexDescriptor, 0, MTLVertexFormatFloat2, offsetof(ConvertShaderVertex, pos), 0); + applyAttribute(pdesc.vertexDescriptor, 1, MTLVertexFormatFloat2, offsetof(ConvertShaderVertex, texpos), 0); + pdesc.vertexDescriptor.layouts[0].stride = sizeof(ConvertShaderVertex); + + for (size_t i = 0; i < std::size(m_interlace_pipeline); i++) + { + NSString* name = [NSString stringWithFormat:@"ps_interlace%zu", i]; + m_interlace_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), name); + } + for (size_t i = 0; i < std::size(m_convert_pipeline); i++) + { + ShaderConvert conv = static_cast(i); + NSString* name = [NSString stringWithCString:shaderName(conv) encoding:NSUTF8StringEncoding]; + switch (conv) { - bool mmod = i & 1; - bool amod = i & 2; - NSString* name = [NSString stringWithFormat:@"ps_merge%zu", mmod]; - NSString* pipename = [NSString stringWithFormat:@"Merge%s%s", mmod ? " MMOD" : "", amod ? " AMOD" : ""]; - pdesc.colorAttachments[0].writeMask = amod ? MTLColorWriteMaskRed | MTLColorWriteMaskGreen | MTLColorWriteMaskBlue : MTLColorWriteMaskAll; - m_merge_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), pipename); + case ShaderConvert::Count: + case ShaderConvert::DATM_0: + case ShaderConvert::DATM_1: + case ShaderConvert::CLUT_4: + case ShaderConvert::CLUT_8: + case ShaderConvert::HDR_INIT: + case ShaderConvert::HDR_RESOLVE: + continue; + case ShaderConvert::FLOAT32_TO_32_BITS: + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::UInt32); + pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; + break; + case ShaderConvert::FLOAT32_TO_16_BITS: + case ShaderConvert::RGBA8_TO_16_BITS: + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::UInt16); + pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; + break; + case ShaderConvert::DEPTH_COPY: + case ShaderConvert::RGBA8_TO_FLOAT32: + case ShaderConvert::RGBA8_TO_FLOAT24: + case ShaderConvert::RGBA8_TO_FLOAT16: + case ShaderConvert::RGB5A1_TO_FLOAT16: + case ShaderConvert::RGBA8_TO_FLOAT32_BILN: + case ShaderConvert::RGBA8_TO_FLOAT24_BILN: + case ShaderConvert::RGBA8_TO_FLOAT16_BILN: + case ShaderConvert::RGB5A1_TO_FLOAT16_BILN: + pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatInvalid; + pdesc.depthAttachmentPixelFormat = ConvertPixelFormat(GSTexture::Format::DepthStencil); + break; + case ShaderConvert::COPY: + case ShaderConvert::RGBA_TO_8I: // Yes really + case ShaderConvert::TRANSPARENCY_FILTER: + case ShaderConvert::FLOAT32_TO_RGBA8: + case ShaderConvert::FLOAT32_TO_RGB8: + case ShaderConvert::FLOAT16_TO_RGB5A1: + case ShaderConvert::YUV: + pdesc.colorAttachments[0].pixelFormat = ConvertPixelFormat(GSTexture::Format::Color); + pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; + break; } - pdesc.colorAttachments[0].writeMask = MTLColorWriteMaskAll; - + const u32 scmask = ShaderConvertWriteMask(conv); + MTLColorWriteMask mask = MTLColorWriteMaskNone; + if (scmask & 1) mask |= MTLColorWriteMaskRed; + if (scmask & 2) mask |= MTLColorWriteMaskGreen; + if (scmask & 4) mask |= MTLColorWriteMaskBlue; + if (scmask & 8) mask |= MTLColorWriteMaskAlpha; + pdesc.colorAttachments[0].writeMask = mask; + m_convert_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), name); + } + pdesc.colorAttachments[0].writeMask = MTLColorWriteMaskAll; + pdesc.depthAttachmentPixelFormat = MTLPixelFormatInvalid; + for (size_t i = 0; i < std::size(m_present_pipeline); i++) + { + PresentShader conv = static_cast(i); + NSString* name = [NSString stringWithCString:shaderName(conv) encoding:NSUTF8StringEncoding]; pdesc.colorAttachments[0].pixelFormat = layer_px_fmt; + m_present_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), [NSString stringWithFormat:@"present_%s", shaderName(conv) + 3]); + } - [initCommands commit]; + pdesc.colorAttachments[0].pixelFormat = MTLPixelFormatRGBA8Unorm; + for (size_t i = 0; i < std::size(m_convert_pipeline_copy_mask); i++) + { + MTLColorWriteMask mask = MTLColorWriteMaskNone; + if (i & 1) mask |= MTLColorWriteMaskRed; + if (i & 2) mask |= MTLColorWriteMaskGreen; + if (i & 4) mask |= MTLColorWriteMaskBlue; + if (i & 8) mask |= MTLColorWriteMaskAlpha; + NSString* name = [NSString stringWithFormat:@"copy_%s%s%s%s", i & 1 ? "r" : "", i & 2 ? "g" : "", i & 4 ? "b" : "", i & 8 ? "a" : ""]; + pdesc.colorAttachments[0].writeMask = mask; + m_convert_pipeline_copy_mask[i] = MakePipeline(pdesc, vs_convert, ps_copy, name); } - catch (GSRecoverableError&) + + pdesc.colorAttachments[0].blendingEnabled = YES; + pdesc.colorAttachments[0].rgbBlendOperation = MTLBlendOperationAdd; + pdesc.colorAttachments[0].sourceRGBBlendFactor = MTLBlendFactorSourceAlpha; + pdesc.colorAttachments[0].destinationRGBBlendFactor = MTLBlendFactorOneMinusSourceAlpha; + for (size_t i = 0; i < std::size(m_merge_pipeline); i++) { - return false; + bool mmod = i & 1; + bool amod = i & 2; + NSString* name = [NSString stringWithFormat:@"ps_merge%zu", mmod]; + NSString* pipename = [NSString stringWithFormat:@"Merge%s%s", mmod ? " MMOD" : "", amod ? " AMOD" : ""]; + pdesc.colorAttachments[0].writeMask = amod ? MTLColorWriteMaskRed | MTLColorWriteMaskGreen | MTLColorWriteMaskBlue : MTLColorWriteMaskAll; + m_merge_pipeline[i] = MakePipeline(pdesc, vs_convert, LoadShader(name), pipename); } + pdesc.colorAttachments[0].writeMask = MTLColorWriteMaskAll; + + [initCommands commit]; return true; }} @@ -1210,8 +1216,12 @@ static void OnMainThread(Fn&& fn) void GSDeviceMTL::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) { m_window_info.surface_scale = new_window_scale; - if (m_window_info.surface_width == static_cast(new_window_width) && m_window_info.surface_height == static_cast(new_window_height)) + if (!m_layer || + (m_window_info.surface_width == static_cast(new_window_width) && m_window_info.surface_height == static_cast(new_window_height))) + { return; + } + m_window_info.surface_width = new_window_width; m_window_info.surface_height = new_window_height; @autoreleasepool @@ -1228,11 +1238,11 @@ static void OnMainThread(Fn&& fn) MRCOwned> buf = MRCTransfer([m_dev.dev newBufferWithLength:bytes options:MTLResourceStorageModeShared | MTLResourceCPUCacheModeWriteCombined]); memcpy([buf contents], data, bytes); [enc copyFromBuffer:buf - sourceOffset:0 + sourceOffset:0 sourceBytesPerRow:data_stride sourceBytesPerImage:bytes - sourceSize:MTLSizeMake(width, height, 1) - toTexture:texture + sourceSize:MTLSizeMake(width, height, 1) + toTexture:texture destinationSlice:0 destinationLevel:0 destinationOrigin:MTLOriginMake(0, 0, 0)]; @@ -1271,7 +1281,7 @@ static void OnMainThread(Fn&& fn) void GSDeviceMTL::EndPresent() { @autoreleasepool { - pxAssertDev(m_current_render.encoder && m_current_render_cmdbuf, "BeginPresent cmdbuf was destroyed"); + pxAssertMsg(m_current_render.encoder && m_current_render_cmdbuf, "BeginPresent cmdbuf was destroyed"); // ImGui::Render(); // RenderImGui(ImGui::GetDrawData()); EndRenderPass(); @@ -1304,7 +1314,7 @@ static void OnMainThread(Fn&& fn) [[MTLCaptureManager sharedCaptureManager] stopCapture]; Console.WriteLn("Metal Trace Capture to /tmp/PCSX2MTLCapture.gputrace finished"); [[NSWorkspace sharedWorkspace] selectFile:path - inFileViewerRootedAtPath:@"/tmp/"]; + inFileViewerRootedAtPath:@"/tmp/"]; } } else if (s_capture_next) @@ -1410,44 +1420,17 @@ static void OnMainThread(Fn&& fn) #pragma clang diagnostic pop } -void GSDeviceMTL::ClearRenderTarget(GSTexture* t, const GSVector4& c) -{ - if (!t) return; - static_cast(t)->RequestColorClear(c); -} - -void GSDeviceMTL::ClearRenderTarget(GSTexture* t, uint32 c) -{ - GSVector4 color = GSVector4::rgba32(c) * (1.f / 255.f); - ClearRenderTarget(t, color); -} - -void GSDeviceMTL::ClearDepth(GSTexture* t) -{ - if (!t) return; - static_cast(t)->RequestDepthClear(0); -} - -void GSDeviceMTL::ClearStencil(GSTexture* t, uint8 c) -{ - if (!t) return; - static_cast(t)->RequestStencilClear(c); -} - -void GSDeviceMTL::InvalidateRenderTarget(GSTexture* t) -{ - // TODO: Implement me -} - std::unique_ptr GSDeviceMTL::CreateDownloadTexture(u32 width, u32 height, GSTexture::Format format) { return GSDownloadTextureMTL::Create(this, width, height, format); } void GSDeviceMTL::ClearSamplerCache() -{ - // TODO: Implement me -} +{ @autoreleasepool { + std::fill(std::begin(m_sampler_hw), std::end(m_sampler_hw), nullptr); + m_sampler_hw[SamplerSelector::Linear().key] = CreateSampler(m_dev.dev, SamplerSelector::Linear()); + m_sampler_hw[SamplerSelector::Point().key] = CreateSampler(m_dev.dev, SamplerSelector::Point()); +}} void GSDeviceMTL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, u32 destX, u32 destY) { @autoreleasepool { @@ -1461,7 +1444,7 @@ static void OnMainThread(Fn&& fn) if (r.width() < dsize.x || r.height() < dsize.y) dT->FlushClears(); else - dT->InvalidateClears(); + dT->SetState(GSTexture::State::Dirty); EndRenderPass(); @@ -1472,76 +1455,81 @@ static void OnMainThread(Fn&& fn) id encoder = [cmdbuf blitCommandEncoder]; [encoder setLabel:@"CopyRect"]; [encoder copyFromTexture:sT->GetTexture() - sourceSlice:0 - sourceLevel:0 - sourceOrigin:MTLOriginMake(r.x, r.y, 0) - sourceSize:MTLSizeMake(r.width(), r.height(), 1) - toTexture:dT->GetTexture() - destinationSlice:0 - destinationLevel:0 - destinationOrigin:MTLOriginMake((int)destX, (int)destY, 0)]; + sourceSlice:0 + sourceLevel:0 + sourceOrigin:MTLOriginMake(r.x, r.y, 0) + sourceSize:MTLSizeMake(r.width(), r.height(), 1) + toTexture:dT->GetTexture() + destinationSlice:0 + destinationLevel:0 + destinationOrigin:MTLOriginMake((int)destX, (int)destY, 0)]; [encoder endEncoding]; }} +void GSDeviceMTL::BeginStretchRect(NSString* name, GSTexture* dTex, MTLLoadAction action) +{ + if (dTex->GetFormat() == GSTexture::Format::DepthStencil) + BeginRenderPass(name, nullptr, MTLLoadActionDontCare, dTex, action); + else + BeginRenderPass(name, dTex, action, nullptr, MTLLoadActionDontCare); + + FlushDebugEntries(m_current_render.encoder); + MREClearScissor(); + DepthStencilSelector dsel = DepthStencilSelector::NoDepth(); + dsel.zwe = dTex->GetFormat() == GSTexture::Format::DepthStencil; + MRESetDSS(dsel); +} + 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); - GSTextureMTL* sT = static_cast(sTex); - GSTextureMTL* dT = static_cast(dTex); - - GSVector2i ds = dT->GetSize(); + GSVector2i ds = dTex->GetSize(); bool covers_target = static_cast(dRect.x) <= 0 - && static_cast(dRect.y) <= 0 - && static_cast(dRect.z) >= ds.x - && static_cast(dRect.w) >= ds.y; + && static_cast(dRect.y) <= 0 + && static_cast(dRect.z) >= ds.x + && static_cast(dRect.w) >= ds.y; bool dontcare = load_action == LoadAction::DontCare || (load_action == LoadAction::DontCareIfFull && covers_target); MTLLoadAction action = dontcare ? MTLLoadActionDontCare : MTLLoadActionLoad; - if (dT->GetFormat() == GSTexture::Format::DepthStencil) - BeginRenderPass(@"StretchRect", nullptr, MTLLoadActionDontCare, dT, action); - else - BeginRenderPass(@"StretchRect", dT, action, nullptr, MTLLoadActionDontCare); - - FlushDebugEntries(m_current_render.encoder); - MREClearScissor(); - DepthStencilSelector dsel; - dsel.ztst = ZTST_ALWAYS; - dsel.zwe = dT->GetFormat() == GSTexture::Format::DepthStencil; - MRESetDSS(dsel); + BeginStretchRect(@"StretchRect", dTex, action); MRESetPipeline(pipeline); - MRESetTexture(sT, GSMTLTextureIndexNonHW); + MRESetTexture(sTex, GSMTLTextureIndexNonHW); if (frag_uniform && frag_uniform_len) [m_current_render.encoder setFragmentBytes:frag_uniform length:frag_uniform_len atIndex:GSMTLBufferIndexUniforms]; MRESetSampler(linear ? SamplerSelector::Linear() : SamplerSelector::Point()); - DrawStretchRect(sRect, dRect, ds); + DrawStretchRect(sRect, dRect, GSVector2(static_cast(ds.x), static_cast(ds.y))); } -void GSDeviceMTL::DrawStretchRect(const GSVector4& sRect, const GSVector4& dRect, const GSVector2i& ds) +static std::array CalcStrechRectPoints(const GSVector4& sRect, const GSVector4& dRect, const GSVector2& ds) { - float left = dRect.x * 2 / ds.x - 1.0f; - float right = dRect.z * 2 / ds.x - 1.0f; - float top = 1.0f - dRect.y * 2 / ds.y; - float bottom = 1.0f - dRect.w * 2 / ds.y; - - ConvertShaderVertex vertices[] = - { - {{left, top}, {sRect.x, sRect.y}}, - {{right, top}, {sRect.z, sRect.y}}, - {{left, bottom}, {sRect.x, sRect.w}}, - {{right, bottom}, {sRect.z, sRect.w}} + static_assert(sizeof(GSDeviceMTL::ConvertShaderVertex) == sizeof(GSVector4), "Using GSVector4 as a ConvertShaderVertex"); + GSVector4 dst = dRect; + dst /= GSVector4(ds.x, ds.y, ds.x, ds.y); + dst *= GSVector4(2, -2, 2, -2); + dst += GSVector4(-1, 1, -1, 1); + return { + dst.xyxy(sRect), + dst.zyzy(sRect), + dst.xwxw(sRect), + dst.zwzw(sRect) }; +} + +void GSDeviceMTL::DrawStretchRect(const GSVector4& sRect, const GSVector4& dRect, const GSVector2& ds) +{ + std::array vertices = CalcStrechRectPoints(sRect, dRect, ds); - [m_current_render.encoder setVertexBytes:vertices length:sizeof(vertices) atIndex:GSMTLBufferIndexVertices]; + [m_current_render.encoder setVertexBytes:&vertices length:sizeof(vertices) atIndex:GSMTLBufferIndexVertices]; [m_current_render.encoder drawPrimitives:MTLPrimitiveTypeTriangleStrip - vertexStart:0 - vertexCount:4]; + vertexStart:0 + vertexCount:4]; g_perfmon.Put(GSPerfMon::DrawCalls, 1); } @@ -1557,17 +1545,11 @@ static void OnMainThread(Fn&& fn) void GSDeviceMTL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ShaderConvert shader, bool linear) { @autoreleasepool { - id pipeline; pxAssert(linear ? SupportsBilinear(shader) : SupportsNearest(shader)); - if (shader == ShaderConvert::COPY) - pipeline = m_convert_pipeline_copy[dTex->GetFormat() == GSTexture::Format::Color ? 0 : 1]; - else - pipeline = m_convert_pipeline[static_cast(shader)]; - - if (!pipeline) - [NSException raise:@"StretchRect Missing Pipeline" format:@"No pipeline for %d", static_cast(shader)]; + id pipeline = m_convert_pipeline[static_cast(shader)]; + pxAssertRel(pipeline, fmt::format("No pipeline for {}", shaderName(shader)).c_str()); DoStretchRect(sTex, sRect, dTex, dRect, pipeline, linear, LoadAction::DontCareIfFull, nullptr, 0); }} @@ -1615,8 +1597,67 @@ static void OnMainThread(Fn&& fn) [m_current_render.encoder setFragmentSamplerState:m_sampler_hw[linear ? SamplerSelector::Linear().key : SamplerSelector::Point().key] atIndex:0]; [m_current_render.encoder setFragmentTexture:static_cast(sTex)->GetTexture() atIndex:0]; [m_current_render.encoder setFragmentBytes:&cb length:sizeof(cb) atIndex:GSMTLBufferIndexUniforms]; - DrawStretchRect(sRect, dRect, ds); + DrawStretchRect(sRect, dRect, GSVector2(static_cast(ds.x), static_cast(ds.y))); + } +}} + +void GSDeviceMTL::DrawMultiStretchRects(const MultiStretchRect* rects, u32 num_rects, GSTexture* dTex, ShaderConvert shader) +{ @autoreleasepool { + BeginStretchRect(@"MultiStretchRect", dTex, MTLLoadActionLoad); + + id pipeline = nullptr; + GSTexture* sTex = rects[0].src; + bool linear = rects[0].linear; + u8 wmask = rects[0].wmask.wrgba; + + const GSVector2 ds(static_cast(dTex->GetWidth()), static_cast(dTex->GetHeight())); + const Map allocation = Allocate(m_vertex_upload_buf, sizeof(ConvertShaderVertex) * 4 * num_rects); + std::array* write = static_cast*>(allocation.cpu_buffer); + const id enc = m_current_render.encoder; + [enc setVertexBuffer:allocation.gpu_buffer + offset:allocation.gpu_offset + atIndex:GSMTLBufferIndexVertices]; + u32 start = 0; + + auto flush = [&](u32 i) { + const u32 end = i * 4; + const u32 vertex_count = end - start; + const u32 index_count = vertex_count + (vertex_count >> 1); // 6 indices per 4 vertices + id new_pipeline = wmask == 0xf ? m_convert_pipeline[static_cast(shader)] + : m_convert_pipeline_copy_mask[wmask]; + if (new_pipeline != pipeline) + { + pipeline = new_pipeline; + pxAssertRel(pipeline, fmt::format("No pipeline for {}", shaderName(shader)).c_str()); + MRESetPipeline(pipeline); + } + MRESetSampler(linear ? SamplerSelector::Linear() : SamplerSelector::Point()); + MRESetTexture(sTex, GSMTLTextureIndexNonHW); + [enc drawIndexedPrimitives:MTLPrimitiveTypeTriangle + indexCount:index_count + indexType:MTLIndexTypeUInt16 + indexBuffer:m_expand_index_buffer + indexBufferOffset:0 + instanceCount:1 + baseVertex:start + baseInstance:0]; + start = end; + }; + + for (u32 i = 0; i < num_rects; i++) + { + const MultiStretchRect& rect = rects[i]; + if (rect.src != sTex || rect.linear != linear || rect.wmask.wrgba != wmask) + { + flush(i); + sTex = rect.src; + linear = rect.linear; + wmask = rect.wmask.wrgba; + } + *write++ = CalcStrechRectPoints(rect.src_rect, rect.dst_rect, ds); } + + flush(num_rects); }} void GSDeviceMTL::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) @@ -1734,7 +1775,7 @@ static GSMTLExpandType ConvertVSExpand(GSHWDrawConfig::VSExpand generic) setFnConstantB(m_fn_constants, pssel.iip, GSMTLConstantIndex_IIP); setFnConstantI(m_fn_constants, pssel.aem_fmt, GSMTLConstantIndex_PS_AEM_FMT); setFnConstantI(m_fn_constants, pssel.pal_fmt, GSMTLConstantIndex_PS_PAL_FMT); - setFnConstantI(m_fn_constants, pssel.dfmt, GSMTLConstantIndex_PS_DFMT); + setFnConstantI(m_fn_constants, pssel.dst_fmt, GSMTLConstantIndex_PS_DST_FMT); setFnConstantI(m_fn_constants, pssel.depth_fmt, GSMTLConstantIndex_PS_DEPTH_FMT); setFnConstantB(m_fn_constants, pssel.aem, GSMTLConstantIndex_PS_AEM); setFnConstantB(m_fn_constants, pssel.fba, GSMTLConstantIndex_PS_FBA); @@ -1749,6 +1790,7 @@ static GSMTLExpandType ConvertVSExpand(GSHWDrawConfig::VSExpand generic) setFnConstantB(m_fn_constants, pssel.adjt, GSMTLConstantIndex_PS_ADJT); setFnConstantB(m_fn_constants, pssel.ltf, GSMTLConstantIndex_PS_LTF); setFnConstantB(m_fn_constants, pssel.shuffle, GSMTLConstantIndex_PS_SHUFFLE); + setFnConstantB(m_fn_constants, pssel.shuffle_same, GSMTLConstantIndex_PS_SHUFFLE_SAME); 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); @@ -1838,6 +1880,8 @@ static GSMTLExpandType ConvertVSExpand(GSHWDrawConfig::VSExpand generic) { if (m_current_render.has.sampler && m_current_render.sampler_sel.key == sel.key) return; + if (!m_sampler_hw[sel.key]) [[unlikely]] + m_sampler_hw[sel.key] = CreateSampler(m_dev.dev, sel); [m_current_render.encoder setFragmentSamplerState:m_sampler_hw[sel.key] atIndex:0]; m_current_render.sampler_sel = sel; m_current_render.has.sampler = true; @@ -1845,13 +1889,9 @@ static GSMTLExpandType ConvertVSExpand(GSHWDrawConfig::VSExpand generic) static void textureBarrier(id enc) { - if (@available(macOS 10.14, *)) { - [enc memoryBarrierWithScope:MTLBarrierScopeRenderTargets - afterStages:MTLRenderStageFragment - beforeStages:MTLRenderStageFragment]; - } else { - [enc textureBarrier]; - } + [enc memoryBarrierWithScope:MTLBarrierScopeRenderTargets + afterStages:MTLRenderStageFragment + beforeStages:MTLRenderStageFragment]; } void GSDeviceMTL::MRESetTexture(GSTexture* tex, int pos) @@ -1996,6 +2036,18 @@ static void textureBarrier(id enc) return tex ? static_cast(tex)->GetTexture() : nil; } +static bool usesStencil(GSHWDrawConfig::DestinationAlphaMode dstalpha) +{ + switch (dstalpha) + { + case GSHWDrawConfig::DestinationAlphaMode::Stencil: + case GSHWDrawConfig::DestinationAlphaMode::StencilOne: + return true; + default: + return false; + } +} + void GSDeviceMTL::MREInitHWDraw(GSHWDrawConfig& config, const Map& verts) { MRESetScissor(config.scissor); @@ -2053,11 +2105,11 @@ static void textureBarrier(id enc) BeginRenderPass(@"PrimID Destination Alpha Init", primid_tex, MTLLoadActionDontCare, depth, MTLLoadActionLoad); RenderCopy(config.rt, m_primid_init_pipeline[static_cast(depth)][config.datm], config.drawarea); MRESetDSS(dsel); - ASSERT(config.ps.date == 1 || config.ps.date == 2); + pxAssert(config.ps.date == 1 || config.ps.date == 2); if (config.ps.tex_is_fb) MRESetTexture(config.rt, GSMTLTextureIndexRenderTarget); config.require_one_barrier = false; // Ending render pass is our barrier - ASSERT(config.require_full_barrier == false && config.drawlist == nullptr); + pxAssert(config.require_full_barrier == false && config.drawlist == nullptr); MRESetHWPipelineState(config.vs, config.ps, {}, {}); MREInitHWDraw(config, allocation); SendHWDraw(config, m_current_render.encoder, index_buffer, index_buffer_offset); @@ -2081,22 +2133,38 @@ static void textureBarrier(id enc) if (config.ps.hdr) { GSVector2i size = config.rt->GetSize(); - hdr_rt = CreateRenderTarget(size.x, size.y, GSTexture::Format::HDRColor); - BeginRenderPass(@"HDR Init", hdr_rt, MTLLoadActionDontCare, nullptr, MTLLoadActionDontCare); - RenderCopy(config.rt, m_hdr_init_pipeline, config.drawarea); - rt = hdr_rt; - g_perfmon.Put(GSPerfMon::TextureCopies, 1); + rt = hdr_rt = CreateRenderTarget(size.x, size.y, GSTexture::Format::HDRColor, false); + switch (config.rt->GetState()) + { + case GSTexture::State::Dirty: + BeginRenderPass(@"HDR Init", hdr_rt, MTLLoadActionDontCare, nullptr, MTLLoadActionDontCare); + RenderCopy(config.rt, m_hdr_init_pipeline, config.drawarea); + g_perfmon.Put(GSPerfMon::TextureCopies, 1); + break; + + case GSTexture::State::Cleared: + { + BeginRenderPass(@"HDR Clear", hdr_rt, MTLLoadActionDontCare, nullptr, MTLLoadActionDontCare); + GSVector4 color = GSVector4::rgba32(config.rt->GetClearColor()) / GSVector4::cxpr(65535, 65535, 65535, 255); + [m_current_render.encoder setFragmentBytes:&color length:sizeof(color) atIndex:GSMTLBufferIndexUniforms]; + RenderCopy(nullptr, m_hdr_clear_pipeline, config.drawarea); + break; + } + + case GSTexture::State::Invalidated: + break; + } } // Try to reduce render pass restarts - if (!stencil && config.depth.key == DepthStencilSelector::NoDepth().key && (m_current_render.color_target != rt || m_current_render.depth_target != config.ds)) - 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 == m_current_render.depth_target && m_current_render.color_target != config.tex) + rt = m_current_render.color_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!"); + pxAssertMsg(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); @@ -2106,6 +2174,8 @@ static void textureBarrier(id enc) BeginRenderPass(@"RenderHW", rt, MTLLoadActionLoad, config.ds, MTLLoadActionLoad, stencil, MTLLoadActionLoad); id mtlenc = m_current_render.encoder; FlushDebugEntries(mtlenc); + if (usesStencil(config.destination_alpha)) + [mtlenc setStencilReferenceValue:1]; MREInitHWDraw(config, allocation); if (config.require_one_barrier || config.require_full_barrier) MRESetTexture(config.rt, GSMTLTextureIndexRenderTarget); @@ -2155,7 +2225,7 @@ static void textureBarrier(id enc) if (config.drawlist) { - [enc pushDebugGroup:[NSString stringWithFormat:@"Full barrier split draw (%d sprites in %d groups)", config.nindices / config.indices_per_prim, config.drawlist->size()]]; + [enc pushDebugGroup:[NSString stringWithFormat:@"Full barrier split draw (%d sprites in %zu groups)", config.nindices / config.indices_per_prim, config.drawlist->size()]]; #if defined(_DEBUG) // Check how draw call is split. std::map frequency; @@ -2182,10 +2252,10 @@ static void textureBarrier(id enc) const u32 count = (*config.drawlist)[n] * indices_per_prim; textureBarrier(enc); [enc drawIndexedPrimitives:topology - indexCount:count - indexType:MTLIndexTypeUInt16 - indexBuffer:buffer - indexBufferOffset:off + p * sizeof(*config.indices)]; + indexCount:count + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off + p * sizeof(*config.indices)]; p += count; } @@ -2204,10 +2274,10 @@ static void textureBarrier(id enc) { textureBarrier(enc); [enc drawIndexedPrimitives:topology - indexCount:config.indices_per_prim - indexType:MTLIndexTypeUInt16 - indexBuffer:buffer - indexBufferOffset:off + p * sizeof(*config.indices)]; + indexCount:config.indices_per_prim + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off + p * sizeof(*config.indices)]; } [enc popDebugGroup]; @@ -2221,10 +2291,10 @@ static void textureBarrier(id enc) } [enc drawIndexedPrimitives:topology - indexCount:config.nindices - indexType:MTLIndexTypeUInt16 - indexBuffer:buffer - indexBufferOffset:off]; + indexCount:config.nindices + indexType:MTLIndexTypeUInt16 + indexBuffer:buffer + indexBufferOffset:off]; g_perfmon.Put(GSPerfMon::DrawCalls, 1); } diff --git a/Classes/Video/GSDeviceOGL.cpp b/Classes/Video/GSDeviceOGL.cpp index a338501..4fb35a1 100644 --- a/Classes/Video/GSDeviceOGL.cpp +++ b/Classes/Video/GSDeviceOGL.cpp @@ -1,36 +1,25 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2021 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" +// SPDX-FileCopyrightText: 2002-2023 PCSX2 Dev Team +// SPDX-License-Identifier: LGPL-3.0+ +#include "GS/Renderers/OpenGL/GLContext.h" +#include "GS/Renderers/OpenGL/GSDeviceOGL.h" +#include "GS/Renderers/OpenGL/GLState.h" #include "GS/GSState.h" #include "GS/GSGL.h" +#include "GS/GSPerfMon.h" #include "GS/GSUtil.h" -#include "GS/Renderers/OpenGL/GSDeviceOGL.h" -#include "GS/Renderers/OpenGL/GLState.h" #include "Host.h" -#include "ShaderCacheVersion.h" +#include "common/Console.h" #include "common/StringUtil.h" +//#include "imgui.h" +//#include "IconsFontAwesome5.h" + #include #include #include -//#define ONLY_LINES - static constexpr u32 g_vs_cb_index = 1; static constexpr u32 g_ps_cb_index = 0; @@ -40,7 +29,98 @@ static constexpr u32 VERTEX_UNIFORM_BUFFER_SIZE = 8 * 1024 * 1024; static constexpr u32 FRAGMENT_UNIFORM_BUFFER_SIZE = 8 * 1024 * 1024; static constexpr u32 TEXTURE_UPLOAD_BUFFER_SIZE = 128 * 1024 * 1024; -static std::unique_ptr s_texture_upload_buffer; +namespace ReplaceGL +{ + static void APIENTRY ScissorIndexed(GLuint index, GLint left, GLint bottom, GLsizei width, GLsizei height) + { + glScissor(left, bottom, width, height); + } + + static void APIENTRY ViewportIndexedf(GLuint index, GLfloat x, GLfloat y, GLfloat w, GLfloat h) + { + glViewport(GLint(x), GLint(y), GLsizei(w), GLsizei(h)); + } + + static void APIENTRY TextureBarrier() + { + } + +} // namespace ReplaceGL + +namespace Emulate_DSA +{ + // Texture entry point + static void APIENTRY BindTextureUnit(GLuint unit, GLuint texture) + { + glActiveTexture(GL_TEXTURE0 + unit); + glBindTexture(GL_TEXTURE_2D, texture); + } + + static void APIENTRY CreateTexture(GLenum target, GLsizei n, GLuint* textures) + { + glGenTextures(1, textures); + } + + static void APIENTRY TextureStorage( + GLuint texture, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height) + { + BindTextureUnit(7, texture); + glTexStorage2D(GL_TEXTURE_2D, levels, internalformat, width, height); + } + + static void APIENTRY TextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, GLsizei width, + GLsizei height, GLenum format, GLenum type, const void* pixels) + { + BindTextureUnit(7, texture); + glTexSubImage2D(GL_TEXTURE_2D, level, xoffset, yoffset, width, height, format, type, pixels); + } + + static void APIENTRY CompressedTextureSubImage(GLuint texture, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLsizei imageSize, const void* data) + { + BindTextureUnit(7, texture); + glCompressedTexSubImage2D(GL_TEXTURE_2D, level, xoffset, yoffset, width, height, format, imageSize, data); + } + + static void APIENTRY GetTexureImage( + GLuint texture, GLint level, GLenum format, GLenum type, GLsizei bufSize, void* pixels) + { + BindTextureUnit(7, texture); + glGetTexImage(GL_TEXTURE_2D, level, format, type, pixels); + } + + static void APIENTRY TextureParameteri(GLuint texture, GLenum pname, GLint param) + { + BindTextureUnit(7, texture); + glTexParameteri(GL_TEXTURE_2D, pname, param); + } + + static void APIENTRY GenerateTextureMipmap(GLuint texture) + { + BindTextureUnit(7, texture); + glGenerateMipmap(GL_TEXTURE_2D); + } + + // Misc entry point + static void APIENTRY CreateSamplers(GLsizei n, GLuint* samplers) + { + glGenSamplers(n, samplers); + } + + // Replace function pointer to emulate DSA behavior + static void Init() + { + glBindTextureUnit = BindTextureUnit; + glCreateTextures = CreateTexture; + glTextureStorage2D = TextureStorage; + glTextureSubImage2D = TextureSubImage; + glCompressedTextureSubImage2D = CompressedTextureSubImage; + glGetTextureImage = GetTexureImage; + glTextureParameteri = TextureParameteri; + glGenerateTextureMipmap = GenerateTextureMipmap; + glCreateSamplers = CreateSamplers; + } +} // namespace Emulate_DSA GSDeviceOGL::GSDeviceOGL() = default; @@ -91,16 +171,10 @@ bool GSDeviceOGL::Create() if (!AcquireWindow(true)) return false; - // We need at least GL3.3. - static constexpr const GL::Context::Version version_list[] = {{GL::Context::Profile::Core, 4, 6}, - {GL::Context::Profile::Core, 4, 5}, {GL::Context::Profile::Core, 4, 4}, {GL::Context::Profile::Core, 4, 3}, - {GL::Context::Profile::Core, 4, 2}, {GL::Context::Profile::Core, 4, 1}, {GL::Context::Profile::Core, 4, 0}, - {GL::Context::Profile::Core, 3, 3}}; - m_gl_context = GL::Context::Create(m_window_info, version_list); + m_gl_context = GLContext::Create(m_window_info); if (!m_gl_context) { Console.Error("Failed to create any GL context"); - m_gl_context.reset(); return false; } @@ -110,18 +184,19 @@ bool GSDeviceOGL::Create() return false; } - // Render a frame as soon as possible to clear out whatever was previously being displayed. - if (m_window_info.type != WindowInfo::Type::Surfaceless) - RenderBlankFrame(); - - if (!GLLoader::check_gl_requirements()) + bool buggy_pbo; + if (!CheckFeatures(buggy_pbo)) return false; SetSwapInterval(); + // Render a frame as soon as possible to clear out whatever was previously being displayed. + if (m_window_info.type != WindowInfo::Type::Surfaceless) + RenderBlankFrame(); + if (!GSConfig.DisableShaderCache) { - if (!m_shader_cache.Open(false, EmuFolders::Cache, SHADER_CACHE_VERSION)) + if (!m_shader_cache.Open()) Console.Warning("Shader cache failed to open."); } else @@ -129,60 +204,6 @@ bool GSDeviceOGL::Create() Console.WriteLn("Not using shader cache."); } - // optional features based on context - m_features.broken_point_sampler = GLLoader::vendor_id_amd; - m_features.primitive_id = true; - - m_features.framebuffer_fetch = GLAD_GL_EXT_shader_framebuffer_fetch; - if (m_features.framebuffer_fetch && GSConfig.DisableFramebufferFetch) - { - Host::AddOSDMessage("Framebuffer fetch was found but is disabled. This will reduce performance.", Host::OSD_ERROR_DURATION); - m_features.framebuffer_fetch = false; - } - - if (GSConfig.OverrideTextureBarriers == 0) - m_features.texture_barrier = m_features.framebuffer_fetch; // Force Disabled - else if (GSConfig.OverrideTextureBarriers == 1) - m_features.texture_barrier = true; // Force Enabled - else - m_features.texture_barrier = m_features.framebuffer_fetch || GLAD_GL_ARB_texture_barrier; - if (!m_features.texture_barrier) - { - Host::AddOSDMessage( - "GL_ARB_texture_barrier is not supported, blending will not be accurate.", Host::OSD_ERROR_DURATION); - } - - m_features.provoking_vertex_last = true; - m_features.dxt_textures = GLAD_GL_EXT_texture_compression_s3tc; - m_features.bptc_textures = GLAD_GL_VERSION_4_2 || GLAD_GL_ARB_texture_compression_bptc || GLAD_GL_EXT_texture_compression_bptc; - m_features.prefer_new_textures = false; - m_features.dual_source_blend = !GSConfig.DisableDualSourceBlend; - m_features.clip_control = GLAD_GL_ARB_clip_control; - if (!m_features.clip_control) - Host::AddOSDMessage("GL_ARB_clip_control is not supported, this will cause rendering issues.", Host::OSD_ERROR_DURATION); - m_features.stencil_buffer = true; - m_features.test_and_sample_depth = m_features.texture_barrier; - - if (GLAD_GL_ARB_shader_storage_buffer_object) - { - GLint max_vertex_ssbos = 0; - glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &max_vertex_ssbos); - DevCon.WriteLn("GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: %d", max_vertex_ssbos); - m_features.vs_expand = (max_vertex_ssbos > 0 && GLAD_GL_ARB_gpu_shader5); - } - if (!m_features.vs_expand) - Console.Warning("Vertex expansion is not supported. This will reduce performance."); - - GLint point_range[2] = {}; - glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_range); - m_features.point_expand = (point_range[0] <= GSConfig.UpscaleMultiplier && point_range[1] >= GSConfig.UpscaleMultiplier); - m_features.line_expand = false; - - Console.WriteLn("Using %s for point expansion, %s for line expansion and %s for sprite expansion.", - m_features.point_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), - m_features.line_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), - m_features.vs_expand ? "vertex expanding" : "CPU"); - // because of fbo bindings below... GLState::Clear(); @@ -237,10 +258,10 @@ bool GSDeviceOGL::Create() glGenVertexArrays(1, &m_vao); IASetVAO(m_vao); - m_vertex_stream_buffer = GL::StreamBuffer::Create(GL_ARRAY_BUFFER, VERTEX_BUFFER_SIZE); - m_index_stream_buffer = GL::StreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, INDEX_BUFFER_SIZE); - m_vertex_uniform_stream_buffer = GL::StreamBuffer::Create(GL_UNIFORM_BUFFER, VERTEX_UNIFORM_BUFFER_SIZE); - m_fragment_uniform_stream_buffer = GL::StreamBuffer::Create(GL_UNIFORM_BUFFER, FRAGMENT_UNIFORM_BUFFER_SIZE); + m_vertex_stream_buffer = GLStreamBuffer::Create(GL_ARRAY_BUFFER, VERTEX_BUFFER_SIZE); + m_index_stream_buffer = GLStreamBuffer::Create(GL_ELEMENT_ARRAY_BUFFER, INDEX_BUFFER_SIZE); + m_vertex_uniform_stream_buffer = GLStreamBuffer::Create(GL_UNIFORM_BUFFER, VERTEX_UNIFORM_BUFFER_SIZE); + m_fragment_uniform_stream_buffer = GLStreamBuffer::Create(GL_UNIFORM_BUFFER, FRAGMENT_UNIFORM_BUFFER_SIZE); glGetIntegerv(GL_UNIFORM_BUFFER_OFFSET_ALIGNMENT, &m_uniform_buffer_alignment); if (!m_vertex_stream_buffer || !m_index_stream_buffer || !m_vertex_uniform_stream_buffer || !m_fragment_uniform_stream_buffer) { @@ -305,7 +326,7 @@ bool GSDeviceOGL::Create() } // these all share the same vertex shader - const auto convert_glsl = Host::ReadResourceFileToString("shaders/opengl/convert.glsl"); + const std::optional convert_glsl = ReadShaderSource("shaders/opengl/convert.glsl"); if (!convert_glsl.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/convert.glsl."); @@ -367,7 +388,7 @@ bool GSDeviceOGL::Create() GL_PUSH("GSDeviceOGL::Present"); // these all share the same vertex shader - const auto shader = Host::ReadResourceFileToString("shaders/opengl/present.glsl"); + const std::optional shader = ReadShaderSource("shaders/opengl/present.glsl"); if (!shader.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/present.glsl."); @@ -403,7 +424,7 @@ bool GSDeviceOGL::Create() { GL_PUSH("GSDeviceOGL::Merge"); - const auto shader = Host::ReadResourceFileToString("shaders/opengl/merge.glsl"); + const std::optional shader = ReadShaderSource("shaders/opengl/merge.glsl"); if (!shader.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/merge.glsl."); @@ -426,7 +447,7 @@ bool GSDeviceOGL::Create() { GL_PUSH("GSDeviceOGL::Interlace"); - const auto shader = Host::ReadResourceFileToString("shaders/opengl/interlace.glsl"); + const std::optional shader = ReadShaderSource("shaders/opengl/interlace.glsl"); if (!shader.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/interlace.glsl."); @@ -508,19 +529,18 @@ bool GSDeviceOGL::Create() // **************************************************************** // Pbo Pool allocation // **************************************************************** - if (!GLLoader::buggy_pbo) + if (!buggy_pbo) { - s_texture_upload_buffer = GL::StreamBuffer::Create(GL_PIXEL_UNPACK_BUFFER, TEXTURE_UPLOAD_BUFFER_SIZE); - if (s_texture_upload_buffer) + m_texture_upload_buffer = GLStreamBuffer::Create(GL_PIXEL_UNPACK_BUFFER, TEXTURE_UPLOAD_BUFFER_SIZE); + if (m_texture_upload_buffer) { // Don't keep it bound, we'll re-bind when we need it. // Otherwise non-PBO texture uploads break. Yay for global state. - s_texture_upload_buffer->Unbind(); + m_texture_upload_buffer->Unbind(); } else { Console.Error("Failed to create texture upload buffer. Using slow path."); - GLLoader::buggy_pbo = true; } } @@ -555,8 +575,8 @@ bool GSDeviceOGL::CreateTextureFX() { GL_PUSH("GSDeviceOGL::CreateTextureFX"); - auto vertex_shader = Host::ReadResourceFileToString("shaders/opengl/tfx_vgs.glsl"); - auto fragment_shader = Host::ReadResourceFileToString("shaders/opengl/tfx_fs.glsl"); + std::optional vertex_shader = ReadShaderSource("shaders/opengl/tfx_vgs.glsl"); + std::optional fragment_shader = ReadShaderSource("shaders/opengl/tfx_fs.glsl"); if (!vertex_shader.has_value() || !fragment_shader.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/tfx_{vgs,fs}.glsl."); @@ -579,7 +599,177 @@ bool GSDeviceOGL::CreateTextureFX() m_om_dss[key] = CreateDepthStencil(OMDepthStencilSelector(key)); } - GL::Program::ResetLastProgram(); + GLProgram::ResetLastProgram(); + return true; +} + +bool GSDeviceOGL::CheckFeatures(bool& buggy_pbo) +{ + bool vendor_id_amd = false; + bool vendor_id_nvidia = false; + //bool vendor_id_intel = false; + + const char* vendor = (const char*)glGetString(GL_VENDOR); + if (std::strstr(vendor, "Advanced Micro Devices") || std::strstr(vendor, "ATI Technologies Inc.") || + std::strstr(vendor, "ATI")) + { + Console.WriteLn(Color_StrongRed, "OGL: AMD GPU detected."); + vendor_id_amd = true; + } + else if (std::strstr(vendor, "NVIDIA Corporation")) + { + Console.WriteLn(Color_StrongGreen, "OGL: NVIDIA GPU detected."); + vendor_id_nvidia = true; + } + else if (std::strstr(vendor, "Intel")) + { + Console.WriteLn(Color_StrongBlue, "OGL: Intel GPU detected."); + //vendor_id_intel = true; + } + + GLint major_gl = 0; + GLint minor_gl = 0; + glGetIntegerv(GL_MAJOR_VERSION, &major_gl); + glGetIntegerv(GL_MINOR_VERSION, &minor_gl); + if (!GLAD_GL_VERSION_3_3) + { + Host::ReportErrorAsync( + "GS", fmt::format("OpenGL renderer is not supported. Only OpenGL {}.{}\n was found", major_gl, minor_gl)); + return false; + } + + // Log extension string for debugging purposes. + Console.WriteLn(fmt::format("GL_VENDOR: {}", reinterpret_cast(glGetString(GL_VENDOR)))); + Console.WriteLn(fmt::format("GL_VERSION: {}", reinterpret_cast(glGetString(GL_VERSION)))); + Console.WriteLn(fmt::format("GL_RENDERER: {}", reinterpret_cast(glGetString(GL_RENDERER)))); + Console.WriteLn(fmt::format( + "GL_SHADING_LANGUAGE_VERSION: {}", reinterpret_cast(glGetString(GL_SHADING_LANGUAGE_VERSION)))); + std::string extensions = "GL_EXTENSIONS:"; + GLint num_extensions = 0; + glGetIntegerv(GL_NUM_EXTENSIONS, &num_extensions); + for (GLint i = 0; i < num_extensions; i++) + { + const char* ext = reinterpret_cast(glGetStringi(GL_EXTENSIONS, i)); + if (ext) + { + extensions += ' '; + extensions.append(ext); + } + } + Console.WriteLn(std::move(extensions)); + + if (!GLAD_GL_ARB_shading_language_420pack) + { + Host::ReportFormattedErrorAsync( + "GS", "GL_ARB_shading_language_420pack is not supported, this is required for the OpenGL renderer."); + return false; + } + + if (!GLAD_GL_VERSION_4_3 && !GLAD_GL_ARB_copy_image && !GLAD_GL_EXT_copy_image) + { + Host::ReportFormattedErrorAsync( + "GS", "GL_ARB_copy_image is not supported, this is required for the OpenGL renderer."); + return false; + } + + if (!GLAD_GL_ARB_viewport_array) + { + glScissorIndexed = ReplaceGL::ScissorIndexed; + glViewportIndexedf = ReplaceGL::ViewportIndexedf; + Console.Warning("GL_ARB_viewport_array is not supported! Function pointer will be replaced."); + } + + if (!GLAD_GL_ARB_texture_barrier) + { + glTextureBarrier = ReplaceGL::TextureBarrier; + Host::AddOSDMessage( + "GL_ARB_texture_barrier is not supported, blending will not be accurate.", Host::OSD_ERROR_DURATION); + } + + if (!GLAD_GL_ARB_direct_state_access) + { + Console.Warning("GL_ARB_direct_state_access is not supported, this will reduce performance."); + Emulate_DSA::Init(); + } + + // Don't use PBOs when we don't have ARB_buffer_storage, orphaning buffers probably ends up worse than just + // using the normal texture update routines and letting the driver take care of it. + buggy_pbo = !GLAD_GL_VERSION_4_4 && !GLAD_GL_ARB_buffer_storage && !GLAD_GL_EXT_buffer_storage; + if (buggy_pbo) + Console.Warning("Not using PBOs for texture uploads because buffer_storage is unavailable."); + + // Give the user the option to disable PBO usage for downloads. + // Most drivers seem to be faster with PBO. + m_disable_download_pbo = Host::GetBoolSettingValue("EmuCore/GS", "DisableGLDownloadPBO", false); + if (m_disable_download_pbo) + Console.Warning("Not using PBOs for texture downloads, this may reduce performance."); + + // optional features based on context + m_features.broken_point_sampler = vendor_id_amd; + m_features.primitive_id = true; + + m_features.framebuffer_fetch = GLAD_GL_EXT_shader_framebuffer_fetch; + if (m_features.framebuffer_fetch && GSConfig.DisableFramebufferFetch) + { + Host::AddOSDMessage( + "Framebuffer fetch was found but is disabled. This will reduce performance.", Host::OSD_ERROR_DURATION); + m_features.framebuffer_fetch = false; + } + + if (GSConfig.OverrideTextureBarriers == 0) + m_features.texture_barrier = m_features.framebuffer_fetch; // Force Disabled + else if (GSConfig.OverrideTextureBarriers == 1) + m_features.texture_barrier = true; // Force Enabled + else + m_features.texture_barrier = m_features.framebuffer_fetch || GLAD_GL_ARB_texture_barrier; + if (!m_features.texture_barrier) + { + Host::AddOSDMessage( + "GL_ARB_texture_barrier is not supported, blending will not be accurate.", Host::OSD_ERROR_DURATION); + } + + m_features.provoking_vertex_last = true; + m_features.dxt_textures = GLAD_GL_EXT_texture_compression_s3tc; + m_features.bptc_textures = + GLAD_GL_VERSION_4_2 || GLAD_GL_ARB_texture_compression_bptc || GLAD_GL_EXT_texture_compression_bptc; + m_features.prefer_new_textures = false; + m_features.dual_source_blend = !GSConfig.DisableDualSourceBlend; + m_features.clip_control = GLAD_GL_ARB_clip_control; + if (!m_features.clip_control) + Host::AddOSDMessage( + "GL_ARB_clip_control is not supported, this will cause rendering issues.", Host::OSD_ERROR_DURATION); + m_features.stencil_buffer = true; + m_features.test_and_sample_depth = m_features.texture_barrier; + + // NVIDIA GPUs prior to Kepler appear to have broken vertex shader buffer loading. + // Use bindless textures (introduced in Kepler) to differentiate. + const bool buggy_vs_expand = + vendor_id_nvidia && (!GLAD_GL_ARB_bindless_texture && !GLAD_GL_NV_bindless_texture); + if (buggy_vs_expand) + Console.Warning("Disabling vertex shader expand due to broken NVIDIA driver."); + + if (GLAD_GL_ARB_shader_storage_buffer_object) + { + GLint max_vertex_ssbos = 0; + glGetIntegerv(GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS, &max_vertex_ssbos); + DevCon.WriteLn("GL_MAX_VERTEX_SHADER_STORAGE_BLOCKS: %d", max_vertex_ssbos); + m_features.vs_expand = (!GSConfig.DisableVertexShaderExpand && !buggy_vs_expand && max_vertex_ssbos > 0 && + GLAD_GL_ARB_gpu_shader5); + } + if (!m_features.vs_expand) + Console.Warning("Vertex expansion is not supported. This will reduce performance."); + + GLint point_range[2] = {}; + glGetIntegerv(GL_ALIASED_POINT_SIZE_RANGE, point_range); + m_features.point_expand = + (point_range[0] <= GSConfig.UpscaleMultiplier && point_range[1] >= GSConfig.UpscaleMultiplier); + m_features.line_expand = false; + + Console.WriteLn("Using %s for point expansion, %s for line expansion and %s for sprite expansion.", + m_features.point_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), + m_features.line_expand ? "hardware" : (m_features.vs_expand ? "vertex expanding" : "UNSUPPORTED"), + m_features.vs_expand ? "vertex expanding" : "CPU"); + return true; } @@ -613,24 +803,24 @@ void GSDeviceOGL::DestroyResources() m_shadeboost.ps.Destroy(); - for (GL::Program& prog : m_date.primid_ps) + for (GLProgram& prog : m_date.primid_ps) prog.Destroy(); delete m_date.dss; m_fxaa.ps.Destroy(); - for (GL::Program& prog : m_present) + for (GLProgram& prog : m_present) prog.Destroy(); - for (GL::Program& prog : m_convert.ps) + for (GLProgram& prog : m_convert.ps) prog.Destroy(); delete m_convert.dss; delete m_convert.dss_write; - for (GL::Program& prog : m_interlace.ps) + for (GLProgram& prog : m_interlace.ps) prog.Destroy(); - for (GL::Program& prog : m_merge_obj.ps) + for (GLProgram& prog : m_merge_obj.ps) prog.Destroy(); m_fragment_uniform_stream_buffer.reset(); @@ -644,7 +834,7 @@ void GSDeviceOGL::DestroyResources() m_index_stream_buffer.reset(); m_vertex_stream_buffer.reset(); - s_texture_upload_buffer.reset(); + m_texture_upload_buffer.reset(); if (m_expand_ibo) glDeleteBuffers(1, &m_expand_ibo); @@ -688,8 +878,9 @@ bool GSDeviceOGL::UpdateWindow() void GSDeviceOGL::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) { m_window_info.surface_scale = new_window_scale; - if (m_window_info.surface_width == static_cast(new_window_width) && - m_window_info.surface_height == static_cast(new_window_height)) + if (m_window_info.type == WindowInfo::Type::Surfaceless || + (m_window_info.surface_width == static_cast(new_window_width) && + m_window_info.surface_height == static_cast(new_window_height))) { return; } @@ -715,8 +906,9 @@ std::string GSDeviceOGL::GetDriverInfo() const const char* gl_vendor = reinterpret_cast(glGetString(GL_VENDOR)); const char* gl_renderer = reinterpret_cast(glGetString(GL_RENDERER)); const char* gl_version = reinterpret_cast(glGetString(GL_VERSION)); - return StringUtil::StdStringFromFormat( - "%s Context:\n%s\n%s %s", m_gl_context->IsGLES() ? "OpenGL ES" : "OpenGL", gl_version, gl_vendor, gl_renderer); + const char* gl_shading_language_version = reinterpret_cast(glGetString(GL_SHADING_LANGUAGE_VERSION)); + return fmt::format( + "OpenGL Context:\n{}\n{} {}\nGLSL: {}", gl_version, gl_vendor, gl_renderer, gl_shading_language_version); } GSDevice::PresentResult GSDeviceOGL::BeginPresent(bool frame_skip) @@ -754,10 +946,7 @@ void GSDeviceOGL::EndPresent() void GSDeviceOGL::CreateTimestampQueries() { - const bool gles = m_gl_context->IsGLES(); - const auto GenQueries = gles ? glGenQueriesEXT : glGenQueries; - - GenQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); + glGenQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); KickTimestampQuery(); } @@ -766,16 +955,10 @@ void GSDeviceOGL::DestroyTimestampQueries() if (m_timestamp_queries[0] == 0) return; - const bool gles = m_gl_context->IsGLES(); - const auto DeleteQueries = gles ? glDeleteQueriesEXT : glDeleteQueries; - if (m_timestamp_query_started) - { - const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; - EndQuery(GL_TIME_ELAPSED); - } + glEndQuery(GL_TIME_ELAPSED); - DeleteQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); + glDeleteQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); m_timestamp_queries.fill(0); m_read_timestamp_query = 0; m_write_timestamp_query = 0; @@ -785,38 +968,16 @@ void GSDeviceOGL::DestroyTimestampQueries() void GSDeviceOGL::PopTimestampQuery() { - const bool gles = m_gl_context->IsGLES(); - - if (gles) - { - GLint disjoint = 0; - glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint); - if (disjoint) - { - DevCon.WriteLn("GPU timing disjoint, resetting."); - if (m_timestamp_query_started) - glEndQueryEXT(GL_TIME_ELAPSED); - - m_read_timestamp_query = 0; - m_write_timestamp_query = 0; - m_waiting_timestamp_queries = 0; - m_timestamp_query_started = false; - } - } - while (m_waiting_timestamp_queries > 0) { - const auto GetQueryObjectiv = gles ? glGetQueryObjectivEXT : glGetQueryObjectiv; - const auto GetQueryObjectui64v = gles ? glGetQueryObjectui64vEXT : glGetQueryObjectui64v; - GLint available = 0; - GetQueryObjectiv(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT_AVAILABLE, &available); + glGetQueryObjectiv(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT_AVAILABLE, &available); if (!available) break; u64 result = 0; - GetQueryObjectui64v(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT, &result); + glGetQueryObjectui64v(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT, &result); m_accumulated_gpu_time += static_cast(static_cast(result) / 1000000.0); m_read_timestamp_query = (m_read_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; m_waiting_timestamp_queries--; @@ -824,8 +985,7 @@ void GSDeviceOGL::PopTimestampQuery() if (m_timestamp_query_started) { - const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; - EndQuery(GL_TIME_ELAPSED); + glEndQuery(GL_TIME_ELAPSED); m_write_timestamp_query = (m_write_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; m_timestamp_query_started = false; @@ -838,10 +998,7 @@ void GSDeviceOGL::KickTimestampQuery() if (m_timestamp_query_started || m_waiting_timestamp_queries == NUM_TIMESTAMP_QUERIES) return; - const bool gles = m_gl_context->IsGLES(); - const auto BeginQuery = gles ? glBeginQueryEXT : glBeginQuery; - - BeginQuery(GL_TIME_ELAPSED, m_timestamp_queries[m_write_timestamp_query]); + glBeginQuery(GL_TIME_ELAPSED, m_timestamp_queries[m_write_timestamp_query]); m_timestamp_query_started = true; } @@ -850,9 +1007,6 @@ bool GSDeviceOGL::SetGPUTimingEnabled(bool enabled) if (m_gpu_timing_enabled == enabled) return true; - if (enabled && m_gl_context->IsGLES() && !GLAD_GL_EXT_disjoint_timer_query) - return false; - m_gpu_timing_enabled = enabled; if (m_gpu_timing_enabled) CreateTimestampQueries(); @@ -892,133 +1046,106 @@ void GSDeviceOGL::DrawIndexedPrimitive(int offset, int count) static_cast(m_vertex.start)); } -void GSDeviceOGL::ClearRenderTarget(GSTexture* t, const GSVector4& c) +void GSDeviceOGL::CommitClear(GSTexture* t, bool use_write_fbo) { - if (!t) - return; - GSTextureOGL* T = static_cast(t); - if (T->HasBeenCleaned()) + if (!T->IsRenderTargetOrDepthStencil() || T->GetState() == GSTexture::State::Dirty) return; - // Performance note: potentially T->Clear() could be used. Main purpose of - // Clear() is to avoid the framebuffer setup cost. However, in this context, - // the texture 't' will be set as the render target of the framebuffer and - // therefore will require a framebuffer setup. - - // So using the old/standard path is faster/better albeit verbose. - - GL_PUSH("Clear RT %d", T->GetID()); - - // TODO: check size of scissor before toggling it - glDisable(GL_SCISSOR_TEST); - - const u32 old_color_mask = GLState::wrgba; - OMSetColorMaskState(); - - OMSetFBO(m_fbo); - OMAttachRt(T); - - if (T->IsIntegerFormat()) + if (use_write_fbo) { - if (T->IsUnsignedFormat()) - glClearBufferuiv(GL_COLOR, 0, c.U32); - else - glClearBufferiv(GL_COLOR, 0, c.I32); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo_write); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, + (t->GetType() == GSTexture::Type::RenderTarget) ? static_cast(t)->GetID() : 0, 0); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, m_features.framebuffer_fetch ? GL_DEPTH_ATTACHMENT : GL_DEPTH_STENCIL_ATTACHMENT, + GL_TEXTURE_2D, (t->GetType() == GSTexture::Type::DepthStencil) ? static_cast(t)->GetID() : 0, 0); } else - { - glClearBufferfv(GL_COLOR, 0, c.v); - } - - OMSetColorMaskState(OMColorMaskSelector(old_color_mask)); - - glEnable(GL_SCISSOR_TEST); - - T->WasCleaned(); -} - -void GSDeviceOGL::ClearRenderTarget(GSTexture* t, u32 c) -{ - if (!t) - return; - - const GSVector4 color = GSVector4::rgba32(c) * (1.0f / 255); - ClearRenderTarget(t, color); -} - -void GSDeviceOGL::InvalidateRenderTarget(GSTexture* t) -{ - GSTextureOGL* T = static_cast(t); - if (!T || T->HasBeenCleaned()) - return; - - if (GLAD_GL_VERSION_4_3 || GLAD_GL_ES_VERSION_3_0) { OMSetFBO(m_fbo); - if (T->GetType() == GSTexture::Type::DepthStencil) { + if (GLState::rt && GLState::rt->GetSize() != T->GetSize()) + OMAttachRt(nullptr); OMAttachDs(T); - const GLenum attachments[] = {GL_DEPTH_STENCIL_ATTACHMENT}; - glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); } else { + if (GLState::ds && GLState::ds->GetSize() != T->GetSize()) + OMAttachDs(nullptr); OMAttachRt(T); - const GLenum attachments[] = {GL_COLOR_ATTACHMENT0}; - glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); } } -} - -void GSDeviceOGL::ClearDepth(GSTexture* t) -{ - if (!t) - return; - GSTextureOGL* T = static_cast(t); - - GL_PUSH("Clear Depth %d", T->GetID()); - - OMSetFBO(m_fbo); - // RT must be detached, if RT is too small, depth won't be fully cleared - // AT tolenico 2 map clip bug - OMAttachRt(NULL); - OMAttachDs(T); - - // TODO: check size of scissor before toggling it - glDisable(GL_SCISSOR_TEST); - const float c = 0.0f; - if (GLState::depth_mask) + if (T->GetState() == GSTexture::State::Invalidated) { - glClearBufferfv(GL_DEPTH, 0, &c); + if (GLAD_GL_VERSION_4_3) + { + if (T->GetType() == GSTexture::Type::DepthStencil) + { + const GLenum attachments[] = {GL_DEPTH_STENCIL_ATTACHMENT}; + glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); + } + else + { + const GLenum attachments[] = {GL_COLOR_ATTACHMENT0}; + glInvalidateFramebuffer(GL_DRAW_FRAMEBUFFER, std::size(attachments), attachments); + } + } } else { - glDepthMask(true); - glClearBufferfv(GL_DEPTH, 0, &c); - glDepthMask(false); - } - glEnable(GL_SCISSOR_TEST); -} + glDisable(GL_SCISSOR_TEST); -void GSDeviceOGL::ClearStencil(GSTexture* t, u8 c) -{ - if (!t) - return; + if (T->GetType() == GSTexture::Type::DepthStencil) + { + const float d = T->GetClearDepth(); + if (GLState::depth_mask) + { + glClearBufferfv(GL_DEPTH, 0, &d); + } + else + { + glDepthMask(true); + glClearBufferfv(GL_DEPTH, 0, &d); + glDepthMask(false); + } + } + else + { + const u32 old_color_mask = GLState::wrgba; + OMSetColorMaskState(); - GSTextureOGL* T = static_cast(t); + const GSVector4 c_unorm = T->GetUNormClearColor(); - GL_PUSH("Clear Stencil %d", T->GetID()); + if (T->IsIntegerFormat()) + { + if (T->IsUnsignedFormat()) + glClearBufferuiv(GL_COLOR, 0, c_unorm.U32); + else + glClearBufferiv(GL_COLOR, 0, c_unorm.I32); + } + else + { + glClearBufferfv(GL_COLOR, 0, c_unorm.v); + } - // Keep SCISSOR_TEST enabled on purpose to reduce the size - // of clean in DATE (impact big upscaling) - OMSetFBO(m_fbo); - OMAttachDs(T); - const GLint color = c; + OMSetColorMaskState(OMColorMaskSelector(old_color_mask)); + } + + glEnable(GL_SCISSOR_TEST); + } + + T->SetState(GSTexture::State::Dirty); - glClearBufferiv(GL_STENCIL, 0, &color); + if (use_write_fbo) + { + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, + (t->GetType() == GSTexture::Type::RenderTarget) ? GL_COLOR_ATTACHMENT0 : + (m_features.framebuffer_fetch ? GL_DEPTH_ATTACHMENT : GL_DEPTH_STENCIL_ATTACHMENT), + GL_TEXTURE_2D, 0, 0); + glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLState::fbo); + } } std::unique_ptr GSDeviceOGL::CreateDownloadTexture(u32 width, u32 height, GSTexture::Format format) @@ -1111,6 +1238,8 @@ GSTexture* GSDeviceOGL::InitPrimDateTexture(GSTexture* rt, const GSVector4i& are const GSVector2i& rtsize = rt->GetSize(); GSTexture* tex = CreateRenderTarget(rtsize.x, rtsize.y, GSTexture::Format::PrimID, false); + if (!tex) + return nullptr; GL_PUSH("PrimID Destination Alpha Clear"); StretchRect(rt, GSVector4(area) / GSVector4(rtsize).xyxy(), tex, GSVector4(area), m_date.primid_ps[datm], false); @@ -1171,7 +1300,7 @@ std::string GSDeviceOGL::GenGlslHeader(const std::string_view& entry, GLenum typ header += "#define FRAGMENT_SHADER 1\n"; break; default: - ASSERT(0); + pxAssert(0); } // Select the entry point ie the main function @@ -1209,7 +1338,7 @@ std::string GSDeviceOGL::GetPSSource(const PSSelector& sel) + fmt::format("#define PS_ADJT {}\n", sel.adjt) + fmt::format("#define PS_AEM_FMT {}\n", sel.aem_fmt) + fmt::format("#define PS_PAL_FMT {}\n", sel.pal_fmt) - + fmt::format("#define PS_DFMT {}\n", sel.dfmt) + + fmt::format("#define PS_DST_FMT {}\n", sel.dst_fmt) + fmt::format("#define PS_DEPTH_FMT {}\n", sel.depth_fmt) + fmt::format("#define PS_CHANNEL_FETCH {}\n", sel.channel) + fmt::format("#define PS_URBAN_CHAOS_HLE {}\n", sel.urban_chaos_hle) @@ -1237,6 +1366,7 @@ std::string GSDeviceOGL::GetPSSource(const PSSelector& sel) + fmt::format("#define PS_BLEND_D {}\n", sel.blend_d) + fmt::format("#define PS_IIP {}\n", sel.iip) + fmt::format("#define PS_SHUFFLE {}\n", sel.shuffle) + + fmt::format("#define PS_SHUFFLE_SAME {}\n", sel.shuffle_same) + fmt::format("#define PS_READ_BA {}\n", sel.read_ba) + fmt::format("#define PS_READ16_SRC {}\n", sel.real16src) + fmt::format("#define PS_WRITE_RG {}\n", sel.write_rg) @@ -1263,6 +1393,8 @@ std::string GSDeviceOGL::GetPSSource(const PSSelector& sel) // Copy a sub part of texture (same as below but force a conversion) void GSDeviceOGL::BlitRect(GSTexture* sTex, const GSVector4i& r, const GSVector2i& dsize, bool at_origin, bool linear) { + CommitClear(sTex, true); + GL_PUSH(fmt::format("CopyRectConv from {}", static_cast(sTex)->GetID()).c_str()); g_perfmon.Put(GSPerfMon::TextureCopies, 1); @@ -1286,19 +1418,13 @@ void GSDeviceOGL::BlitRect(GSTexture* sTex, const GSVector4i& r, const GSVector2 // Copy a sub part of a texture into another void GSDeviceOGL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r, u32 destX, u32 destY) { - ASSERT(sTex && dTex); - if (!(sTex && dTex)) - return; - const GLuint& sid = static_cast(sTex)->GetID(); const GLuint& did = static_cast(dTex)->GetID(); + CommitClear(sTex, false); + CommitClear(dTex, false); GL_PUSH("CopyRect from %d to %d", sid, did); -#ifdef ENABLE_OGL_DEBUG - PSSetShaderResource(6, sTex); -#endif - g_perfmon.Put(GSPerfMon::TextureCopies, 1); if (GLAD_GL_VERSION_4_3 || GLAD_GL_ARB_copy_image) @@ -1311,36 +1437,16 @@ void GSDeviceOGL::CopyRect(GSTexture* sTex, GSTexture* dTex, const GSVector4i& r glCopyImageSubDataEXT(sid, GL_TEXTURE_2D, 0, r.x, r.y, 0, did, GL_TEXTURE_2D, 0, destX, destY, 0, r.width(), r.height(), 1); } - else if (GLAD_GL_OES_copy_image) - { - glCopyImageSubDataOES(sid, GL_TEXTURE_2D, 0, r.x, r.y, 0, did, GL_TEXTURE_2D, - 0, destX, destY, 0, r.width(), r.height(), 1); - } - else - { - glBindFramebuffer(GL_READ_FRAMEBUFFER, m_fbo_read); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo_write); - glFramebufferTexture2D(GL_READ_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, sid, 0); - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, did, 0); - - const int w = r.width(), h = r.height(); - glDisable(GL_SCISSOR_TEST); - glBlitFramebuffer(r.x, r.y, r.x + w, r.y + h, destX + r.x, destY + r.y, destX + r.x + w, destY + r.y + h, GL_COLOR_BUFFER_BIT, GL_NEAREST); - glEnable(GL_SCISSOR_TEST); - - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, GLState::fbo); - glBindFramebuffer(GL_READ_FRAMEBUFFER, 0); - } } void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, ShaderConvert shader, bool linear) { pxAssert(dTex->IsDepthStencil() == HasDepthOutput(shader)); pxAssert(linear ? SupportsBilinear(shader) : SupportsNearest(shader)); - StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[(int)shader], linear); + StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[(int)shader], false, OMColorMaskSelector(ShaderConvertWriteMask(shader)), linear); } -void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GL::Program& ps, bool linear) +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GLProgram& ps, bool linear) { StretchRect(sTex, sRect, dTex, dRect, ps, false, OMColorMaskSelector(), linear); } @@ -1357,9 +1463,9 @@ void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture StretchRect(sTex, sRect, dTex, dRect, m_convert.ps[(int)ShaderConvert::COPY], false, cms, false); } -void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GL::Program& ps, bool alpha_blend, OMColorMaskSelector cms, bool linear) +void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, const GLProgram& ps, bool alpha_blend, OMColorMaskSelector cms, bool linear) { - ASSERT(sTex); + CommitClear(sTex, true); const bool draw_in_depth = dTex->IsDepthStencil(); @@ -1402,7 +1508,7 @@ void GSDeviceOGL::StretchRect(GSTexture* sTex, const GSVector4& sRect, GSTexture void GSDeviceOGL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture* dTex, const GSVector4& dRect, PresentShader shader, float shaderTime, bool linear) { - ASSERT(sTex); + CommitClear(sTex, true); const GSVector2i ds(dTex ? dTex->GetSize() : GSVector2i(GetWindowWidth(), GetWindowHeight())); DisplayConstantBuffer cb; @@ -1410,7 +1516,7 @@ void GSDeviceOGL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture cb.SetTarget(dRect, ds); cb.SetTime(shaderTime); - GL::Program& prog = m_present[static_cast(shader)]; + GLProgram& prog = m_present[static_cast(shader)]; prog.Bind(); prog.Uniform4fv(0, cb.SourceRect.F32); prog.Uniform4fv(1, cb.TargetRect.F32); @@ -1440,8 +1546,10 @@ void GSDeviceOGL::PresentRect(GSTexture* sTex, const GSVector4& sRect, GSTexture void GSDeviceOGL::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, GSTexture* dTex, u32 dOffset, u32 dSize) { + CommitClear(sTex, false); + const ShaderConvert shader = (dSize == 16) ? ShaderConvert::CLUT_4 : ShaderConvert::CLUT_8; - GL::Program& prog = m_convert.ps[static_cast(shader)]; + GLProgram& prog = m_convert.ps[static_cast(shader)]; prog.Bind(); prog.Uniform3ui(0, offsetX, offsetY, dOffset); prog.Uniform1f(1, sScale); @@ -1460,8 +1568,10 @@ void GSDeviceOGL::UpdateCLUTTexture(GSTexture* sTex, float sScale, u32 offsetX, void GSDeviceOGL::ConvertToIndexedTexture(GSTexture* sTex, float sScale, u32 offsetX, u32 offsetY, u32 SBW, u32 SPSM, GSTexture* dTex, u32 DBW, u32 DPSM) { + CommitClear(sTex, false); + const ShaderConvert shader = ShaderConvert::RGBA_TO_8I; - GL::Program& prog = m_convert.ps[static_cast(shader)]; + GLProgram& prog = m_convert.ps[static_cast(shader)]; prog.Bind(); prog.Uniform1ui(0, SBW); prog.Uniform1ui(1, DBW); @@ -1513,7 +1623,7 @@ void GSDeviceOGL::DrawMultiStretchRects( { IASetVAO(m_vao); IASetPrimitiveTopology(GL_TRIANGLE_STRIP); - OMSetDepthStencilState(m_convert.dss); + OMSetDepthStencilState(HasDepthOutput(shader) ? m_convert.dss_write : m_convert.dss); OMSetBlendState(false); OMSetColorMaskState(); if (!dTex->IsDepthStencil()) @@ -1599,7 +1709,7 @@ void GSDeviceOGL::DoMultiStretchRects(const MultiStretchRect* rects, u32 num_rec DrawIndexedPrimitive(); } -void GSDeviceOGL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, const GSVector4& c, const bool linear) +void GSDeviceOGL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, GSVector4* dRect, const GSRegPMODE& PMODE, const GSRegEXTBUF& EXTBUF, u32 c, const bool linear) { GL_PUSH("DoMerge"); @@ -1647,7 +1757,7 @@ void GSDeviceOGL::DoMerge(GSTexture* sTex[3], GSVector4* sRect, GSTexture* dTex, { // Blend with a constant alpha m_merge_obj.ps[1].Bind(); - m_merge_obj.ps[1].Uniform4fv(0, c.v); + m_merge_obj.ps[1].Uniform4fv(0, GSVector4::unorm8(c).v); StretchRect(sTex[0], sRect[0], dTex, dRect[0], m_merge_obj.ps[1], true, OMColorMaskSelector(), linear); } else @@ -1673,23 +1783,16 @@ void GSDeviceOGL::DoInterlace(GSTexture* sTex, const GSVector4& sRect, GSTexture bool GSDeviceOGL::CompileFXAAProgram() { - // Needs ARB_gpu_shader5 for gather. - if (!GLAD_GL_ARB_gpu_shader5) - { - Console.Warning("FXAA is not supported with the current GPU"); - return true; - } - const std::string_view fxaa_macro = "#define FXAA_GLSL_130 1\n"; - std::optional shader = Host::ReadResourceFileToString("shaders/common/fxaa.fx"); + const std::optional shader = ReadShaderSource("shaders/common/fxaa.fx"); if (!shader.has_value()) { Console.Error("Failed to read fxaa.fs"); return false; } - const std::string ps(GetShaderSource("ps_main", GL_FRAGMENT_SHADER, shader->c_str(), fxaa_macro)); - std::optional prog = m_shader_cache.GetProgram(m_convert.vs, ps); + const std::string ps(GetShaderSource("main", GL_FRAGMENT_SHADER, shader->c_str(), fxaa_macro)); + std::optional prog = m_shader_cache.GetProgram(m_convert.vs, ps); if (!prog.has_value()) { Console.Error("Failed to compile FXAA fragment shader"); @@ -1719,7 +1822,7 @@ void GSDeviceOGL::DoFXAA(GSTexture* sTex, GSTexture* dTex) bool GSDeviceOGL::CompileShadeBoostProgram() { - const auto shader = Host::ReadResourceFileToString("shaders/opengl/shadeboost.glsl"); + const std::optional shader = ReadShaderSource("shaders/opengl/shadeboost.glsl"); if (!shader.has_value()) { Host::ReportErrorAsync("GS", "Failed to read shaders/opengl/shadeboost.glsl."); @@ -1757,7 +1860,10 @@ void GSDeviceOGL::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* ver // sfex3 (after the capcom logo), vf4 (first menu fading in), ffxii shadows, rumble roses shadows, persona4 shadows - ClearStencil(ds, 0); + OMSetRenderTargets(nullptr, ds, &GLState::scissor); + + const GLint clear_color = 0; + glClearBufferiv(GL_STENCIL, 0, &clear_color); m_convert.ps[static_cast(datm ? ShaderConvert::DATM_1 : ShaderConvert::DATM_0)].Bind(); @@ -1768,7 +1874,6 @@ void GSDeviceOGL::SetupDATE(GSTexture* rt, GSTexture* ds, const GSVertexPT1* ver { glDisable(GL_BLEND); } - OMSetRenderTargets(NULL, ds, &GLState::scissor); // ia @@ -1826,25 +1931,16 @@ void GSDeviceOGL::IASetPrimitiveTopology(GLenum topology) void GSDeviceOGL::PSSetShaderResource(int i, GSTexture* sr) { - ASSERT(i < static_cast(std::size(GLState::tex_unit))); - // Note: Nvidia debgger doesn't support the id 0 (ie the NULL texture) - if (sr) + pxAssert(i < static_cast(std::size(GLState::tex_unit))); + + const GLuint id = static_cast(sr)->GetID(); + if (GLState::tex_unit[i] != id) { - const GLuint id = static_cast(sr)->GetID(); - if (GLState::tex_unit[i] != id) - { - GLState::tex_unit[i] = id; - glBindTextureUnit(i, id); - } + GLState::tex_unit[i] = id; + glBindTextureUnit(i, id); } } -void GSDeviceOGL::PSSetShaderResources(GSTexture* sr0, GSTexture* sr1) -{ - PSSetShaderResource(0, sr0); - PSSetShaderResource(1, sr1); -} - void GSDeviceOGL::PSSetSamplerState(GLuint ss) { if (GLState::ps_ss != ss) @@ -1866,7 +1962,7 @@ void GSDeviceOGL::ClearSamplerCache() bool GSDeviceOGL::CreateCASPrograms() { - std::optional cas_source(Host::ReadResourceFileToString("shaders/opengl/cas.glsl")); + std::optional cas_source = ReadShaderSource("shaders/opengl/cas.glsl"); if (!cas_source.has_value() || !GetCASShaderSource(&cas_source.value())) { m_features.cas_sharpening = false; @@ -1887,7 +1983,7 @@ bool GSDeviceOGL::CreateCASPrograms() return false; } - const auto link_uniforms = [](GL::Program& prog) { + const auto link_uniforms = [](GLProgram& prog) { prog.RegisterUniform("const0"); prog.RegisterUniform("const1"); prog.RegisterUniform("srcOffset"); @@ -1900,7 +1996,7 @@ bool GSDeviceOGL::CreateCASPrograms() bool GSDeviceOGL::DoCAS(GSTexture* sTex, GSTexture* dTex, bool sharpen_only, const std::array& constants) { - const GL::Program& prog = sharpen_only ? m_cas.sharpen_ps : m_cas.upscale_ps; + const GLProgram& prog = sharpen_only ? m_cas.sharpen_ps : m_cas.upscale_ps; prog.Bind(); prog.Uniform4uiv(0, &constants[0]); prog.Uniform4uiv(1, &constants[4]); @@ -1919,14 +2015,14 @@ bool GSDeviceOGL::DoCAS(GSTexture* sTex, GSTexture* dTex, bool sharpen_only, con bool GSDeviceOGL::CreateImGuiProgram() { - std::optional glsl = Host::ReadResourceFileToString("shaders/opengl/imgui.glsl"); + const std::optional glsl = ReadShaderSource("shaders/opengl/imgui.glsl"); if (!glsl.has_value()) { Console.Error("Failed to read imgui.glsl"); return false; } - std::optional prog = m_shader_cache.GetProgram( + std::optional prog = m_shader_cache.GetProgram( GetShaderSource("vs_main", GL_VERTEX_SHADER, glsl.value()), GetShaderSource("ps_main", GL_FRAGMENT_SHADER, glsl.value())); if (!prog.has_value()) @@ -1968,30 +2064,24 @@ void GSDeviceOGL::RenderBlankFrame() glEnable(GL_SCISSOR_TEST); } -void GSDeviceOGL::OMAttachRt(GSTextureOGL* rt) +void GSDeviceOGL::OMAttachRt(GSTexture* rt) { - if (rt) - rt->WasAttached(); + if (GLState::rt == rt) + return; - if (GLState::rt != rt) - { - GLState::rt = rt; - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt ? rt->GetID() : 0, 0); - } + GLState::rt = static_cast(rt); + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, rt ? static_cast(rt)->GetID() : 0, 0); } -void GSDeviceOGL::OMAttachDs(GSTextureOGL* ds) +void GSDeviceOGL::OMAttachDs(GSTexture* ds) { - if (ds) - ds->WasAttached(); + if (GLState::ds == ds) + return; - if (GLState::ds != ds) - { - GLState::ds = ds; + GLState::ds = static_cast(ds); - const GLenum target = m_features.framebuffer_fetch ? GL_DEPTH_ATTACHMENT : GL_DEPTH_STENCIL_ATTACHMENT; - glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, target, GL_TEXTURE_2D, ds ? ds->GetID() : 0, 0); - } + const GLenum target = m_features.framebuffer_fetch ? GL_DEPTH_ATTACHMENT : GL_DEPTH_STENCIL_ATTACHMENT; + glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, target, GL_TEXTURE_2D, ds ? static_cast(ds)->GetID() : 0, 0); } void GSDeviceOGL::OMSetFBO(GLuint fbo) @@ -2044,7 +2134,7 @@ void GSDeviceOGL::OMSetBlendState(bool enable, GLenum src_factor, GLenum dst_fac if (is_constant && GLState::bf != constant) { GLState::bf = constant; - const float bf = (float)constant / 128.0f; + const float bf = static_cast(constant) / 128.0f; glBlendColor(bf, bf, bf, bf); } @@ -2082,27 +2172,30 @@ void GSDeviceOGL::OMSetBlendState(bool enable, GLenum src_factor, GLenum dst_fac void GSDeviceOGL::OMSetRenderTargets(GSTexture* rt, GSTexture* ds, const GSVector4i* scissor) { - GSTextureOGL* RT = static_cast(rt); - GSTextureOGL* DS = static_cast(ds); + g_perfmon.Put(GSPerfMon::RenderPasses, static_cast(GLState::rt != rt || GLState::ds != ds)); - g_perfmon.Put(GSPerfMon::RenderPasses, static_cast(GLState::rt != RT || GLState::ds != DS)); + // Split up to avoid unbind/bind calls when clearing. OMSetFBO(m_fbo); if (rt) { - OMAttachRt(RT); + OMAttachRt(rt); } else { OMAttachRt(); } - // Note: it must be done after OMSetFBO if (ds) - OMAttachDs(DS); + OMAttachDs(ds); else OMAttachDs(); + if (rt) + CommitClear(rt, false); + if (ds) + CommitClear(ds, false); + if (rt || ds) { const GSVector2i size = rt ? rt->GetSize() : ds->GetSize(); @@ -2129,7 +2222,7 @@ void GSDeviceOGL::SetScissor(const GSVector4i& scissor) } } -__fi static void WriteToStreamBuffer(GL::StreamBuffer* sb, u32 index, u32 align, const void* data, u32 size) +__fi static void WriteToStreamBuffer(GLStreamBuffer* sb, u32 index, u32 align, const void* data, u32 size) { const auto res = sb->Map(align, size); std::memcpy(res.pointer, data, size); @@ -2150,7 +2243,7 @@ void GSDeviceOGL::SetupPipeline(const ProgramSelector& psel) const std::string vs(GetVSSource(psel.vs)); const std::string ps(GetPSSource(psel.ps)); - GL::Program prog; + GLProgram prog; m_shader_cache.GetProgram(&prog, vs, ps); it = m_programs.emplace(psel, std::move(prog)).first; it->second.Bind(); @@ -2191,6 +2284,11 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) GLState::scissor = config.scissor; } + if (config.tex) + CommitClear(config.tex, true); + if (config.pal) + CommitClear(config.pal, true); + GSVector2i rtsize = (config.rt ? config.rt : config.ds)->GetSize(); GSTexture* primid_texture = nullptr; @@ -2207,7 +2305,7 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) case GSHWDrawConfig::DestinationAlphaMode::StencilOne: if (m_features.texture_barrier) { - ClearStencil(config.ds, 1); + // Cleared after RT bind. break; } [[fallthrough]]; @@ -2283,7 +2381,10 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) } IASetPrimitiveTopology(topology); - PSSetShaderResources(config.tex, config.pal); + if (config.tex) + PSSetShaderResource(0, config.tex); + if (config.pal) + PSSetShaderResource(1, config.pal); if (draw_rt_clone) PSSetShaderResource(2, draw_rt_clone); else if (config.require_one_barrier || config.require_full_barrier) @@ -2320,11 +2421,14 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) glDisable(GL_PROGRAM_POINT_SIZE); GLState::point_size = point_size_enabled; } - const float line_width = config.line_expand ? static_cast(GSConfig.UpscaleMultiplier) : 1.0f; - if (GLState::line_width != line_width) + if (config.topology == GSHWDrawConfig::Topology::Line) { - GLState::line_width = line_width; - glLineWidth(line_width); + const float line_width = config.line_expand ? config.cb_ps.ScaleFactor.z : 1.0f; + if (GLState::line_width != line_width) + { + GLState::line_width = line_width; + glLineWidth(line_width); + } } if (config.destination_alpha == GSHWDrawConfig::DestinationAlphaMode::PrimIDTracking) @@ -2372,6 +2476,13 @@ void GSDeviceOGL::RenderHW(GSHWDrawConfig& config) OMSetColorMaskState(config.colormask); SetupOM(config.depth); + // Clear stencil as close as possible to the RT bind, to avoid framebuffer swaps. + if (config.destination_alpha == GSHWDrawConfig::DestinationAlphaMode::StencilOne && m_features.texture_barrier) + { + constexpr GLint clear_color = 1; + glClearBufferiv(GL_STENCIL, 0, &clear_color); + } + SendHWDraw(config, psel.ps.IsFeedbackLoop()); if (config.separate_alpha_pass) @@ -2549,11 +2660,6 @@ void GSDeviceOGL::DebugMessageCallback(GLenum gl_source, GLenum gl_type, GLuint } } -GL::StreamBuffer* GSDeviceOGL::GetTextureUploadBuffer() -{ - return s_texture_upload_buffer.get(); -} - void GSDeviceOGL::PushDebugGroup(const char* fmt, ...) { #ifdef ENABLE_OGL_DEBUG diff --git a/Classes/Video/GSDumpReplayer.cpp b/Classes/Video/GSDumpReplayer.cpp index 10e0f91..faaf8ee 100644 --- a/Classes/Video/GSDumpReplayer.cpp +++ b/Classes/Video/GSDumpReplayer.cpp @@ -28,7 +28,7 @@ // Has to come before Gif.h #include "MemoryTypes.h" -#include "Frontend/GameList.h" +#include "GameList.h" #include "Gif.h" #include "Gif_Unit.h" #include "GSDumpReplayer.h" @@ -204,8 +204,8 @@ static void GSDumpReplayerLoadInitialState() // load GS state freezeData fd = {static_cast(s_dump_file->GetStateData().size()), const_cast(s_dump_file->GetStateData().data())}; - MTGS_FreezeData mfd = {&fd, 0}; - GetMTGS().Freeze(FreezeAction::Load, mfd); + MTGS::FreezeData mfd = {&fd, 0}; + MTGS::Freeze(FreezeAction::Load, mfd); if (mfd.retval != 0) Host::ReportFormattedErrorAsync("GSDumpReplayer", "Failed to load GS state."); } @@ -227,7 +227,7 @@ static void GSDumpReplayerSendPacketToMTGS(GIF_PATH path, const u8* data, u32 le static void GSDumpReplayerUpdateFrameLimit() { constexpr u32 default_frame_limit = 60; - const u32 frame_limit = static_cast(default_frame_limit * EmuConfig.GS.LimitScalar); + const u32 frame_limit = static_cast(default_frame_limit * VMManager::GetTargetSpeed()); if (frame_limit > 0) s_frame_ticks = (GetTickFrequency() + (frame_limit / 2)) / frame_limit; @@ -308,7 +308,7 @@ void GSDumpReplayerCpuStep() s_dump_frame_number++; GSDumpReplayerUpdateFrameLimit(); GSDumpReplayerFrameLimit(); - GetMTGS().PostVsyncStart(false); + MTGS::PostVsyncStart(false); VMManager::Internal::VSyncOnCPUThread(); if (VMManager::Internal::IsExecutionInterrupted()) GSDumpReplayerExitExecution(); @@ -321,7 +321,7 @@ void GSDumpReplayerCpuStep() std::memcpy(&size, packet.data, sizeof(size)); std::unique_ptr arr(new u8[size * 16]); - GetMTGS().InitAndReadFIFO(arr.get(), size); + MTGS::InitAndReadFIFO(arr.get(), size); } break; diff --git a/Classes/Video/OpenGLHostDisplayOverride.cpp b/Classes/Video/OpenGLHostDisplayOverride.cpp index f2be2a0..a0116e7 100644 --- a/Classes/Video/OpenGLHostDisplayOverride.cpp +++ b/Classes/Video/OpenGLHostDisplayOverride.cpp @@ -20,7 +20,7 @@ #include "common/Console.h" #include "common/ScopedGuard.h" #include "common/StringUtil.h" -#include "common/GL/Program.h" +//#include "common/GL/Program.h" #include #include diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 79db3ee..de0668d 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -364,127 +364,6 @@ 55484927288545620066EDEB /* present.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55484926288545620066EDEB /* present.metal */; }; 5548492B288554210066EDEB /* Ps1CD.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5548492A288554210066EDEB /* Ps1CD.cpp */; }; 5548492D288554CF0066EDEB /* Dmac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5548492C288554CF0066EDEB /* Dmac.cpp */; }; - 55484CA8288555730066EDEB /* zip_crypto_commoncrypto.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C1B288555360066EDEB /* zip_crypto_commoncrypto.c */; }; - 55484CA9288555730066EDEB /* zip_add_dir.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFA288555360066EDEB /* zip_add_dir.c */; }; - 55484CAA288555730066EDEB /* zip_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BDB288555360066EDEB /* zip_add.c */; }; - 55484CAB288555730066EDEB /* zip_add_entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C0B288555360066EDEB /* zip_add_entry.c */; }; - 55484CAC288555730066EDEB /* zip_algorithm_bzip2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4F288555370066EDEB /* zip_algorithm_bzip2.c */; }; - 55484CAD288555730066EDEB /* zip_algorithm_deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C05288555360066EDEB /* zip_algorithm_deflate.c */; }; - 55484CAE288555730066EDEB /* zip_algorithm_xz.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C36288555360066EDEB /* zip_algorithm_xz.c */; }; - 55484CAF288555730066EDEB /* zip_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C0D288555360066EDEB /* zip_buffer.c */; }; - 55484CB0288555730066EDEB /* zip_crypto_commoncrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484C58288555370066EDEB /* zip_crypto_commoncrypto.h */; }; - 55484CB1288555730066EDEB /* zip_algorithm_zstd.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C59288555370066EDEB /* zip_algorithm_zstd.c */; }; - 55484CB2288555730066EDEB /* zip_close.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF7288555360066EDEB /* zip_close.c */; }; - 55484CB3288555800066EDEB /* zip_dir_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C02288555360066EDEB /* zip_dir_add.c */; }; - 55484CB4288555800066EDEB /* zip_source_winzip_aes_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C5C288555370066EDEB /* zip_source_winzip_aes_encode.c */; }; - 55484CB5288555800066EDEB /* zip_file_get_external_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BD8288555360066EDEB /* zip_file_get_external_attributes.c */; }; - 55484CB6288555800066EDEB /* zip_fread.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C22288555360066EDEB /* zip_fread.c */; }; - 55484CB7288555800066EDEB /* zip_io_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C5B288555370066EDEB /* zip_io_util.c */; }; - 55484CB8288555800066EDEB /* zip_stat_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C55288555370066EDEB /* zip_stat_init.c */; }; - 55484CB9288555800066EDEB /* zip_source_close.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C38288555360066EDEB /* zip_source_close.c */; }; - 55484CBA288555800066EDEB /* zip_source_seek_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C04288555360066EDEB /* zip_source_seek_write.c */; }; - 55484CBB288555800066EDEB /* zip_source_seek.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C11288555360066EDEB /* zip_source_seek.c */; }; - 55484CBC288555800066EDEB /* zip_string.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE7288555360066EDEB /* zip_string.c */; }; - 55484CBD288555800066EDEB /* zip_file_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BDD288555360066EDEB /* zip_file_strerror.c */; }; - 55484CBE288555800066EDEB /* zip_source_file_stdio.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484C50288555370066EDEB /* zip_source_file_stdio.h */; }; - 55484CBF288555800066EDEB /* zip_dirent.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C43288555370066EDEB /* zip_dirent.c */; }; - 55484CC1288555800066EDEB /* zip_source_remove.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4E288555370066EDEB /* zip_source_remove.c */; }; - 55484CC2288555800066EDEB /* zip_get_archive_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE3288555360066EDEB /* zip_get_archive_comment.c */; }; - 55484CC3288555800066EDEB /* zip_source_commit_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BDF288555360066EDEB /* zip_source_commit_write.c */; }; - 55484CC4288555800066EDEB /* zip_source_winzip_aes_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C54288555370066EDEB /* zip_source_winzip_aes_decode.c */; }; - 55484CC5288555800066EDEB /* zip_crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484BF9288555360066EDEB /* zip_crypto.h */; }; - 55484CC6288555800066EDEB /* zip_extra_field_api.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C21288555360066EDEB /* zip_extra_field_api.c */; }; - 55484CC7288555800066EDEB /* zip_progress.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C24288555360066EDEB /* zip_progress.c */; }; - 55484CC8288555800066EDEB /* zip_error_to_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4D288555370066EDEB /* zip_error_to_str.c */; }; - 55484CC9288555800066EDEB /* zip_source_file_stdio.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C01288555360066EDEB /* zip_source_file_stdio.c */; }; - 55484CCA288555800066EDEB /* zip_pkware.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C0A288555360066EDEB /* zip_pkware.c */; }; - 55484CCB288555800066EDEB /* zip_file_get_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C53288555370066EDEB /* zip_file_get_comment.c */; }; - 55484CCC288555800066EDEB /* zip_unchange.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF3288555360066EDEB /* zip_unchange.c */; }; - 55484CCD288555800066EDEB /* zip_winzip_aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2D288555360066EDEB /* zip_winzip_aes.c */; }; - 55484CCF288555800066EDEB /* zip_utf-8.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C40288555370066EDEB /* zip_utf-8.c */; }; - 55484CD0288555800066EDEB /* zip_source_call.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFC288555360066EDEB /* zip_source_call.c */; }; - 55484CD1288555800066EDEB /* zip_unchange_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C1A288555360066EDEB /* zip_unchange_data.c */; }; - 55484CD2288555800066EDEB /* zip_file_set_external_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2B288555360066EDEB /* zip_file_set_external_attributes.c */; }; - 55484CD3288555800066EDEB /* zip_source_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C46288555370066EDEB /* zip_source_error.c */; }; - 55484CD4288555800066EDEB /* zip_source_zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C26288555360066EDEB /* zip_source_zip.c */; }; - 55484CD5288555800066EDEB /* zip_file_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C45288555370066EDEB /* zip_file_add.c */; }; - 55484CD6288555800066EDEB /* zip_source_zip_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C16288555360066EDEB /* zip_source_zip_new.c */; }; - 55484CD7288555800066EDEB /* zip_source_begin_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BD9288555360066EDEB /* zip_source_begin_write.c */; }; - 55484CD9288555800066EDEB /* zip_fdopen.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C19288555360066EDEB /* zip_fdopen.c */; }; - 55484CDA288555800066EDEB /* zip_file_set_mtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C1D288555360066EDEB /* zip_file_set_mtime.c */; }; - 55484CDB288555800066EDEB /* zip_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C10288555360066EDEB /* zip_strerror.c */; }; - 55484CDC288555800066EDEB /* zip_source_accept_empty.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C31288555360066EDEB /* zip_source_accept_empty.c */; }; - 55484CDD288555800066EDEB /* zip_file_set_encryption.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BEA288555360066EDEB /* zip_file_set_encryption.c */; }; - 55484CDE288555800066EDEB /* zip_get_num_files.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C09288555360066EDEB /* zip_get_num_files.c */; }; - 55484CDF288555800066EDEB /* zip_file_set_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF5288555360066EDEB /* zip_file_set_comment.c */; }; - 55484CE0288555800066EDEB /* zip_error_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C41288555370066EDEB /* zip_error_get.c */; }; - 55484CE1288555800066EDEB /* zip_fopen.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C56288555370066EDEB /* zip_fopen.c */; }; - 55484CE2288555800066EDEB /* zip_fopen_index.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BDE288555360066EDEB /* zip_fopen_index.c */; }; - 55484CE3288555800066EDEB /* zip_source_supports.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BD7288555360066EDEB /* zip_source_supports.c */; }; - 55484CE4288555800066EDEB /* zip_rename.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C25288555360066EDEB /* zip_rename.c */; }; - 55484CE5288555800066EDEB /* zip_fopen_encrypted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFE288555360066EDEB /* zip_fopen_encrypted.c */; }; - 55484CE6288555800066EDEB /* zip_set_archive_flag.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C15288555360066EDEB /* zip_set_archive_flag.c */; }; - 55484CE7288555800066EDEB /* zip_source_pkware_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C14288555360066EDEB /* zip_source_pkware_encode.c */; }; - 55484CE8288555800066EDEB /* zip_stat_index.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C27288555360066EDEB /* zip_stat_index.c */; }; - 55484CEA288555800066EDEB /* zip_delete.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2F288555360066EDEB /* zip_delete.c */; }; - 55484CEB288555800066EDEB /* zip_random_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF6288555360066EDEB /* zip_random_unix.c */; }; - 55484CEC288555800066EDEB /* zip_source_is_deleted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFD288555360066EDEB /* zip_source_is_deleted.c */; }; - 55484CED288555800066EDEB /* zip_open.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C3A288555360066EDEB /* zip_open.c */; }; - 55484CEE288555800066EDEB /* zip_source_file_stdio_named.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C20288555360066EDEB /* zip_source_file_stdio_named.c */; }; - 55484CEF288555800066EDEB /* zip_name_locate.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C03288555360066EDEB /* zip_name_locate.c */; }; - 55484CF0288555800066EDEB /* zip_file_rename.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE4288555360066EDEB /* zip_file_rename.c */; }; - 55484CF2288555800066EDEB /* zip_source_open.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BEC288555360066EDEB /* zip_source_open.c */; }; - 55484CF3288555800066EDEB /* zip_source_tell.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C47288555370066EDEB /* zip_source_tell.c */; }; - 55484CF4288555800066EDEB /* zip_source_free.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C07288555360066EDEB /* zip_source_free.c */; }; - 55484CF6288555800066EDEB /* zip_source_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484C29288555360066EDEB /* zip_source_file.h */; }; - 55484CF7288555800066EDEB /* zip_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C0E288555360066EDEB /* zip_error.c */; }; - 55484CF8288555800066EDEB /* zip_source_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C44288555370066EDEB /* zip_source_write.c */; }; - 55484CF9288555800066EDEB /* zip_replace.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2E288555360066EDEB /* zip_replace.c */; }; - 55484CFA288555800066EDEB /* zip_source_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C52288555370066EDEB /* zip_source_window.c */; }; - 55484CFB288555800066EDEB /* zip_fclose.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C42288555370066EDEB /* zip_fclose.c */; }; - 55484CFC288555800066EDEB /* zip_source_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE0288555360066EDEB /* zip_source_buffer.c */; }; - 55484CFD288555800066EDEB /* zip_source_crc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C30288555360066EDEB /* zip_source_crc.c */; }; - 55484CFE288555800066EDEB /* zip_source_get_file_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C49288555370066EDEB /* zip_source_get_file_attributes.c */; }; - 55484CFF288555800066EDEB /* zip_source_tell_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BD5288555360066EDEB /* zip_source_tell_write.c */; }; - 55484D00288555800066EDEB /* zip_unchange_all.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C5A288555370066EDEB /* zip_unchange_all.c */; }; - 55484D01288555800066EDEB /* zip_ftell.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE5288555360066EDEB /* zip_ftell.c */; }; - 55484D02288555800066EDEB /* zip_entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE9288555360066EDEB /* zip_entry.c */; }; - 55484D03288555800066EDEB /* zip_set_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE8288555360066EDEB /* zip_set_name.c */; }; - 55484D04288555800066EDEB /* zip_source_pkware_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C1C288555360066EDEB /* zip_source_pkware_decode.c */; }; - 55484D05288555800066EDEB /* zip_unchange_archive.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C06288555360066EDEB /* zip_unchange_archive.c */; }; - 55484D06288555800066EDEB /* zip_file_replace.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF0288555360066EDEB /* zip_file_replace.c */; }; - 55484D07288555800066EDEB /* zip_fopen_index_encrypted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C3E288555360066EDEB /* zip_fopen_index_encrypted.c */; }; - 55484D08288555800066EDEB /* zip_get_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BDC288555360066EDEB /* zip_get_name.c */; }; - 55484D09288555800066EDEB /* zip_discard.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE6288555360066EDEB /* zip_discard.c */; }; - 55484D0A288555800066EDEB /* zip_source_rollback_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C23288555360066EDEB /* zip_source_rollback_write.c */; }; - 55484D0B288555800066EDEB /* zip_file_error_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4A288555370066EDEB /* zip_file_error_clear.c */; }; - 55484D0C288555800066EDEB /* zip_fseek.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2C288555360066EDEB /* zip_fseek.c */; }; - 55484D0D288555800066EDEB /* zip_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF4288555360066EDEB /* zip_new.c */; }; - 55484D0E288555800066EDEB /* zip_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BEE288555360066EDEB /* zip_hash.c */; }; - 55484D0F288555800066EDEB /* zip_set_file_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C32288555360066EDEB /* zip_set_file_comment.c */; }; - 55484D10288555800066EDEB /* zip_source_compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4B288555370066EDEB /* zip_source_compress.c */; }; - 55484D11288555800066EDEB /* zip_source_file_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C08288555360066EDEB /* zip_source_file_common.c */; }; - 55484D12288555800066EDEB /* zip_source_function.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C2A288555360066EDEB /* zip_source_function.c */; }; - 55484D13288555800066EDEB /* zip_source_layered.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C5D288555370066EDEB /* zip_source_layered.c */; }; - 55484D14288555800066EDEB /* zip_get_encryption_implementation.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C12288555360066EDEB /* zip_get_encryption_implementation.c */; }; - 55484D15288555800066EDEB /* zip_get_archive_flag.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C13288555360066EDEB /* zip_get_archive_flag.c */; }; - 55484D16288555800066EDEB /* zip_source_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE2288555360066EDEB /* zip_source_stat.c */; }; - 55484D17288555800066EDEB /* zip_error_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C5F288555370066EDEB /* zip_error_strerror.c */; }; - 55484D18288555800066EDEB /* zip_error_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BE1288555360066EDEB /* zip_error_clear.c */; }; - 55484D19288555800066EDEB /* zip_file_error_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BEF288555360066EDEB /* zip_file_error_get.c */; }; - 55484D1A288555800066EDEB /* zip_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C34288555360066EDEB /* zip_stat.c */; }; - 55484D1B288555800066EDEB /* zip_get_num_entries.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C28288555360066EDEB /* zip_get_num_entries.c */; }; - 55484D1C288555800066EDEB /* zip_memdup.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BD6288555360066EDEB /* zip_memdup.c */; }; - 55484D1E288555800066EDEB /* zip_set_archive_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFF288555360066EDEB /* zip_set_archive_comment.c */; }; - 55484D1F288555800066EDEB /* zip_get_file_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C35288555360066EDEB /* zip_get_file_comment.c */; }; - 55484D21288555800066EDEB /* zip_extra_field.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C00288555360066EDEB /* zip_extra_field.c */; }; - 55484D22288555800066EDEB /* zip_source_read.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C39288555360066EDEB /* zip_source_read.c */; }; - 55484D23288555800066EDEB /* zip_set_default_password.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C1F288555360066EDEB /* zip_set_default_password.c */; }; - 55484D24288555800066EDEB /* zip_error_get_sys_type.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BFB288555360066EDEB /* zip_error_get_sys_type.c */; }; - 55484D25288555800066EDEB /* zip_source_begin_write_cloning.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C3B288555360066EDEB /* zip_source_begin_write_cloning.c */; }; - 55484D26288555800066EDEB /* zip_set_file_compression.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BED288555360066EDEB /* zip_set_file_compression.c */; }; - 55484D27288555800066EDEB /* zip_file_get_offset.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484BF2288555360066EDEB /* zip_file_get_offset.c */; }; - 55484D28288555800066EDEB /* zip_libzip_version.c in Sources */ = {isa = PBXBuildFile; fileRef = 55484C4C288555370066EDEB /* zip_libzip_version.c */; }; 55484D2D288555EE0066EDEB /* libzip.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 55484932288554F20066EDEB /* libzip.a */; }; 55484D312885595F0066EDEB /* config.h in Headers */ = {isa = PBXBuildFile; fileRef = 55484D302885595F0066EDEB /* config.h */; }; 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */; }; @@ -595,11 +474,232 @@ 55BD3E68295A58B6001DD03E /* ffx_cas.h in Copy Common Shaders */ = {isa = PBXBuildFile; fileRef = 55BD3E63295A587C001DD03E /* ffx_cas.h */; }; 55BD3E69295A58E5001DD03E /* present.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 55BD3E60295A5861001DD03E /* present.glsl */; }; 55BD3E6A295A58EA001DD03E /* cas.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 55BD3E5F295A5861001DD03E /* cas.glsl */; }; - 55BD3E70295A59CE001DD03E /* usb-pad-sdl-ff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E6F295A59CE001DD03E /* usb-pad-sdl-ff.cpp */; }; 55BD3E78295A5A13001DD03E /* guncon2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E76295A5A13001DD03E /* guncon2.cpp */; }; 55BD3E7A295A5A37001DD03E /* cam-noop.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E79295A5A37001DD03E /* cam-noop.cpp */; }; 55BD3E7D295A5ABC001DD03E /* misc.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E7B295A5ABC001DD03E /* misc.metal */; }; 55BD3E7E295A5ABC001DD03E /* cas.metal in Sources */ = {isa = PBXBuildFile; fileRef = 55BD3E7C295A5ABC001DD03E /* cas.metal */; }; + 55C765912B776817005DC873 /* InputSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C7658F2B776805005DC873 /* InputSource.cpp */; }; + 55C765922B776DA7005DC873 /* libchdr_flac.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D8D2B59127500B3BD75 /* libchdr_flac.c */; }; + 55C765942B776DA7005DC873 /* libchdr_bitstream.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D8B2B59127500B3BD75 /* libchdr_bitstream.c */; }; + 55C765952B776DA7005DC873 /* libchdr_huffman.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D8C2B59127500B3BD75 /* libchdr_huffman.c */; }; + 55C765962B776DA7005DC873 /* libchdr_cdrom.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D8E2B59127500B3BD75 /* libchdr_cdrom.c */; }; + 55C765B72B776E88005DC873 /* MultitapProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C7659B2B776E88005DC873 /* MultitapProtocol.cpp */; }; + 55C765B82B776E88005DC873 /* MemoryCardProtocol.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C7659F2B776E88005DC873 /* MemoryCardProtocol.cpp */; }; + 55C765B92B776E88005DC873 /* MemoryCardFile.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765A02B776E88005DC873 /* MemoryCardFile.cpp */; }; + 55C765BA2B776E88005DC873 /* MemoryCardFolder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765A22B776E88005DC873 /* MemoryCardFolder.cpp */; }; + 55C765BB2B776E88005DC873 /* PadNotConnected.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765A52B776E88005DC873 /* PadNotConnected.cpp */; }; + 55C765BC2B776E88005DC873 /* PadPopn.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765A62B776E88005DC873 /* PadPopn.cpp */; }; + 55C765BD2B776E88005DC873 /* PadDualshock2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765AB2B776E88005DC873 /* PadDualshock2.cpp */; }; + 55C765BE2B776E88005DC873 /* Pad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765AC2B776E88005DC873 /* Pad.cpp */; }; + 55C765BF2B776E88005DC873 /* PadBase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765AD2B776E88005DC873 /* PadBase.cpp */; }; + 55C765C02B776E88005DC873 /* PadGuitar.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765B12B776E88005DC873 /* PadGuitar.cpp */; }; + 55C765C12B776E88005DC873 /* Sio.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765B22B776E88005DC873 /* Sio.cpp */; }; + 55C765C22B776E88005DC873 /* Sio0.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765B52B776E88005DC873 /* Sio0.cpp */; }; + 55C765C32B776E88005DC873 /* Sio2.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C765B62B776E88005DC873 /* Sio2.cpp */; }; + 55C765C42B776EE0005DC873 /* libchdr_chd.c in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5D8A2B59127500B3BD75 /* libchdr_chd.c */; }; + 55C766552B777022005DC873 /* zip_source_tell_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765C72B777022005DC873 /* zip_source_tell_write.c */; }; + 55C766562B777022005DC873 /* zip_memdup.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765C82B777022005DC873 /* zip_memdup.c */; }; + 55C766572B777022005DC873 /* zip_source_supports.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765C92B777022005DC873 /* zip_source_supports.c */; }; + 55C766582B777022005DC873 /* zip_file_get_external_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765CA2B777022005DC873 /* zip_file_get_external_attributes.c */; }; + 55C766592B777022005DC873 /* zip_source_begin_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765CB2B777022005DC873 /* zip_source_begin_write.c */; }; + 55C7665A2B777022005DC873 /* zipint.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C765CC2B777022005DC873 /* zipint.h */; }; + 55C7665B2B777022005DC873 /* zip_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765CD2B777022005DC873 /* zip_add.c */; }; + 55C7665C2B777022005DC873 /* zip_get_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765CE2B777022005DC873 /* zip_get_name.c */; }; + 55C7665D2B777022005DC873 /* zip_file_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765CF2B777022005DC873 /* zip_file_strerror.c */; }; + 55C7665E2B777022005DC873 /* zip_fopen_index.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D02B777022005DC873 /* zip_fopen_index.c */; }; + 55C7665F2B777022005DC873 /* zip_source_commit_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D12B777022005DC873 /* zip_source_commit_write.c */; }; + 55C766602B777022005DC873 /* zip_source_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D22B777022005DC873 /* zip_source_buffer.c */; }; + 55C766612B777022005DC873 /* zip_error_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D32B777022005DC873 /* zip_error_clear.c */; }; + 55C766622B777022005DC873 /* zip_source_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D42B777022005DC873 /* zip_source_stat.c */; }; + 55C766632B777022005DC873 /* zip_get_archive_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D52B777022005DC873 /* zip_get_archive_comment.c */; }; + 55C766642B777022005DC873 /* zip_file_rename.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D62B777022005DC873 /* zip_file_rename.c */; }; + 55C766652B777022005DC873 /* zip_ftell.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D72B777022005DC873 /* zip_ftell.c */; }; + 55C766662B777022005DC873 /* zip_discard.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D82B777022005DC873 /* zip_discard.c */; }; + 55C766672B777022005DC873 /* zip_string.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765D92B777022005DC873 /* zip_string.c */; }; + 55C766682B777022005DC873 /* zip_set_name.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765DA2B777022005DC873 /* zip_set_name.c */; }; + 55C766692B777022005DC873 /* zip_entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765DB2B777022005DC873 /* zip_entry.c */; }; + 55C7666A2B777022005DC873 /* zip_file_set_encryption.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765DC2B777022005DC873 /* zip_file_set_encryption.c */; }; + 55C7666B2B777022005DC873 /* zip_source_open.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765DE2B777022005DC873 /* zip_source_open.c */; }; + 55C7666C2B777022005DC873 /* zip_set_file_compression.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765DF2B777022005DC873 /* zip_set_file_compression.c */; }; + 55C7666D2B777022005DC873 /* zip_hash.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E02B777022005DC873 /* zip_hash.c */; }; + 55C7666E2B777022005DC873 /* zip_file_error_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E12B777022005DC873 /* zip_file_error_get.c */; }; + 55C7666F2B777022005DC873 /* zip_file_replace.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E22B777022005DC873 /* zip_file_replace.c */; }; + 55C766712B777022005DC873 /* zip_file_get_offset.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E42B777022005DC873 /* zip_file_get_offset.c */; }; + 55C766722B777022005DC873 /* zip_unchange.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E52B777022005DC873 /* zip_unchange.c */; }; + 55C766732B777022005DC873 /* zip_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E62B777022005DC873 /* zip_new.c */; }; + 55C766742B777022005DC873 /* zip_file_set_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E72B777022005DC873 /* zip_file_set_comment.c */; }; + 55C766752B777022005DC873 /* zip_random_unix.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E82B777022005DC873 /* zip_random_unix.c */; }; + 55C766762B777022005DC873 /* zip_close.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765E92B777022005DC873 /* zip_close.c */; }; + 55C766782B777022005DC873 /* zip_crypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C765EB2B777022005DC873 /* zip_crypto.h */; }; + 55C766792B777022005DC873 /* zip_add_dir.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765EC2B777022005DC873 /* zip_add_dir.c */; }; + 55C7667A2B777022005DC873 /* zip_error_get_sys_type.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765ED2B777022005DC873 /* zip_error_get_sys_type.c */; }; + 55C7667B2B777022005DC873 /* zip_source_call.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765EE2B777022005DC873 /* zip_source_call.c */; }; + 55C7667C2B777022005DC873 /* zip_source_is_deleted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765EF2B777022005DC873 /* zip_source_is_deleted.c */; }; + 55C7667D2B777022005DC873 /* zip_fopen_encrypted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F02B777022005DC873 /* zip_fopen_encrypted.c */; }; + 55C7667E2B777022005DC873 /* zip_set_archive_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F12B777022005DC873 /* zip_set_archive_comment.c */; }; + 55C7667F2B777022005DC873 /* zip_extra_field.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F22B777022005DC873 /* zip_extra_field.c */; }; + 55C766802B777022005DC873 /* zip_source_file_stdio.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F32B777022005DC873 /* zip_source_file_stdio.c */; }; + 55C766812B777022005DC873 /* zip_dir_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F42B777022005DC873 /* zip_dir_add.c */; }; + 55C766822B777022005DC873 /* zip_name_locate.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F52B777022005DC873 /* zip_name_locate.c */; }; + 55C766832B777022005DC873 /* zip_source_seek_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F62B777022005DC873 /* zip_source_seek_write.c */; }; + 55C766842B777023005DC873 /* zip_algorithm_deflate.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F72B777022005DC873 /* zip_algorithm_deflate.c */; }; + 55C766852B777023005DC873 /* zip_unchange_archive.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F82B777022005DC873 /* zip_unchange_archive.c */; }; + 55C766862B777023005DC873 /* zip_source_free.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765F92B777022005DC873 /* zip_source_free.c */; }; + 55C766872B777023005DC873 /* zip_source_file_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765FA2B777022005DC873 /* zip_source_file_common.c */; }; + 55C766882B777023005DC873 /* zip_get_num_files.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765FB2B777022005DC873 /* zip_get_num_files.c */; }; + 55C766892B777023005DC873 /* zip_pkware.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765FC2B777022005DC873 /* zip_pkware.c */; }; + 55C7668A2B777023005DC873 /* zip_add_entry.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765FD2B777022005DC873 /* zip_add_entry.c */; }; + 55C7668C2B777023005DC873 /* zip_buffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C765FF2B777022005DC873 /* zip_buffer.c */; }; + 55C7668D2B777023005DC873 /* zip_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766002B777022005DC873 /* zip_error.c */; }; + 55C7668F2B777023005DC873 /* zip_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766022B777022005DC873 /* zip_strerror.c */; }; + 55C766902B777023005DC873 /* zip_source_seek.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766032B777022005DC873 /* zip_source_seek.c */; }; + 55C766912B777023005DC873 /* zip_get_encryption_implementation.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766042B777022005DC873 /* zip_get_encryption_implementation.c */; }; + 55C766922B777023005DC873 /* zip_get_archive_flag.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766052B777022005DC873 /* zip_get_archive_flag.c */; }; + 55C766932B777023005DC873 /* zip_source_pkware_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766062B777022005DC873 /* zip_source_pkware_encode.c */; }; + 55C766942B777023005DC873 /* zip_set_archive_flag.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766072B777022005DC873 /* zip_set_archive_flag.c */; }; + 55C766952B777023005DC873 /* zip_source_zip_new.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766082B777022005DC873 /* zip_source_zip_new.c */; }; + 55C766972B777023005DC873 /* zip_crypto_openssl.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7660A2B777022005DC873 /* zip_crypto_openssl.h */; }; + 55C766982B777023005DC873 /* zip_fdopen.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7660B2B777022005DC873 /* zip_fdopen.c */; }; + 55C766992B777023005DC873 /* zip_unchange_data.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7660C2B777022005DC873 /* zip_unchange_data.c */; }; + 55C7669A2B777023005DC873 /* zip_crypto_commoncrypto.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7660D2B777022005DC873 /* zip_crypto_commoncrypto.c */; }; + 55C7669B2B777023005DC873 /* zip_source_pkware_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7660E2B777022005DC873 /* zip_source_pkware_decode.c */; }; + 55C7669C2B777023005DC873 /* zip_file_set_mtime.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7660F2B777022005DC873 /* zip_file_set_mtime.c */; }; + 55C7669E2B777023005DC873 /* zip_set_default_password.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766112B777022005DC873 /* zip_set_default_password.c */; }; + 55C7669F2B777023005DC873 /* zip_source_file_stdio_named.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766122B777022005DC873 /* zip_source_file_stdio_named.c */; }; + 55C766A02B777023005DC873 /* zip_extra_field_api.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766132B777022005DC873 /* zip_extra_field_api.c */; }; + 55C766A12B777023005DC873 /* zip_fread.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766142B777022005DC873 /* zip_fread.c */; }; + 55C766A22B777023005DC873 /* zip_source_rollback_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766152B777022005DC873 /* zip_source_rollback_write.c */; }; + 55C766A32B777023005DC873 /* zip_progress.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766162B777022005DC873 /* zip_progress.c */; }; + 55C766A42B777023005DC873 /* zip_rename.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766172B777022005DC873 /* zip_rename.c */; }; + 55C766A52B777023005DC873 /* zip_source_zip.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766182B777022005DC873 /* zip_source_zip.c */; }; + 55C766A62B777023005DC873 /* zip_stat_index.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766192B777022005DC873 /* zip_stat_index.c */; }; + 55C766A72B777023005DC873 /* zip_get_num_entries.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7661A2B777022005DC873 /* zip_get_num_entries.c */; }; + 55C766A82B777023005DC873 /* zip_source_pass_to_lower_layer.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7661B2B777022005DC873 /* zip_source_pass_to_lower_layer.c */; }; + 55C766A92B777023005DC873 /* zip_source_file.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7661C2B777022005DC873 /* zip_source_file.h */; }; + 55C766AA2B777023005DC873 /* zip_source_function.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7661D2B777022005DC873 /* zip_source_function.c */; }; + 55C766AB2B777023005DC873 /* zip_file_set_external_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7661E2B777022005DC873 /* zip_file_set_external_attributes.c */; }; + 55C766AC2B777023005DC873 /* zip_fseek.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7661F2B777022005DC873 /* zip_fseek.c */; }; + 55C766AD2B777023005DC873 /* zip_winzip_aes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766202B777022005DC873 /* zip_winzip_aes.c */; }; + 55C766AE2B777023005DC873 /* zip_replace.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766212B777022005DC873 /* zip_replace.c */; }; + 55C766AF2B777023005DC873 /* zip_delete.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766222B777022005DC873 /* zip_delete.c */; }; + 55C766B02B777023005DC873 /* zip_source_crc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766232B777022005DC873 /* zip_source_crc.c */; }; + 55C766B12B777023005DC873 /* zip_source_accept_empty.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766242B777022005DC873 /* zip_source_accept_empty.c */; }; + 55C766B22B777023005DC873 /* zip_set_file_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766252B777022005DC873 /* zip_set_file_comment.c */; }; + 55C766B32B777023005DC873 /* zip_crypto_gnutls.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766262B777022005DC873 /* zip_crypto_gnutls.h */; }; + 55C766B42B777023005DC873 /* zip_stat.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766272B777022005DC873 /* zip_stat.c */; }; + 55C766B52B777023005DC873 /* zip_get_file_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766282B777022005DC873 /* zip_get_file_comment.c */; }; + 55C766B62B777023005DC873 /* zip_algorithm_xz.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766292B777022005DC873 /* zip_algorithm_xz.c */; }; + 55C766B72B777023005DC873 /* zip.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7662A2B777022005DC873 /* zip.h */; }; + 55C766B82B777023005DC873 /* zip_source_close.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7662B2B777022005DC873 /* zip_source_close.c */; }; + 55C766B92B777023005DC873 /* zip_source_read.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7662C2B777022005DC873 /* zip_source_read.c */; }; + 55C766BA2B777023005DC873 /* zip_open.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7662D2B777022005DC873 /* zip_open.c */; }; + 55C766BB2B777023005DC873 /* zip_source_begin_write_cloning.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7662E2B777022005DC873 /* zip_source_begin_write_cloning.c */; }; + 55C766BC2B777023005DC873 /* compat.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7662F2B777022005DC873 /* compat.h */; }; + 55C766BD2B777023005DC873 /* zip_crypto_mbedtls.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766302B777022005DC873 /* zip_crypto_mbedtls.h */; }; + 55C766BE2B777023005DC873 /* zip_fopen_index_encrypted.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766312B777022005DC873 /* zip_fopen_index_encrypted.c */; }; + 55C766C02B777023005DC873 /* zip_utf-8.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766332B777022005DC873 /* zip_utf-8.c */; }; + 55C766C12B777023005DC873 /* zip_error_get.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766342B777022005DC873 /* zip_error_get.c */; }; + 55C766C22B777023005DC873 /* zip_fclose.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766352B777022005DC873 /* zip_fclose.c */; }; + 55C766C32B777023005DC873 /* zip_dirent.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766362B777022005DC873 /* zip_dirent.c */; }; + 55C766C42B777023005DC873 /* zip_source_write.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766372B777022005DC873 /* zip_source_write.c */; }; + 55C766C52B777023005DC873 /* zip_file_add.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766382B777022005DC873 /* zip_file_add.c */; }; + 55C766C62B777023005DC873 /* zip_source_error.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766392B777022005DC873 /* zip_source_error.c */; }; + 55C766C72B777023005DC873 /* zip_source_tell.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7663A2B777022005DC873 /* zip_source_tell.c */; }; + 55C766C82B777023005DC873 /* zip_crypto_win.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7663B2B777022005DC873 /* zip_crypto_win.h */; }; + 55C766C92B777023005DC873 /* zip_source_get_file_attributes.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7663C2B777022005DC873 /* zip_source_get_file_attributes.c */; }; + 55C766CA2B777023005DC873 /* zip_file_error_clear.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7663D2B777022005DC873 /* zip_file_error_clear.c */; }; + 55C766CB2B777023005DC873 /* zip_source_compress.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7663E2B777022005DC873 /* zip_source_compress.c */; }; + 55C766CC2B777023005DC873 /* zip_libzip_version.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7663F2B777022005DC873 /* zip_libzip_version.c */; }; + 55C766CD2B777023005DC873 /* zip_error_to_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766402B777022005DC873 /* zip_error_to_str.c */; }; + 55C766CE2B777023005DC873 /* zip_source_remove.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766412B777022005DC873 /* zip_source_remove.c */; }; + 55C766CF2B777023005DC873 /* zip_algorithm_bzip2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766422B777022005DC873 /* zip_algorithm_bzip2.c */; }; + 55C766D02B777023005DC873 /* zip_source_file_stdio.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766432B777022005DC873 /* zip_source_file_stdio.h */; }; + 55C766D22B777023005DC873 /* zip_source_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766452B777022005DC873 /* zip_source_window.c */; }; + 55C766D32B777023005DC873 /* zip_file_get_comment.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766462B777022005DC873 /* zip_file_get_comment.c */; }; + 55C766D42B777023005DC873 /* zip_source_winzip_aes_decode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766472B777022005DC873 /* zip_source_winzip_aes_decode.c */; }; + 55C766D52B777023005DC873 /* zip_stat_init.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766482B777022005DC873 /* zip_stat_init.c */; }; + 55C766D62B777023005DC873 /* zip_fopen.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766492B777022005DC873 /* zip_fopen.c */; }; + 55C766D82B777023005DC873 /* zip_crypto_commoncrypto.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C7664B2B777022005DC873 /* zip_crypto_commoncrypto.h */; }; + 55C766D92B777023005DC873 /* zip_algorithm_zstd.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7664C2B777022005DC873 /* zip_algorithm_zstd.c */; }; + 55C766DA2B777023005DC873 /* zip_unchange_all.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7664D2B777022005DC873 /* zip_unchange_all.c */; }; + 55C766DB2B777023005DC873 /* zip_io_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7664E2B777022005DC873 /* zip_io_util.c */; }; + 55C766DC2B777023005DC873 /* zip_source_winzip_aes_encode.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7664F2B777022005DC873 /* zip_source_winzip_aes_encode.c */; }; + 55C766DD2B777023005DC873 /* zip_source_layered.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766502B777022005DC873 /* zip_source_layered.c */; }; + 55C766DF2B777023005DC873 /* zip_error_strerror.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C766522B777022005DC873 /* zip_error_strerror.c */; }; + 55C7672C2B7771E0005DC873 /* LzHash.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766E52B7771E0005DC873 /* LzHash.h */; }; + 55C7672D2B7771E0005DC873 /* 7zTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766E62B7771E0005DC873 /* 7zTypes.h */; }; + 55C7672E2B7771E0005DC873 /* Compiler.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766E72B7771E0005DC873 /* Compiler.h */; }; + 55C7672F2B7771E0005DC873 /* XzCrc64.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766E82B7771E0005DC873 /* XzCrc64.h */; }; + 55C767302B7771E0005DC873 /* Precomp.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766E92B7771E0005DC873 /* Precomp.h */; }; + 55C767312B7771E0005DC873 /* CpuArch.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766EA2B7771E0005DC873 /* CpuArch.h */; }; + 55C767322B7771E0005DC873 /* 7zCrc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766EB2B7771E0005DC873 /* 7zCrc.h */; }; + 55C767332B7771E0005DC873 /* Delta.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766EC2B7771E0005DC873 /* Delta.h */; }; + 55C767342B7771E0005DC873 /* 7zFile.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766ED2B7771E0005DC873 /* 7zFile.h */; }; + 55C767352B7771E0005DC873 /* Sha256.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766EE2B7771E0005DC873 /* Sha256.h */; }; + 55C767362B7771E0005DC873 /* LzmaLib.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766EF2B7771E0005DC873 /* LzmaLib.h */; }; + 55C767372B7771E0005DC873 /* 7zBuf.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F02B7771E0005DC873 /* 7zBuf.h */; }; + 55C767382B7771E0005DC873 /* 7z.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F12B7771E0005DC873 /* 7z.h */; }; + 55C767392B7771E0005DC873 /* Xz.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F22B7771E0005DC873 /* Xz.h */; }; + 55C7673A2B7771E0005DC873 /* Lzma86.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F32B7771E0005DC873 /* Lzma86.h */; }; + 55C7673B2B7771E0005DC873 /* LzmaEnc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F42B7771E0005DC873 /* LzmaEnc.h */; }; + 55C7673C2B7771E0005DC873 /* Lzma2Dec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F52B7771E0005DC873 /* Lzma2Dec.h */; }; + 55C7673D2B7771E0005DC873 /* LzFind.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F62B7771E0005DC873 /* LzFind.h */; }; + 55C7673E2B7771E0005DC873 /* Bcj2.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F72B7771E0005DC873 /* Bcj2.h */; }; + 55C7673F2B7771E0005DC873 /* Ppmd.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F82B7771E0005DC873 /* Ppmd.h */; }; + 55C767402B7771E0005DC873 /* 7zAlloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766F92B7771E0005DC873 /* 7zAlloc.h */; }; + 55C767412B7771E0005DC873 /* 7zVersion.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FA2B7771E0005DC873 /* 7zVersion.h */; }; + 55C767422B7771E0005DC873 /* Bra.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FB2B7771E0005DC873 /* Bra.h */; }; + 55C767432B7771E0005DC873 /* RotateDefs.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FC2B7771E0005DC873 /* RotateDefs.h */; }; + 55C767442B7771E0005DC873 /* Ppmd7.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FD2B7771E0005DC873 /* Ppmd7.h */; }; + 55C767452B7771E0005DC873 /* Lzma2Enc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FE2B7771E0005DC873 /* Lzma2Enc.h */; }; + 55C767462B7771E0005DC873 /* LzmaDec.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C766FF2B7771E0005DC873 /* LzmaDec.h */; }; + 55C767472B7771E0005DC873 /* Alloc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C767002B7771E0005DC873 /* Alloc.h */; }; + 55C767482B7771E0005DC873 /* Lzma2DecMt.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C767012B7771E0005DC873 /* Lzma2DecMt.h */; }; + 55C767492B7771E0005DC873 /* XzEnc.h in Headers */ = {isa = PBXBuildFile; fileRef = 55C767022B7771E0005DC873 /* XzEnc.h */; }; + 55C7674A2B7771E0005DC873 /* Lzma2Dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767062B7771E0005DC873 /* Lzma2Dec.c */; }; + 55C7674B2B7771E0005DC873 /* LzmaEnc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767072B7771E0005DC873 /* LzmaEnc.c */; }; + 55C7674C2B7771E0005DC873 /* Ppmd7Dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767082B7771E0005DC873 /* Ppmd7Dec.c */; }; + 55C7674D2B7771E0005DC873 /* LzFindOpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767092B7771E0005DC873 /* LzFindOpt.c */; }; + 55C7674F2B7771E0005DC873 /* Bcj2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7670B2B7771E0005DC873 /* Bcj2.c */; }; + 55C767502B7771E0005DC873 /* LzFind.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7670C2B7771E0005DC873 /* LzFind.c */; }; + 55C767512B7771E0005DC873 /* Ppmd7.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7670D2B7771E0005DC873 /* Ppmd7.c */; }; + 55C767522B7771E0005DC873 /* Bra.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7670E2B7771E0005DC873 /* Bra.c */; }; + 55C767532B7771E0005DC873 /* Bra86.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7670F2B7771E0005DC873 /* Bra86.c */; }; + 55C767542B7771E0005DC873 /* 7zArcIn.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767102B7771E0005DC873 /* 7zArcIn.c */; }; + 55C767552B7771E0005DC873 /* 7zAlloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767112B7771E0005DC873 /* 7zAlloc.c */; }; + 55C767562B7771E0005DC873 /* XzIn.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767122B7771E0005DC873 /* XzIn.c */; }; + 55C767572B7771E0005DC873 /* XzEnc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767132B7771E0005DC873 /* XzEnc.c */; }; + 55C767582B7771E0005DC873 /* Lzma2DecMt.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767142B7771E0005DC873 /* Lzma2DecMt.c */; }; + 55C767592B7771E0005DC873 /* Alloc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767152B7771E0005DC873 /* Alloc.c */; }; + 55C7675A2B7771E0005DC873 /* LzmaDec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767162B7771E0005DC873 /* LzmaDec.c */; }; + 55C7675B2B7771E0005DC873 /* Lzma2Enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767172B7771E0005DC873 /* Lzma2Enc.c */; }; + 55C7675C2B7771E0005DC873 /* Ppmd7Enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767182B7771E0005DC873 /* Ppmd7Enc.c */; }; + 55C7675E2B7771E0005DC873 /* 7zBuf2.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671A2B7771E0005DC873 /* 7zBuf2.c */; }; + 55C7675F2B7771E0005DC873 /* XzCrc64.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671B2B7771E0005DC873 /* XzCrc64.c */; }; + 55C767602B7771E0005DC873 /* BraIA64.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671C2B7771E0005DC873 /* BraIA64.c */; }; + 55C767612B7771E0005DC873 /* Lzma86Dec.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671D2B7771E0005DC873 /* Lzma86Dec.c */; }; + 55C767622B7771E0005DC873 /* 7zStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671E2B7771E0005DC873 /* 7zStream.c */; }; + 55C767632B7771E0005DC873 /* Sha256.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7671F2B7771E0005DC873 /* Sha256.c */; }; + 55C767642B7771E0005DC873 /* Sha256Opt.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767202B7771E0005DC873 /* Sha256Opt.c */; }; + 55C767662B7771E0005DC873 /* 7zFile.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767222B7771E0005DC873 /* 7zFile.c */; }; + 55C767672B7771E0005DC873 /* 7zCrc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767232B7771E0005DC873 /* 7zCrc.c */; }; + 55C767682B7771E0005DC873 /* Lzma86Enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767242B7771E0005DC873 /* Lzma86Enc.c */; }; + 55C767692B7771E0005DC873 /* CpuArch.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767252B7771E0005DC873 /* CpuArch.c */; }; + 55C7676A2B7771E0005DC873 /* Bcj2Enc.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767262B7771E0005DC873 /* Bcj2Enc.c */; }; + 55C7676B2B7771E0005DC873 /* XzCrc64Opt.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767272B7771E0005DC873 /* XzCrc64Opt.c */; }; + 55C7676C2B7771E0005DC873 /* Xz.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767282B7771E0005DC873 /* Xz.c */; }; + 55C7676D2B7771E0005DC873 /* 7zCrcOpt.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767292B7771E0005DC873 /* 7zCrcOpt.c */; }; + 55C7676E2B7771E0005DC873 /* 7zBuf.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7672A2B7771E0005DC873 /* 7zBuf.c */; }; + 55C7676F2B7771E0005DC873 /* LzmaLib.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C7672B2B7771E0005DC873 /* LzmaLib.c */; }; + 55C767712B777353005DC873 /* ReverbResample.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767702B777353005DC873 /* ReverbResample.cpp */; }; + 55C767732B777407005DC873 /* DiscordStubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767722B777407005DC873 /* DiscordStubs.cpp */; }; + 55C767762B77751F005DC873 /* GLShaderCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767752B77751E005DC873 /* GLShaderCache.cpp */; }; + 55C767792B7775A6005DC873 /* GLStreamBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767772B7775A6005DC873 /* GLStreamBuffer.cpp */; }; + 55C7677C2B777606005DC873 /* LayeredSettingsInterface.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C7677A2B777606005DC873 /* LayeredSettingsInterface.cpp */; }; + 55C7677F2B77763B005DC873 /* GameList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C7677D2B77763A005DC873 /* GameList.cpp */; }; + 55C767822B777677005DC873 /* GLProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767812B777677005DC873 /* GLProgram.cpp */; }; + 55C767842B77772A005DC873 /* zip_err_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767832B77772A005DC873 /* zip_err_str.c */; }; + 55C767872B7778A5005DC873 /* GLContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767862B7778A5005DC873 /* GLContext.cpp */; }; 55DB5A352B59027B00B3BD75 /* RedumpDatabase.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */; }; 55DB5A592B5903E400B3BD75 /* Assertions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A412B5903B000B3BD75 /* Assertions.cpp */; }; 55DB5A5A2B5903EA00B3BD75 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A392B5903AE00B3BD75 /* CrashHandler.cpp */; }; @@ -850,7 +950,7 @@ DD0302B127C435760006ABDC /* SndOut_Cubeb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063BB27AB4B6C008CD5D2 /* SndOut_Cubeb.cpp */; }; DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B527C491020006ABDC /* OESndOut.cpp */; }; DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */; }; - DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BC27C491160006ABDC /* ContextAGL.mm */; }; + DD0302C027C491160006ABDC /* GLContextAGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BC27C491160006ABDC /* GLContextAGL.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD03FFD827B721F20006ABDC /* GSTextureMTL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB927B70F0C0006ABDC /* GSTextureMTL.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD5A404E298CA9B700EFBE7A /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCD0263D49BC000219EC /* SndOut.cpp */; }; DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; @@ -863,7 +963,6 @@ DDE1B42A298C68130028DF05 /* usb-mic-logitech.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC41263D49BC000219EC /* usb-mic-logitech.cpp */; }; DDE1B42B298C68170028DF05 /* usb-msd.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC23263D49BC000219EC /* usb-msd.cpp */; }; DDE1B42C298C68210028DF05 /* usb-seamic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC6C263D49BC000219EC /* usb-seamic.cpp */; }; - DDE1B42D298C68210028DF05 /* usb-pad.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC65263D49BC000219EC /* usb-pad.cpp */; }; DDE1B42E298C68210028DF05 /* usb-pad-ff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC56263D49BC000219EC /* usb-pad-ff.cpp */; }; DDE1B42F298C68210028DF05 /* lg_ff.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FC63263D49BC000219EC /* lg_ff.cpp */; }; DDE1B433298C68320028DF05 /* usb-printer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DDE1B432298C68320028DF05 /* usb-printer.cpp */; }; @@ -1919,800 +2018,6 @@ 55484932288554F20066EDEB /* libzip.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libzip.a; sourceTree = BUILT_PRODUCTS_DIR; }; 55484937288555330066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; 5548493B288555330066EDEB /* libzip.vcxproj.filters */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libzip.vcxproj.filters; sourceTree = ""; }; - 5548493E288555330066EDEB /* zip_set_archive_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_archive_comment.html; sourceTree = ""; }; - 5548493F288555330066EDEB /* ZIP_SOURCE_GET_ARGS.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = ZIP_SOURCE_GET_ARGS.mdoc; sourceTree = ""; }; - 55484940288555330066EDEB /* zip_ftell.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_ftell.man; sourceTree = ""; }; - 55484941288555330066EDEB /* zip_error_strerror.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_strerror.man; sourceTree = ""; }; - 55484942288555330066EDEB /* libzip.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = libzip.html; sourceTree = ""; }; - 55484943288555330066EDEB /* zip_error_get.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_get.html; sourceTree = ""; }; - 55484944288555330066EDEB /* zip_encryption_method_supported.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_encryption_method_supported.html; sourceTree = ""; }; - 55484945288555330066EDEB /* zip_error_set.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_set.html; sourceTree = ""; }; - 55484946288555330066EDEB /* zip_get_error.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_error.html; sourceTree = ""; }; - 55484947288555330066EDEB /* zip_add.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_add.html; sourceTree = ""; }; - 55484948288555330066EDEB /* zip_source_tell_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_tell_write.html; sourceTree = ""; }; - 55484949288555330066EDEB /* zip_fread.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fread.html; sourceTree = ""; }; - 5548494A288555330066EDEB /* zip_error_to_data.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_to_data.html; sourceTree = ""; }; - 5548494B288555330066EDEB /* zip_file_get_external_attributes.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_external_attributes.man; sourceTree = ""; }; - 5548494C288555330066EDEB /* zip_error_system_type.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_system_type.html; sourceTree = ""; }; - 5548494D288555330066EDEB /* zip_source_function.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_function.man; sourceTree = ""; }; - 5548494E288555330066EDEB /* zip_file_add.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_add.man; sourceTree = ""; }; - 5548494F288555330066EDEB /* zip_source_buffer_fragment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_buffer_fragment.man; sourceTree = ""; }; - 55484950288555330066EDEB /* zip_file_add.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_add.mdoc; sourceTree = ""; }; - 55484951288555330066EDEB /* zip_error_get_sys_type.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_get_sys_type.mdoc; sourceTree = ""; }; - 55484952288555330066EDEB /* zip_get_error.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_error.man; sourceTree = ""; }; - 55484953288555330066EDEB /* zip_delete.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_delete.html; sourceTree = ""; }; - 55484954288555330066EDEB /* zip_source_error.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_error.html; sourceTree = ""; }; - 55484955288555330066EDEB /* zip_source_is_deleted.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_is_deleted.mdoc; sourceTree = ""; }; - 55484956288555330066EDEB /* zip_set_default_password.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_default_password.man; sourceTree = ""; }; - 55484957288555330066EDEB /* zip_file_set_encryption.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_encryption.man; sourceTree = ""; }; - 55484958288555330066EDEB /* zip_source_window.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_window.man; sourceTree = ""; }; - 55484959288555330066EDEB /* zip_get_num_entries.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_num_entries.man; sourceTree = ""; }; - 5548495A288555330066EDEB /* zip_get_file_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_file_comment.man; sourceTree = ""; }; - 5548495B288555330066EDEB /* zip_set_file_compression.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_file_compression.man; sourceTree = ""; }; - 5548495C288555330066EDEB /* libzip.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = libzip.man; sourceTree = ""; }; - 5548495D288555330066EDEB /* zip_source_seek.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek.man; sourceTree = ""; }; - 5548495E288555330066EDEB /* zip_file_attributes_init.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_attributes_init.man; sourceTree = ""; }; - 5548495F288555330066EDEB /* zip_dir_add.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_dir_add.man; sourceTree = ""; }; - 55484960288555330066EDEB /* zip_source_seek_compute_offset.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_seek_compute_offset.html; sourceTree = ""; }; - 55484961288555330066EDEB /* zip_source_zip.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_zip.man; sourceTree = ""; }; - 55484962288555330066EDEB /* zip_error_code_system.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_code_system.man; sourceTree = ""; }; - 55484963288555330066EDEB /* zip_source_make_command_bitmap.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_make_command_bitmap.html; sourceTree = ""; }; - 55484964288555330066EDEB /* zip_source_buffer_fragment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_buffer_fragment.mdoc; sourceTree = ""; }; - 55484965288555330066EDEB /* zip_register_cancel_callback_with_state.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_cancel_callback_with_state.mdoc; sourceTree = ""; }; - 55484966288555330066EDEB /* zip_source_filep.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_filep.mdoc; sourceTree = ""; }; - 55484967288555330066EDEB /* zip_unchange.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange.man; sourceTree = ""; }; - 55484968288555330066EDEB /* zip_source_zip.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_zip.mdoc; sourceTree = ""; }; - 55484969288555330066EDEB /* zip_error_fini.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_fini.html; sourceTree = ""; }; - 5548496A288555330066EDEB /* zip_file_attributes_init.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_attributes_init.html; sourceTree = ""; }; - 5548496B288555330066EDEB /* zip_source_read.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_read.mdoc; sourceTree = ""; }; - 5548496C288555330066EDEB /* zip_error_to_str.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_to_str.man; sourceTree = ""; }; - 5548496D288555330066EDEB /* zip_register_cancel_callback_with_state.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_cancel_callback_with_state.man; sourceTree = ""; }; - 5548496E288555330066EDEB /* zip_delete.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_delete.man; sourceTree = ""; }; - 5548496F288555330066EDEB /* zip_file_get_external_attributes.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_get_external_attributes.html; sourceTree = ""; }; - 55484970288555330066EDEB /* zip_file_rename.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_rename.mdoc; sourceTree = ""; }; - 55484971288555330066EDEB /* zip_set_file_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_file_comment.man; sourceTree = ""; }; - 55484972288555330066EDEB /* zip_source_make_command_bitmap.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_make_command_bitmap.man; sourceTree = ""; }; - 55484973288555330066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484974288555330066EDEB /* zip_set_file_compression.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_file_compression.html; sourceTree = ""; }; - 55484975288555330066EDEB /* zip_source_begin_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_begin_write.man; sourceTree = ""; }; - 55484976288555330066EDEB /* zip_source_file.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_file.man; sourceTree = ""; }; - 55484977288555330066EDEB /* zip_close.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_close.mdoc; sourceTree = ""; }; - 55484978288555330066EDEB /* zip_source_seek_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek_write.mdoc; sourceTree = ""; }; - 55484979288555330066EDEB /* zip_stat_init.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_stat_init.man; sourceTree = ""; }; - 5548497A288555330066EDEB /* zip_source_buffer.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_buffer.man; sourceTree = ""; }; - 5548497B288555330066EDEB /* zip_source_win32a.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_win32a.html; sourceTree = ""; }; - 5548497C288555330066EDEB /* zip_file_set_external_attributes.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_external_attributes.man; sourceTree = ""; }; - 5548497D288555330066EDEB /* zip_stat.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_stat.mdoc; sourceTree = ""; }; - 5548497E288555330066EDEB /* zip_source_stat.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_stat.html; sourceTree = ""; }; - 5548497F288555330066EDEB /* zip_name_locate.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_name_locate.html; sourceTree = ""; }; - 55484980288555330066EDEB /* zip_file_set_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_comment.mdoc; sourceTree = ""; }; - 55484981288555330066EDEB /* zip_error_code_system.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_code_system.mdoc; sourceTree = ""; }; - 55484982288555330066EDEB /* zip_source.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source.html; sourceTree = ""; }; - 55484983288555330066EDEB /* zip_source_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_write.html; sourceTree = ""; }; - 55484984288555330066EDEB /* zip_get_name.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_name.mdoc; sourceTree = ""; }; - 55484985288555330066EDEB /* zip_source_window.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_window.html; sourceTree = ""; }; - 55484986288555330066EDEB /* zip_error_system_type.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_system_type.man; sourceTree = ""; }; - 55484987288555330066EDEB /* zip_errors.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_errors.html; sourceTree = ""; }; - 55484988288555330066EDEB /* zip_source_close.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_close.mdoc; sourceTree = ""; }; - 55484989288555330066EDEB /* zip_set_default_password.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_default_password.mdoc; sourceTree = ""; }; - 5548498A288555330066EDEB /* make_zip_errors.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = make_zip_errors.sh; sourceTree = ""; }; - 5548498B288555330066EDEB /* zip_name_locate.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_name_locate.mdoc; sourceTree = ""; }; - 5548498C288555330066EDEB /* zip_error_code_system.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_code_system.html; sourceTree = ""; }; - 5548498D288555330066EDEB /* zip_file_set_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_set_comment.html; sourceTree = ""; }; - 5548498E288555330066EDEB /* zip_source_stat.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_stat.mdoc; sourceTree = ""; }; - 5548498F288555330066EDEB /* zip_source.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source.mdoc; sourceTree = ""; }; - 55484990288555330066EDEB /* zip_source_win32a.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32a.mdoc; sourceTree = ""; }; - 55484991288555330066EDEB /* zip_stat.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_stat.html; sourceTree = ""; }; - 55484992288555330066EDEB /* zip_source_tell.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_tell.man; sourceTree = ""; }; - 55484993288555330066EDEB /* zip_source_close.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_close.html; sourceTree = ""; }; - 55484994288555330066EDEB /* zip_set_default_password.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_default_password.html; sourceTree = ""; }; - 55484995288555330066EDEB /* zip_get_name.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_name.html; sourceTree = ""; }; - 55484996288555330066EDEB /* zip_source_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_write.mdoc; sourceTree = ""; }; - 55484997288555330066EDEB /* zip_errors.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_errors.mdoc; sourceTree = ""; }; - 55484998288555330066EDEB /* zip_unchange_archive.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange_archive.man; sourceTree = ""; }; - 55484999288555330066EDEB /* zip_source_window.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_window.mdoc; sourceTree = ""; }; - 5548499A288555330066EDEB /* zip_file_rename.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_rename.html; sourceTree = ""; }; - 5548499B288555330066EDEB /* zip_file_get_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_comment.man; sourceTree = ""; }; - 5548499C288555330066EDEB /* zip_file_get_external_attributes.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_external_attributes.mdoc; sourceTree = ""; }; - 5548499D288555330066EDEB /* zip_source.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source.man; sourceTree = ""; }; - 5548499E288555330066EDEB /* zip_compression_method_supported.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_compression_method_supported.man; sourceTree = ""; }; - 5548499F288555330066EDEB /* zip_set_file_compression.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_file_compression.mdoc; sourceTree = ""; }; - 554849A0288555330066EDEB /* zip_file_attributes_init.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_attributes_init.mdoc; sourceTree = ""; }; - 554849A1288555330066EDEB /* zipcmp.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zipcmp.man; sourceTree = ""; }; - 554849A2288555330066EDEB /* zip_source_read.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_read.html; sourceTree = ""; }; - 554849A3288555330066EDEB /* zip_fseek.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fseek.man; sourceTree = ""; }; - 554849A4288555330066EDEB /* zip_source_seek_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_seek_write.html; sourceTree = ""; }; - 554849A5288555330066EDEB /* zip_close.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_close.html; sourceTree = ""; }; - 554849A6288555330066EDEB /* zip_get_archive_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_archive_comment.man; sourceTree = ""; }; - 554849A7288555330066EDEB /* ziptool.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = ziptool.man; sourceTree = ""; }; - 554849A8288555330066EDEB /* zip_source_is_deleted.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_is_deleted.html; sourceTree = ""; }; - 554849A9288555330066EDEB /* zip_source_error.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_error.mdoc; sourceTree = ""; }; - 554849AA288555330066EDEB /* zip_file_extra_field_get.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_get.man; sourceTree = ""; }; - 554849AB288555330066EDEB /* zip_error_system_type.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_system_type.mdoc; sourceTree = ""; }; - 554849AC288555330066EDEB /* zip_error_get_sys_type.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_get_sys_type.html; sourceTree = ""; }; - 554849AD288555330066EDEB /* zip_file_add.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_add.html; sourceTree = ""; }; - 554849AE288555330066EDEB /* zip_fopen_encrypted.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fopen_encrypted.man; sourceTree = ""; }; - 554849AF288555330066EDEB /* zip_delete.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_delete.mdoc; sourceTree = ""; }; - 554849B0288555330066EDEB /* zip_source_buffer_fragment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_buffer_fragment.html; sourceTree = ""; }; - 554849B1288555330066EDEB /* zip_source_make_command_bitmap.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_make_command_bitmap.mdoc; sourceTree = ""; }; - 554849B2288555330066EDEB /* zip_error_fini.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_fini.mdoc; sourceTree = ""; }; - 554849B3288555330066EDEB /* zip_source_zip.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_zip.html; sourceTree = ""; }; - 554849B4288555330066EDEB /* zip_source_filep.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_filep.html; sourceTree = ""; }; - 554849B5288555330066EDEB /* zip_register_cancel_callback_with_state.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_register_cancel_callback_with_state.html; sourceTree = ""; }; - 554849B6288555330066EDEB /* handle_links */ = {isa = PBXFileReference; lastKnownFileType = text; path = handle_links; sourceTree = ""; }; - 554849B7288555330066EDEB /* zip_source_seek_compute_offset.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek_compute_offset.mdoc; sourceTree = ""; }; - 554849B8288555330066EDEB /* zip_error_to_data.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_to_data.man; sourceTree = ""; }; - 554849B9288555330066EDEB /* ZIP_SOURCE_GET_ARGS.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = ZIP_SOURCE_GET_ARGS.html; sourceTree = ""; }; - 554849BA288555330066EDEB /* zip_source_filep.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_filep.man; sourceTree = ""; }; - 554849BB288555330066EDEB /* zip_source_commit_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_commit_write.man; sourceTree = ""; }; - 554849BC288555330066EDEB /* zip_error_get.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_get.mdoc; sourceTree = ""; }; - 554849BD288555330066EDEB /* libzip.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = libzip.mdoc; sourceTree = ""; }; - 554849BE288555330066EDEB /* zip_set_archive_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_archive_comment.mdoc; sourceTree = ""; }; - 554849BF288555330066EDEB /* zip_error_set.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_set.man; sourceTree = ""; }; - 554849C0288555330066EDEB /* zip_get_error.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_error.mdoc; sourceTree = ""; }; - 554849C1288555330066EDEB /* zip_add.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_add.mdoc; sourceTree = ""; }; - 554849C2288555330066EDEB /* zip_error_set.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_set.mdoc; sourceTree = ""; }; - 554849C3288555330066EDEB /* zip_error_to_data.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_to_data.mdoc; sourceTree = ""; }; - 554849C4288555330066EDEB /* zip_source_tell_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_tell_write.mdoc; sourceTree = ""; }; - 554849C5288555330066EDEB /* zip_fread.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fread.mdoc; sourceTree = ""; }; - 554849C6288555330066EDEB /* zip_encryption_method_supported.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_encryption_method_supported.mdoc; sourceTree = ""; }; - 554849C7288555330066EDEB /* zip_source_seek_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek_write.man; sourceTree = ""; }; - 554849C8288555330066EDEB /* zipcmp.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zipcmp.mdoc; sourceTree = ""; }; - 554849C9288555330066EDEB /* zip_name_locate.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_name_locate.man; sourceTree = ""; }; - 554849CA288555330066EDEB /* zip_source_win32handle.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32handle.man; sourceTree = ""; }; - 554849CB288555330066EDEB /* zip_ftell.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_ftell.html; sourceTree = ""; }; - 554849CC288555330066EDEB /* zip_error_init.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_init.man; sourceTree = ""; }; - 554849CD288555330066EDEB /* zip_dir_add.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_dir_add.mdoc; sourceTree = ""; }; - 554849CE288555330066EDEB /* zip_source_file.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_file.mdoc; sourceTree = ""; }; - 554849CF288555330066EDEB /* zip_error_clear.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_clear.mdoc; sourceTree = ""; }; - 554849D0288555330066EDEB /* zip_source_win32w.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32w.man; sourceTree = ""; }; - 554849D1288555330066EDEB /* zipmerge.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zipmerge.mdoc; sourceTree = ""; }; - 554849D2288555330066EDEB /* zip_source_win32a.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32a.man; sourceTree = ""; }; - 554849D3288555330066EDEB /* zip_unchange.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_unchange.html; sourceTree = ""; }; - 554849D4288555330066EDEB /* zip_libzip_version.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_libzip_version.html; sourceTree = ""; }; - 554849D5288555330066EDEB /* zip_source_function.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_function.html; sourceTree = ""; }; - 554849D6288555330066EDEB /* fix-man-links.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = "fix-man-links.sh"; sourceTree = ""; }; - 554849D7288555330066EDEB /* zip_error_get_sys_type.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_get_sys_type.man; sourceTree = ""; }; - 554849D8288555330066EDEB /* zip_error_clear.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_clear.man; sourceTree = ""; }; - 554849D9288555330066EDEB /* zip_fclose.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fclose.man; sourceTree = ""; }; - 554849DA288555330066EDEB /* zip_file_set_encryption.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_set_encryption.html; sourceTree = ""; }; - 554849DB288555330066EDEB /* zip_fdopen.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fdopen.mdoc; sourceTree = ""; }; - 554849DC288555330066EDEB /* zip_set_archive_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_archive_comment.man; sourceTree = ""; }; - 554849DD288555330066EDEB /* zip_source_stat.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_stat.man; sourceTree = ""; }; - 554849DE288555330066EDEB /* zip_file_set_external_attributes.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_set_external_attributes.html; sourceTree = ""; }; - 554849DF288555330066EDEB /* zip_fseek.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fseek.mdoc; sourceTree = ""; }; - 554849E0288555330066EDEB /* zip_source_tell_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_tell_write.man; sourceTree = ""; }; - 554849E1288555330066EDEB /* zip_file_set_mtime.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_set_mtime.html; sourceTree = ""; }; - 554849E2288555330066EDEB /* zip_source_win32handle.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_win32handle.html; sourceTree = ""; }; - 554849E3288555330066EDEB /* zip_add_dir.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_add_dir.man; sourceTree = ""; }; - 554849E4288555330066EDEB /* zip_error_init.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_init.html; sourceTree = ""; }; - 554849E5288555330066EDEB /* ZIP_SOURCE_GET_ARGS.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = ZIP_SOURCE_GET_ARGS.man; sourceTree = ""; }; - 554849E6288555330066EDEB /* zip_errors.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_errors.man; sourceTree = ""; }; - 554849E7288555330066EDEB /* zip_file_strerror.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_strerror.html; sourceTree = ""; }; - 554849E8288555330066EDEB /* zip_get_archive_flag.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_archive_flag.mdoc; sourceTree = ""; }; - 554849E9288555330066EDEB /* zip_source_free.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_free.man; sourceTree = ""; }; - 554849EA288555330066EDEB /* zip_unchange_all.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange_all.man; sourceTree = ""; }; - 554849EB288555330066EDEB /* zip_set_file_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_file_comment.html; sourceTree = ""; }; - 554849EC288555330066EDEB /* zip_open.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_open.mdoc; sourceTree = ""; }; - 554849ED288555330066EDEB /* zip_source_open.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_open.html; sourceTree = ""; }; - 554849EE288555340066EDEB /* zip_add_dir.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_add_dir.mdoc; sourceTree = ""; }; - 554849EF288555340066EDEB /* links */ = {isa = PBXFileReference; lastKnownFileType = text; path = links; sourceTree = ""; }; - 554849F0288555340066EDEB /* zip_fclose.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fclose.mdoc; sourceTree = ""; }; - 554849F1288555340066EDEB /* zip_file_extra_fields_count.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_fields_count.mdoc; sourceTree = ""; }; - 554849F2288555340066EDEB /* zip_file_extra_field_delete.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_extra_field_delete.html; sourceTree = ""; }; - 554849F3288555340066EDEB /* zip_fdopen.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fdopen.man; sourceTree = ""; }; - 554849F4288555340066EDEB /* zip_encryption_method_supported.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_encryption_method_supported.man; sourceTree = ""; }; - 554849F5288555340066EDEB /* mkdocset.pl */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = mkdocset.pl; sourceTree = ""; }; - 554849F6288555340066EDEB /* zip_file_extra_field_get.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_get.mdoc; sourceTree = ""; }; - 554849F7288555340066EDEB /* zip_file_get_error.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_get_error.html; sourceTree = ""; }; - 554849F8288555340066EDEB /* zip_compression_method_supported.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_compression_method_supported.mdoc; sourceTree = ""; }; - 554849F9288555340066EDEB /* zip_source_rollback_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_rollback_write.mdoc; sourceTree = ""; }; - 554849FA288555340066EDEB /* update-man.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = "update-man.cmake"; sourceTree = ""; }; - 554849FB288555340066EDEB /* zip_close.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_close.man; sourceTree = ""; }; - 554849FC288555340066EDEB /* zip_file_set_comment.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_comment.man; sourceTree = ""; }; - 554849FD288555340066EDEB /* zip_source_buffer.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_buffer.mdoc; sourceTree = ""; }; - 554849FE288555340066EDEB /* zip_fopen_encrypted.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fopen_encrypted.mdoc; sourceTree = ""; }; - 554849FF288555340066EDEB /* zip_source_tell.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_tell.mdoc; sourceTree = ""; }; - 55484A00288555340066EDEB /* zip_file_extra_fields_count.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_fields_count.man; sourceTree = ""; }; - 55484A01288555340066EDEB /* zip_get_num_entries.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_num_entries.mdoc; sourceTree = ""; }; - 55484A02288555340066EDEB /* zip_source_open.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_open.man; sourceTree = ""; }; - 55484A03288555340066EDEB /* zip_file_set_mtime.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_mtime.man; sourceTree = ""; }; - 55484A04288555340066EDEB /* zip_rename.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_rename.man; sourceTree = ""; }; - 55484A05288555340066EDEB /* zip_error_to_str.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_to_str.mdoc; sourceTree = ""; }; - 55484A06288555340066EDEB /* zip_register_progress_callback_with_state.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_register_progress_callback_with_state.html; sourceTree = ""; }; - 55484A07288555340066EDEB /* zip_unchange_archive.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange_archive.mdoc; sourceTree = ""; }; - 55484A08288555340066EDEB /* zip_register_progress_callback_with_state.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_progress_callback_with_state.man; sourceTree = ""; }; - 55484A09288555340066EDEB /* zip_file_extra_field_set.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_set.mdoc; sourceTree = ""; }; - 55484A0A288555340066EDEB /* zip_source_begin_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_begin_write.mdoc; sourceTree = ""; }; - 55484A0B288555340066EDEB /* zip_source_commit_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_commit_write.html; sourceTree = ""; }; - 55484A0C288555340066EDEB /* zip_unchange_all.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_unchange_all.html; sourceTree = ""; }; - 55484A0D288555340066EDEB /* zip_error_code_zip.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_code_zip.mdoc; sourceTree = ""; }; - 55484A0E288555340066EDEB /* zip_file_get_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_get_comment.html; sourceTree = ""; }; - 55484A0F288555340066EDEB /* zip_discard.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_discard.html; sourceTree = ""; }; - 55484A10288555340066EDEB /* zip_set_archive_flag.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_archive_flag.mdoc; sourceTree = ""; }; - 55484A11288555340066EDEB /* zip_fopen.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fopen.mdoc; sourceTree = ""; }; - 55484A12288555340066EDEB /* zip_get_file_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_file_comment.html; sourceTree = ""; }; - 55484A13288555340066EDEB /* zip_register_progress_callback.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_progress_callback.mdoc; sourceTree = ""; }; - 55484A14288555340066EDEB /* zip_add.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_add.man; sourceTree = ""; }; - 55484A15288555340066EDEB /* zip_libzip_version.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_libzip_version.man; sourceTree = ""; }; - 55484A16288555340066EDEB /* zip_rename.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_rename.mdoc; sourceTree = ""; }; - 55484A17288555340066EDEB /* zip_source_keep.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_keep.html; sourceTree = ""; }; - 55484A18288555340066EDEB /* zip_get_num_files.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_num_files.mdoc; sourceTree = ""; }; - 55484A19288555340066EDEB /* ziptool.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = ziptool.html; sourceTree = ""; }; - 55484A1A288555340066EDEB /* zip_source_error.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_error.man; sourceTree = ""; }; - 55484A1B288555340066EDEB /* zip_source_free.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_free.mdoc; sourceTree = ""; }; - 55484A1C288555340066EDEB /* zip_source_rollback_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_rollback_write.man; sourceTree = ""; }; - 55484A1D288555340066EDEB /* zip_source_win32w.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32w.mdoc; sourceTree = ""; }; - 55484A1E288555340066EDEB /* zip_stat_init.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_stat_init.html; sourceTree = ""; }; - 55484A1F288555340066EDEB /* zip_error_strerror.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_strerror.mdoc; sourceTree = ""; }; - 55484A20288555340066EDEB /* zip_fread.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fread.man; sourceTree = ""; }; - 55484A21288555340066EDEB /* zip_get_archive_comment.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_archive_comment.html; sourceTree = ""; }; - 55484A22288555340066EDEB /* zip_source_seek.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_seek.html; sourceTree = ""; }; - 55484A23288555340066EDEB /* zip_get_name.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_name.man; sourceTree = ""; }; - 55484A24288555340066EDEB /* zip_register_progress_callback.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_register_progress_callback.html; sourceTree = ""; }; - 55484A25288555340066EDEB /* zip_error_get.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_get.man; sourceTree = ""; }; - 55484A26288555340066EDEB /* zip_get_num_files.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_num_files.html; sourceTree = ""; }; - 55484A27288555340066EDEB /* zip_source_keep.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_keep.mdoc; sourceTree = ""; }; - 55484A28288555340066EDEB /* zip_rename.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_rename.html; sourceTree = ""; }; - 55484A29288555340066EDEB /* ziptool.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = ziptool.mdoc; sourceTree = ""; }; - 55484A2A288555340066EDEB /* zip_source_free.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_free.html; sourceTree = ""; }; - 55484A2B288555340066EDEB /* zip_file_get_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_comment.mdoc; sourceTree = ""; }; - 55484A2C288555340066EDEB /* zip_error_code_zip.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_code_zip.html; sourceTree = ""; }; - 55484A2D288555340066EDEB /* zip_discard.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_discard.mdoc; sourceTree = ""; }; - 55484A2E288555340066EDEB /* zip_source_begin_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_begin_write.html; sourceTree = ""; }; - 55484A2F288555340066EDEB /* zip_source_commit_write.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_commit_write.mdoc; sourceTree = ""; }; - 55484A30288555340066EDEB /* zip_unchange_all.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange_all.mdoc; sourceTree = ""; }; - 55484A31288555340066EDEB /* zipmerge.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zipmerge.man; sourceTree = ""; }; - 55484A32288555340066EDEB /* zip_get_file_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_file_comment.mdoc; sourceTree = ""; }; - 55484A33288555340066EDEB /* zip_file_get_error.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_error.man; sourceTree = ""; }; - 55484A34288555340066EDEB /* zip_file_extra_field_delete.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_delete.man; sourceTree = ""; }; - 55484A35288555340066EDEB /* zip_set_archive_flag.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_set_archive_flag.html; sourceTree = ""; }; - 55484A36288555340066EDEB /* zip_fopen.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fopen.html; sourceTree = ""; }; - 55484A37288555340066EDEB /* update-html.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = "update-html.cmake"; sourceTree = ""; }; - 55484A38288555340066EDEB /* zip_get_archive_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_archive_comment.mdoc; sourceTree = ""; }; - 55484A39288555340066EDEB /* zip_discard.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_discard.man; sourceTree = ""; }; - 55484A3A288555340066EDEB /* zip_source_seek.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek.mdoc; sourceTree = ""; }; - 55484A3B288555340066EDEB /* zip_get_num_files.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_num_files.man; sourceTree = ""; }; - 55484A3C288555340066EDEB /* zip_stat_init.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_stat_init.mdoc; sourceTree = ""; }; - 55484A3D288555340066EDEB /* zip_source_win32w.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_win32w.html; sourceTree = ""; }; - 55484A3E288555340066EDEB /* zip_stat.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_stat.man; sourceTree = ""; }; - 55484A3F288555340066EDEB /* zip_error_strerror.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_strerror.html; sourceTree = ""; }; - 55484A40288555340066EDEB /* zip_source_rollback_write.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_rollback_write.html; sourceTree = ""; }; - 55484A41288555340066EDEB /* zip_error_code_zip.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_code_zip.man; sourceTree = ""; }; - 55484A42288555340066EDEB /* zip_register_progress_callback.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_progress_callback.man; sourceTree = ""; }; - 55484A43288555340066EDEB /* zip_file_get_error.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_get_error.mdoc; sourceTree = ""; }; - 55484A44288555340066EDEB /* zip_compression_method_supported.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_compression_method_supported.html; sourceTree = ""; }; - 55484A45288555340066EDEB /* zip_file_extra_field_get.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_extra_field_get.html; sourceTree = ""; }; - 55484A46288555340066EDEB /* zip_fopen_encrypted.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fopen_encrypted.html; sourceTree = ""; }; - 55484A47288555340066EDEB /* zip_source_buffer.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_buffer.html; sourceTree = ""; }; - 55484A48288555340066EDEB /* zip_file_strerror.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_strerror.man; sourceTree = ""; }; - 55484A49288555340066EDEB /* zip_file_extra_fields_count.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_extra_fields_count.html; sourceTree = ""; }; - 55484A4A288555340066EDEB /* zip_fclose.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fclose.html; sourceTree = ""; }; - 55484A4B288555340066EDEB /* zip_file_extra_field_set.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_set.man; sourceTree = ""; }; - 55484A4C288555340066EDEB /* zip_file_extra_field_delete.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_extra_field_delete.mdoc; sourceTree = ""; }; - 55484A4D288555340066EDEB /* zip_source_close.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_close.man; sourceTree = ""; }; - 55484A4E288555340066EDEB /* zip_error_to_str.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_to_str.html; sourceTree = ""; }; - 55484A4F288555340066EDEB /* zip_register_progress_callback_with_state.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_register_progress_callback_with_state.mdoc; sourceTree = ""; }; - 55484A50288555340066EDEB /* zip_set_archive_flag.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_archive_flag.man; sourceTree = ""; }; - 55484A51288555340066EDEB /* zip_unchange_archive.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_unchange_archive.html; sourceTree = ""; }; - 55484A52288555340066EDEB /* zip_file_extra_field_set.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_file_extra_field_set.html; sourceTree = ""; }; - 55484A53288555340066EDEB /* zip_get_num_entries.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_num_entries.html; sourceTree = ""; }; - 55484A54288555340066EDEB /* zip_source_tell.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_tell.html; sourceTree = ""; }; - 55484A55288555340066EDEB /* zip_file_set_mtime.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_mtime.mdoc; sourceTree = ""; }; - 55484A56288555340066EDEB /* zip_source_seek_compute_offset.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_seek_compute_offset.man; sourceTree = ""; }; - 55484A57288555340066EDEB /* zip_source_win32handle.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_win32handle.mdoc; sourceTree = ""; }; - 55484A58288555340066EDEB /* zip_error_fini.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_fini.man; sourceTree = ""; }; - 55484A59288555340066EDEB /* zip_error_init.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_error_init.mdoc; sourceTree = ""; }; - 55484A5A288555340066EDEB /* zip_get_archive_flag.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_get_archive_flag.man; sourceTree = ""; }; - 55484A5B288555340066EDEB /* zip_file_set_external_attributes.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_external_attributes.mdoc; sourceTree = ""; }; - 55484A5C288555340066EDEB /* zip_source_keep.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_keep.man; sourceTree = ""; }; - 55484A5D288555340066EDEB /* zip_fseek.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fseek.html; sourceTree = ""; }; - 55484A5E288555340066EDEB /* zip_fopen.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_fopen.man; sourceTree = ""; }; - 55484A5F288555340066EDEB /* zip_source_open.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_open.mdoc; sourceTree = ""; }; - 55484A60288555340066EDEB /* zip_add_dir.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_add_dir.html; sourceTree = ""; }; - 55484A61288555340066EDEB /* zip_open.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_open.html; sourceTree = ""; }; - 55484A62288555340066EDEB /* zip_set_file_comment.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_set_file_comment.mdoc; sourceTree = ""; }; - 55484A63288555340066EDEB /* zip_file_strerror.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_strerror.mdoc; sourceTree = ""; }; - 55484A64288555340066EDEB /* zip_get_archive_flag.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_get_archive_flag.html; sourceTree = ""; }; - 55484A65288555340066EDEB /* zip_dir_add.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_dir_add.html; sourceTree = ""; }; - 55484A66288555340066EDEB /* zip_ftell.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_ftell.mdoc; sourceTree = ""; }; - 55484A67288555340066EDEB /* zip_source_file.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_source_file.html; sourceTree = ""; }; - 55484A68288555340066EDEB /* zip_error_clear.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_error_clear.html; sourceTree = ""; }; - 55484A69288555340066EDEB /* zipcmp.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zipcmp.html; sourceTree = ""; }; - 55484A6A288555340066EDEB /* nih-man.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = "nih-man.css"; sourceTree = ""; }; - 55484A6B288555340066EDEB /* zip_open.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_open.man; sourceTree = ""; }; - 55484A6C288555340066EDEB /* zip_source_function.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_function.mdoc; sourceTree = ""; }; - 55484A6D288555340066EDEB /* zip_fdopen.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zip_fdopen.html; sourceTree = ""; }; - 55484A6E288555340066EDEB /* zip_file_rename.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_rename.man; sourceTree = ""; }; - 55484A6F288555340066EDEB /* zip_file_set_encryption.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_file_set_encryption.mdoc; sourceTree = ""; }; - 55484A70288555340066EDEB /* zip_unchange.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_unchange.mdoc; sourceTree = ""; }; - 55484A71288555340066EDEB /* zip_source_is_deleted.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_is_deleted.man; sourceTree = ""; }; - 55484A72288555340066EDEB /* zipmerge.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = zipmerge.html; sourceTree = ""; }; - 55484A73288555340066EDEB /* zip_source_read.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_read.man; sourceTree = ""; }; - 55484A74288555340066EDEB /* zip_libzip_version.mdoc */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_libzip_version.mdoc; sourceTree = ""; }; - 55484A75288555340066EDEB /* zip_source_write.man */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip_source_write.man; sourceTree = ""; }; - 55484A76288555340066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484A77288555340066EDEB /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; - 55484A79288555340066EDEB /* FindMbedTLS.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindMbedTLS.cmake; sourceTree = ""; }; - 55484A7A288555340066EDEB /* FindZstd.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindZstd.cmake; sourceTree = ""; }; - 55484A7B288555340066EDEB /* Dist.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dist.cmake; sourceTree = ""; }; - 55484A7C288555340066EDEB /* FindNettle.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindNettle.cmake; sourceTree = ""; }; - 55484A7D288555340066EDEB /* AUTHORS */ = {isa = PBXFileReference; lastKnownFileType = text; path = AUTHORS; sourceTree = ""; }; - 55484A7E288555340066EDEB /* cmake-zipconf.h.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "cmake-zipconf.h.in"; sourceTree = ""; }; - 55484A80288555340066EDEB /* gap-add.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "gap-add.zip"; sourceTree = ""; }; - 55484A81288555340066EDEB /* testchanged.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testchanged.zip; sourceTree = ""; }; - 55484A82288555340066EDEB /* foo-stored.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "foo-stored.zip"; sourceTree = ""; }; - 55484A83288555340066EDEB /* open_filename_duplicate_empty_consistency.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_filename_duplicate_empty_consistency.test; sourceTree = ""; }; - 55484A84288555340066EDEB /* open_nonarchive.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_nonarchive.test; sourceTree = ""; }; - 55484A85288555340066EDEB /* lzma-no-eos.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "lzma-no-eos.zip"; sourceTree = ""; }; - 55484A86288555340066EDEB /* rename_utf8_encmismatch.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_utf8_encmismatch.test; sourceTree = ""; }; - 55484A87288555340066EDEB /* set_compression_store_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_store.test; sourceTree = ""; }; - 55484A88288555340066EDEB /* encryption-nonrandom-aes192.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-nonrandom-aes192.test"; sourceTree = ""; }; - 55484A89288555340066EDEB /* bogus.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = bogus.zip; sourceTree = ""; }; - 55484A8A288555340066EDEB /* decrypt-wrong-password-aes192.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-wrong-password-aes192.test"; sourceTree = ""; }; - 55484A8B288555340066EDEB /* set_comment_revert.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_comment_revert.test; sourceTree = ""; }; - 55484A8C288555340066EDEB /* clone-fs-add.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-fs-add.test"; sourceTree = ""; }; - 55484A8D288555340066EDEB /* add_from_zip_partial_deflated.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_partial_deflated.test; sourceTree = ""; }; - 55484A8E288555340066EDEB /* extra_get.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_get.test; sourceTree = ""; }; - 55484A8F288555340066EDEB /* set_comment_all.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_comment_all.test; sourceTree = ""; }; - 55484A90288555340066EDEB /* junk_at_start.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = junk_at_start.test; sourceTree = ""; }; - 55484A91288555340066EDEB /* set_compression_lzma_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_lzma_to_store.test; sourceTree = ""; }; - 55484A92288555340066EDEB /* delete_renamed_rename.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_renamed_rename.test; sourceTree = ""; }; - 55484A93288555340066EDEB /* extra_field_align_2-ef_00.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_2-ef_00.zip"; sourceTree = ""; }; - 55484A94288555340066EDEB /* open_empty.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_empty.test; sourceTree = ""; }; - 55484A95288555340066EDEB /* encryption-stat.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-stat.test"; sourceTree = ""; }; - 55484A96288555340066EDEB /* incons-file-count-low.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-file-count-low.zip"; sourceTree = ""; }; - 55484A97288555340066EDEB /* incons-file-count-overflow.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-file-count-overflow.zip"; sourceTree = ""; }; - 55484A98288555340066EDEB /* open_filename_duplicate_empty.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_filename_duplicate_empty.test; sourceTree = ""; }; - 55484A99288555340066EDEB /* open_extrabytes.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_extrabytes.test; sourceTree = ""; }; - 55484A9A288555340066EDEB /* stat_index_utf8_raw.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_utf8_raw.test; sourceTree = ""; }; - 55484A9B288555340066EDEB /* stat_index_utf8_guess.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_utf8_guess.test; sourceTree = ""; }; - 55484A9C288555340066EDEB /* incons-eocd-magic-bad.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-eocd-magic-bad.zip"; sourceTree = ""; }; - 55484A9D288555340066EDEB /* add_from_zip_deflated.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_deflated.test; sourceTree = ""; }; - 55484A9E288555340066EDEB /* extra_set.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_set.test; sourceTree = ""; }; - 55484A9F288555340066EDEB /* fdopen_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fdopen_ok.test; sourceTree = ""; }; - 55484AA0288555340066EDEB /* progress.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = progress.test; sourceTree = ""; }; - 55484AA1288555340066EDEB /* testfile2014.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testfile2014.zip; sourceTree = ""; }; - 55484AA2288555340066EDEB /* test-cp437.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-cp437.zip"; sourceTree = ""; }; - 55484AA3288555340066EDEB /* incons-central-compsize-smaller.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-compsize-smaller.zip"; sourceTree = ""; }; - 55484AA4288555340066EDEB /* get_comment.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = get_comment.test; sourceTree = ""; }; - 55484AA5288555340066EDEB /* stat_index_fileorder.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_fileorder.test; sourceTree = ""; }; - 55484AA6288555340066EDEB /* set_compression_store_to_zstd.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_zstd.test; sourceTree = ""; }; - 55484AA7288555340066EDEB /* set_comment_localonly.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_comment_localonly.test; sourceTree = ""; }; - 55484AA8288555340066EDEB /* incons-central-compsize-larger-toolarge.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-compsize-larger-toolarge.zip"; sourceTree = ""; }; - 55484AA9288555340066EDEB /* decrypt-wrong-password-pkware.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-wrong-password-pkware.test"; sourceTree = ""; }; - 55484AAA288555340066EDEB /* set_compression_store_to_bzip2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_bzip2.test; sourceTree = ""; }; - 55484AAB288555350066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484AAC288555350066EDEB /* fopen_unchanged.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fopen_unchanged.c; sourceTree = ""; }; - 55484AAD288555350066EDEB /* zipcmp_zip_dir.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = zipcmp_zip_dir.test; sourceTree = ""; }; - 55484AAE288555350066EDEB /* cleanup.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = cleanup.cmake; sourceTree = ""; }; - 55484AAF288555350066EDEB /* testbuffer.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testbuffer.zip; sourceTree = ""; }; - 55484AB0288555350066EDEB /* testextrabytes.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testextrabytes.zip; sourceTree = ""; }; - 55484AB1288555350066EDEB /* junk-at-end.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "junk-at-end.zip"; sourceTree = ""; }; - 55484AB2288555350066EDEB /* incons-archive-comment-shorter.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-archive-comment-shorter.zip"; sourceTree = ""; }; - 55484AB3288555350066EDEB /* testcomment13.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testcomment13.zip; sourceTree = ""; }; - 55484AB4288555350066EDEB /* extra_field_align_2-0.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_2-0.zip"; sourceTree = ""; }; - 55484AB5288555350066EDEB /* encryption-nonrandom-pkware.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-nonrandom-pkware.test"; sourceTree = ""; }; - 55484AB6288555350066EDEB /* firstsecond-split-deflated.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "firstsecond-split-deflated.zip"; sourceTree = ""; }; - 55484AB7288555350066EDEB /* nihtest.conf.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = nihtest.conf.in; sourceTree = ""; }; - 55484AB8288555350066EDEB /* firstsecond.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = firstsecond.zip; sourceTree = ""; }; - 55484AB9288555350066EDEB /* streamed-zip64.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "streamed-zip64.zip"; sourceTree = ""; }; - 55484ABA288555350066EDEB /* decrypt-no-password-aes256.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-no-password-aes256.test"; sourceTree = ""; }; - 55484ABB288555350066EDEB /* name_locate-cp437.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "name_locate-cp437.test"; sourceTree = ""; }; - 55484ABC288555350066EDEB /* testdir.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testdir.zip; sourceTree = ""; }; - 55484ABD288555350066EDEB /* streamed.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = streamed.zip; sourceTree = ""; }; - 55484ABE288555350066EDEB /* extra_set_modify_c.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_set_modify_c.test; sourceTree = ""; }; - 55484ABF288555350066EDEB /* encrypt.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = encrypt.zip; sourceTree = ""; }; - 55484AC0288555350066EDEB /* encrypt_plus_extra_modified_l.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = encrypt_plus_extra_modified_l.zip; sourceTree = ""; }; - 55484AC1288555350066EDEB /* liboverride-test.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "liboverride-test.c"; sourceTree = ""; }; - 55484AC2288555350066EDEB /* open_file_count.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_file_count.test; sourceTree = ""; }; - 55484AC3288555350066EDEB /* add_from_filep.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_filep.test; sourceTree = ""; }; - 55484AC4288555350066EDEB /* hole.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = hole.c; sourceTree = ""; }; - 55484AC5288555350066EDEB /* open_empty_2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_empty_2.test; sourceTree = ""; }; - 55484AC6288555350066EDEB /* nonrandomopen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nonrandomopen.c; sourceTree = ""; }; - 55484AC7288555350066EDEB /* testbzip2.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testbzip2.zip; sourceTree = ""; }; - 55484AC8288555350066EDEB /* can_clone_file.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = can_clone_file.c; sourceTree = ""; }; - 55484AC9288555350066EDEB /* incons-local-filename.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-filename.zip"; sourceTree = ""; }; - 55484ACA288555350066EDEB /* encrypt-none.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-none.zip"; sourceTree = ""; }; - 55484ACB288555350066EDEB /* rename_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_ok.test; sourceTree = ""; }; - 55484ACC288555350066EDEB /* extra_field_align_2-ef_ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_2-ef_ff.zip"; sourceTree = ""; }; - 55484ACD288555350066EDEB /* incons-local-size-larger.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-size-larger.zip"; sourceTree = ""; }; - 55484ACE288555350066EDEB /* test-cp437-fc-utf-8-filename.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-cp437-fc-utf-8-filename.zip"; sourceTree = ""; }; - 55484ACF288555350066EDEB /* set_compression_store_to_lzma.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_lzma.test; sourceTree = ""; }; - 55484AD0288555350066EDEB /* encryption-remove.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-remove.test"; sourceTree = ""; }; - 55484AD1288555350066EDEB /* testdeflated.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testdeflated.zip; sourceTree = ""; }; - 55484AD2288555350066EDEB /* open_filename_duplicate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_filename_duplicate.test; sourceTree = ""; }; - 55484AD3288555350066EDEB /* testfile0.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testfile0.zip; sourceTree = ""; }; - 55484AD4288555350066EDEB /* testchangedlocal.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testchangedlocal.zip; sourceTree = ""; }; - 55484AD5288555350066EDEB /* fseek.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fseek.c; sourceTree = ""; }; - 55484AD6288555350066EDEB /* incons-central-compression-method.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-compression-method.zip"; sourceTree = ""; }; - 55484AD7288555350066EDEB /* encrypt-aes128.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes128.zip"; sourceTree = ""; }; - 55484AD8288555350066EDEB /* file_comment_encmismatch.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = file_comment_encmismatch.test; sourceTree = ""; }; - 55484AD9288555350066EDEB /* extra_count_ignore_zip64.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_count_ignore_zip64.test; sourceTree = ""; }; - 55484ADA288555350066EDEB /* broken.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = broken.zip; sourceTree = ""; }; - 55484ADB288555350066EDEB /* stat_index_zip64.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_zip64.test; sourceTree = ""; }; - 55484ADC288555350066EDEB /* incons-central-compsize-larger.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-compsize-larger.zip"; sourceTree = ""; }; - 55484ADD288555350066EDEB /* unchange-delete-namelocate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "unchange-delete-namelocate.test"; sourceTree = ""; }; - 55484ADE288555350066EDEB /* runtest.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = runtest.in; sourceTree = ""; }; - 55484ADF288555350066EDEB /* delete_last.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_last.test; sourceTree = ""; }; - 55484AE0288555350066EDEB /* extra_count.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_count.test; sourceTree = ""; }; - 55484AE1288555350066EDEB /* testempty.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testempty.zip; sourceTree = ""; }; - 55484AE2288555350066EDEB /* encrypt_plus_extra.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = encrypt_plus_extra.zip; sourceTree = ""; }; - 55484AE3288555350066EDEB /* incons-central-file-comment-longer.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-file-comment-longer.zip"; sourceTree = ""; }; - 55484AE4288555350066EDEB /* junk_at_end.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = junk_at_end.test; sourceTree = ""; }; - 55484AE5288555350066EDEB /* extra_field_align_3-ef_00.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_3-ef_00.zip"; sourceTree = ""; }; - 55484AE6288555350066EDEB /* test-cp437-comment-utf-8.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-cp437-comment-utf-8.zip"; sourceTree = ""; }; - 55484AE7288555350066EDEB /* open_zip64_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_zip64_ok.test; sourceTree = ""; }; - 55484AE8288555350066EDEB /* utf-8-standardization-input.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "utf-8-standardization-input.zip"; sourceTree = ""; }; - 55484AE9288555350066EDEB /* add_stored_in_memory.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_stored_in_memory.test; sourceTree = ""; }; - 55484AEA288555350066EDEB /* testfile-xz.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-xz.zip"; sourceTree = ""; }; - 55484AEB288555350066EDEB /* incons-local-crc.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-crc.zip"; sourceTree = ""; }; - 55484AEC288555350066EDEB /* gap-replace.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "gap-replace.zip"; sourceTree = ""; }; - 55484AED288555350066EDEB /* extra_field_align_3-ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_3-ff.zip"; sourceTree = ""; }; - 55484AEE288555350066EDEB /* incons-local-filename-long.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-filename-long.zip"; sourceTree = ""; }; - 55484AEF288555350066EDEB /* fuzz_main.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fuzz_main.c; sourceTree = ""; }; - 55484AF0288555350066EDEB /* test-cp437-fc.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-cp437-fc.zip"; sourceTree = ""; }; - 55484AF1288555350066EDEB /* extra_delete.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_delete.test; sourceTree = ""; }; - 55484AF2288555350066EDEB /* gap.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = gap.zip; sourceTree = ""; }; - 55484AF3288555350066EDEB /* zip_read_fuzzer.dict */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = zip_read_fuzzer.dict; sourceTree = ""; }; - 55484AF4288555350066EDEB /* extra_field_align_1-0.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_1-0.zip"; sourceTree = ""; }; - 55484AF5288555350066EDEB /* add_from_file_duplicate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_file_duplicate.test; sourceTree = ""; }; - 55484AF6288555350066EDEB /* delete_invalid.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_invalid.test; sourceTree = ""; }; - 55484AF7288555350066EDEB /* buffer-fragment-write.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "buffer-fragment-write.test"; sourceTree = ""; }; - 55484AF8288555350066EDEB /* testfile.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testfile.zip; sourceTree = ""; }; - 55484AF9288555350066EDEB /* ziptool_regress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ziptool_regress.c; sourceTree = ""; }; - 55484AFA288555350066EDEB /* extra_field_align_1-ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_1-ff.zip"; sourceTree = ""; }; - 55484AFB288555350066EDEB /* testcomment.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testcomment.zip; sourceTree = ""; }; - 55484AFC288555350066EDEB /* large-uncompressible */ = {isa = PBXFileReference; lastKnownFileType = file; path = "large-uncompressible"; sourceTree = ""; }; - 55484AFD288555350066EDEB /* encrypt-pkware-noentropy.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-pkware-noentropy.zip"; sourceTree = ""; }; - 55484AFE288555350066EDEB /* add_from_file_twice_duplicate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_file_twice_duplicate.test; sourceTree = ""; }; - 55484AFF288555350066EDEB /* add_from_file_unchange.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_file_unchange.test; sourceTree = ""; }; - 55484B00288555350066EDEB /* rename_deleted.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_deleted.test; sourceTree = ""; }; - 55484B01288555350066EDEB /* nonrandomopentest.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = nonrandomopentest.c; sourceTree = ""; }; - 55484B02288555350066EDEB /* extra_delete_by_id.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_delete_by_id.test; sourceTree = ""; }; - 55484B03288555350066EDEB /* testfile-lzma.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-lzma.zip"; sourceTree = ""; }; - 55484B04288555350066EDEB /* count_entries.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = count_entries.test; sourceTree = ""; }; - 55484B05288555350066EDEB /* encrypt-aes256-noentropy.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes256-noentropy.zip"; sourceTree = ""; }; - 55484B06288555350066EDEB /* stat_index_cp437_strict.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_cp437_strict.test; sourceTree = ""; }; - 55484B07288555350066EDEB /* incons-central-date.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-date.zip"; sourceTree = ""; }; - 55484B08288555350066EDEB /* stat_index_utf8_unmarked_strict.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_utf8_unmarked_strict.test; sourceTree = ""; }; - 55484B09288555350066EDEB /* open_truncate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_truncate.test; sourceTree = ""; }; - 55484B0A288555350066EDEB /* open_filename_duplicate_consistency.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_filename_duplicate_consistency.test; sourceTree = ""; }; - 55484B0B288555350066EDEB /* decrypt-correct-password-aes256.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-correct-password-aes256.test"; sourceTree = ""; }; - 55484B0C288555350066EDEB /* incons-central-size-larger.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-size-larger.zip"; sourceTree = ""; }; - 55484B0D288555350066EDEB /* rename_cp437.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_cp437.test; sourceTree = ""; }; - 55484B0E288555350066EDEB /* zip64.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = zip64.zip; sourceTree = ""; }; - 55484B0F288555350066EDEB /* testdeflated2.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testdeflated2.zip; sourceTree = ""; }; - 55484B10288555350066EDEB /* decrypt-correct-password-aes128.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-correct-password-aes128.test"; sourceTree = ""; }; - 55484B11288555350066EDEB /* stat_index_cp437_guess.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_cp437_guess.test; sourceTree = ""; }; - 55484B12288555350066EDEB /* delete_multiple_last.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_multiple_last.test; sourceTree = ""; }; - 55484B13288555350066EDEB /* stat_index_streamed_zip64.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_streamed_zip64.test; sourceTree = ""; }; - 55484B14288555350066EDEB /* extra_field_align_3-0.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_3-0.zip"; sourceTree = ""; }; - 55484B15288555350066EDEB /* extra_field_align_3-ef_ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_3-ef_ff.zip"; sourceTree = ""; }; - 55484B16288555350066EDEB /* buffer-fragment-read.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "buffer-fragment-read.test"; sourceTree = ""; }; - 55484B17288555350066EDEB /* test.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = test.zip; sourceTree = ""; }; - 55484B18288555350066EDEB /* stat_index_utf8_strict.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_utf8_strict.test; sourceTree = ""; }; - 55484B19288555350066EDEB /* test-utf8-unmarked.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-utf8-unmarked.zip"; sourceTree = ""; }; - 55484B1A288555350066EDEB /* testfile-plus-extra.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-plus-extra.zip"; sourceTree = ""; }; - 55484B1B288555350066EDEB /* incons-local-magic-bad.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-magic-bad.zip"; sourceTree = ""; }; - 55484B1C288555350066EDEB /* add_from_zip_deflated2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_deflated2.test; sourceTree = ""; }; - 55484B1D288555350066EDEB /* extra_get_by_id.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_get_by_id.test; sourceTree = ""; }; - 55484B1E288555350066EDEB /* filename_duplicate.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = filename_duplicate.zip; sourceTree = ""; }; - 55484B1F288555350066EDEB /* incons-local-filename-short.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-filename-short.zip"; sourceTree = ""; }; - 55484B20288555350066EDEB /* incons-local-compression-method.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-compression-method.zip"; sourceTree = ""; }; - 55484B21288555350066EDEB /* encrypt-aes256.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes256.zip"; sourceTree = ""; }; - 55484B22288555350066EDEB /* incons-archive-comment-longer.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-archive-comment-longer.zip"; sourceTree = ""; }; - 55484B23288555350066EDEB /* clone-fs-replace.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-fs-replace.test"; sourceTree = ""; }; - 55484B24288555350066EDEB /* encrypt-aes192-noentropy.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes192-noentropy.zip"; sourceTree = ""; }; - 55484B25288555350066EDEB /* zip-in-archive-comment.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "zip-in-archive-comment.zip"; sourceTree = ""; }; - 55484B26288555350066EDEB /* zip64-3mf.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "zip64-3mf.zip"; sourceTree = ""; }; - 55484B27288555350066EDEB /* fileorder.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = fileorder.zip; sourceTree = ""; }; - 55484B28288555350066EDEB /* set_compression_deflate_to_bzip2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_deflate_to_bzip2.test; sourceTree = ""; }; - 55484B29288555350066EDEB /* incons-central-crc.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-crc.zip"; sourceTree = ""; }; - 55484B2A288555350066EDEB /* open_multidisk.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_multidisk.test; sourceTree = ""; }; - 55484B2B288555350066EDEB /* test2.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = test2.zip; sourceTree = ""; }; - 55484B2C288555350066EDEB /* decrypt-wrong-password-pkware-2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-wrong-password-pkware-2.test"; sourceTree = ""; }; - 55484B2D288555350066EDEB /* incons-file-count-high.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-file-count-high.zip"; sourceTree = ""; }; - 55484B2E288555350066EDEB /* zip-in-archive-comment.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "zip-in-archive-comment.test"; sourceTree = ""; }; - 55484B2F288555350066EDEB /* open_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_ok.test; sourceTree = ""; }; - 55484B30288555350066EDEB /* decrypt-correct-password-pkware.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-correct-password-pkware.test"; sourceTree = ""; }; - 55484B31288555350066EDEB /* rename_utf8.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_utf8.test; sourceTree = ""; }; - 55484B32288555350066EDEB /* clone-buffer-replace.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-buffer-replace.test"; sourceTree = ""; }; - 55484B33288555350066EDEB /* fseek_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fseek_ok.test; sourceTree = ""; }; - 55484B34288555350066EDEB /* fopen_unchanged.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fopen_unchanged.test; sourceTree = ""; }; - 55484B35288555350066EDEB /* stat_index_streamed.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_streamed.test; sourceTree = ""; }; - 55484B36288555350066EDEB /* testcommentremoved.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = testcommentremoved.zip; sourceTree = ""; }; - 55484B37288555350066EDEB /* testfile-UTF8.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-UTF8.zip"; sourceTree = ""; }; - 55484B38288555350066EDEB /* set_compression_xz_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_xz_to_store.test; sourceTree = ""; }; - 55484B39288555350066EDEB /* extra_field_align_4-ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_4-ff.zip"; sourceTree = ""; }; - 55484B3A288555350066EDEB /* set_compression_deflate_to_deflate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_deflate_to_deflate.test; sourceTree = ""; }; - 55484B3B288555350066EDEB /* teststdin.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = teststdin.zip; sourceTree = ""; }; - 55484B3C288555350066EDEB /* incons-central-file-comment-shorter.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-file-comment-shorter.zip"; sourceTree = ""; }; - 55484B3D288555350066EDEB /* set_compression_deflate_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_deflate_to_store.test; sourceTree = ""; }; - 55484B3E288555350066EDEB /* incons-ef-local-size.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-ef-local-size.zip"; sourceTree = ""; }; - 55484B3F288555350066EDEB /* open_cons_extrabytes.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_cons_extrabytes.test; sourceTree = ""; }; - 55484B40288555350066EDEB /* incons-ef-local-id.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-ef-local-id.zip"; sourceTree = ""; }; - 55484B41288555350066EDEB /* zipcmp_zip_dir.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = zipcmp_zip_dir.zip; sourceTree = ""; }; - 55484B42288555350066EDEB /* stored-no-eos.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "stored-no-eos.zip"; sourceTree = ""; }; - 55484B43288555350066EDEB /* teststored.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = teststored.zip; sourceTree = ""; }; - 55484B44288555350066EDEB /* incons-central-magic-bad2.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-magic-bad2.zip"; sourceTree = ""; }; - 55484B45288555350066EDEB /* utf-8-standardization.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "utf-8-standardization.test"; sourceTree = ""; }; - 55484B46288555350066EDEB /* clone-fs-delete.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-fs-delete.test"; sourceTree = ""; }; - 55484B47288555350066EDEB /* extra_add.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_add.test; sourceTree = ""; }; - 55484B48288555350066EDEB /* fread.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fread.test; sourceTree = ""; }; - 55484B49288555350066EDEB /* incons-cdoffset.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-cdoffset.zip"; sourceTree = ""; }; - 55484B4A288555350066EDEB /* fread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = fread.c; sourceTree = ""; }; - 55484B4B288555350066EDEB /* cancel_45.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = cancel_45.test; sourceTree = ""; }; - 55484B4C288555350066EDEB /* set_compression_zstd_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_zstd_to_store.test; sourceTree = ""; }; - 55484B4D288555350066EDEB /* open_filename_empty.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_filename_empty.test; sourceTree = ""; }; - 55484B4E288555350066EDEB /* rename_ascii.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_ascii.test; sourceTree = ""; }; - 55484B4F288555350066EDEB /* junk-at-start.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "junk-at-start.zip"; sourceTree = ""; }; - 55484B50288555350066EDEB /* zip64_stored_creation.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip64_stored_creation.test; sourceTree = ""; }; - 55484B51288555350066EDEB /* incons-data.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-data.zip"; sourceTree = ""; }; - 55484B52288555350066EDEB /* manyfiles-zip.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "manyfiles-zip.zip"; sourceTree = ""; }; - 55484B53288555350066EDEB /* decrypt-correct-password-aes192.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-correct-password-aes192.test"; sourceTree = ""; }; - 55484B54288555350066EDEB /* extra_count_by_id.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_count_by_id.test; sourceTree = ""; }; - 55484B55288555350066EDEB /* fseek_deflated.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fseek_deflated.test; sourceTree = ""; }; - 55484B56288555350066EDEB /* cm-default.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "cm-default.zip"; sourceTree = ""; }; - 55484B57288555350066EDEB /* malloc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = malloc.c; sourceTree = ""; }; - 55484B58288555350066EDEB /* encrypt-aes128-noentropy.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes128-noentropy.zip"; sourceTree = ""; }; - 55484B59288555350066EDEB /* cancel_90.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = cancel_90.test; sourceTree = ""; }; - 55484B5A288555350066EDEB /* set_compression_store_to_xz.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_xz.test; sourceTree = ""; }; - 55484B5B288555350066EDEB /* extra_field_align_2-ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_2-ff.zip"; sourceTree = ""; }; - 55484B5C288555350066EDEB /* decrypt-wrong-password-aes128.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-wrong-password-aes128.test"; sourceTree = ""; }; - 55484B5D288555350066EDEB /* decrypt-wrong-password-aes256.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-wrong-password-aes256.test"; sourceTree = ""; }; - 55484B5E288555350066EDEB /* set_compression_unknown.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_unknown.test; sourceTree = ""; }; - 55484B5F288555350066EDEB /* open_too_short.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_too_short.test; sourceTree = ""; }; - 55484B60288555350066EDEB /* incons-local-compsize-larger.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-compsize-larger.zip"; sourceTree = ""; }; - 55484B61288555350066EDEB /* utf-8-standardization-output.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "utf-8-standardization-output.zip"; sourceTree = ""; }; - 55484B62288555350066EDEB /* add_from_zip_partial_stored.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_partial_stored.test; sourceTree = ""; }; - 55484B63288555350066EDEB /* name_locate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = name_locate.test; sourceTree = ""; }; - 55484B64288555350066EDEB /* testfile-stored-dos.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-stored-dos.zip"; sourceTree = ""; }; - 55484B65288555350066EDEB /* add_from_zip_stored.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_stored.test; sourceTree = ""; }; - 55484B66288555350066EDEB /* encryption-nonrandom-aes256.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-nonrandom-aes256.test"; sourceTree = ""; }; - 55484B67288555350066EDEB /* fseek_fail.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = fseek_fail.test; sourceTree = ""; }; - 55484B68288555350066EDEB /* open_nosuchfile.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_nosuchfile.test; sourceTree = ""; }; - 55484B69288555350066EDEB /* encryption-nonrandom-aes128.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "encryption-nonrandom-aes128.test"; sourceTree = ""; }; - 55484B6A288555350066EDEB /* zip_read_fuzzer.cc */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = zip_read_fuzzer.cc; sourceTree = ""; }; - 55484B6B288555350066EDEB /* multidisk.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = multidisk.zip; sourceTree = ""; }; - 55484B6C288555350066EDEB /* set_compression_bzip2_to_deflate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_bzip2_to_deflate.test; sourceTree = ""; }; - 55484B6D288555350066EDEB /* preload.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = preload.test; sourceTree = ""; }; - 55484B6E288555350066EDEB /* rename_ok.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = rename_ok.zip; sourceTree = ""; }; - 55484B6F288555350066EDEB /* add_from_filep.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = add_from_filep.c; sourceTree = ""; }; - 55484B70288555350066EDEB /* test-utf8.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "test-utf8.zip"; sourceTree = ""; }; - 55484B71288555350066EDEB /* open_many_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_many_ok.test; sourceTree = ""; }; - 55484B72288555360066EDEB /* set_file_dostime.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_file_dostime.test; sourceTree = ""; }; - 55484B73288555360066EDEB /* incons-ef-central-size-wrong.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-ef-central-size-wrong.zip"; sourceTree = ""; }; - 55484B74288555360066EDEB /* testfile.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = testfile.txt; sourceTree = ""; }; - 55484B75288555360066EDEB /* set_compression_lzma_no_eos_to_store.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_lzma_no_eos_to_store.test; sourceTree = ""; }; - 55484B76288555360066EDEB /* extra_set_modify_l.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_set_modify_l.test; sourceTree = ""; }; - 55484B77288555360066EDEB /* encrypt_plus_extra_modified_c.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = encrypt_plus_extra_modified_c.zip; sourceTree = ""; }; - 55484B78288555360066EDEB /* bigzero-zip.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "bigzero-zip.zip"; sourceTree = ""; }; - 55484B79288555360066EDEB /* delete_multiple_partial.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_multiple_partial.test; sourceTree = ""; }; - 55484B7A288555360066EDEB /* open_incons.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_incons.test; sourceTree = ""; }; - 55484B7B288555360066EDEB /* liboverride.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = liboverride.c; sourceTree = ""; }; - 55484B7C288555360066EDEB /* clone-buffer-add.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-buffer-add.test"; sourceTree = ""; }; - 55484B7D288555360066EDEB /* add_from_buffer.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_buffer.test; sourceTree = ""; }; - 55484B7E288555360066EDEB /* NiHTest.pm */ = {isa = PBXFileReference; lastKnownFileType = text.script.perl; path = NiHTest.pm; sourceTree = ""; }; - 55484B7F288555360066EDEB /* extra_field_align_1-ef_00.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_1-ef_00.zip"; sourceTree = ""; }; - 55484B80288555360066EDEB /* incons-local-compsize-smaller.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-compsize-smaller.zip"; sourceTree = ""; }; - 55484B81288555360066EDEB /* encrypt-1234.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-1234.zip"; sourceTree = ""; }; - 55484B82288555360066EDEB /* add_from_stdin.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_stdin.test; sourceTree = ""; }; - 55484B83288555360066EDEB /* extra_add_multiple.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_add_multiple.test; sourceTree = ""; }; - 55484B84288555360066EDEB /* open_zip64_3mf.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_zip64_3mf.test; sourceTree = ""; }; - 55484B85288555360066EDEB /* clone-buffer-delete.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "clone-buffer-delete.test"; sourceTree = ""; }; - 55484B86288555360066EDEB /* incons-ef-local-id-size.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-ef-local-id-size.zip"; sourceTree = ""; }; - 55484B87288555360066EDEB /* set_compression_store_to_deflate.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_compression_store_to_deflate.test; sourceTree = ""; }; - 55484B88288555360066EDEB /* filename_empty.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = filename_empty.zip; sourceTree = ""; }; - 55484B89288555360066EDEB /* delete_add_same.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = delete_add_same.test; sourceTree = ""; }; - 55484B8A288555360066EDEB /* firstsecond-split-stored.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "firstsecond-split-stored.zip"; sourceTree = ""; }; - 55484B8B288555360066EDEB /* tryopen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = tryopen.c; sourceTree = ""; }; - 55484B8C288555360066EDEB /* set_file_mtime.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_file_mtime.test; sourceTree = ""; }; - 55484B8D288555360066EDEB /* extra_field_align.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = extra_field_align.test; sourceTree = ""; }; - 55484B8E288555360066EDEB /* add_from_zip_closed.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_zip_closed.test; sourceTree = ""; }; - 55484B8F288555360066EDEB /* encrypt-aes192.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "encrypt-aes192.zip"; sourceTree = ""; }; - 55484B90288555360066EDEB /* ossfuzz.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = ossfuzz.sh; sourceTree = ""; }; - 55484B91288555360066EDEB /* decrypt-correct-password-pkware-2.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "decrypt-correct-password-pkware-2.test"; sourceTree = ""; }; - 55484B92288555360066EDEB /* encrypt.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = encrypt.test; sourceTree = ""; }; - 55484B93288555360066EDEB /* source_hole.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = source_hole.c; sourceTree = ""; }; - 55484B94288555360066EDEB /* filename_duplicate_empty.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = filename_duplicate_empty.zip; sourceTree = ""; }; - 55484B95288555360066EDEB /* stat_index_cp437_raw.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = stat_index_cp437_raw.test; sourceTree = ""; }; - 55484B96288555360066EDEB /* add_stored.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_stored.test; sourceTree = ""; }; - 55484B97288555360066EDEB /* testfile-cp437.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-cp437.zip"; sourceTree = ""; }; - 55484B98288555360066EDEB /* add_from_file.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_from_file.test; sourceTree = ""; }; - 55484B99288555360066EDEB /* open_new_but_exists.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_new_but_exists.test; sourceTree = ""; }; - 55484B9A288555360066EDEB /* open_many_fail.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_many_fail.test; sourceTree = ""; }; - 55484B9B288555360066EDEB /* name_locate-utf8.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "name_locate-utf8.test"; sourceTree = ""; }; - 55484B9C288555360066EDEB /* bigstored.zh */ = {isa = PBXFileReference; lastKnownFileType = file; path = bigstored.zh; sourceTree = ""; }; - 55484B9D288555360066EDEB /* incons-central-magic-bad.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-central-magic-bad.zip"; sourceTree = ""; }; - 55484B9E288555360066EDEB /* extra_field_align_1-ef_ff.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "extra_field_align_1-ef_ff.zip"; sourceTree = ""; }; - 55484B9F288555360066EDEB /* incons-local-filename-missing.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "incons-local-filename-missing.zip"; sourceTree = ""; }; - 55484BA0288555360066EDEB /* zip64_creation.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = zip64_creation.test; sourceTree = ""; }; - 55484BA1288555360066EDEB /* testfile-zstd.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "testfile-zstd.zip"; sourceTree = ""; }; - 55484BA2288555360066EDEB /* set_comment_removeglobal.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = set_comment_removeglobal.test; sourceTree = ""; }; - 55484BA3288555360066EDEB /* add_dir.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = add_dir.test; sourceTree = ""; }; - 55484BA4288555360066EDEB /* cm-default.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = "cm-default.test"; sourceTree = ""; }; - 55484BA5288555360066EDEB /* rename_fail.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = rename_fail.test; sourceTree = ""; }; - 55484BA6288555360066EDEB /* open_new_ok.test */ = {isa = PBXFileReference; lastKnownFileType = text; path = open_new_ok.test; sourceTree = ""; }; - 55484BA7288555360066EDEB /* gap-delete.zip */ = {isa = PBXFileReference; lastKnownFileType = archive.zip; path = "gap-delete.zip"; sourceTree = ""; }; - 55484BA8288555360066EDEB /* NEWS.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = NEWS.md; sourceTree = ""; }; - 55484BA9288555360066EDEB /* libzip.pc.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = libzip.pc.in; sourceTree = ""; }; - 55484BAC288555360066EDEB /* unpack_zlib_here.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = unpack_zlib_here.txt; sourceTree = ""; }; - 55484BAD288555360066EDEB /* readme.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - 55484BAE288555360066EDEB /* vsbuild.cmd */ = {isa = PBXFileReference; lastKnownFileType = text; path = vsbuild.cmd; sourceTree = ""; }; - 55484BAF288555360066EDEB /* cmake-config.h.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "cmake-config.h.in"; sourceTree = ""; }; - 55484BB1288555360066EDEB /* FindLibLZMA.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindLibLZMA.cmake; sourceTree = ""; }; - 55484BB2288555360066EDEB /* CheckLibraryExists.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = CheckLibraryExists.cmake; sourceTree = ""; }; - 55484BB3288555360066EDEB /* CMakePushCheckState.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakePushCheckState.cmake; sourceTree = ""; }; - 55484BB4288555360066EDEB /* FindPackageHandleStandardArgs.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindPackageHandleStandardArgs.cmake; sourceTree = ""; }; - 55484BB5288555360066EDEB /* FindBZip2.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindBZip2.cmake; sourceTree = ""; }; - 55484BB6288555360066EDEB /* CheckSymbolExists.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = CheckSymbolExists.cmake; sourceTree = ""; }; - 55484BB7288555360066EDEB /* FindGnuTLS.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindGnuTLS.cmake; sourceTree = ""; }; - 55484BB8288555360066EDEB /* FindPackageMessage.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = FindPackageMessage.cmake; sourceTree = ""; }; - 55484BB9288555360066EDEB /* SelectLibraryConfigurations.cmake */ = {isa = PBXFileReference; lastKnownFileType = text; path = SelectLibraryConfigurations.cmake; sourceTree = ""; }; - 55484BBA288555360066EDEB /* INSTALL.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = INSTALL.md; sourceTree = ""; }; - 55484BBB288555360066EDEB /* TODO.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = TODO.md; sourceTree = ""; }; - 55484BBC288555360066EDEB /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 55484BBD288555360066EDEB /* appveyor.yml */ = {isa = PBXFileReference; lastKnownFileType = text.yaml; path = appveyor.yml; sourceTree = ""; }; - 55484BC0288555360066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484BC1288555360066EDEB /* windows-open.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "windows-open.c"; sourceTree = ""; }; - 55484BC2288555360066EDEB /* in-memory.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "in-memory.c"; sourceTree = ""; }; - 55484BC5288555360066EDEB /* Dockerfile */ = {isa = PBXFileReference; lastKnownFileType = text; path = Dockerfile; sourceTree = ""; }; - 55484BC6288555360066EDEB /* do.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = do.sh; sourceTree = ""; }; - 55484BC7288555360066EDEB /* readme.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = readme.txt; sourceTree = ""; }; - 55484BD4288555360066EDEB /* zip_crypto_gnutls.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_crypto_gnutls.c; sourceTree = ""; }; - 55484BD5288555360066EDEB /* zip_source_tell_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_tell_write.c; sourceTree = ""; }; - 55484BD6288555360066EDEB /* zip_memdup.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_memdup.c; sourceTree = ""; }; - 55484BD7288555360066EDEB /* zip_source_supports.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_supports.c; sourceTree = ""; }; - 55484BD8288555360066EDEB /* zip_file_get_external_attributes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_get_external_attributes.c; sourceTree = ""; }; - 55484BD9288555360066EDEB /* zip_source_begin_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_begin_write.c; sourceTree = ""; }; - 55484BDA288555360066EDEB /* zipint.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zipint.h; sourceTree = ""; }; - 55484BDB288555360066EDEB /* zip_add.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_add.c; sourceTree = ""; }; - 55484BDC288555360066EDEB /* zip_get_name.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_name.c; sourceTree = ""; }; - 55484BDD288555360066EDEB /* zip_file_strerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_strerror.c; sourceTree = ""; }; - 55484BDE288555360066EDEB /* zip_fopen_index.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fopen_index.c; sourceTree = ""; }; - 55484BDF288555360066EDEB /* zip_source_commit_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_commit_write.c; sourceTree = ""; }; - 55484BE0288555360066EDEB /* zip_source_buffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_buffer.c; sourceTree = ""; }; - 55484BE1288555360066EDEB /* zip_error_clear.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error_clear.c; sourceTree = ""; }; - 55484BE2288555360066EDEB /* zip_source_stat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_stat.c; sourceTree = ""; }; - 55484BE3288555360066EDEB /* zip_get_archive_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_archive_comment.c; sourceTree = ""; }; - 55484BE4288555360066EDEB /* zip_file_rename.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_rename.c; sourceTree = ""; }; - 55484BE5288555360066EDEB /* zip_ftell.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_ftell.c; sourceTree = ""; }; - 55484BE6288555360066EDEB /* zip_discard.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_discard.c; sourceTree = ""; }; - 55484BE7288555360066EDEB /* zip_string.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_string.c; sourceTree = ""; }; - 55484BE8288555360066EDEB /* zip_set_name.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_name.c; sourceTree = ""; }; - 55484BE9288555360066EDEB /* zip_entry.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_entry.c; sourceTree = ""; }; - 55484BEA288555360066EDEB /* zip_file_set_encryption.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_set_encryption.c; sourceTree = ""; }; - 55484BEB288555360066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484BEC288555360066EDEB /* zip_source_open.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_open.c; sourceTree = ""; }; - 55484BED288555360066EDEB /* zip_set_file_compression.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_file_compression.c; sourceTree = ""; }; - 55484BEE288555360066EDEB /* zip_hash.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_hash.c; sourceTree = ""; }; - 55484BEF288555360066EDEB /* zip_file_error_get.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_error_get.c; sourceTree = ""; }; - 55484BF0288555360066EDEB /* zip_file_replace.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_replace.c; sourceTree = ""; }; - 55484BF1288555360066EDEB /* zip_crypto_mbedtls.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_crypto_mbedtls.c; sourceTree = ""; }; - 55484BF2288555360066EDEB /* zip_file_get_offset.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_get_offset.c; sourceTree = ""; }; - 55484BF3288555360066EDEB /* zip_unchange.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_unchange.c; sourceTree = ""; }; - 55484BF4288555360066EDEB /* zip_new.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_new.c; sourceTree = ""; }; - 55484BF5288555360066EDEB /* zip_file_set_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_set_comment.c; sourceTree = ""; }; - 55484BF6288555360066EDEB /* zip_random_unix.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_random_unix.c; sourceTree = ""; }; - 55484BF7288555360066EDEB /* zip_close.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_close.c; sourceTree = ""; }; - 55484BF8288555360066EDEB /* zip_source_file_win32_ansi.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_ansi.c; sourceTree = ""; }; - 55484BF9288555360066EDEB /* zip_crypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto.h; sourceTree = ""; }; - 55484BFA288555360066EDEB /* zip_add_dir.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_add_dir.c; sourceTree = ""; }; - 55484BFB288555360066EDEB /* zip_error_get_sys_type.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error_get_sys_type.c; sourceTree = ""; }; - 55484BFC288555360066EDEB /* zip_source_call.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_call.c; sourceTree = ""; }; - 55484BFD288555360066EDEB /* zip_source_is_deleted.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_is_deleted.c; sourceTree = ""; }; - 55484BFE288555360066EDEB /* zip_fopen_encrypted.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fopen_encrypted.c; sourceTree = ""; }; - 55484BFF288555360066EDEB /* zip_set_archive_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_archive_comment.c; sourceTree = ""; }; - 55484C00288555360066EDEB /* zip_extra_field.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_extra_field.c; sourceTree = ""; }; - 55484C01288555360066EDEB /* zip_source_file_stdio.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio.c; sourceTree = ""; }; - 55484C02288555360066EDEB /* zip_dir_add.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_dir_add.c; sourceTree = ""; }; - 55484C03288555360066EDEB /* zip_name_locate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_name_locate.c; sourceTree = ""; }; - 55484C04288555360066EDEB /* zip_source_seek_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_seek_write.c; sourceTree = ""; }; - 55484C05288555360066EDEB /* zip_algorithm_deflate.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_deflate.c; sourceTree = ""; }; - 55484C06288555360066EDEB /* zip_unchange_archive.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_unchange_archive.c; sourceTree = ""; }; - 55484C07288555360066EDEB /* zip_source_free.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_free.c; sourceTree = ""; }; - 55484C08288555360066EDEB /* zip_source_file_common.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_common.c; sourceTree = ""; }; - 55484C09288555360066EDEB /* zip_get_num_files.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_num_files.c; sourceTree = ""; }; - 55484C0A288555360066EDEB /* zip_pkware.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_pkware.c; sourceTree = ""; }; - 55484C0B288555360066EDEB /* zip_add_entry.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_add_entry.c; sourceTree = ""; }; - 55484C0C288555360066EDEB /* zip_random_uwp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_random_uwp.c; sourceTree = ""; }; - 55484C0D288555360066EDEB /* zip_buffer.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_buffer.c; sourceTree = ""; }; - 55484C0E288555360066EDEB /* zip_error.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error.c; sourceTree = ""; }; - 55484C0F288555360066EDEB /* zip_crypto_win.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_crypto_win.c; sourceTree = ""; }; - 55484C10288555360066EDEB /* zip_strerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_strerror.c; sourceTree = ""; }; - 55484C11288555360066EDEB /* zip_source_seek.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_seek.c; sourceTree = ""; }; - 55484C12288555360066EDEB /* zip_get_encryption_implementation.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_encryption_implementation.c; sourceTree = ""; }; - 55484C13288555360066EDEB /* zip_get_archive_flag.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_archive_flag.c; sourceTree = ""; }; - 55484C14288555360066EDEB /* zip_source_pkware_encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_pkware_encode.c; sourceTree = ""; }; - 55484C15288555360066EDEB /* zip_set_archive_flag.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_archive_flag.c; sourceTree = ""; }; - 55484C16288555360066EDEB /* zip_source_zip_new.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_zip_new.c; sourceTree = ""; }; - 55484C17288555360066EDEB /* zip_source_file_win32.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_source_file_win32.h; sourceTree = ""; }; - 55484C18288555360066EDEB /* zip_crypto_openssl.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto_openssl.h; sourceTree = ""; }; - 55484C19288555360066EDEB /* zip_fdopen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fdopen.c; sourceTree = ""; }; - 55484C1A288555360066EDEB /* zip_unchange_data.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_unchange_data.c; sourceTree = ""; }; - 55484C1B288555360066EDEB /* zip_crypto_commoncrypto.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_crypto_commoncrypto.c; sourceTree = ""; }; - 55484C1C288555360066EDEB /* zip_source_pkware_decode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_pkware_decode.c; sourceTree = ""; }; - 55484C1D288555360066EDEB /* zip_file_set_mtime.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_set_mtime.c; sourceTree = ""; }; - 55484C1E288555360066EDEB /* zip_source_file_win32_named.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_named.c; sourceTree = ""; }; - 55484C1F288555360066EDEB /* zip_set_default_password.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_default_password.c; sourceTree = ""; }; - 55484C20288555360066EDEB /* zip_source_file_stdio_named.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio_named.c; sourceTree = ""; }; - 55484C21288555360066EDEB /* zip_extra_field_api.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_extra_field_api.c; sourceTree = ""; }; - 55484C22288555360066EDEB /* zip_fread.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fread.c; sourceTree = ""; }; - 55484C23288555360066EDEB /* zip_source_rollback_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_rollback_write.c; sourceTree = ""; }; - 55484C24288555360066EDEB /* zip_progress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_progress.c; sourceTree = ""; }; - 55484C25288555360066EDEB /* zip_rename.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_rename.c; sourceTree = ""; }; - 55484C26288555360066EDEB /* zip_source_zip.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_zip.c; sourceTree = ""; }; - 55484C27288555360066EDEB /* zip_stat_index.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_stat_index.c; sourceTree = ""; }; - 55484C28288555360066EDEB /* zip_get_num_entries.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_num_entries.c; sourceTree = ""; }; - 55484C29288555360066EDEB /* zip_source_file.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_source_file.h; sourceTree = ""; }; - 55484C2A288555360066EDEB /* zip_source_function.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_function.c; sourceTree = ""; }; - 55484C2B288555360066EDEB /* zip_file_set_external_attributes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_set_external_attributes.c; sourceTree = ""; }; - 55484C2C288555360066EDEB /* zip_fseek.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fseek.c; sourceTree = ""; }; - 55484C2D288555360066EDEB /* zip_winzip_aes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_winzip_aes.c; sourceTree = ""; }; - 55484C2E288555360066EDEB /* zip_replace.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_replace.c; sourceTree = ""; }; - 55484C2F288555360066EDEB /* zip_delete.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_delete.c; sourceTree = ""; }; - 55484C30288555360066EDEB /* zip_source_crc.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_crc.c; sourceTree = ""; }; - 55484C31288555360066EDEB /* zip_source_accept_empty.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_accept_empty.c; sourceTree = ""; }; - 55484C32288555360066EDEB /* zip_set_file_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_set_file_comment.c; sourceTree = ""; }; - 55484C33288555360066EDEB /* zip_crypto_gnutls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto_gnutls.h; sourceTree = ""; }; - 55484C34288555360066EDEB /* zip_stat.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_stat.c; sourceTree = ""; }; - 55484C35288555360066EDEB /* zip_get_file_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_get_file_comment.c; sourceTree = ""; }; - 55484C36288555360066EDEB /* zip_algorithm_xz.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_xz.c; sourceTree = ""; }; - 55484C37288555360066EDEB /* zip.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; - 55484C38288555360066EDEB /* zip_source_close.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_close.c; sourceTree = ""; }; - 55484C39288555360066EDEB /* zip_source_read.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_read.c; sourceTree = ""; }; - 55484C3A288555360066EDEB /* zip_open.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_open.c; sourceTree = ""; }; - 55484C3B288555360066EDEB /* zip_source_begin_write_cloning.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_begin_write_cloning.c; sourceTree = ""; }; - 55484C3C288555360066EDEB /* compat.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = compat.h; sourceTree = ""; }; - 55484C3D288555360066EDEB /* zip_crypto_mbedtls.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto_mbedtls.h; sourceTree = ""; }; - 55484C3E288555360066EDEB /* zip_fopen_index_encrypted.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fopen_index_encrypted.c; sourceTree = ""; }; - 55484C3F288555370066EDEB /* zip_source_file_win32_utf8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf8.c; sourceTree = ""; }; - 55484C40288555370066EDEB /* zip_utf-8.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = "zip_utf-8.c"; sourceTree = ""; }; - 55484C41288555370066EDEB /* zip_error_get.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error_get.c; sourceTree = ""; }; - 55484C42288555370066EDEB /* zip_fclose.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fclose.c; sourceTree = ""; }; - 55484C43288555370066EDEB /* zip_dirent.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_dirent.c; sourceTree = ""; }; - 55484C44288555370066EDEB /* zip_source_write.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_write.c; sourceTree = ""; }; - 55484C45288555370066EDEB /* zip_file_add.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_add.c; sourceTree = ""; }; - 55484C46288555370066EDEB /* zip_source_error.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_error.c; sourceTree = ""; }; - 55484C47288555370066EDEB /* zip_source_tell.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_tell.c; sourceTree = ""; }; - 55484C48288555370066EDEB /* zip_crypto_win.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto_win.h; sourceTree = ""; }; - 55484C49288555370066EDEB /* zip_source_get_file_attributes.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_get_file_attributes.c; sourceTree = ""; }; - 55484C4A288555370066EDEB /* zip_file_error_clear.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_error_clear.c; sourceTree = ""; }; - 55484C4B288555370066EDEB /* zip_source_compress.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_compress.c; sourceTree = ""; }; - 55484C4C288555370066EDEB /* zip_libzip_version.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_libzip_version.c; sourceTree = ""; }; - 55484C4D288555370066EDEB /* zip_error_to_str.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error_to_str.c; sourceTree = ""; }; - 55484C4E288555370066EDEB /* zip_source_remove.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_remove.c; sourceTree = ""; }; - 55484C4F288555370066EDEB /* zip_algorithm_bzip2.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_bzip2.c; sourceTree = ""; }; - 55484C50288555370066EDEB /* zip_source_file_stdio.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_source_file_stdio.h; sourceTree = ""; }; - 55484C51288555370066EDEB /* zip_random_win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_random_win32.c; sourceTree = ""; }; - 55484C52288555370066EDEB /* zip_source_window.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_window.c; sourceTree = ""; }; - 55484C53288555370066EDEB /* zip_file_get_comment.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_file_get_comment.c; sourceTree = ""; }; - 55484C54288555370066EDEB /* zip_source_winzip_aes_decode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_decode.c; sourceTree = ""; }; - 55484C55288555370066EDEB /* zip_stat_init.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_stat_init.c; sourceTree = ""; }; - 55484C56288555370066EDEB /* zip_fopen.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_fopen.c; sourceTree = ""; }; - 55484C57288555370066EDEB /* zip_crypto_openssl.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_crypto_openssl.c; sourceTree = ""; }; - 55484C58288555370066EDEB /* zip_crypto_commoncrypto.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = zip_crypto_commoncrypto.h; sourceTree = ""; }; - 55484C59288555370066EDEB /* zip_algorithm_zstd.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_zstd.c; sourceTree = ""; }; - 55484C5A288555370066EDEB /* zip_unchange_all.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_unchange_all.c; sourceTree = ""; }; - 55484C5B288555370066EDEB /* zip_io_util.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_io_util.c; sourceTree = ""; }; - 55484C5C288555370066EDEB /* zip_source_winzip_aes_encode.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_encode.c; sourceTree = ""; }; - 55484C5D288555370066EDEB /* zip_source_layered.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_layered.c; sourceTree = ""; }; - 55484C5E288555370066EDEB /* zip_source_file_win32_utf16.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf16.c; sourceTree = ""; }; - 55484C5F288555370066EDEB /* zip_error_strerror.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_error_strerror.c; sourceTree = ""; }; - 55484C60288555370066EDEB /* zip_source_file_win32.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32.c; sourceTree = ""; }; - 55484C61288555370066EDEB /* API-CHANGES.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = "API-CHANGES.md"; sourceTree = ""; }; - 55484C62288555370066EDEB /* THANKS */ = {isa = PBXFileReference; lastKnownFileType = text; path = THANKS; sourceTree = ""; }; - 55484C6E288555370066EDEB /* libzip-config.cmake.in */ = {isa = PBXFileReference; lastKnownFileType = text; path = "libzip-config.cmake.in"; sourceTree = ""; }; - 55484C6F288555370066EDEB /* SECURITY.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = SECURITY.md; sourceTree = ""; }; - 55484C71288555370066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55484C72288555370066EDEB /* diff_output.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = diff_output.h; sourceTree = ""; }; - 55484C73288555370066EDEB /* zipmerge.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zipmerge.c; sourceTree = ""; }; - 55484C74288555370066EDEB /* getopt.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = getopt.h; sourceTree = ""; }; - 55484C75288555370066EDEB /* ziptool.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = ziptool.c; sourceTree = ""; }; - 55484C76288555370066EDEB /* zipcmp.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zipcmp.c; sourceTree = ""; }; - 55484C77288555370066EDEB /* diff_output.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = diff_output.c; sourceTree = ""; }; - 55484C78288555370066EDEB /* getopt.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = getopt.c; sourceTree = ""; }; 55484C7A288555370066EDEB /* libzip.vcxproj */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = libzip.vcxproj; sourceTree = ""; }; 55484D302885595F0066EDEB /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = ""; }; 55484D3928855E1D0066EDEB /* GSDumpReplayer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDumpReplayer.h; sourceTree = ""; }; @@ -3075,6 +2380,273 @@ 55BD3E79295A5A37001DD03E /* cam-noop.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "cam-noop.cpp"; sourceTree = ""; }; 55BD3E7B295A5ABC001DD03E /* misc.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = misc.metal; sourceTree = ""; }; 55BD3E7C295A5ABC001DD03E /* cas.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = cas.metal; sourceTree = ""; }; + 55C765862B776805005DC873 /* InputManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InputManager.h; sourceTree = ""; }; + 55C765872B776805005DC873 /* SDLInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SDLInputSource.cpp; sourceTree = ""; }; + 55C765882B776805005DC873 /* XInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = XInputSource.cpp; sourceTree = ""; }; + 55C765892B776805005DC873 /* SDLInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SDLInputSource.h; sourceTree = ""; }; + 55C7658A2B776805005DC873 /* XInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = XInputSource.h; sourceTree = ""; }; + 55C7658B2B776805005DC873 /* InputManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InputManager.cpp; sourceTree = ""; }; + 55C7658C2B776805005DC873 /* DInputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DInputSource.h; sourceTree = ""; }; + 55C7658D2B776805005DC873 /* InputSource.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = InputSource.h; sourceTree = ""; }; + 55C7658E2B776805005DC873 /* DInputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DInputSource.cpp; sourceTree = ""; }; + 55C7658F2B776805005DC873 /* InputSource.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = InputSource.cpp; sourceTree = ""; }; + 55C765982B776E88005DC873 /* Sio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sio.h; sourceTree = ""; }; + 55C7659A2B776E88005DC873 /* MultitapProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MultitapProtocol.h; sourceTree = ""; }; + 55C7659B2B776E88005DC873 /* MultitapProtocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MultitapProtocol.cpp; sourceTree = ""; }; + 55C7659C2B776E88005DC873 /* Sio0.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sio0.h; sourceTree = ""; }; + 55C7659E2B776E88005DC873 /* MemoryCardFolder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardFolder.h; sourceTree = ""; }; + 55C7659F2B776E88005DC873 /* MemoryCardProtocol.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardProtocol.cpp; sourceTree = ""; }; + 55C765A02B776E88005DC873 /* MemoryCardFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardFile.cpp; sourceTree = ""; }; + 55C765A12B776E88005DC873 /* MemoryCardFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardFile.h; sourceTree = ""; }; + 55C765A22B776E88005DC873 /* MemoryCardFolder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemoryCardFolder.cpp; sourceTree = ""; }; + 55C765A32B776E88005DC873 /* MemoryCardProtocol.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MemoryCardProtocol.h; sourceTree = ""; }; + 55C765A52B776E88005DC873 /* PadNotConnected.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PadNotConnected.cpp; sourceTree = ""; }; + 55C765A62B776E88005DC873 /* PadPopn.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PadPopn.cpp; sourceTree = ""; }; + 55C765A72B776E88005DC873 /* Pad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Pad.h; sourceTree = ""; }; + 55C765A82B776E88005DC873 /* PadPopn.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadPopn.h; sourceTree = ""; }; + 55C765A92B776E88005DC873 /* PadGuitar.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadGuitar.h; sourceTree = ""; }; + 55C765AA2B776E88005DC873 /* PadTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadTypes.h; sourceTree = ""; }; + 55C765AB2B776E88005DC873 /* PadDualshock2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PadDualshock2.cpp; sourceTree = ""; }; + 55C765AC2B776E88005DC873 /* Pad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Pad.cpp; sourceTree = ""; }; + 55C765AD2B776E88005DC873 /* PadBase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PadBase.cpp; sourceTree = ""; }; + 55C765AE2B776E88005DC873 /* PadDualshock2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadDualshock2.h; sourceTree = ""; }; + 55C765AF2B776E88005DC873 /* PadBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadBase.h; sourceTree = ""; }; + 55C765B02B776E88005DC873 /* PadNotConnected.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PadNotConnected.h; sourceTree = ""; }; + 55C765B12B776E88005DC873 /* PadGuitar.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PadGuitar.cpp; sourceTree = ""; }; + 55C765B22B776E88005DC873 /* Sio.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sio.cpp; sourceTree = ""; }; + 55C765B32B776E88005DC873 /* SioTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SioTypes.h; sourceTree = ""; }; + 55C765B42B776E88005DC873 /* Sio2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sio2.h; sourceTree = ""; }; + 55C765B52B776E88005DC873 /* Sio0.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sio0.cpp; sourceTree = ""; }; + 55C765B62B776E88005DC873 /* Sio2.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Sio2.cpp; sourceTree = ""; }; + 55C765C62B777022005DC873 /* zip_crypto_gnutls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_crypto_gnutls.c; sourceTree = ""; }; + 55C765C72B777022005DC873 /* zip_source_tell_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_tell_write.c; sourceTree = ""; }; + 55C765C82B777022005DC873 /* zip_memdup.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_memdup.c; sourceTree = ""; }; + 55C765C92B777022005DC873 /* zip_source_supports.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_supports.c; sourceTree = ""; }; + 55C765CA2B777022005DC873 /* zip_file_get_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_get_external_attributes.c; sourceTree = ""; }; + 55C765CB2B777022005DC873 /* zip_source_begin_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_begin_write.c; sourceTree = ""; }; + 55C765CC2B777022005DC873 /* zipint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zipint.h; sourceTree = ""; }; + 55C765CD2B777022005DC873 /* zip_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_add.c; sourceTree = ""; }; + 55C765CE2B777022005DC873 /* zip_get_name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_name.c; sourceTree = ""; }; + 55C765CF2B777022005DC873 /* zip_file_strerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_strerror.c; sourceTree = ""; }; + 55C765D02B777022005DC873 /* zip_fopen_index.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fopen_index.c; sourceTree = ""; }; + 55C765D12B777022005DC873 /* zip_source_commit_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_commit_write.c; sourceTree = ""; }; + 55C765D22B777022005DC873 /* zip_source_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_buffer.c; sourceTree = ""; }; + 55C765D32B777022005DC873 /* zip_error_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error_clear.c; sourceTree = ""; }; + 55C765D42B777022005DC873 /* zip_source_stat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_stat.c; sourceTree = ""; }; + 55C765D52B777022005DC873 /* zip_get_archive_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_archive_comment.c; sourceTree = ""; }; + 55C765D62B777022005DC873 /* zip_file_rename.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_rename.c; sourceTree = ""; }; + 55C765D72B777022005DC873 /* zip_ftell.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_ftell.c; sourceTree = ""; }; + 55C765D82B777022005DC873 /* zip_discard.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_discard.c; sourceTree = ""; }; + 55C765D92B777022005DC873 /* zip_string.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_string.c; sourceTree = ""; }; + 55C765DA2B777022005DC873 /* zip_set_name.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_name.c; sourceTree = ""; }; + 55C765DB2B777022005DC873 /* zip_entry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_entry.c; sourceTree = ""; }; + 55C765DC2B777022005DC873 /* zip_file_set_encryption.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_encryption.c; sourceTree = ""; }; + 55C765DD2B777022005DC873 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + 55C765DE2B777022005DC873 /* zip_source_open.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_open.c; sourceTree = ""; }; + 55C765DF2B777022005DC873 /* zip_set_file_compression.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_file_compression.c; sourceTree = ""; }; + 55C765E02B777022005DC873 /* zip_hash.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_hash.c; sourceTree = ""; }; + 55C765E12B777022005DC873 /* zip_file_error_get.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_error_get.c; sourceTree = ""; }; + 55C765E22B777022005DC873 /* zip_file_replace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_replace.c; sourceTree = ""; }; + 55C765E32B777022005DC873 /* zip_crypto_mbedtls.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_crypto_mbedtls.c; sourceTree = ""; }; + 55C765E42B777022005DC873 /* zip_file_get_offset.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_get_offset.c; sourceTree = ""; }; + 55C765E52B777022005DC873 /* zip_unchange.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_unchange.c; sourceTree = ""; }; + 55C765E62B777022005DC873 /* zip_new.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_new.c; sourceTree = ""; }; + 55C765E72B777022005DC873 /* zip_file_set_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_comment.c; sourceTree = ""; }; + 55C765E82B777022005DC873 /* zip_random_unix.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_random_unix.c; sourceTree = ""; }; + 55C765E92B777022005DC873 /* zip_close.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_close.c; sourceTree = ""; }; + 55C765EA2B777022005DC873 /* zip_source_file_win32_ansi.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_ansi.c; sourceTree = ""; }; + 55C765EB2B777022005DC873 /* zip_crypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto.h; sourceTree = ""; }; + 55C765EC2B777022005DC873 /* zip_add_dir.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_add_dir.c; sourceTree = ""; }; + 55C765ED2B777022005DC873 /* zip_error_get_sys_type.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error_get_sys_type.c; sourceTree = ""; }; + 55C765EE2B777022005DC873 /* zip_source_call.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_call.c; sourceTree = ""; }; + 55C765EF2B777022005DC873 /* zip_source_is_deleted.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_is_deleted.c; sourceTree = ""; }; + 55C765F02B777022005DC873 /* zip_fopen_encrypted.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fopen_encrypted.c; sourceTree = ""; }; + 55C765F12B777022005DC873 /* zip_set_archive_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_archive_comment.c; sourceTree = ""; }; + 55C765F22B777022005DC873 /* zip_extra_field.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_extra_field.c; sourceTree = ""; }; + 55C765F32B777022005DC873 /* zip_source_file_stdio.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio.c; sourceTree = ""; }; + 55C765F42B777022005DC873 /* zip_dir_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_dir_add.c; sourceTree = ""; }; + 55C765F52B777022005DC873 /* zip_name_locate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_name_locate.c; sourceTree = ""; }; + 55C765F62B777022005DC873 /* zip_source_seek_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_seek_write.c; sourceTree = ""; }; + 55C765F72B777022005DC873 /* zip_algorithm_deflate.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_deflate.c; sourceTree = ""; }; + 55C765F82B777022005DC873 /* zip_unchange_archive.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_unchange_archive.c; sourceTree = ""; }; + 55C765F92B777022005DC873 /* zip_source_free.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_free.c; sourceTree = ""; }; + 55C765FA2B777022005DC873 /* zip_source_file_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_common.c; sourceTree = ""; }; + 55C765FB2B777022005DC873 /* zip_get_num_files.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_num_files.c; sourceTree = ""; }; + 55C765FC2B777022005DC873 /* zip_pkware.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_pkware.c; sourceTree = ""; }; + 55C765FD2B777022005DC873 /* zip_add_entry.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_add_entry.c; sourceTree = ""; }; + 55C765FE2B777022005DC873 /* zip_random_uwp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_random_uwp.c; sourceTree = ""; }; + 55C765FF2B777022005DC873 /* zip_buffer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_buffer.c; sourceTree = ""; }; + 55C766002B777022005DC873 /* zip_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error.c; sourceTree = ""; }; + 55C766012B777022005DC873 /* zip_crypto_win.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_crypto_win.c; sourceTree = ""; }; + 55C766022B777022005DC873 /* zip_strerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_strerror.c; sourceTree = ""; }; + 55C766032B777022005DC873 /* zip_source_seek.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_seek.c; sourceTree = ""; }; + 55C766042B777022005DC873 /* zip_get_encryption_implementation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_encryption_implementation.c; sourceTree = ""; }; + 55C766052B777022005DC873 /* zip_get_archive_flag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_archive_flag.c; sourceTree = ""; }; + 55C766062B777022005DC873 /* zip_source_pkware_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_pkware_encode.c; sourceTree = ""; }; + 55C766072B777022005DC873 /* zip_set_archive_flag.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_archive_flag.c; sourceTree = ""; }; + 55C766082B777022005DC873 /* zip_source_zip_new.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_zip_new.c; sourceTree = ""; }; + 55C766092B777022005DC873 /* zip_source_file_win32.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_source_file_win32.h; sourceTree = ""; }; + 55C7660A2B777022005DC873 /* zip_crypto_openssl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto_openssl.h; sourceTree = ""; }; + 55C7660B2B777022005DC873 /* zip_fdopen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fdopen.c; sourceTree = ""; }; + 55C7660C2B777022005DC873 /* zip_unchange_data.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_unchange_data.c; sourceTree = ""; }; + 55C7660D2B777022005DC873 /* zip_crypto_commoncrypto.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_crypto_commoncrypto.c; sourceTree = ""; }; + 55C7660E2B777022005DC873 /* zip_source_pkware_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_pkware_decode.c; sourceTree = ""; }; + 55C7660F2B777022005DC873 /* zip_file_set_mtime.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_mtime.c; sourceTree = ""; }; + 55C766102B777022005DC873 /* zip_source_file_win32_named.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_named.c; sourceTree = ""; }; + 55C766112B777022005DC873 /* zip_set_default_password.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_default_password.c; sourceTree = ""; }; + 55C766122B777022005DC873 /* zip_source_file_stdio_named.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_stdio_named.c; sourceTree = ""; }; + 55C766132B777022005DC873 /* zip_extra_field_api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_extra_field_api.c; sourceTree = ""; }; + 55C766142B777022005DC873 /* zip_fread.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fread.c; sourceTree = ""; }; + 55C766152B777022005DC873 /* zip_source_rollback_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_rollback_write.c; sourceTree = ""; }; + 55C766162B777022005DC873 /* zip_progress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_progress.c; sourceTree = ""; }; + 55C766172B777022005DC873 /* zip_rename.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_rename.c; sourceTree = ""; }; + 55C766182B777022005DC873 /* zip_source_zip.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_zip.c; sourceTree = ""; }; + 55C766192B777022005DC873 /* zip_stat_index.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_stat_index.c; sourceTree = ""; }; + 55C7661A2B777022005DC873 /* zip_get_num_entries.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_num_entries.c; sourceTree = ""; }; + 55C7661B2B777022005DC873 /* zip_source_pass_to_lower_layer.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_pass_to_lower_layer.c; sourceTree = ""; }; + 55C7661C2B777022005DC873 /* zip_source_file.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_source_file.h; sourceTree = ""; }; + 55C7661D2B777022005DC873 /* zip_source_function.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_function.c; sourceTree = ""; }; + 55C7661E2B777022005DC873 /* zip_file_set_external_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_set_external_attributes.c; sourceTree = ""; }; + 55C7661F2B777022005DC873 /* zip_fseek.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fseek.c; sourceTree = ""; }; + 55C766202B777022005DC873 /* zip_winzip_aes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_winzip_aes.c; sourceTree = ""; }; + 55C766212B777022005DC873 /* zip_replace.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_replace.c; sourceTree = ""; }; + 55C766222B777022005DC873 /* zip_delete.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_delete.c; sourceTree = ""; }; + 55C766232B777022005DC873 /* zip_source_crc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_crc.c; sourceTree = ""; }; + 55C766242B777022005DC873 /* zip_source_accept_empty.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_accept_empty.c; sourceTree = ""; }; + 55C766252B777022005DC873 /* zip_set_file_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_set_file_comment.c; sourceTree = ""; }; + 55C766262B777022005DC873 /* zip_crypto_gnutls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto_gnutls.h; sourceTree = ""; }; + 55C766272B777022005DC873 /* zip_stat.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_stat.c; sourceTree = ""; }; + 55C766282B777022005DC873 /* zip_get_file_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_get_file_comment.c; sourceTree = ""; }; + 55C766292B777022005DC873 /* zip_algorithm_xz.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_xz.c; sourceTree = ""; }; + 55C7662A2B777022005DC873 /* zip.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip.h; sourceTree = ""; }; + 55C7662B2B777022005DC873 /* zip_source_close.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_close.c; sourceTree = ""; }; + 55C7662C2B777022005DC873 /* zip_source_read.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_read.c; sourceTree = ""; }; + 55C7662D2B777022005DC873 /* zip_open.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_open.c; sourceTree = ""; }; + 55C7662E2B777022005DC873 /* zip_source_begin_write_cloning.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_begin_write_cloning.c; sourceTree = ""; }; + 55C7662F2B777022005DC873 /* compat.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = compat.h; sourceTree = ""; }; + 55C766302B777022005DC873 /* zip_crypto_mbedtls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto_mbedtls.h; sourceTree = ""; }; + 55C766312B777022005DC873 /* zip_fopen_index_encrypted.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fopen_index_encrypted.c; sourceTree = ""; }; + 55C766322B777022005DC873 /* zip_source_file_win32_utf8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf8.c; sourceTree = ""; }; + 55C766332B777022005DC873 /* zip_utf-8.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = "zip_utf-8.c"; sourceTree = ""; }; + 55C766342B777022005DC873 /* zip_error_get.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error_get.c; sourceTree = ""; }; + 55C766352B777022005DC873 /* zip_fclose.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fclose.c; sourceTree = ""; }; + 55C766362B777022005DC873 /* zip_dirent.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_dirent.c; sourceTree = ""; }; + 55C766372B777022005DC873 /* zip_source_write.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_write.c; sourceTree = ""; }; + 55C766382B777022005DC873 /* zip_file_add.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_add.c; sourceTree = ""; }; + 55C766392B777022005DC873 /* zip_source_error.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_error.c; sourceTree = ""; }; + 55C7663A2B777022005DC873 /* zip_source_tell.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_tell.c; sourceTree = ""; }; + 55C7663B2B777022005DC873 /* zip_crypto_win.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto_win.h; sourceTree = ""; }; + 55C7663C2B777022005DC873 /* zip_source_get_file_attributes.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_get_file_attributes.c; sourceTree = ""; }; + 55C7663D2B777022005DC873 /* zip_file_error_clear.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_error_clear.c; sourceTree = ""; }; + 55C7663E2B777022005DC873 /* zip_source_compress.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_compress.c; sourceTree = ""; }; + 55C7663F2B777022005DC873 /* zip_libzip_version.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_libzip_version.c; sourceTree = ""; }; + 55C766402B777022005DC873 /* zip_error_to_str.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error_to_str.c; sourceTree = ""; }; + 55C766412B777022005DC873 /* zip_source_remove.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_remove.c; sourceTree = ""; }; + 55C766422B777022005DC873 /* zip_algorithm_bzip2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_bzip2.c; sourceTree = ""; }; + 55C766432B777022005DC873 /* zip_source_file_stdio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_source_file_stdio.h; sourceTree = ""; }; + 55C766442B777022005DC873 /* zip_random_win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_random_win32.c; sourceTree = ""; }; + 55C766452B777022005DC873 /* zip_source_window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_window.c; sourceTree = ""; }; + 55C766462B777022005DC873 /* zip_file_get_comment.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_file_get_comment.c; sourceTree = ""; }; + 55C766472B777022005DC873 /* zip_source_winzip_aes_decode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_decode.c; sourceTree = ""; }; + 55C766482B777022005DC873 /* zip_stat_init.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_stat_init.c; sourceTree = ""; }; + 55C766492B777022005DC873 /* zip_fopen.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_fopen.c; sourceTree = ""; }; + 55C7664A2B777022005DC873 /* zip_crypto_openssl.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_crypto_openssl.c; sourceTree = ""; }; + 55C7664B2B777022005DC873 /* zip_crypto_commoncrypto.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = zip_crypto_commoncrypto.h; sourceTree = ""; }; + 55C7664C2B777022005DC873 /* zip_algorithm_zstd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_algorithm_zstd.c; sourceTree = ""; }; + 55C7664D2B777022005DC873 /* zip_unchange_all.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_unchange_all.c; sourceTree = ""; }; + 55C7664E2B777022005DC873 /* zip_io_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_io_util.c; sourceTree = ""; }; + 55C7664F2B777022005DC873 /* zip_source_winzip_aes_encode.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_winzip_aes_encode.c; sourceTree = ""; }; + 55C766502B777022005DC873 /* zip_source_layered.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_layered.c; sourceTree = ""; }; + 55C766512B777022005DC873 /* zip_source_file_win32_utf16.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32_utf16.c; sourceTree = ""; }; + 55C766522B777022005DC873 /* zip_error_strerror.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_error_strerror.c; sourceTree = ""; }; + 55C766532B777022005DC873 /* zip_source_file_win32.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_source_file_win32.c; sourceTree = ""; }; + 55C766E22B7771E0005DC873 /* lzma.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = lzma.vcxproj.filters; sourceTree = ""; }; + 55C766E32B7771E0005DC873 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; + 55C766E52B7771E0005DC873 /* LzHash.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LzHash.h; sourceTree = ""; }; + 55C766E62B7771E0005DC873 /* 7zTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zTypes.h; sourceTree = ""; }; + 55C766E72B7771E0005DC873 /* Compiler.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Compiler.h; sourceTree = ""; }; + 55C766E82B7771E0005DC873 /* XzCrc64.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XzCrc64.h; sourceTree = ""; }; + 55C766E92B7771E0005DC873 /* Precomp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Precomp.h; sourceTree = ""; }; + 55C766EA2B7771E0005DC873 /* CpuArch.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CpuArch.h; sourceTree = ""; }; + 55C766EB2B7771E0005DC873 /* 7zCrc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zCrc.h; sourceTree = ""; }; + 55C766EC2B7771E0005DC873 /* Delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Delta.h; sourceTree = ""; }; + 55C766ED2B7771E0005DC873 /* 7zFile.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zFile.h; sourceTree = ""; }; + 55C766EE2B7771E0005DC873 /* Sha256.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Sha256.h; sourceTree = ""; }; + 55C766EF2B7771E0005DC873 /* LzmaLib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LzmaLib.h; sourceTree = ""; }; + 55C766F02B7771E0005DC873 /* 7zBuf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zBuf.h; sourceTree = ""; }; + 55C766F12B7771E0005DC873 /* 7z.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7z.h; sourceTree = ""; }; + 55C766F22B7771E0005DC873 /* Xz.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Xz.h; sourceTree = ""; }; + 55C766F32B7771E0005DC873 /* Lzma86.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lzma86.h; sourceTree = ""; }; + 55C766F42B7771E0005DC873 /* LzmaEnc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LzmaEnc.h; sourceTree = ""; }; + 55C766F52B7771E0005DC873 /* Lzma2Dec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lzma2Dec.h; sourceTree = ""; }; + 55C766F62B7771E0005DC873 /* LzFind.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LzFind.h; sourceTree = ""; }; + 55C766F72B7771E0005DC873 /* Bcj2.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bcj2.h; sourceTree = ""; }; + 55C766F82B7771E0005DC873 /* Ppmd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ppmd.h; sourceTree = ""; }; + 55C766F92B7771E0005DC873 /* 7zAlloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zAlloc.h; sourceTree = ""; }; + 55C766FA2B7771E0005DC873 /* 7zVersion.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = 7zVersion.h; sourceTree = ""; }; + 55C766FB2B7771E0005DC873 /* Bra.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Bra.h; sourceTree = ""; }; + 55C766FC2B7771E0005DC873 /* RotateDefs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RotateDefs.h; sourceTree = ""; }; + 55C766FD2B7771E0005DC873 /* Ppmd7.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Ppmd7.h; sourceTree = ""; }; + 55C766FE2B7771E0005DC873 /* Lzma2Enc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lzma2Enc.h; sourceTree = ""; }; + 55C766FF2B7771E0005DC873 /* LzmaDec.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LzmaDec.h; sourceTree = ""; }; + 55C767002B7771E0005DC873 /* Alloc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Alloc.h; sourceTree = ""; }; + 55C767012B7771E0005DC873 /* Lzma2DecMt.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Lzma2DecMt.h; sourceTree = ""; }; + 55C767022B7771E0005DC873 /* XzEnc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XzEnc.h; sourceTree = ""; }; + 55C767032B7771E0005DC873 /* lzma.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = lzma.vcxproj; sourceTree = ""; }; + 55C767042B7771E0005DC873 /* LICENSE.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE.txt; sourceTree = ""; }; + 55C767062B7771E0005DC873 /* Lzma2Dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lzma2Dec.c; sourceTree = ""; }; + 55C767072B7771E0005DC873 /* LzmaEnc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LzmaEnc.c; sourceTree = ""; }; + 55C767082B7771E0005DC873 /* Ppmd7Dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Ppmd7Dec.c; sourceTree = ""; }; + 55C767092B7771E0005DC873 /* LzFindOpt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LzFindOpt.c; sourceTree = ""; }; + 55C7670A2B7771E0005DC873 /* XzDec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XzDec.c; sourceTree = ""; }; + 55C7670B2B7771E0005DC873 /* Bcj2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Bcj2.c; sourceTree = ""; }; + 55C7670C2B7771E0005DC873 /* LzFind.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LzFind.c; sourceTree = ""; }; + 55C7670D2B7771E0005DC873 /* Ppmd7.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Ppmd7.c; sourceTree = ""; }; + 55C7670E2B7771E0005DC873 /* Bra.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Bra.c; sourceTree = ""; }; + 55C7670F2B7771E0005DC873 /* Bra86.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Bra86.c; sourceTree = ""; }; + 55C767102B7771E0005DC873 /* 7zArcIn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zArcIn.c; sourceTree = ""; }; + 55C767112B7771E0005DC873 /* 7zAlloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zAlloc.c; sourceTree = ""; }; + 55C767122B7771E0005DC873 /* XzIn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XzIn.c; sourceTree = ""; }; + 55C767132B7771E0005DC873 /* XzEnc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XzEnc.c; sourceTree = ""; }; + 55C767142B7771E0005DC873 /* Lzma2DecMt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lzma2DecMt.c; sourceTree = ""; }; + 55C767152B7771E0005DC873 /* Alloc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Alloc.c; sourceTree = ""; }; + 55C767162B7771E0005DC873 /* LzmaDec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LzmaDec.c; sourceTree = ""; }; + 55C767172B7771E0005DC873 /* Lzma2Enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lzma2Enc.c; sourceTree = ""; }; + 55C767182B7771E0005DC873 /* Ppmd7Enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Ppmd7Enc.c; sourceTree = ""; }; + 55C767192B7771E0005DC873 /* 7zDec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zDec.c; sourceTree = ""; }; + 55C7671A2B7771E0005DC873 /* 7zBuf2.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zBuf2.c; sourceTree = ""; }; + 55C7671B2B7771E0005DC873 /* XzCrc64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XzCrc64.c; sourceTree = ""; }; + 55C7671C2B7771E0005DC873 /* BraIA64.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = BraIA64.c; sourceTree = ""; }; + 55C7671D2B7771E0005DC873 /* Lzma86Dec.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lzma86Dec.c; sourceTree = ""; }; + 55C7671E2B7771E0005DC873 /* 7zStream.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zStream.c; sourceTree = ""; }; + 55C7671F2B7771E0005DC873 /* Sha256.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Sha256.c; sourceTree = ""; }; + 55C767202B7771E0005DC873 /* Sha256Opt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Sha256Opt.c; sourceTree = ""; }; + 55C767212B7771E0005DC873 /* Delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Delta.c; sourceTree = ""; }; + 55C767222B7771E0005DC873 /* 7zFile.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zFile.c; sourceTree = ""; }; + 55C767232B7771E0005DC873 /* 7zCrc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zCrc.c; sourceTree = ""; }; + 55C767242B7771E0005DC873 /* Lzma86Enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Lzma86Enc.c; sourceTree = ""; }; + 55C767252B7771E0005DC873 /* CpuArch.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = CpuArch.c; sourceTree = ""; }; + 55C767262B7771E0005DC873 /* Bcj2Enc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Bcj2Enc.c; sourceTree = ""; }; + 55C767272B7771E0005DC873 /* XzCrc64Opt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = XzCrc64Opt.c; sourceTree = ""; }; + 55C767282B7771E0005DC873 /* Xz.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = Xz.c; sourceTree = ""; }; + 55C767292B7771E0005DC873 /* 7zCrcOpt.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zCrcOpt.c; sourceTree = ""; }; + 55C7672A2B7771E0005DC873 /* 7zBuf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = 7zBuf.c; sourceTree = ""; }; + 55C7672B2B7771E0005DC873 /* LzmaLib.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = LzmaLib.c; sourceTree = ""; }; + 55C767702B777353005DC873 /* ReverbResample.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReverbResample.cpp; sourceTree = ""; }; + 55C767722B777407005DC873 /* DiscordStubs.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DiscordStubs.cpp; sourceTree = ""; }; + 55C767742B77751E005DC873 /* GLShaderCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLShaderCache.h; sourceTree = ""; }; + 55C767752B77751E005DC873 /* GLShaderCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLShaderCache.cpp; sourceTree = ""; }; + 55C767772B7775A6005DC873 /* GLStreamBuffer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLStreamBuffer.cpp; sourceTree = ""; }; + 55C767782B7775A6005DC873 /* GLStreamBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLStreamBuffer.h; sourceTree = ""; }; + 55C7677A2B777606005DC873 /* LayeredSettingsInterface.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LayeredSettingsInterface.cpp; sourceTree = ""; }; + 55C7677B2B777606005DC873 /* LayeredSettingsInterface.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayeredSettingsInterface.h; sourceTree = ""; }; + 55C7677D2B77763A005DC873 /* GameList.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GameList.cpp; sourceTree = ""; }; + 55C7677E2B77763B005DC873 /* GameList.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GameList.h; sourceTree = ""; }; + 55C767802B777677005DC873 /* GLProgram.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GLProgram.h; sourceTree = ""; }; + 55C767812B777677005DC873 /* GLProgram.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLProgram.cpp; sourceTree = ""; }; + 55C767832B77772A005DC873 /* zip_err_str.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_err_str.c; sourceTree = ""; }; + 55C767852B77781A005DC873 /* GLContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLContext.h; sourceTree = ""; }; + 55C767862B7778A5005DC873 /* GLContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLContext.cpp; sourceTree = ""; }; 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = RedumpDatabase.yaml; sourceTree = ""; }; 55DB5A362B5903AE00B3BD75 /* StackWalker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StackWalker.cpp; sourceTree = ""; }; 55DB5A372B5903AE00B3BD75 /* FPControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FPControl.h; sourceTree = ""; }; @@ -3415,8 +2987,8 @@ DD0302B427C491020006ABDC /* OESndOut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OESndOut.h; sourceTree = ""; }; DD0302B527C491020006ABDC /* OESndOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OESndOut.cpp; sourceTree = ""; }; DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLHostDisplayOverride.cpp; sourceTree = ""; }; - DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 1; }; - DD0302BC27C491160006ABDC /* ContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = ContextAGL.mm; sourceTree = ""; }; + DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 0; }; + DD0302BC27C491160006ABDC /* GLContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GLContextAGL.mm; sourceTree = ""; }; DD0302C827C5494A0006ABDC /* keymap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keymap.h; sourceTree = ""; }; DD03FFB427B70F0C0006ABDC /* GSMetalCPPAccessible.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSMetalCPPAccessible.h; sourceTree = ""; }; DD03FFB527B70F0C0006ABDC /* GSMTLDeviceInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSMTLDeviceInfo.h; sourceTree = ""; }; @@ -3633,6 +3205,7 @@ 551BF5B626420FFC0008C529 /* svnrev.h */, 551BF5ED264212D60008C529 /* soundtouch_config.h */, 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */, + 55C767722B777407005DC873 /* DiscordStubs.cpp */, ); path = Classes; sourceTree = ""; @@ -3680,9 +3253,7 @@ 5517E8D0263D4831000219EC /* 3rdparty */ = { isa = PBXGroup; children = ( - 55DB5DC92B59174800B3BD75 /* lz4 */, 55DB5CDE2B590FF200B3BD75 /* cpuinfo */, - 55DB5A7F2B590A6C00B3BD75 /* libwebp */, 558063BD27AB4B9E008CD5D2 /* cubeb */, 5517EC5E263D4834000219EC /* fmt */, 551AA4032792C12E00658151 /* glad */, @@ -3690,7 +3261,10 @@ 55B1EFE6295BAA2B00DB297F /* jpgd */, 5517EEE4263D4836000219EC /* libchdr */, 5517E970263D4831000219EC /* libpng */, + 55DB5A7F2B590A6C00B3BD75 /* libwebp */, 55484936288555330066EDEB /* libzip */, + 55DB5DC92B59174800B3BD75 /* lz4 */, + 55C766E12B7771E0005DC873 /* lzma */, 5564D3FE279A07D200EECDEC /* rapidyaml */, 55B1EFBA295BA17800DB297F /* simpleini */, 5517E8D1263D4831000219EC /* soundtouch */, @@ -4377,6 +3951,8 @@ 5517FE1C263D49BC000219EC /* FW.h */, 5517FE18263D49BC000219EC /* GameDatabase.cpp */, 5517FDEB263D49BC000219EC /* GameDatabase.h */, + 55C7677D2B77763A005DC873 /* GameList.cpp */, + 55C7677E2B77763B005DC873 /* GameList.h */, 5517FE24263D49BC000219EC /* Gif_Logger.cpp */, 5517FCC4263D49BC000219EC /* Gif_Unit.cpp */, 5517FBDF263D49BC000219EC /* Gif_Unit.h */, @@ -4396,6 +3972,7 @@ 5517FB32263D49BB000219EC /* HwWrite.cpp */, 55B1EFB7295BA12E00DB297F /* INISettingsInterface.cpp */, 55B1EFB8295BA12E00DB297F /* INISettingsInterface.h */, + 55C765852B776805005DC873 /* Input */, 5517FAC0263D49BB000219EC /* Interpreter.cpp */, 5517FB60263D49BB000219EC /* IopBios.cpp */, 5517FAF9263D49BB000219EC /* IopBios.h */, @@ -4412,6 +3989,8 @@ 5517FAFD263D49BB000219EC /* IopMem.h */, 5517FABC263D49BB000219EC /* IopModuleNames.cpp */, 5517FAC2263D49BB000219EC /* IPU */, + 55C7677A2B777606005DC873 /* LayeredSettingsInterface.cpp */, + 55C7677B2B777606005DC873 /* LayeredSettingsInterface.h */, 5517FB5C263D49BB000219EC /* Mdec.cpp */, 5517FE1B263D49BC000219EC /* Mdec.h */, 5517FAAC263D49BB000219EC /* Memory.cpp */, @@ -4452,6 +4031,7 @@ 5517FB45263D49BB000219EC /* Sif1.cpp */, 5517FB00263D49BB000219EC /* sif2.cpp */, 5517FCBE263D49BC000219EC /* Sifcmd.h */, + 55C765972B776E88005DC873 /* SIO */, 5517FAAD263D49BB000219EC /* SourceLog.cpp */, 5517FB64263D49BB000219EC /* SPR.cpp */, 5517FDFF263D49BC000219EC /* SPR.h */, @@ -4803,6 +4383,7 @@ 5517FCF1263D49BC000219EC /* regs.h */, 5517FD04263D49BC000219EC /* RegTable.cpp */, 5517FCEF263D49BC000219EC /* Reverb.cpp */, + 55C767702B777353005DC873 /* ReverbResample.cpp */, 558063BB27AB4B6C008CD5D2 /* SndOut_Cubeb.cpp */, 5517FCD0263D49BC000219EC /* SndOut.cpp */, 5517FCDD263D49BC000219EC /* SndOut.h */, @@ -5073,8 +4654,16 @@ 551AA0DD2792AB1700658151 /* OpenGL */ = { isa = PBXGroup; children = ( + 55C767862B7778A5005DC873 /* GLContext.cpp */, + 55C767852B77781A005DC873 /* GLContext.h */, + 55C767812B777677005DC873 /* GLProgram.cpp */, + 55C767802B777677005DC873 /* GLProgram.h */, + 55C767752B77751E005DC873 /* GLShaderCache.cpp */, + 55C767742B77751E005DC873 /* GLShaderCache.h */, 551AA0E12792AB1700658151 /* GLState.cpp */, 551AA0E62792AB1700658151 /* GLState.h */, + 55C767772B7775A6005DC873 /* GLStreamBuffer.cpp */, + 55C767782B7775A6005DC873 /* GLStreamBuffer.h */, 551AA0E72792AB1700658151 /* GSDeviceOGL.cpp */, 551AA0E42792AB1700658151 /* GSDeviceOGL.h */, 551AA0E82792AB1700658151 /* GSTextureOGL.cpp */, @@ -5302,903 +4891,14 @@ 55484936288555330066EDEB /* libzip */ = { isa = PBXGroup; children = ( + 55C765C52B777022005DC873 /* lib */, 55484937288555330066EDEB /* CMakeLists.txt */, - 5548493C288555330066EDEB /* libzip */, 55484C7A288555370066EDEB /* libzip.vcxproj */, 5548493B288555330066EDEB /* libzip.vcxproj.filters */, ); path = libzip; sourceTree = ""; }; - 5548493C288555330066EDEB /* libzip */ = { - isa = PBXGroup; - children = ( - 55484BC3288555360066EDEB /* android */, - 55484C61288555370066EDEB /* API-CHANGES.md */, - 55484BBD288555360066EDEB /* appveyor.yml */, - 55484A7D288555340066EDEB /* AUTHORS */, - 55484A78288555340066EDEB /* cmake */, - 55484BB0288555360066EDEB /* cmake-compat */, - 55484BAF288555360066EDEB /* cmake-config.h.in */, - 55484A7E288555340066EDEB /* cmake-zipconf.h.in */, - 55484A76288555340066EDEB /* CMakeLists.txt */, - 55484BBF288555360066EDEB /* examples */, - 55484BBA288555360066EDEB /* INSTALL.md */, - 55484BD3288555360066EDEB /* lib */, - 55484C6E288555370066EDEB /* libzip-config.cmake.in */, - 55484BA9288555360066EDEB /* libzip.pc.in */, - 55484A77288555340066EDEB /* LICENSE */, - 5548493D288555330066EDEB /* man */, - 55484BA8288555360066EDEB /* NEWS.md */, - 55484BBC288555360066EDEB /* README.md */, - 55484A7F288555340066EDEB /* regress */, - 55484C6F288555370066EDEB /* SECURITY.md */, - 55484C70288555370066EDEB /* src */, - 55484C62288555370066EDEB /* THANKS */, - 55484BBB288555360066EDEB /* TODO.md */, - 55484BAA288555360066EDEB /* vstudio */, - ); - path = libzip; - sourceTree = ""; - }; - 5548493D288555330066EDEB /* man */ = { - isa = PBXGroup; - children = ( - 5548493E288555330066EDEB /* zip_set_archive_comment.html */, - 5548493F288555330066EDEB /* ZIP_SOURCE_GET_ARGS.mdoc */, - 55484940288555330066EDEB /* zip_ftell.man */, - 55484941288555330066EDEB /* zip_error_strerror.man */, - 55484942288555330066EDEB /* libzip.html */, - 55484943288555330066EDEB /* zip_error_get.html */, - 55484944288555330066EDEB /* zip_encryption_method_supported.html */, - 55484945288555330066EDEB /* zip_error_set.html */, - 55484946288555330066EDEB /* zip_get_error.html */, - 55484947288555330066EDEB /* zip_add.html */, - 55484948288555330066EDEB /* zip_source_tell_write.html */, - 55484949288555330066EDEB /* zip_fread.html */, - 5548494A288555330066EDEB /* zip_error_to_data.html */, - 5548494B288555330066EDEB /* zip_file_get_external_attributes.man */, - 5548494C288555330066EDEB /* zip_error_system_type.html */, - 5548494D288555330066EDEB /* zip_source_function.man */, - 5548494E288555330066EDEB /* zip_file_add.man */, - 5548494F288555330066EDEB /* zip_source_buffer_fragment.man */, - 55484950288555330066EDEB /* zip_file_add.mdoc */, - 55484951288555330066EDEB /* zip_error_get_sys_type.mdoc */, - 55484952288555330066EDEB /* zip_get_error.man */, - 55484953288555330066EDEB /* zip_delete.html */, - 55484954288555330066EDEB /* zip_source_error.html */, - 55484955288555330066EDEB /* zip_source_is_deleted.mdoc */, - 55484956288555330066EDEB /* zip_set_default_password.man */, - 55484957288555330066EDEB /* zip_file_set_encryption.man */, - 55484958288555330066EDEB /* zip_source_window.man */, - 55484959288555330066EDEB /* zip_get_num_entries.man */, - 5548495A288555330066EDEB /* zip_get_file_comment.man */, - 5548495B288555330066EDEB /* zip_set_file_compression.man */, - 5548495C288555330066EDEB /* libzip.man */, - 5548495D288555330066EDEB /* zip_source_seek.man */, - 5548495E288555330066EDEB /* zip_file_attributes_init.man */, - 5548495F288555330066EDEB /* zip_dir_add.man */, - 55484960288555330066EDEB /* zip_source_seek_compute_offset.html */, - 55484961288555330066EDEB /* zip_source_zip.man */, - 55484962288555330066EDEB /* zip_error_code_system.man */, - 55484963288555330066EDEB /* zip_source_make_command_bitmap.html */, - 55484964288555330066EDEB /* zip_source_buffer_fragment.mdoc */, - 55484965288555330066EDEB /* zip_register_cancel_callback_with_state.mdoc */, - 55484966288555330066EDEB /* zip_source_filep.mdoc */, - 55484967288555330066EDEB /* zip_unchange.man */, - 55484968288555330066EDEB /* zip_source_zip.mdoc */, - 55484969288555330066EDEB /* zip_error_fini.html */, - 5548496A288555330066EDEB /* zip_file_attributes_init.html */, - 5548496B288555330066EDEB /* zip_source_read.mdoc */, - 5548496C288555330066EDEB /* zip_error_to_str.man */, - 5548496D288555330066EDEB /* zip_register_cancel_callback_with_state.man */, - 5548496E288555330066EDEB /* zip_delete.man */, - 5548496F288555330066EDEB /* zip_file_get_external_attributes.html */, - 55484970288555330066EDEB /* zip_file_rename.mdoc */, - 55484971288555330066EDEB /* zip_set_file_comment.man */, - 55484972288555330066EDEB /* zip_source_make_command_bitmap.man */, - 55484973288555330066EDEB /* CMakeLists.txt */, - 55484974288555330066EDEB /* zip_set_file_compression.html */, - 55484975288555330066EDEB /* zip_source_begin_write.man */, - 55484976288555330066EDEB /* zip_source_file.man */, - 55484977288555330066EDEB /* zip_close.mdoc */, - 55484978288555330066EDEB /* zip_source_seek_write.mdoc */, - 55484979288555330066EDEB /* zip_stat_init.man */, - 5548497A288555330066EDEB /* zip_source_buffer.man */, - 5548497B288555330066EDEB /* zip_source_win32a.html */, - 5548497C288555330066EDEB /* zip_file_set_external_attributes.man */, - 5548497D288555330066EDEB /* zip_stat.mdoc */, - 5548497E288555330066EDEB /* zip_source_stat.html */, - 5548497F288555330066EDEB /* zip_name_locate.html */, - 55484980288555330066EDEB /* zip_file_set_comment.mdoc */, - 55484981288555330066EDEB /* zip_error_code_system.mdoc */, - 55484982288555330066EDEB /* zip_source.html */, - 55484983288555330066EDEB /* zip_source_write.html */, - 55484984288555330066EDEB /* zip_get_name.mdoc */, - 55484985288555330066EDEB /* zip_source_window.html */, - 55484986288555330066EDEB /* zip_error_system_type.man */, - 55484987288555330066EDEB /* zip_errors.html */, - 55484988288555330066EDEB /* zip_source_close.mdoc */, - 55484989288555330066EDEB /* zip_set_default_password.mdoc */, - 5548498A288555330066EDEB /* make_zip_errors.sh */, - 5548498B288555330066EDEB /* zip_name_locate.mdoc */, - 5548498C288555330066EDEB /* zip_error_code_system.html */, - 5548498D288555330066EDEB /* zip_file_set_comment.html */, - 5548498E288555330066EDEB /* zip_source_stat.mdoc */, - 5548498F288555330066EDEB /* zip_source.mdoc */, - 55484990288555330066EDEB /* zip_source_win32a.mdoc */, - 55484991288555330066EDEB /* zip_stat.html */, - 55484992288555330066EDEB /* zip_source_tell.man */, - 55484993288555330066EDEB /* zip_source_close.html */, - 55484994288555330066EDEB /* zip_set_default_password.html */, - 55484995288555330066EDEB /* zip_get_name.html */, - 55484996288555330066EDEB /* zip_source_write.mdoc */, - 55484997288555330066EDEB /* zip_errors.mdoc */, - 55484998288555330066EDEB /* zip_unchange_archive.man */, - 55484999288555330066EDEB /* zip_source_window.mdoc */, - 5548499A288555330066EDEB /* zip_file_rename.html */, - 5548499B288555330066EDEB /* zip_file_get_comment.man */, - 5548499C288555330066EDEB /* zip_file_get_external_attributes.mdoc */, - 5548499D288555330066EDEB /* zip_source.man */, - 5548499E288555330066EDEB /* zip_compression_method_supported.man */, - 5548499F288555330066EDEB /* zip_set_file_compression.mdoc */, - 554849A0288555330066EDEB /* zip_file_attributes_init.mdoc */, - 554849A1288555330066EDEB /* zipcmp.man */, - 554849A2288555330066EDEB /* zip_source_read.html */, - 554849A3288555330066EDEB /* zip_fseek.man */, - 554849A4288555330066EDEB /* zip_source_seek_write.html */, - 554849A5288555330066EDEB /* zip_close.html */, - 554849A6288555330066EDEB /* zip_get_archive_comment.man */, - 554849A7288555330066EDEB /* ziptool.man */, - 554849A8288555330066EDEB /* zip_source_is_deleted.html */, - 554849A9288555330066EDEB /* zip_source_error.mdoc */, - 554849AA288555330066EDEB /* zip_file_extra_field_get.man */, - 554849AB288555330066EDEB /* zip_error_system_type.mdoc */, - 554849AC288555330066EDEB /* zip_error_get_sys_type.html */, - 554849AD288555330066EDEB /* zip_file_add.html */, - 554849AE288555330066EDEB /* zip_fopen_encrypted.man */, - 554849AF288555330066EDEB /* zip_delete.mdoc */, - 554849B0288555330066EDEB /* zip_source_buffer_fragment.html */, - 554849B1288555330066EDEB /* zip_source_make_command_bitmap.mdoc */, - 554849B2288555330066EDEB /* zip_error_fini.mdoc */, - 554849B3288555330066EDEB /* zip_source_zip.html */, - 554849B4288555330066EDEB /* zip_source_filep.html */, - 554849B5288555330066EDEB /* zip_register_cancel_callback_with_state.html */, - 554849B6288555330066EDEB /* handle_links */, - 554849B7288555330066EDEB /* zip_source_seek_compute_offset.mdoc */, - 554849B8288555330066EDEB /* zip_error_to_data.man */, - 554849B9288555330066EDEB /* ZIP_SOURCE_GET_ARGS.html */, - 554849BA288555330066EDEB /* zip_source_filep.man */, - 554849BB288555330066EDEB /* zip_source_commit_write.man */, - 554849BC288555330066EDEB /* zip_error_get.mdoc */, - 554849BD288555330066EDEB /* libzip.mdoc */, - 554849BE288555330066EDEB /* zip_set_archive_comment.mdoc */, - 554849BF288555330066EDEB /* zip_error_set.man */, - 554849C0288555330066EDEB /* zip_get_error.mdoc */, - 554849C1288555330066EDEB /* zip_add.mdoc */, - 554849C2288555330066EDEB /* zip_error_set.mdoc */, - 554849C3288555330066EDEB /* zip_error_to_data.mdoc */, - 554849C4288555330066EDEB /* zip_source_tell_write.mdoc */, - 554849C5288555330066EDEB /* zip_fread.mdoc */, - 554849C6288555330066EDEB /* zip_encryption_method_supported.mdoc */, - 554849C7288555330066EDEB /* zip_source_seek_write.man */, - 554849C8288555330066EDEB /* zipcmp.mdoc */, - 554849C9288555330066EDEB /* zip_name_locate.man */, - 554849CA288555330066EDEB /* zip_source_win32handle.man */, - 554849CB288555330066EDEB /* zip_ftell.html */, - 554849CC288555330066EDEB /* zip_error_init.man */, - 554849CD288555330066EDEB /* zip_dir_add.mdoc */, - 554849CE288555330066EDEB /* zip_source_file.mdoc */, - 554849CF288555330066EDEB /* zip_error_clear.mdoc */, - 554849D0288555330066EDEB /* zip_source_win32w.man */, - 554849D1288555330066EDEB /* zipmerge.mdoc */, - 554849D2288555330066EDEB /* zip_source_win32a.man */, - 554849D3288555330066EDEB /* zip_unchange.html */, - 554849D4288555330066EDEB /* zip_libzip_version.html */, - 554849D5288555330066EDEB /* zip_source_function.html */, - 554849D6288555330066EDEB /* fix-man-links.sh */, - 554849D7288555330066EDEB /* zip_error_get_sys_type.man */, - 554849D8288555330066EDEB /* zip_error_clear.man */, - 554849D9288555330066EDEB /* zip_fclose.man */, - 554849DA288555330066EDEB /* zip_file_set_encryption.html */, - 554849DB288555330066EDEB /* zip_fdopen.mdoc */, - 554849DC288555330066EDEB /* zip_set_archive_comment.man */, - 554849DD288555330066EDEB /* zip_source_stat.man */, - 554849DE288555330066EDEB /* zip_file_set_external_attributes.html */, - 554849DF288555330066EDEB /* zip_fseek.mdoc */, - 554849E0288555330066EDEB /* zip_source_tell_write.man */, - 554849E1288555330066EDEB /* zip_file_set_mtime.html */, - 554849E2288555330066EDEB /* zip_source_win32handle.html */, - 554849E3288555330066EDEB /* zip_add_dir.man */, - 554849E4288555330066EDEB /* zip_error_init.html */, - 554849E5288555330066EDEB /* ZIP_SOURCE_GET_ARGS.man */, - 554849E6288555330066EDEB /* zip_errors.man */, - 554849E7288555330066EDEB /* zip_file_strerror.html */, - 554849E8288555330066EDEB /* zip_get_archive_flag.mdoc */, - 554849E9288555330066EDEB /* zip_source_free.man */, - 554849EA288555330066EDEB /* zip_unchange_all.man */, - 554849EB288555330066EDEB /* zip_set_file_comment.html */, - 554849EC288555330066EDEB /* zip_open.mdoc */, - 554849ED288555330066EDEB /* zip_source_open.html */, - 554849EE288555340066EDEB /* zip_add_dir.mdoc */, - 554849EF288555340066EDEB /* links */, - 554849F0288555340066EDEB /* zip_fclose.mdoc */, - 554849F1288555340066EDEB /* zip_file_extra_fields_count.mdoc */, - 554849F2288555340066EDEB /* zip_file_extra_field_delete.html */, - 554849F3288555340066EDEB /* zip_fdopen.man */, - 554849F4288555340066EDEB /* zip_encryption_method_supported.man */, - 554849F5288555340066EDEB /* mkdocset.pl */, - 554849F6288555340066EDEB /* zip_file_extra_field_get.mdoc */, - 554849F7288555340066EDEB /* zip_file_get_error.html */, - 554849F8288555340066EDEB /* zip_compression_method_supported.mdoc */, - 554849F9288555340066EDEB /* zip_source_rollback_write.mdoc */, - 554849FA288555340066EDEB /* update-man.cmake */, - 554849FB288555340066EDEB /* zip_close.man */, - 554849FC288555340066EDEB /* zip_file_set_comment.man */, - 554849FD288555340066EDEB /* zip_source_buffer.mdoc */, - 554849FE288555340066EDEB /* zip_fopen_encrypted.mdoc */, - 554849FF288555340066EDEB /* zip_source_tell.mdoc */, - 55484A00288555340066EDEB /* zip_file_extra_fields_count.man */, - 55484A01288555340066EDEB /* zip_get_num_entries.mdoc */, - 55484A02288555340066EDEB /* zip_source_open.man */, - 55484A03288555340066EDEB /* zip_file_set_mtime.man */, - 55484A04288555340066EDEB /* zip_rename.man */, - 55484A05288555340066EDEB /* zip_error_to_str.mdoc */, - 55484A06288555340066EDEB /* zip_register_progress_callback_with_state.html */, - 55484A07288555340066EDEB /* zip_unchange_archive.mdoc */, - 55484A08288555340066EDEB /* zip_register_progress_callback_with_state.man */, - 55484A09288555340066EDEB /* zip_file_extra_field_set.mdoc */, - 55484A0A288555340066EDEB /* zip_source_begin_write.mdoc */, - 55484A0B288555340066EDEB /* zip_source_commit_write.html */, - 55484A0C288555340066EDEB /* zip_unchange_all.html */, - 55484A0D288555340066EDEB /* zip_error_code_zip.mdoc */, - 55484A0E288555340066EDEB /* zip_file_get_comment.html */, - 55484A0F288555340066EDEB /* zip_discard.html */, - 55484A10288555340066EDEB /* zip_set_archive_flag.mdoc */, - 55484A11288555340066EDEB /* zip_fopen.mdoc */, - 55484A12288555340066EDEB /* zip_get_file_comment.html */, - 55484A13288555340066EDEB /* zip_register_progress_callback.mdoc */, - 55484A14288555340066EDEB /* zip_add.man */, - 55484A15288555340066EDEB /* zip_libzip_version.man */, - 55484A16288555340066EDEB /* zip_rename.mdoc */, - 55484A17288555340066EDEB /* zip_source_keep.html */, - 55484A18288555340066EDEB /* zip_get_num_files.mdoc */, - 55484A19288555340066EDEB /* ziptool.html */, - 55484A1A288555340066EDEB /* zip_source_error.man */, - 55484A1B288555340066EDEB /* zip_source_free.mdoc */, - 55484A1C288555340066EDEB /* zip_source_rollback_write.man */, - 55484A1D288555340066EDEB /* zip_source_win32w.mdoc */, - 55484A1E288555340066EDEB /* zip_stat_init.html */, - 55484A1F288555340066EDEB /* zip_error_strerror.mdoc */, - 55484A20288555340066EDEB /* zip_fread.man */, - 55484A21288555340066EDEB /* zip_get_archive_comment.html */, - 55484A22288555340066EDEB /* zip_source_seek.html */, - 55484A23288555340066EDEB /* zip_get_name.man */, - 55484A24288555340066EDEB /* zip_register_progress_callback.html */, - 55484A25288555340066EDEB /* zip_error_get.man */, - 55484A26288555340066EDEB /* zip_get_num_files.html */, - 55484A27288555340066EDEB /* zip_source_keep.mdoc */, - 55484A28288555340066EDEB /* zip_rename.html */, - 55484A29288555340066EDEB /* ziptool.mdoc */, - 55484A2A288555340066EDEB /* zip_source_free.html */, - 55484A2B288555340066EDEB /* zip_file_get_comment.mdoc */, - 55484A2C288555340066EDEB /* zip_error_code_zip.html */, - 55484A2D288555340066EDEB /* zip_discard.mdoc */, - 55484A2E288555340066EDEB /* zip_source_begin_write.html */, - 55484A2F288555340066EDEB /* zip_source_commit_write.mdoc */, - 55484A30288555340066EDEB /* zip_unchange_all.mdoc */, - 55484A31288555340066EDEB /* zipmerge.man */, - 55484A32288555340066EDEB /* zip_get_file_comment.mdoc */, - 55484A33288555340066EDEB /* zip_file_get_error.man */, - 55484A34288555340066EDEB /* zip_file_extra_field_delete.man */, - 55484A35288555340066EDEB /* zip_set_archive_flag.html */, - 55484A36288555340066EDEB /* zip_fopen.html */, - 55484A37288555340066EDEB /* update-html.cmake */, - 55484A38288555340066EDEB /* zip_get_archive_comment.mdoc */, - 55484A39288555340066EDEB /* zip_discard.man */, - 55484A3A288555340066EDEB /* zip_source_seek.mdoc */, - 55484A3B288555340066EDEB /* zip_get_num_files.man */, - 55484A3C288555340066EDEB /* zip_stat_init.mdoc */, - 55484A3D288555340066EDEB /* zip_source_win32w.html */, - 55484A3E288555340066EDEB /* zip_stat.man */, - 55484A3F288555340066EDEB /* zip_error_strerror.html */, - 55484A40288555340066EDEB /* zip_source_rollback_write.html */, - 55484A41288555340066EDEB /* zip_error_code_zip.man */, - 55484A42288555340066EDEB /* zip_register_progress_callback.man */, - 55484A43288555340066EDEB /* zip_file_get_error.mdoc */, - 55484A44288555340066EDEB /* zip_compression_method_supported.html */, - 55484A45288555340066EDEB /* zip_file_extra_field_get.html */, - 55484A46288555340066EDEB /* zip_fopen_encrypted.html */, - 55484A47288555340066EDEB /* zip_source_buffer.html */, - 55484A48288555340066EDEB /* zip_file_strerror.man */, - 55484A49288555340066EDEB /* zip_file_extra_fields_count.html */, - 55484A4A288555340066EDEB /* zip_fclose.html */, - 55484A4B288555340066EDEB /* zip_file_extra_field_set.man */, - 55484A4C288555340066EDEB /* zip_file_extra_field_delete.mdoc */, - 55484A4D288555340066EDEB /* zip_source_close.man */, - 55484A4E288555340066EDEB /* zip_error_to_str.html */, - 55484A4F288555340066EDEB /* zip_register_progress_callback_with_state.mdoc */, - 55484A50288555340066EDEB /* zip_set_archive_flag.man */, - 55484A51288555340066EDEB /* zip_unchange_archive.html */, - 55484A52288555340066EDEB /* zip_file_extra_field_set.html */, - 55484A53288555340066EDEB /* zip_get_num_entries.html */, - 55484A54288555340066EDEB /* zip_source_tell.html */, - 55484A55288555340066EDEB /* zip_file_set_mtime.mdoc */, - 55484A56288555340066EDEB /* zip_source_seek_compute_offset.man */, - 55484A57288555340066EDEB /* zip_source_win32handle.mdoc */, - 55484A58288555340066EDEB /* zip_error_fini.man */, - 55484A59288555340066EDEB /* zip_error_init.mdoc */, - 55484A5A288555340066EDEB /* zip_get_archive_flag.man */, - 55484A5B288555340066EDEB /* zip_file_set_external_attributes.mdoc */, - 55484A5C288555340066EDEB /* zip_source_keep.man */, - 55484A5D288555340066EDEB /* zip_fseek.html */, - 55484A5E288555340066EDEB /* zip_fopen.man */, - 55484A5F288555340066EDEB /* zip_source_open.mdoc */, - 55484A60288555340066EDEB /* zip_add_dir.html */, - 55484A61288555340066EDEB /* zip_open.html */, - 55484A62288555340066EDEB /* zip_set_file_comment.mdoc */, - 55484A63288555340066EDEB /* zip_file_strerror.mdoc */, - 55484A64288555340066EDEB /* zip_get_archive_flag.html */, - 55484A65288555340066EDEB /* zip_dir_add.html */, - 55484A66288555340066EDEB /* zip_ftell.mdoc */, - 55484A67288555340066EDEB /* zip_source_file.html */, - 55484A68288555340066EDEB /* zip_error_clear.html */, - 55484A69288555340066EDEB /* zipcmp.html */, - 55484A6A288555340066EDEB /* nih-man.css */, - 55484A6B288555340066EDEB /* zip_open.man */, - 55484A6C288555340066EDEB /* zip_source_function.mdoc */, - 55484A6D288555340066EDEB /* zip_fdopen.html */, - 55484A6E288555340066EDEB /* zip_file_rename.man */, - 55484A6F288555340066EDEB /* zip_file_set_encryption.mdoc */, - 55484A70288555340066EDEB /* zip_unchange.mdoc */, - 55484A71288555340066EDEB /* zip_source_is_deleted.man */, - 55484A72288555340066EDEB /* zipmerge.html */, - 55484A73288555340066EDEB /* zip_source_read.man */, - 55484A74288555340066EDEB /* zip_libzip_version.mdoc */, - 55484A75288555340066EDEB /* zip_source_write.man */, - ); - path = man; - sourceTree = ""; - }; - 55484A78288555340066EDEB /* cmake */ = { - isa = PBXGroup; - children = ( - 55484A79288555340066EDEB /* FindMbedTLS.cmake */, - 55484A7A288555340066EDEB /* FindZstd.cmake */, - 55484A7B288555340066EDEB /* Dist.cmake */, - 55484A7C288555340066EDEB /* FindNettle.cmake */, - ); - path = cmake; - sourceTree = ""; - }; - 55484A7F288555340066EDEB /* regress */ = { - isa = PBXGroup; - children = ( - 55484A80288555340066EDEB /* gap-add.zip */, - 55484A81288555340066EDEB /* testchanged.zip */, - 55484A82288555340066EDEB /* foo-stored.zip */, - 55484A83288555340066EDEB /* open_filename_duplicate_empty_consistency.test */, - 55484A84288555340066EDEB /* open_nonarchive.test */, - 55484A85288555340066EDEB /* lzma-no-eos.zip */, - 55484A86288555340066EDEB /* rename_utf8_encmismatch.test */, - 55484A87288555340066EDEB /* set_compression_store_to_store.test */, - 55484A88288555340066EDEB /* encryption-nonrandom-aes192.test */, - 55484A89288555340066EDEB /* bogus.zip */, - 55484A8A288555340066EDEB /* decrypt-wrong-password-aes192.test */, - 55484A8B288555340066EDEB /* set_comment_revert.test */, - 55484A8C288555340066EDEB /* clone-fs-add.test */, - 55484A8D288555340066EDEB /* add_from_zip_partial_deflated.test */, - 55484A8E288555340066EDEB /* extra_get.test */, - 55484A8F288555340066EDEB /* set_comment_all.test */, - 55484A90288555340066EDEB /* junk_at_start.test */, - 55484A91288555340066EDEB /* set_compression_lzma_to_store.test */, - 55484A92288555340066EDEB /* delete_renamed_rename.test */, - 55484A93288555340066EDEB /* extra_field_align_2-ef_00.zip */, - 55484A94288555340066EDEB /* open_empty.test */, - 55484A95288555340066EDEB /* encryption-stat.test */, - 55484A96288555340066EDEB /* incons-file-count-low.zip */, - 55484A97288555340066EDEB /* incons-file-count-overflow.zip */, - 55484A98288555340066EDEB /* open_filename_duplicate_empty.test */, - 55484A99288555340066EDEB /* open_extrabytes.test */, - 55484A9A288555340066EDEB /* stat_index_utf8_raw.test */, - 55484A9B288555340066EDEB /* stat_index_utf8_guess.test */, - 55484A9C288555340066EDEB /* incons-eocd-magic-bad.zip */, - 55484A9D288555340066EDEB /* add_from_zip_deflated.test */, - 55484A9E288555340066EDEB /* extra_set.test */, - 55484A9F288555340066EDEB /* fdopen_ok.test */, - 55484AA0288555340066EDEB /* progress.test */, - 55484AA1288555340066EDEB /* testfile2014.zip */, - 55484AA2288555340066EDEB /* test-cp437.zip */, - 55484AA3288555340066EDEB /* incons-central-compsize-smaller.zip */, - 55484AA4288555340066EDEB /* get_comment.test */, - 55484AA5288555340066EDEB /* stat_index_fileorder.test */, - 55484AA6288555340066EDEB /* set_compression_store_to_zstd.test */, - 55484AA7288555340066EDEB /* set_comment_localonly.test */, - 55484AA8288555340066EDEB /* incons-central-compsize-larger-toolarge.zip */, - 55484AA9288555340066EDEB /* decrypt-wrong-password-pkware.test */, - 55484AAA288555340066EDEB /* set_compression_store_to_bzip2.test */, - 55484AAB288555350066EDEB /* CMakeLists.txt */, - 55484AAC288555350066EDEB /* fopen_unchanged.c */, - 55484AAD288555350066EDEB /* zipcmp_zip_dir.test */, - 55484AAE288555350066EDEB /* cleanup.cmake */, - 55484AAF288555350066EDEB /* testbuffer.zip */, - 55484AB0288555350066EDEB /* testextrabytes.zip */, - 55484AB1288555350066EDEB /* junk-at-end.zip */, - 55484AB2288555350066EDEB /* incons-archive-comment-shorter.zip */, - 55484AB3288555350066EDEB /* testcomment13.zip */, - 55484AB4288555350066EDEB /* extra_field_align_2-0.zip */, - 55484AB5288555350066EDEB /* encryption-nonrandom-pkware.test */, - 55484AB6288555350066EDEB /* firstsecond-split-deflated.zip */, - 55484AB7288555350066EDEB /* nihtest.conf.in */, - 55484AB8288555350066EDEB /* firstsecond.zip */, - 55484AB9288555350066EDEB /* streamed-zip64.zip */, - 55484ABA288555350066EDEB /* decrypt-no-password-aes256.test */, - 55484ABB288555350066EDEB /* name_locate-cp437.test */, - 55484ABC288555350066EDEB /* testdir.zip */, - 55484ABD288555350066EDEB /* streamed.zip */, - 55484ABE288555350066EDEB /* extra_set_modify_c.test */, - 55484ABF288555350066EDEB /* encrypt.zip */, - 55484AC0288555350066EDEB /* encrypt_plus_extra_modified_l.zip */, - 55484AC1288555350066EDEB /* liboverride-test.c */, - 55484AC2288555350066EDEB /* open_file_count.test */, - 55484AC3288555350066EDEB /* add_from_filep.test */, - 55484AC4288555350066EDEB /* hole.c */, - 55484AC5288555350066EDEB /* open_empty_2.test */, - 55484AC6288555350066EDEB /* nonrandomopen.c */, - 55484AC7288555350066EDEB /* testbzip2.zip */, - 55484AC8288555350066EDEB /* can_clone_file.c */, - 55484AC9288555350066EDEB /* incons-local-filename.zip */, - 55484ACA288555350066EDEB /* encrypt-none.zip */, - 55484ACB288555350066EDEB /* rename_ok.test */, - 55484ACC288555350066EDEB /* extra_field_align_2-ef_ff.zip */, - 55484ACD288555350066EDEB /* incons-local-size-larger.zip */, - 55484ACE288555350066EDEB /* test-cp437-fc-utf-8-filename.zip */, - 55484ACF288555350066EDEB /* set_compression_store_to_lzma.test */, - 55484AD0288555350066EDEB /* encryption-remove.test */, - 55484AD1288555350066EDEB /* testdeflated.zip */, - 55484AD2288555350066EDEB /* open_filename_duplicate.test */, - 55484AD3288555350066EDEB /* testfile0.zip */, - 55484AD4288555350066EDEB /* testchangedlocal.zip */, - 55484AD5288555350066EDEB /* fseek.c */, - 55484AD6288555350066EDEB /* incons-central-compression-method.zip */, - 55484AD7288555350066EDEB /* encrypt-aes128.zip */, - 55484AD8288555350066EDEB /* file_comment_encmismatch.test */, - 55484AD9288555350066EDEB /* extra_count_ignore_zip64.test */, - 55484ADA288555350066EDEB /* broken.zip */, - 55484ADB288555350066EDEB /* stat_index_zip64.test */, - 55484ADC288555350066EDEB /* incons-central-compsize-larger.zip */, - 55484ADD288555350066EDEB /* unchange-delete-namelocate.test */, - 55484ADE288555350066EDEB /* runtest.in */, - 55484ADF288555350066EDEB /* delete_last.test */, - 55484AE0288555350066EDEB /* extra_count.test */, - 55484AE1288555350066EDEB /* testempty.zip */, - 55484AE2288555350066EDEB /* encrypt_plus_extra.zip */, - 55484AE3288555350066EDEB /* incons-central-file-comment-longer.zip */, - 55484AE4288555350066EDEB /* junk_at_end.test */, - 55484AE5288555350066EDEB /* extra_field_align_3-ef_00.zip */, - 55484AE6288555350066EDEB /* test-cp437-comment-utf-8.zip */, - 55484AE7288555350066EDEB /* open_zip64_ok.test */, - 55484AE8288555350066EDEB /* utf-8-standardization-input.zip */, - 55484AE9288555350066EDEB /* add_stored_in_memory.test */, - 55484AEA288555350066EDEB /* testfile-xz.zip */, - 55484AEB288555350066EDEB /* incons-local-crc.zip */, - 55484AEC288555350066EDEB /* gap-replace.zip */, - 55484AED288555350066EDEB /* extra_field_align_3-ff.zip */, - 55484AEE288555350066EDEB /* incons-local-filename-long.zip */, - 55484AEF288555350066EDEB /* fuzz_main.c */, - 55484AF0288555350066EDEB /* test-cp437-fc.zip */, - 55484AF1288555350066EDEB /* extra_delete.test */, - 55484AF2288555350066EDEB /* gap.zip */, - 55484AF3288555350066EDEB /* zip_read_fuzzer.dict */, - 55484AF4288555350066EDEB /* extra_field_align_1-0.zip */, - 55484AF5288555350066EDEB /* add_from_file_duplicate.test */, - 55484AF6288555350066EDEB /* delete_invalid.test */, - 55484AF7288555350066EDEB /* buffer-fragment-write.test */, - 55484AF8288555350066EDEB /* testfile.zip */, - 55484AF9288555350066EDEB /* ziptool_regress.c */, - 55484AFA288555350066EDEB /* extra_field_align_1-ff.zip */, - 55484AFB288555350066EDEB /* testcomment.zip */, - 55484AFC288555350066EDEB /* large-uncompressible */, - 55484AFD288555350066EDEB /* encrypt-pkware-noentropy.zip */, - 55484AFE288555350066EDEB /* add_from_file_twice_duplicate.test */, - 55484AFF288555350066EDEB /* add_from_file_unchange.test */, - 55484B00288555350066EDEB /* rename_deleted.test */, - 55484B01288555350066EDEB /* nonrandomopentest.c */, - 55484B02288555350066EDEB /* extra_delete_by_id.test */, - 55484B03288555350066EDEB /* testfile-lzma.zip */, - 55484B04288555350066EDEB /* count_entries.test */, - 55484B05288555350066EDEB /* encrypt-aes256-noentropy.zip */, - 55484B06288555350066EDEB /* stat_index_cp437_strict.test */, - 55484B07288555350066EDEB /* incons-central-date.zip */, - 55484B08288555350066EDEB /* stat_index_utf8_unmarked_strict.test */, - 55484B09288555350066EDEB /* open_truncate.test */, - 55484B0A288555350066EDEB /* open_filename_duplicate_consistency.test */, - 55484B0B288555350066EDEB /* decrypt-correct-password-aes256.test */, - 55484B0C288555350066EDEB /* incons-central-size-larger.zip */, - 55484B0D288555350066EDEB /* rename_cp437.test */, - 55484B0E288555350066EDEB /* zip64.zip */, - 55484B0F288555350066EDEB /* testdeflated2.zip */, - 55484B10288555350066EDEB /* decrypt-correct-password-aes128.test */, - 55484B11288555350066EDEB /* stat_index_cp437_guess.test */, - 55484B12288555350066EDEB /* delete_multiple_last.test */, - 55484B13288555350066EDEB /* stat_index_streamed_zip64.test */, - 55484B14288555350066EDEB /* extra_field_align_3-0.zip */, - 55484B15288555350066EDEB /* extra_field_align_3-ef_ff.zip */, - 55484B16288555350066EDEB /* buffer-fragment-read.test */, - 55484B17288555350066EDEB /* test.zip */, - 55484B18288555350066EDEB /* stat_index_utf8_strict.test */, - 55484B19288555350066EDEB /* test-utf8-unmarked.zip */, - 55484B1A288555350066EDEB /* testfile-plus-extra.zip */, - 55484B1B288555350066EDEB /* incons-local-magic-bad.zip */, - 55484B1C288555350066EDEB /* add_from_zip_deflated2.test */, - 55484B1D288555350066EDEB /* extra_get_by_id.test */, - 55484B1E288555350066EDEB /* filename_duplicate.zip */, - 55484B1F288555350066EDEB /* incons-local-filename-short.zip */, - 55484B20288555350066EDEB /* incons-local-compression-method.zip */, - 55484B21288555350066EDEB /* encrypt-aes256.zip */, - 55484B22288555350066EDEB /* incons-archive-comment-longer.zip */, - 55484B23288555350066EDEB /* clone-fs-replace.test */, - 55484B24288555350066EDEB /* encrypt-aes192-noentropy.zip */, - 55484B25288555350066EDEB /* zip-in-archive-comment.zip */, - 55484B26288555350066EDEB /* zip64-3mf.zip */, - 55484B27288555350066EDEB /* fileorder.zip */, - 55484B28288555350066EDEB /* set_compression_deflate_to_bzip2.test */, - 55484B29288555350066EDEB /* incons-central-crc.zip */, - 55484B2A288555350066EDEB /* open_multidisk.test */, - 55484B2B288555350066EDEB /* test2.zip */, - 55484B2C288555350066EDEB /* decrypt-wrong-password-pkware-2.test */, - 55484B2D288555350066EDEB /* incons-file-count-high.zip */, - 55484B2E288555350066EDEB /* zip-in-archive-comment.test */, - 55484B2F288555350066EDEB /* open_ok.test */, - 55484B30288555350066EDEB /* decrypt-correct-password-pkware.test */, - 55484B31288555350066EDEB /* rename_utf8.test */, - 55484B32288555350066EDEB /* clone-buffer-replace.test */, - 55484B33288555350066EDEB /* fseek_ok.test */, - 55484B34288555350066EDEB /* fopen_unchanged.test */, - 55484B35288555350066EDEB /* stat_index_streamed.test */, - 55484B36288555350066EDEB /* testcommentremoved.zip */, - 55484B37288555350066EDEB /* testfile-UTF8.zip */, - 55484B38288555350066EDEB /* set_compression_xz_to_store.test */, - 55484B39288555350066EDEB /* extra_field_align_4-ff.zip */, - 55484B3A288555350066EDEB /* set_compression_deflate_to_deflate.test */, - 55484B3B288555350066EDEB /* teststdin.zip */, - 55484B3C288555350066EDEB /* incons-central-file-comment-shorter.zip */, - 55484B3D288555350066EDEB /* set_compression_deflate_to_store.test */, - 55484B3E288555350066EDEB /* incons-ef-local-size.zip */, - 55484B3F288555350066EDEB /* open_cons_extrabytes.test */, - 55484B40288555350066EDEB /* incons-ef-local-id.zip */, - 55484B41288555350066EDEB /* zipcmp_zip_dir.zip */, - 55484B42288555350066EDEB /* stored-no-eos.zip */, - 55484B43288555350066EDEB /* teststored.zip */, - 55484B44288555350066EDEB /* incons-central-magic-bad2.zip */, - 55484B45288555350066EDEB /* utf-8-standardization.test */, - 55484B46288555350066EDEB /* clone-fs-delete.test */, - 55484B47288555350066EDEB /* extra_add.test */, - 55484B48288555350066EDEB /* fread.test */, - 55484B49288555350066EDEB /* incons-cdoffset.zip */, - 55484B4A288555350066EDEB /* fread.c */, - 55484B4B288555350066EDEB /* cancel_45.test */, - 55484B4C288555350066EDEB /* set_compression_zstd_to_store.test */, - 55484B4D288555350066EDEB /* open_filename_empty.test */, - 55484B4E288555350066EDEB /* rename_ascii.test */, - 55484B4F288555350066EDEB /* junk-at-start.zip */, - 55484B50288555350066EDEB /* zip64_stored_creation.test */, - 55484B51288555350066EDEB /* incons-data.zip */, - 55484B52288555350066EDEB /* manyfiles-zip.zip */, - 55484B53288555350066EDEB /* decrypt-correct-password-aes192.test */, - 55484B54288555350066EDEB /* extra_count_by_id.test */, - 55484B55288555350066EDEB /* fseek_deflated.test */, - 55484B56288555350066EDEB /* cm-default.zip */, - 55484B57288555350066EDEB /* malloc.c */, - 55484B58288555350066EDEB /* encrypt-aes128-noentropy.zip */, - 55484B59288555350066EDEB /* cancel_90.test */, - 55484B5A288555350066EDEB /* set_compression_store_to_xz.test */, - 55484B5B288555350066EDEB /* extra_field_align_2-ff.zip */, - 55484B5C288555350066EDEB /* decrypt-wrong-password-aes128.test */, - 55484B5D288555350066EDEB /* decrypt-wrong-password-aes256.test */, - 55484B5E288555350066EDEB /* set_compression_unknown.test */, - 55484B5F288555350066EDEB /* open_too_short.test */, - 55484B60288555350066EDEB /* incons-local-compsize-larger.zip */, - 55484B61288555350066EDEB /* utf-8-standardization-output.zip */, - 55484B62288555350066EDEB /* add_from_zip_partial_stored.test */, - 55484B63288555350066EDEB /* name_locate.test */, - 55484B64288555350066EDEB /* testfile-stored-dos.zip */, - 55484B65288555350066EDEB /* add_from_zip_stored.test */, - 55484B66288555350066EDEB /* encryption-nonrandom-aes256.test */, - 55484B67288555350066EDEB /* fseek_fail.test */, - 55484B68288555350066EDEB /* open_nosuchfile.test */, - 55484B69288555350066EDEB /* encryption-nonrandom-aes128.test */, - 55484B6A288555350066EDEB /* zip_read_fuzzer.cc */, - 55484B6B288555350066EDEB /* multidisk.zip */, - 55484B6C288555350066EDEB /* set_compression_bzip2_to_deflate.test */, - 55484B6D288555350066EDEB /* preload.test */, - 55484B6E288555350066EDEB /* rename_ok.zip */, - 55484B6F288555350066EDEB /* add_from_filep.c */, - 55484B70288555350066EDEB /* test-utf8.zip */, - 55484B71288555350066EDEB /* open_many_ok.test */, - 55484B72288555360066EDEB /* set_file_dostime.test */, - 55484B73288555360066EDEB /* incons-ef-central-size-wrong.zip */, - 55484B74288555360066EDEB /* testfile.txt */, - 55484B75288555360066EDEB /* set_compression_lzma_no_eos_to_store.test */, - 55484B76288555360066EDEB /* extra_set_modify_l.test */, - 55484B77288555360066EDEB /* encrypt_plus_extra_modified_c.zip */, - 55484B78288555360066EDEB /* bigzero-zip.zip */, - 55484B79288555360066EDEB /* delete_multiple_partial.test */, - 55484B7A288555360066EDEB /* open_incons.test */, - 55484B7B288555360066EDEB /* liboverride.c */, - 55484B7C288555360066EDEB /* clone-buffer-add.test */, - 55484B7D288555360066EDEB /* add_from_buffer.test */, - 55484B7E288555360066EDEB /* NiHTest.pm */, - 55484B7F288555360066EDEB /* extra_field_align_1-ef_00.zip */, - 55484B80288555360066EDEB /* incons-local-compsize-smaller.zip */, - 55484B81288555360066EDEB /* encrypt-1234.zip */, - 55484B82288555360066EDEB /* add_from_stdin.test */, - 55484B83288555360066EDEB /* extra_add_multiple.test */, - 55484B84288555360066EDEB /* open_zip64_3mf.test */, - 55484B85288555360066EDEB /* clone-buffer-delete.test */, - 55484B86288555360066EDEB /* incons-ef-local-id-size.zip */, - 55484B87288555360066EDEB /* set_compression_store_to_deflate.test */, - 55484B88288555360066EDEB /* filename_empty.zip */, - 55484B89288555360066EDEB /* delete_add_same.test */, - 55484B8A288555360066EDEB /* firstsecond-split-stored.zip */, - 55484B8B288555360066EDEB /* tryopen.c */, - 55484B8C288555360066EDEB /* set_file_mtime.test */, - 55484B8D288555360066EDEB /* extra_field_align.test */, - 55484B8E288555360066EDEB /* add_from_zip_closed.test */, - 55484B8F288555360066EDEB /* encrypt-aes192.zip */, - 55484B90288555360066EDEB /* ossfuzz.sh */, - 55484B91288555360066EDEB /* decrypt-correct-password-pkware-2.test */, - 55484B92288555360066EDEB /* encrypt.test */, - 55484B93288555360066EDEB /* source_hole.c */, - 55484B94288555360066EDEB /* filename_duplicate_empty.zip */, - 55484B95288555360066EDEB /* stat_index_cp437_raw.test */, - 55484B96288555360066EDEB /* add_stored.test */, - 55484B97288555360066EDEB /* testfile-cp437.zip */, - 55484B98288555360066EDEB /* add_from_file.test */, - 55484B99288555360066EDEB /* open_new_but_exists.test */, - 55484B9A288555360066EDEB /* open_many_fail.test */, - 55484B9B288555360066EDEB /* name_locate-utf8.test */, - 55484B9C288555360066EDEB /* bigstored.zh */, - 55484B9D288555360066EDEB /* incons-central-magic-bad.zip */, - 55484B9E288555360066EDEB /* extra_field_align_1-ef_ff.zip */, - 55484B9F288555360066EDEB /* incons-local-filename-missing.zip */, - 55484BA0288555360066EDEB /* zip64_creation.test */, - 55484BA1288555360066EDEB /* testfile-zstd.zip */, - 55484BA2288555360066EDEB /* set_comment_removeglobal.test */, - 55484BA3288555360066EDEB /* add_dir.test */, - 55484BA4288555360066EDEB /* cm-default.test */, - 55484BA5288555360066EDEB /* rename_fail.test */, - 55484BA6288555360066EDEB /* open_new_ok.test */, - 55484BA7288555360066EDEB /* gap-delete.zip */, - ); - path = regress; - sourceTree = ""; - }; - 55484BAA288555360066EDEB /* vstudio */ = { - isa = PBXGroup; - children = ( - 55484BAB288555360066EDEB /* zlib */, - 55484BAD288555360066EDEB /* readme.txt */, - 55484BAE288555360066EDEB /* vsbuild.cmd */, - ); - path = vstudio; - sourceTree = ""; - }; - 55484BAB288555360066EDEB /* zlib */ = { - isa = PBXGroup; - children = ( - 55484BAC288555360066EDEB /* unpack_zlib_here.txt */, - ); - path = zlib; - sourceTree = ""; - }; - 55484BB0288555360066EDEB /* cmake-compat */ = { - isa = PBXGroup; - children = ( - 55484BB1288555360066EDEB /* FindLibLZMA.cmake */, - 55484BB2288555360066EDEB /* CheckLibraryExists.cmake */, - 55484BB3288555360066EDEB /* CMakePushCheckState.cmake */, - 55484BB4288555360066EDEB /* FindPackageHandleStandardArgs.cmake */, - 55484BB5288555360066EDEB /* FindBZip2.cmake */, - 55484BB6288555360066EDEB /* CheckSymbolExists.cmake */, - 55484BB7288555360066EDEB /* FindGnuTLS.cmake */, - 55484BB8288555360066EDEB /* FindPackageMessage.cmake */, - 55484BB9288555360066EDEB /* SelectLibraryConfigurations.cmake */, - ); - path = "cmake-compat"; - sourceTree = ""; - }; - 55484BBF288555360066EDEB /* examples */ = { - isa = PBXGroup; - children = ( - 55484BC0288555360066EDEB /* CMakeLists.txt */, - 55484BC1288555360066EDEB /* windows-open.c */, - 55484BC2288555360066EDEB /* in-memory.c */, - ); - path = examples; - sourceTree = ""; - }; - 55484BC3288555360066EDEB /* android */ = { - isa = PBXGroup; - children = ( - 55484BC4288555360066EDEB /* docker */, - 55484BC6288555360066EDEB /* do.sh */, - 55484BC7288555360066EDEB /* readme.txt */, - ); - path = android; - sourceTree = ""; - }; - 55484BC4288555360066EDEB /* docker */ = { - isa = PBXGroup; - children = ( - 55484BC5288555360066EDEB /* Dockerfile */, - ); - path = docker; - sourceTree = ""; - }; - 55484BD3288555360066EDEB /* lib */ = { - isa = PBXGroup; - children = ( - 55484BEB288555360066EDEB /* CMakeLists.txt */, - 55484C3C288555360066EDEB /* compat.h */, - 55484BFA288555360066EDEB /* zip_add_dir.c */, - 55484C0B288555360066EDEB /* zip_add_entry.c */, - 55484BDB288555360066EDEB /* zip_add.c */, - 55484C4F288555370066EDEB /* zip_algorithm_bzip2.c */, - 55484C05288555360066EDEB /* zip_algorithm_deflate.c */, - 55484C36288555360066EDEB /* zip_algorithm_xz.c */, - 55484C59288555370066EDEB /* zip_algorithm_zstd.c */, - 55484C0D288555360066EDEB /* zip_buffer.c */, - 55484BF7288555360066EDEB /* zip_close.c */, - 55484C1B288555360066EDEB /* zip_crypto_commoncrypto.c */, - 55484C58288555370066EDEB /* zip_crypto_commoncrypto.h */, - 55484BD4288555360066EDEB /* zip_crypto_gnutls.c */, - 55484C33288555360066EDEB /* zip_crypto_gnutls.h */, - 55484BF1288555360066EDEB /* zip_crypto_mbedtls.c */, - 55484C3D288555360066EDEB /* zip_crypto_mbedtls.h */, - 55484C57288555370066EDEB /* zip_crypto_openssl.c */, - 55484C18288555360066EDEB /* zip_crypto_openssl.h */, - 55484C0F288555360066EDEB /* zip_crypto_win.c */, - 55484C48288555370066EDEB /* zip_crypto_win.h */, - 55484BF9288555360066EDEB /* zip_crypto.h */, - 55484C2F288555360066EDEB /* zip_delete.c */, - 55484C02288555360066EDEB /* zip_dir_add.c */, - 55484C43288555370066EDEB /* zip_dirent.c */, - 55484BE6288555360066EDEB /* zip_discard.c */, - 55484BE9288555360066EDEB /* zip_entry.c */, - 55484BE1288555360066EDEB /* zip_error_clear.c */, - 55484BFB288555360066EDEB /* zip_error_get_sys_type.c */, - 55484C41288555370066EDEB /* zip_error_get.c */, - 55484C5F288555370066EDEB /* zip_error_strerror.c */, - 55484C4D288555370066EDEB /* zip_error_to_str.c */, - 55484C0E288555360066EDEB /* zip_error.c */, - 55484C21288555360066EDEB /* zip_extra_field_api.c */, - 55484C00288555360066EDEB /* zip_extra_field.c */, - 55484C42288555370066EDEB /* zip_fclose.c */, - 55484C19288555360066EDEB /* zip_fdopen.c */, - 55484C45288555370066EDEB /* zip_file_add.c */, - 55484C4A288555370066EDEB /* zip_file_error_clear.c */, - 55484BEF288555360066EDEB /* zip_file_error_get.c */, - 55484C53288555370066EDEB /* zip_file_get_comment.c */, - 55484BD8288555360066EDEB /* zip_file_get_external_attributes.c */, - 55484BF2288555360066EDEB /* zip_file_get_offset.c */, - 55484BE4288555360066EDEB /* zip_file_rename.c */, - 55484BF0288555360066EDEB /* zip_file_replace.c */, - 55484BF5288555360066EDEB /* zip_file_set_comment.c */, - 55484BEA288555360066EDEB /* zip_file_set_encryption.c */, - 55484C2B288555360066EDEB /* zip_file_set_external_attributes.c */, - 55484C1D288555360066EDEB /* zip_file_set_mtime.c */, - 55484BDD288555360066EDEB /* zip_file_strerror.c */, - 55484BFE288555360066EDEB /* zip_fopen_encrypted.c */, - 55484C3E288555360066EDEB /* zip_fopen_index_encrypted.c */, - 55484BDE288555360066EDEB /* zip_fopen_index.c */, - 55484C56288555370066EDEB /* zip_fopen.c */, - 55484C22288555360066EDEB /* zip_fread.c */, - 55484C2C288555360066EDEB /* zip_fseek.c */, - 55484BE5288555360066EDEB /* zip_ftell.c */, - 55484BE3288555360066EDEB /* zip_get_archive_comment.c */, - 55484C13288555360066EDEB /* zip_get_archive_flag.c */, - 55484C12288555360066EDEB /* zip_get_encryption_implementation.c */, - 55484C35288555360066EDEB /* zip_get_file_comment.c */, - 55484BDC288555360066EDEB /* zip_get_name.c */, - 55484C28288555360066EDEB /* zip_get_num_entries.c */, - 55484C09288555360066EDEB /* zip_get_num_files.c */, - 55484BEE288555360066EDEB /* zip_hash.c */, - 55484C5B288555370066EDEB /* zip_io_util.c */, - 55484C4C288555370066EDEB /* zip_libzip_version.c */, - 55484BD6288555360066EDEB /* zip_memdup.c */, - 55484C03288555360066EDEB /* zip_name_locate.c */, - 55484BF4288555360066EDEB /* zip_new.c */, - 55484C3A288555360066EDEB /* zip_open.c */, - 55484C0A288555360066EDEB /* zip_pkware.c */, - 55484C24288555360066EDEB /* zip_progress.c */, - 55484BF6288555360066EDEB /* zip_random_unix.c */, - 55484C0C288555360066EDEB /* zip_random_uwp.c */, - 55484C51288555370066EDEB /* zip_random_win32.c */, - 55484C25288555360066EDEB /* zip_rename.c */, - 55484C2E288555360066EDEB /* zip_replace.c */, - 55484BFF288555360066EDEB /* zip_set_archive_comment.c */, - 55484C15288555360066EDEB /* zip_set_archive_flag.c */, - 55484C1F288555360066EDEB /* zip_set_default_password.c */, - 55484C32288555360066EDEB /* zip_set_file_comment.c */, - 55484BED288555360066EDEB /* zip_set_file_compression.c */, - 55484BE8288555360066EDEB /* zip_set_name.c */, - 55484C31288555360066EDEB /* zip_source_accept_empty.c */, - 55484C3B288555360066EDEB /* zip_source_begin_write_cloning.c */, - 55484BD9288555360066EDEB /* zip_source_begin_write.c */, - 55484BE0288555360066EDEB /* zip_source_buffer.c */, - 55484BFC288555360066EDEB /* zip_source_call.c */, - 55484C38288555360066EDEB /* zip_source_close.c */, - 55484BDF288555360066EDEB /* zip_source_commit_write.c */, - 55484C4B288555370066EDEB /* zip_source_compress.c */, - 55484C30288555360066EDEB /* zip_source_crc.c */, - 55484C46288555370066EDEB /* zip_source_error.c */, - 55484C08288555360066EDEB /* zip_source_file_common.c */, - 55484C20288555360066EDEB /* zip_source_file_stdio_named.c */, - 55484C01288555360066EDEB /* zip_source_file_stdio.c */, - 55484C50288555370066EDEB /* zip_source_file_stdio.h */, - 55484BF8288555360066EDEB /* zip_source_file_win32_ansi.c */, - 55484C1E288555360066EDEB /* zip_source_file_win32_named.c */, - 55484C3F288555370066EDEB /* zip_source_file_win32_utf8.c */, - 55484C5E288555370066EDEB /* zip_source_file_win32_utf16.c */, - 55484C60288555370066EDEB /* zip_source_file_win32.c */, - 55484C17288555360066EDEB /* zip_source_file_win32.h */, - 55484C29288555360066EDEB /* zip_source_file.h */, - 55484C07288555360066EDEB /* zip_source_free.c */, - 55484C2A288555360066EDEB /* zip_source_function.c */, - 55484C49288555370066EDEB /* zip_source_get_file_attributes.c */, - 55484BFD288555360066EDEB /* zip_source_is_deleted.c */, - 55484C5D288555370066EDEB /* zip_source_layered.c */, - 55484BEC288555360066EDEB /* zip_source_open.c */, - 55484C1C288555360066EDEB /* zip_source_pkware_decode.c */, - 55484C14288555360066EDEB /* zip_source_pkware_encode.c */, - 55484C39288555360066EDEB /* zip_source_read.c */, - 55484C4E288555370066EDEB /* zip_source_remove.c */, - 55484C23288555360066EDEB /* zip_source_rollback_write.c */, - 55484C04288555360066EDEB /* zip_source_seek_write.c */, - 55484C11288555360066EDEB /* zip_source_seek.c */, - 55484BE2288555360066EDEB /* zip_source_stat.c */, - 55484BD7288555360066EDEB /* zip_source_supports.c */, - 55484BD5288555360066EDEB /* zip_source_tell_write.c */, - 55484C47288555370066EDEB /* zip_source_tell.c */, - 55484C52288555370066EDEB /* zip_source_window.c */, - 55484C54288555370066EDEB /* zip_source_winzip_aes_decode.c */, - 55484C5C288555370066EDEB /* zip_source_winzip_aes_encode.c */, - 55484C44288555370066EDEB /* zip_source_write.c */, - 55484C16288555360066EDEB /* zip_source_zip_new.c */, - 55484C26288555360066EDEB /* zip_source_zip.c */, - 55484C27288555360066EDEB /* zip_stat_index.c */, - 55484C55288555370066EDEB /* zip_stat_init.c */, - 55484C34288555360066EDEB /* zip_stat.c */, - 55484C10288555360066EDEB /* zip_strerror.c */, - 55484BE7288555360066EDEB /* zip_string.c */, - 55484C5A288555370066EDEB /* zip_unchange_all.c */, - 55484C06288555360066EDEB /* zip_unchange_archive.c */, - 55484C1A288555360066EDEB /* zip_unchange_data.c */, - 55484BF3288555360066EDEB /* zip_unchange.c */, - 55484C40288555370066EDEB /* zip_utf-8.c */, - 55484C2D288555360066EDEB /* zip_winzip_aes.c */, - 55484C37288555360066EDEB /* zip.h */, - 55484BDA288555360066EDEB /* zipint.h */, - ); - path = lib; - sourceTree = ""; - }; - 55484C70288555370066EDEB /* src */ = { - isa = PBXGroup; - children = ( - 55484C71288555370066EDEB /* CMakeLists.txt */, - 55484C72288555370066EDEB /* diff_output.h */, - 55484C73288555370066EDEB /* zipmerge.c */, - 55484C74288555370066EDEB /* getopt.h */, - 55484C75288555370066EDEB /* ziptool.c */, - 55484C76288555370066EDEB /* zipcmp.c */, - 55484C77288555370066EDEB /* diff_output.c */, - 55484C78288555370066EDEB /* getopt.c */, - ); - path = src; - sourceTree = ""; - }; 55484D2E2885595F0066EDEB /* libzip */ = { isa = PBXGroup; children = ( @@ -6210,8 +4910,9 @@ 55484D2F2885595F0066EDEB /* private */ = { isa = PBXGroup; children = ( - 55DB5A752B59095D00B3BD75 /* zipconf.h */, 55484D302885595F0066EDEB /* config.h */, + 55C767832B77772A005DC873 /* zip_err_str.c */, + 55DB5A752B59095D00B3BD75 /* zipconf.h */, ); path = private; sourceTree = ""; @@ -7006,6 +5707,326 @@ path = "usb-lightgun"; sourceTree = ""; }; + 55C765852B776805005DC873 /* Input */ = { + isa = PBXGroup; + children = ( + 55C7658E2B776805005DC873 /* DInputSource.cpp */, + 55C7658C2B776805005DC873 /* DInputSource.h */, + 55C7658B2B776805005DC873 /* InputManager.cpp */, + 55C765862B776805005DC873 /* InputManager.h */, + 55C7658F2B776805005DC873 /* InputSource.cpp */, + 55C7658D2B776805005DC873 /* InputSource.h */, + 55C765872B776805005DC873 /* SDLInputSource.cpp */, + 55C765892B776805005DC873 /* SDLInputSource.h */, + 55C765882B776805005DC873 /* XInputSource.cpp */, + 55C7658A2B776805005DC873 /* XInputSource.h */, + ); + path = Input; + sourceTree = ""; + }; + 55C765972B776E88005DC873 /* SIO */ = { + isa = PBXGroup; + children = ( + 55C7659D2B776E88005DC873 /* Memcard */, + 55C765992B776E88005DC873 /* Multitap */, + 55C765A42B776E88005DC873 /* Pad */, + 55C765B22B776E88005DC873 /* Sio.cpp */, + 55C765982B776E88005DC873 /* Sio.h */, + 55C765B52B776E88005DC873 /* Sio0.cpp */, + 55C7659C2B776E88005DC873 /* Sio0.h */, + 55C765B62B776E88005DC873 /* Sio2.cpp */, + 55C765B42B776E88005DC873 /* Sio2.h */, + 55C765B32B776E88005DC873 /* SioTypes.h */, + ); + path = SIO; + sourceTree = ""; + }; + 55C765992B776E88005DC873 /* Multitap */ = { + isa = PBXGroup; + children = ( + 55C7659B2B776E88005DC873 /* MultitapProtocol.cpp */, + 55C7659A2B776E88005DC873 /* MultitapProtocol.h */, + ); + path = Multitap; + sourceTree = ""; + }; + 55C7659D2B776E88005DC873 /* Memcard */ = { + isa = PBXGroup; + children = ( + 55C765A02B776E88005DC873 /* MemoryCardFile.cpp */, + 55C765A12B776E88005DC873 /* MemoryCardFile.h */, + 55C765A22B776E88005DC873 /* MemoryCardFolder.cpp */, + 55C7659E2B776E88005DC873 /* MemoryCardFolder.h */, + 55C7659F2B776E88005DC873 /* MemoryCardProtocol.cpp */, + 55C765A32B776E88005DC873 /* MemoryCardProtocol.h */, + ); + path = Memcard; + sourceTree = ""; + }; + 55C765A42B776E88005DC873 /* Pad */ = { + isa = PBXGroup; + children = ( + 55C765AC2B776E88005DC873 /* Pad.cpp */, + 55C765A72B776E88005DC873 /* Pad.h */, + 55C765AD2B776E88005DC873 /* PadBase.cpp */, + 55C765AF2B776E88005DC873 /* PadBase.h */, + 55C765AB2B776E88005DC873 /* PadDualshock2.cpp */, + 55C765AE2B776E88005DC873 /* PadDualshock2.h */, + 55C765B12B776E88005DC873 /* PadGuitar.cpp */, + 55C765A92B776E88005DC873 /* PadGuitar.h */, + 55C765A52B776E88005DC873 /* PadNotConnected.cpp */, + 55C765B02B776E88005DC873 /* PadNotConnected.h */, + 55C765A62B776E88005DC873 /* PadPopn.cpp */, + 55C765A82B776E88005DC873 /* PadPopn.h */, + 55C765AA2B776E88005DC873 /* PadTypes.h */, + ); + path = Pad; + sourceTree = ""; + }; + 55C765C52B777022005DC873 /* lib */ = { + isa = PBXGroup; + children = ( + 55C765DD2B777022005DC873 /* CMakeLists.txt */, + 55C7662F2B777022005DC873 /* compat.h */, + 55C765EC2B777022005DC873 /* zip_add_dir.c */, + 55C765FD2B777022005DC873 /* zip_add_entry.c */, + 55C765CD2B777022005DC873 /* zip_add.c */, + 55C766422B777022005DC873 /* zip_algorithm_bzip2.c */, + 55C765F72B777022005DC873 /* zip_algorithm_deflate.c */, + 55C766292B777022005DC873 /* zip_algorithm_xz.c */, + 55C7664C2B777022005DC873 /* zip_algorithm_zstd.c */, + 55C765FF2B777022005DC873 /* zip_buffer.c */, + 55C765E92B777022005DC873 /* zip_close.c */, + 55C7660D2B777022005DC873 /* zip_crypto_commoncrypto.c */, + 55C7664B2B777022005DC873 /* zip_crypto_commoncrypto.h */, + 55C765C62B777022005DC873 /* zip_crypto_gnutls.c */, + 55C766262B777022005DC873 /* zip_crypto_gnutls.h */, + 55C765E32B777022005DC873 /* zip_crypto_mbedtls.c */, + 55C766302B777022005DC873 /* zip_crypto_mbedtls.h */, + 55C7664A2B777022005DC873 /* zip_crypto_openssl.c */, + 55C7660A2B777022005DC873 /* zip_crypto_openssl.h */, + 55C766012B777022005DC873 /* zip_crypto_win.c */, + 55C7663B2B777022005DC873 /* zip_crypto_win.h */, + 55C765EB2B777022005DC873 /* zip_crypto.h */, + 55C766222B777022005DC873 /* zip_delete.c */, + 55C765F42B777022005DC873 /* zip_dir_add.c */, + 55C766362B777022005DC873 /* zip_dirent.c */, + 55C765D82B777022005DC873 /* zip_discard.c */, + 55C765DB2B777022005DC873 /* zip_entry.c */, + 55C765D32B777022005DC873 /* zip_error_clear.c */, + 55C765ED2B777022005DC873 /* zip_error_get_sys_type.c */, + 55C766342B777022005DC873 /* zip_error_get.c */, + 55C766522B777022005DC873 /* zip_error_strerror.c */, + 55C766402B777022005DC873 /* zip_error_to_str.c */, + 55C766002B777022005DC873 /* zip_error.c */, + 55C766132B777022005DC873 /* zip_extra_field_api.c */, + 55C765F22B777022005DC873 /* zip_extra_field.c */, + 55C766352B777022005DC873 /* zip_fclose.c */, + 55C7660B2B777022005DC873 /* zip_fdopen.c */, + 55C766382B777022005DC873 /* zip_file_add.c */, + 55C7663D2B777022005DC873 /* zip_file_error_clear.c */, + 55C765E12B777022005DC873 /* zip_file_error_get.c */, + 55C766462B777022005DC873 /* zip_file_get_comment.c */, + 55C765CA2B777022005DC873 /* zip_file_get_external_attributes.c */, + 55C765E42B777022005DC873 /* zip_file_get_offset.c */, + 55C765D62B777022005DC873 /* zip_file_rename.c */, + 55C765E22B777022005DC873 /* zip_file_replace.c */, + 55C765E72B777022005DC873 /* zip_file_set_comment.c */, + 55C765DC2B777022005DC873 /* zip_file_set_encryption.c */, + 55C7661E2B777022005DC873 /* zip_file_set_external_attributes.c */, + 55C7660F2B777022005DC873 /* zip_file_set_mtime.c */, + 55C765CF2B777022005DC873 /* zip_file_strerror.c */, + 55C765F02B777022005DC873 /* zip_fopen_encrypted.c */, + 55C766312B777022005DC873 /* zip_fopen_index_encrypted.c */, + 55C765D02B777022005DC873 /* zip_fopen_index.c */, + 55C766492B777022005DC873 /* zip_fopen.c */, + 55C766142B777022005DC873 /* zip_fread.c */, + 55C7661F2B777022005DC873 /* zip_fseek.c */, + 55C765D72B777022005DC873 /* zip_ftell.c */, + 55C765D52B777022005DC873 /* zip_get_archive_comment.c */, + 55C766052B777022005DC873 /* zip_get_archive_flag.c */, + 55C766042B777022005DC873 /* zip_get_encryption_implementation.c */, + 55C766282B777022005DC873 /* zip_get_file_comment.c */, + 55C765CE2B777022005DC873 /* zip_get_name.c */, + 55C7661A2B777022005DC873 /* zip_get_num_entries.c */, + 55C765FB2B777022005DC873 /* zip_get_num_files.c */, + 55C765E02B777022005DC873 /* zip_hash.c */, + 55C7664E2B777022005DC873 /* zip_io_util.c */, + 55C7663F2B777022005DC873 /* zip_libzip_version.c */, + 55C765C82B777022005DC873 /* zip_memdup.c */, + 55C765F52B777022005DC873 /* zip_name_locate.c */, + 55C765E62B777022005DC873 /* zip_new.c */, + 55C7662D2B777022005DC873 /* zip_open.c */, + 55C765FC2B777022005DC873 /* zip_pkware.c */, + 55C766162B777022005DC873 /* zip_progress.c */, + 55C765E82B777022005DC873 /* zip_random_unix.c */, + 55C765FE2B777022005DC873 /* zip_random_uwp.c */, + 55C766442B777022005DC873 /* zip_random_win32.c */, + 55C766172B777022005DC873 /* zip_rename.c */, + 55C766212B777022005DC873 /* zip_replace.c */, + 55C765F12B777022005DC873 /* zip_set_archive_comment.c */, + 55C766072B777022005DC873 /* zip_set_archive_flag.c */, + 55C766112B777022005DC873 /* zip_set_default_password.c */, + 55C766252B777022005DC873 /* zip_set_file_comment.c */, + 55C765DF2B777022005DC873 /* zip_set_file_compression.c */, + 55C765DA2B777022005DC873 /* zip_set_name.c */, + 55C766242B777022005DC873 /* zip_source_accept_empty.c */, + 55C7662E2B777022005DC873 /* zip_source_begin_write_cloning.c */, + 55C765CB2B777022005DC873 /* zip_source_begin_write.c */, + 55C765D22B777022005DC873 /* zip_source_buffer.c */, + 55C765EE2B777022005DC873 /* zip_source_call.c */, + 55C7662B2B777022005DC873 /* zip_source_close.c */, + 55C765D12B777022005DC873 /* zip_source_commit_write.c */, + 55C7663E2B777022005DC873 /* zip_source_compress.c */, + 55C766232B777022005DC873 /* zip_source_crc.c */, + 55C766392B777022005DC873 /* zip_source_error.c */, + 55C765FA2B777022005DC873 /* zip_source_file_common.c */, + 55C766122B777022005DC873 /* zip_source_file_stdio_named.c */, + 55C765F32B777022005DC873 /* zip_source_file_stdio.c */, + 55C766432B777022005DC873 /* zip_source_file_stdio.h */, + 55C765EA2B777022005DC873 /* zip_source_file_win32_ansi.c */, + 55C766102B777022005DC873 /* zip_source_file_win32_named.c */, + 55C766322B777022005DC873 /* zip_source_file_win32_utf8.c */, + 55C766512B777022005DC873 /* zip_source_file_win32_utf16.c */, + 55C766532B777022005DC873 /* zip_source_file_win32.c */, + 55C766092B777022005DC873 /* zip_source_file_win32.h */, + 55C7661C2B777022005DC873 /* zip_source_file.h */, + 55C765F92B777022005DC873 /* zip_source_free.c */, + 55C7661D2B777022005DC873 /* zip_source_function.c */, + 55C7663C2B777022005DC873 /* zip_source_get_file_attributes.c */, + 55C765EF2B777022005DC873 /* zip_source_is_deleted.c */, + 55C766502B777022005DC873 /* zip_source_layered.c */, + 55C765DE2B777022005DC873 /* zip_source_open.c */, + 55C7661B2B777022005DC873 /* zip_source_pass_to_lower_layer.c */, + 55C7660E2B777022005DC873 /* zip_source_pkware_decode.c */, + 55C766062B777022005DC873 /* zip_source_pkware_encode.c */, + 55C7662C2B777022005DC873 /* zip_source_read.c */, + 55C766412B777022005DC873 /* zip_source_remove.c */, + 55C766152B777022005DC873 /* zip_source_rollback_write.c */, + 55C765F62B777022005DC873 /* zip_source_seek_write.c */, + 55C766032B777022005DC873 /* zip_source_seek.c */, + 55C765D42B777022005DC873 /* zip_source_stat.c */, + 55C765C92B777022005DC873 /* zip_source_supports.c */, + 55C765C72B777022005DC873 /* zip_source_tell_write.c */, + 55C7663A2B777022005DC873 /* zip_source_tell.c */, + 55C766452B777022005DC873 /* zip_source_window.c */, + 55C766472B777022005DC873 /* zip_source_winzip_aes_decode.c */, + 55C7664F2B777022005DC873 /* zip_source_winzip_aes_encode.c */, + 55C766372B777022005DC873 /* zip_source_write.c */, + 55C766082B777022005DC873 /* zip_source_zip_new.c */, + 55C766182B777022005DC873 /* zip_source_zip.c */, + 55C766192B777022005DC873 /* zip_stat_index.c */, + 55C766482B777022005DC873 /* zip_stat_init.c */, + 55C766272B777022005DC873 /* zip_stat.c */, + 55C766022B777022005DC873 /* zip_strerror.c */, + 55C765D92B777022005DC873 /* zip_string.c */, + 55C7664D2B777022005DC873 /* zip_unchange_all.c */, + 55C765F82B777022005DC873 /* zip_unchange_archive.c */, + 55C7660C2B777022005DC873 /* zip_unchange_data.c */, + 55C765E52B777022005DC873 /* zip_unchange.c */, + 55C766332B777022005DC873 /* zip_utf-8.c */, + 55C766202B777022005DC873 /* zip_winzip_aes.c */, + 55C7662A2B777022005DC873 /* zip.h */, + 55C765CC2B777022005DC873 /* zipint.h */, + ); + path = lib; + sourceTree = ""; + }; + 55C766E12B7771E0005DC873 /* lzma */ = { + isa = PBXGroup; + children = ( + 55C766E22B7771E0005DC873 /* lzma.vcxproj.filters */, + 55C766E32B7771E0005DC873 /* CMakeLists.txt */, + 55C766E42B7771E0005DC873 /* include */, + 55C767032B7771E0005DC873 /* lzma.vcxproj */, + 55C767042B7771E0005DC873 /* LICENSE.txt */, + 55C767052B7771E0005DC873 /* src */, + ); + path = lzma; + sourceTree = ""; + }; + 55C766E42B7771E0005DC873 /* include */ = { + isa = PBXGroup; + children = ( + 55C766F12B7771E0005DC873 /* 7z.h */, + 55C766F92B7771E0005DC873 /* 7zAlloc.h */, + 55C766F02B7771E0005DC873 /* 7zBuf.h */, + 55C766EB2B7771E0005DC873 /* 7zCrc.h */, + 55C766ED2B7771E0005DC873 /* 7zFile.h */, + 55C766E62B7771E0005DC873 /* 7zTypes.h */, + 55C766FA2B7771E0005DC873 /* 7zVersion.h */, + 55C767002B7771E0005DC873 /* Alloc.h */, + 55C766F72B7771E0005DC873 /* Bcj2.h */, + 55C766FB2B7771E0005DC873 /* Bra.h */, + 55C766E72B7771E0005DC873 /* Compiler.h */, + 55C766EA2B7771E0005DC873 /* CpuArch.h */, + 55C766EC2B7771E0005DC873 /* Delta.h */, + 55C766F62B7771E0005DC873 /* LzFind.h */, + 55C766E52B7771E0005DC873 /* LzHash.h */, + 55C766F52B7771E0005DC873 /* Lzma2Dec.h */, + 55C767012B7771E0005DC873 /* Lzma2DecMt.h */, + 55C766FE2B7771E0005DC873 /* Lzma2Enc.h */, + 55C766F32B7771E0005DC873 /* Lzma86.h */, + 55C766FF2B7771E0005DC873 /* LzmaDec.h */, + 55C766F42B7771E0005DC873 /* LzmaEnc.h */, + 55C766EF2B7771E0005DC873 /* LzmaLib.h */, + 55C766F82B7771E0005DC873 /* Ppmd.h */, + 55C766FD2B7771E0005DC873 /* Ppmd7.h */, + 55C766E92B7771E0005DC873 /* Precomp.h */, + 55C766FC2B7771E0005DC873 /* RotateDefs.h */, + 55C766EE2B7771E0005DC873 /* Sha256.h */, + 55C766F22B7771E0005DC873 /* Xz.h */, + 55C766E82B7771E0005DC873 /* XzCrc64.h */, + 55C767022B7771E0005DC873 /* XzEnc.h */, + ); + path = include; + sourceTree = ""; + }; + 55C767052B7771E0005DC873 /* src */ = { + isa = PBXGroup; + children = ( + 55C767112B7771E0005DC873 /* 7zAlloc.c */, + 55C767102B7771E0005DC873 /* 7zArcIn.c */, + 55C7672A2B7771E0005DC873 /* 7zBuf.c */, + 55C7671A2B7771E0005DC873 /* 7zBuf2.c */, + 55C767232B7771E0005DC873 /* 7zCrc.c */, + 55C767292B7771E0005DC873 /* 7zCrcOpt.c */, + 55C767192B7771E0005DC873 /* 7zDec.c */, + 55C767222B7771E0005DC873 /* 7zFile.c */, + 55C7671E2B7771E0005DC873 /* 7zStream.c */, + 55C767152B7771E0005DC873 /* Alloc.c */, + 55C7670B2B7771E0005DC873 /* Bcj2.c */, + 55C767262B7771E0005DC873 /* Bcj2Enc.c */, + 55C7670E2B7771E0005DC873 /* Bra.c */, + 55C7670F2B7771E0005DC873 /* Bra86.c */, + 55C7671C2B7771E0005DC873 /* BraIA64.c */, + 55C767252B7771E0005DC873 /* CpuArch.c */, + 55C767212B7771E0005DC873 /* Delta.c */, + 55C7670C2B7771E0005DC873 /* LzFind.c */, + 55C767092B7771E0005DC873 /* LzFindOpt.c */, + 55C767062B7771E0005DC873 /* Lzma2Dec.c */, + 55C767142B7771E0005DC873 /* Lzma2DecMt.c */, + 55C767172B7771E0005DC873 /* Lzma2Enc.c */, + 55C7671D2B7771E0005DC873 /* Lzma86Dec.c */, + 55C767242B7771E0005DC873 /* Lzma86Enc.c */, + 55C767162B7771E0005DC873 /* LzmaDec.c */, + 55C767072B7771E0005DC873 /* LzmaEnc.c */, + 55C7672B2B7771E0005DC873 /* LzmaLib.c */, + 55C7670D2B7771E0005DC873 /* Ppmd7.c */, + 55C767082B7771E0005DC873 /* Ppmd7Dec.c */, + 55C767182B7771E0005DC873 /* Ppmd7Enc.c */, + 55C7671F2B7771E0005DC873 /* Sha256.c */, + 55C767202B7771E0005DC873 /* Sha256Opt.c */, + 55C767282B7771E0005DC873 /* Xz.c */, + 55C7671B2B7771E0005DC873 /* XzCrc64.c */, + 55C767272B7771E0005DC873 /* XzCrc64Opt.c */, + 55C7670A2B7771E0005DC873 /* XzDec.c */, + 55C767132B7771E0005DC873 /* XzEnc.c */, + 55C767122B7771E0005DC873 /* XzIn.c */, + ); + path = src; + sourceTree = ""; + }; 55DB5A7F2B590A6C00B3BD75 /* libwebp */ = { isa = PBXGroup; children = ( @@ -7565,12 +6586,12 @@ DD0302B827C491160006ABDC /* Video */ = { isa = PBXGroup; children = ( - DD0302BC27C491160006ABDC /* ContextAGL.mm */, + DD0302BC27C491160006ABDC /* GLContextAGL.mm */, 55EBA8B8295CDEF90035A1FD /* GSCaptureStub.cpp */, + 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */, DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */, 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */, 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */, - 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */, DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */, DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */, DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */, @@ -7633,6 +6654,36 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( + 55C767422B7771E0005DC873 /* Bra.h in Headers */, + 55C767302B7771E0005DC873 /* Precomp.h in Headers */, + 55C767462B7771E0005DC873 /* LzmaDec.h in Headers */, + 55C767492B7771E0005DC873 /* XzEnc.h in Headers */, + 55C767382B7771E0005DC873 /* 7z.h in Headers */, + 55C767472B7771E0005DC873 /* Alloc.h in Headers */, + 55C767352B7771E0005DC873 /* Sha256.h in Headers */, + 55C767362B7771E0005DC873 /* LzmaLib.h in Headers */, + 55C767372B7771E0005DC873 /* 7zBuf.h in Headers */, + 55C767442B7771E0005DC873 /* Ppmd7.h in Headers */, + 55C7673F2B7771E0005DC873 /* Ppmd.h in Headers */, + 55C767412B7771E0005DC873 /* 7zVersion.h in Headers */, + 55C7673D2B7771E0005DC873 /* LzFind.h in Headers */, + 55C767312B7771E0005DC873 /* CpuArch.h in Headers */, + 55C7672C2B7771E0005DC873 /* LzHash.h in Headers */, + 55C767432B7771E0005DC873 /* RotateDefs.h in Headers */, + 55C767402B7771E0005DC873 /* 7zAlloc.h in Headers */, + 55C7672E2B7771E0005DC873 /* Compiler.h in Headers */, + 55C7673C2B7771E0005DC873 /* Lzma2Dec.h in Headers */, + 55C767392B7771E0005DC873 /* Xz.h in Headers */, + 55C7673B2B7771E0005DC873 /* LzmaEnc.h in Headers */, + 55C767482B7771E0005DC873 /* Lzma2DecMt.h in Headers */, + 55C7673A2B7771E0005DC873 /* Lzma86.h in Headers */, + 55C7672D2B7771E0005DC873 /* 7zTypes.h in Headers */, + 55C767342B7771E0005DC873 /* 7zFile.h in Headers */, + 55C7673E2B7771E0005DC873 /* Bcj2.h in Headers */, + 55C7672F2B7771E0005DC873 /* XzCrc64.h in Headers */, + 55C767322B7771E0005DC873 /* 7zCrc.h in Headers */, + 55C767452B7771E0005DC873 /* Lzma2Enc.h in Headers */, + 55C767332B7771E0005DC873 /* Delta.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -7717,12 +6768,19 @@ isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( - 55484CB0288555730066EDEB /* zip_crypto_commoncrypto.h in Headers */, - 55484CC5288555800066EDEB /* zip_crypto.h in Headers */, - 55484CF6288555800066EDEB /* zip_source_file.h in Headers */, - 55484CBE288555800066EDEB /* zip_source_file_stdio.h in Headers */, + 55C766BC2B777023005DC873 /* compat.h in Headers */, + 55C766B32B777023005DC873 /* zip_crypto_gnutls.h in Headers */, + 55C7665A2B777022005DC873 /* zipint.h in Headers */, + 55C766782B777022005DC873 /* zip_crypto.h in Headers */, + 55C766BD2B777023005DC873 /* zip_crypto_mbedtls.h in Headers */, + 55C766D02B777023005DC873 /* zip_source_file_stdio.h in Headers */, 55DB5A762B59095D00B3BD75 /* zipconf.h in Headers */, + 55C766972B777023005DC873 /* zip_crypto_openssl.h in Headers */, + 55C766D82B777023005DC873 /* zip_crypto_commoncrypto.h in Headers */, + 55C766B72B777023005DC873 /* zip.h in Headers */, 55484D312885595F0066EDEB /* config.h in Headers */, + 55C766C82B777023005DC873 /* zip_crypto_win.h in Headers */, + 55C766A92B777023005DC873 /* zip_source_file.h in Headers */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8309,12 +7367,14 @@ 551BF5BD264210A30008C529 /* FiFo.cpp in Sources */, 551AA17A2792B66400658151 /* DHCP_Server.cpp in Sources */, 551BF680264240660008C529 /* ATA_State.cpp in Sources */, + 55C767822B777677005DC873 /* GLProgram.cpp in Sources */, 5548492D288554CF0066EDEB /* Dmac.cpp in Sources */, 551BF6E926424D030008C529 /* InputRecording.cpp in Sources */, 551AA1302792AB1700658151 /* GSHwHack.cpp in Sources */, 551BF5C2264210AB0008C529 /* GS.cpp in Sources */, 551BF676264219BD0008C529 /* DebugInterface.cpp in Sources */, 551BF58526420E9A0008C529 /* SourceLog.cpp in Sources */, + 55C765BD2B776E88005DC873 /* PadDualshock2.cpp in Sources */, 551BF5CE264212070008C529 /* IPU_Fifo.cpp in Sources */, 551BF5D4264212270008C529 /* Mdec.cpp in Sources */, 551BF619264214530008C529 /* iFPUd.cpp in Sources */, @@ -8325,10 +7385,11 @@ 551BF57F26420E9A0008C529 /* Sif0.cpp in Sources */, 551BF62C264216F50008C529 /* GzippedFileReader.cpp in Sources */, 551BF69C264243B30008C529 /* ATA_CmdPIOData.cpp in Sources */, + 55C765C32B776E88005DC873 /* Sio2.cpp in Sources */, 551BF61A264214530008C529 /* iR3000A.cpp in Sources */, + 55C767712B777353005DC873 /* ReverbResample.cpp in Sources */, 551BF6812642408B0008C529 /* IOCtlSrc.cpp in Sources */, 551AA4AC27935E9100658151 /* DHCP_Options.cpp in Sources */, - DDE1B42D298C68210028DF05 /* usb-pad.cpp in Sources */, 55B1F014295BACF000DB297F /* TCP_Options.cpp in Sources */, 551BF57126420E720008C529 /* VUflags.cpp in Sources */, 551BF5BF264210A30008C529 /* FPU.cpp in Sources */, @@ -8339,6 +7400,7 @@ 551AA12C2792AB1700658151 /* GSTextureCacheSW.cpp in Sources */, 551BF5B326420FA50008C529 /* IopMem.cpp in Sources */, 55B1EFD3295BA71D00DB297F /* GSXXH.cpp in Sources */, + 55C7677F2B77763B005DC873 /* GameList.cpp in Sources */, 551BF56E26420E710008C529 /* Vif1_Dma.cpp in Sources */, 551BF5B8264210860008C529 /* COP2.cpp in Sources */, 551AA1782792B66400658151 /* DNS_Logger.cpp in Sources */, @@ -8364,6 +7426,7 @@ 551BF6A0264243C50008C529 /* ATA_CmdDMA.cpp in Sources */, 551BF57326420E720008C529 /* VU0micro.cpp in Sources */, 551BF5B426420FA50008C529 /* Interpreter.cpp in Sources */, + 55C767732B777407005DC873 /* DiscordStubs.cpp in Sources */, 551AA4A927935E9100658151 /* EthernetFrame.cpp in Sources */, 551BF688264241E10008C529 /* DisassemblyManager.cpp in Sources */, 551AA12E2792AB1700658151 /* GSTextureCache.cpp in Sources */, @@ -8384,8 +7447,11 @@ 55B1F03C295BAF4300DB297F /* GSVertexTraceFMM.cpp in Sources */, 551AA4122792C4F500658151 /* MTVU.cpp in Sources */, 551BF57026420E710008C529 /* VU0.cpp in Sources */, + 55C765BA2B776E88005DC873 /* MemoryCardFolder.cpp in Sources */, 551BF67C264240560008C529 /* pcap_io.cpp in Sources */, + 55C765B92B776E88005DC873 /* MemoryCardFile.cpp in Sources */, 551BF67F264240660008C529 /* ATA_Transfer.cpp in Sources */, + 55C765BE2B776E88005DC873 /* Pad.cpp in Sources */, 551BF5BE264210A30008C529 /* FW.cpp in Sources */, 55B1EFD5295BA74200DB297F /* GSLocalMemoryMultiISA.cpp in Sources */, 551BF6AC264244590008C529 /* ReadInput.cpp in Sources */, @@ -8393,11 +7459,12 @@ 55325A072A00FB0800D4CFFA /* GSDevice.cpp in Sources */, 551AA4AA27935E9100658151 /* UDP_Packet.cpp in Sources */, 551BF689264241E80008C529 /* DisR5900asm.cpp in Sources */, - DD0302C027C491160006ABDC /* ContextAGL.mm in Sources */, + DD0302C027C491160006ABDC /* GLContextAGL.mm in Sources */, 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */, DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */, 551BF5CC264212070008C529 /* IPU.cpp in Sources */, 551BF56726420DE90008C529 /* SymbolMap.cpp in Sources */, + 55C7677C2B777606005DC873 /* LayeredSettingsInterface.cpp in Sources */, 551BF5B9264210860008C529 /* Counters.cpp in Sources */, 551BF694264242510008C529 /* Cache.cpp in Sources */, 551BF58826420E9A0008C529 /* R5900OpcodeTables.cpp in Sources */, @@ -8422,9 +7489,11 @@ 551BF699264242FE0008C529 /* spu2sys.cpp in Sources */, 551BF68D264241F10008C529 /* ExpressionParser.cpp in Sources */, 551BF631264216F50008C529 /* InputIsoFile.cpp in Sources */, + 55C767792B7775A6005DC873 /* GLStreamBuffer.cpp in Sources */, 551AA4AF27935E9100658151 /* IP_Options.cpp in Sources */, 551BF67A264240560008C529 /* DEV9.cpp in Sources */, 55B1F02E295BAD5600DB297F /* TCP_Session.cpp in Sources */, + 55C767762B77751F005DC873 /* GLShaderCache.cpp in Sources */, 551BF679264240560008C529 /* smap.cpp in Sources */, 55BD3E7D295A5ABC001DD03E /* misc.metal in Sources */, 551BF58426420E9A0008C529 /* R3000AInterpreter.cpp in Sources */, @@ -8434,6 +7503,7 @@ 551BF646264218380008C529 /* iR5900AritImm.cpp in Sources */, 551BF5CF264212070008C529 /* yuv2rgb.cpp in Sources */, 551BF68C264241F10008C529 /* MIPSAnalyst.cpp in Sources */, + 55C765B82B776E88005DC873 /* MemoryCardProtocol.cpp in Sources */, 551AA4AD27935E9100658151 /* DNS_Classes.cpp in Sources */, 551BF6A2264244050008C529 /* spu2freeze.cpp in Sources */, 551AA4E72793789300658151 /* GSSetupPrimCodeGenerator.cpp in Sources */, @@ -8456,6 +7526,7 @@ 551AA4172792C81900658151 /* PerformanceMetrics.cpp in Sources */, 551BF643264218380008C529 /* iR5900Arit.cpp in Sources */, 551AA13F2792AB1700658151 /* GSRenderer.cpp in Sources */, + 55C765C02B776E88005DC873 /* PadGuitar.cpp in Sources */, 55B1F013295BACF000DB297F /* TCP_Packet.cpp in Sources */, 551BF620264214530008C529 /* iCOP0.cpp in Sources */, 5576A4802885E0C70078CFF8 /* InputRecordingControls.cpp in Sources */, @@ -8464,7 +7535,9 @@ 551BF635264216F50008C529 /* CDVDdiscThread.cpp in Sources */, DDE1B42E298C68210028DF05 /* usb-pad-ff.cpp in Sources */, 5517E8C7263D45F4000219EC /* PCSX2GameCore.mm in Sources */, + 55C765C12B776E88005DC873 /* Sio.cpp in Sources */, 551BF5BC2642109F0008C529 /* Elfheader.cpp in Sources */, + 55C765BC2B776E88005DC873 /* PadPopn.cpp in Sources */, 551BF649264218380008C529 /* iR5900MultDiv.cpp in Sources */, 55B1EFC7295BA52A00DB297F /* USB.cpp in Sources */, 55484D3E28855EE70066EDEB /* InputRecordingFile.cpp in Sources */, @@ -8477,13 +7550,14 @@ 551BF57926420E720008C529 /* Vif0_Dma.cpp in Sources */, DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */, 55B1F02C295BAD5600DB297F /* ICMP_Session.cpp in Sources */, - 55BD3E70295A59CE001DD03E /* usb-pad-sdl-ff.cpp in Sources */, 551BF56826420E3B0008C529 /* newVif_Unpack.cpp in Sources */, 557D49D027D00BE7006C2C69 /* merge.metal in Sources */, 551AA4AB27935E9100658151 /* DHCP_Packet.cpp in Sources */, 55B1F002295BAB8A00DB297F /* usb-ohci.cpp in Sources */, DD0302B127C435760006ABDC /* SndOut_Cubeb.cpp in Sources */, 551BF6A8264244480008C529 /* Dma.cpp in Sources */, + 55C765BB2B776E88005DC873 /* PadNotConnected.cpp in Sources */, + 55C765912B776817005DC873 /* InputSource.cpp in Sources */, 551BF62F264216F50008C529 /* CDVDisoReader.cpp in Sources */, DD5A404E298CA9B700EFBE7A /* SndOut.cpp in Sources */, 551BF5AE26420FA50008C529 /* IopCounters.cpp in Sources */, @@ -8518,6 +7592,7 @@ 551BF6B8264249D00008C529 /* Patch.cpp in Sources */, DDE1B433298C68320028DF05 /* usb-printer.cpp in Sources */, 551AA4AE27935E9100658151 /* DNS_Packet.cpp in Sources */, + 55C765BF2B776E88005DC873 /* PadBase.cpp in Sources */, 551BF58726420E9A0008C529 /* pgif.cpp in Sources */, DD03FFD827B721F20006ABDC /* GSTextureMTL.mm in Sources */, 551BF61E264214530008C529 /* iMMI.cpp in Sources */, @@ -8552,13 +7627,16 @@ DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */, 551BF6A92642444F0008C529 /* DplIIdecoder.cpp in Sources */, 551BF5AF26420FA50008C529 /* IopDma.cpp in Sources */, + 55C765B72B776E88005DC873 /* MultitapProtocol.cpp in Sources */, 55B1F003295BABAF00DB297F /* core.cpp in Sources */, 551AA1232792AB1700658151 /* GSRendererSW.cpp in Sources */, + 55C765C22B776E88005DC873 /* Sio0.cpp in Sources */, 551BF69E264243BC0008C529 /* ATA_SCE.cpp in Sources */, 55B1F02F295BAD5600DB297F /* TCP_Session_In.cpp in Sources */, 551BF58F26420E9A0008C529 /* R5900.cpp in Sources */, 551BF58D26420E9A0008C529 /* Sif.cpp in Sources */, 551BF64D264218380008C529 /* iR5900Shift.cpp in Sources */, + 55C767872B7778A5005DC873 /* GLContext.cpp in Sources */, 551BF68B264241E80008C529 /* DisVU1Micro.cpp in Sources */, 55B1EFC6295BA4DE00DB297F /* CDVDcommon.cpp in Sources */, 551BF644264218380008C529 /* iR5900Jump.cpp in Sources */, @@ -8583,6 +7661,11 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 55C765922B776DA7005DC873 /* libchdr_flac.c in Sources */, + 55C765952B776DA7005DC873 /* libchdr_huffman.c in Sources */, + 55C765C42B776EE0005DC873 /* libchdr_chd.c in Sources */, + 55C765962B776DA7005DC873 /* libchdr_cdrom.c in Sources */, + 55C765942B776DA7005DC873 /* libchdr_bitstream.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8592,31 +7675,53 @@ files = ( 551AA46F2793586400658151 /* index.c in Sources */, 551AA46D2793586400658151 /* block_decoder.c in Sources */, + 55C7675A2B7771E0005DC873 /* LzmaDec.c in Sources */, + 55C7675C2B7771E0005DC873 /* Ppmd7Enc.c in Sources */, 551AA45D2793586400658151 /* vli_encoder.c in Sources */, 551AA47C27935CD800658151 /* check.c in Sources */, 551AA4712793586400658151 /* auto_decoder.c in Sources */, 551AA44E2793582F00658151 /* alone_decoder.c in Sources */, + 55C767642B7771E0005DC873 /* Sha256Opt.c in Sources */, + 55C767622B7771E0005DC873 /* 7zStream.c in Sources */, + 55C767662B7771E0005DC873 /* 7zFile.c in Sources */, 551AA46B2793586400658151 /* outqueue.c in Sources */, + 55C7676D2B7771E0005DC873 /* 7zCrcOpt.c in Sources */, 551AA48027935D9200658151 /* crc64_table.c in Sources */, 551AA4522793586400658151 /* filter_buffer_encoder.c in Sources */, 551AA47D27935D1400658151 /* sha256.c in Sources */, + 55C767522B7771E0005DC873 /* Bra.c in Sources */, + 55C767582B7771E0005DC873 /* Lzma2DecMt.c in Sources */, 551AA45F2793586400658151 /* filter_encoder.c in Sources */, 551AA44C279357AC00658151 /* easy_preset.c in Sources */, + 55C7676C2B7771E0005DC873 /* Xz.c in Sources */, 551AA45A2793586400658151 /* alone_encoder.c in Sources */, + 55C767572B7771E0005DC873 /* XzEnc.c in Sources */, + 55C7674C2B7771E0005DC873 /* Ppmd7Dec.c in Sources */, 551AA476279358A400658151 /* lzma_encoder_presets.c in Sources */, + 55C767692B7771E0005DC873 /* CpuArch.c in Sources */, + 55C767602B7771E0005DC873 /* BraIA64.c in Sources */, + 55C7675E2B7771E0005DC873 /* 7zBuf2.c in Sources */, + 55C7674B2B7771E0005DC873 /* LzmaEnc.c in Sources */, 551AA4502793586400658151 /* block_encoder.c in Sources */, 551AA4592793586400658151 /* block_header_encoder.c in Sources */, 551AA46C2793586400658151 /* block_buffer_decoder.c in Sources */, + 55C7675F2B7771E0005DC873 /* XzCrc64.c in Sources */, 551AA477279358A400658151 /* lzma2_decoder.c in Sources */, 551AA4582793586400658151 /* stream_flags_common.c in Sources */, 551AA4652793586400658151 /* block_buffer_encoder.c in Sources */, 551AA479279358A400658151 /* lzma_decoder.c in Sources */, + 55C767682B7771E0005DC873 /* Lzma86Enc.c in Sources */, + 55C767502B7771E0005DC873 /* LzFind.c in Sources */, + 55C7674A2B7771E0005DC873 /* Lzma2Dec.c in Sources */, 551AA4702793586400658151 /* hardware_cputhreads.c in Sources */, + 55C767562B7771E0005DC873 /* XzIn.c in Sources */, 551AA4562793586400658151 /* index_hash.c in Sources */, 551AA47B279358A400658151 /* lzma2_encoder.c in Sources */, 551AA4542793586400658151 /* index_encoder.c in Sources */, + 55C7676F2B7771E0005DC873 /* LzmaLib.c in Sources */, 551AA4572793586400658151 /* filter_buffer_decoder.c in Sources */, 551AA47F27935D8800658151 /* crc64_fast.c in Sources */, + 55C7676B2B7771E0005DC873 /* XzCrc64Opt.c in Sources */, 551AA44B2792D1CA00658151 /* common.c in Sources */, 551AA44D279357D000658151 /* stream_encoder.c in Sources */, 551AA48127935D9A00658151 /* crc32_table.c in Sources */, @@ -8625,26 +7730,39 @@ 551AA4612793586400658151 /* easy_decoder_memusage.c in Sources */, 551AA4512793586400658151 /* easy_encoder_memusage.c in Sources */, 551AA4662793586400658151 /* filter_flags_decoder.c in Sources */, + 55C767592B7771E0005DC873 /* Alloc.c in Sources */, + 55C767532B7771E0005DC873 /* Bra86.c in Sources */, + 55C7676A2B7771E0005DC873 /* Bcj2Enc.c in Sources */, + 55C767542B7771E0005DC873 /* 7zArcIn.c in Sources */, 551AA478279358A400658151 /* lzma_encoder_optimum_normal.c in Sources */, 551AA4682793586400658151 /* stream_flags_encoder.c in Sources */, + 55C767552B7771E0005DC873 /* 7zAlloc.c in Sources */, + 55C767672B7771E0005DC873 /* 7zCrc.c in Sources */, 551AA4622793586400658151 /* filter_decoder.c in Sources */, 551AA4692793586400658151 /* block_util.c in Sources */, 551AA45E2793586400658151 /* filter_flags_encoder.c in Sources */, 551AA473279358A400658151 /* fastpos_table.c in Sources */, + 55C767612B7771E0005DC873 /* Lzma86Dec.c in Sources */, 551AA4632793586400658151 /* stream_flags_decoder.c in Sources */, 551AA44A2792D11800658151 /* easy_encoder.c in Sources */, 551AA47A279358A400658151 /* lzma_encoder.c in Sources */, 551AA4602793586400658151 /* stream_encoder_mt.c in Sources */, 551AA45B2793586400658151 /* hardware_physmem.c in Sources */, 551AA474279358A400658151 /* lzma_encoder_optimum_fast.c in Sources */, + 55C767632B7771E0005DC873 /* Sha256.c in Sources */, + 55C7674D2B7771E0005DC873 /* LzFindOpt.c in Sources */, 551AA4532793586400658151 /* index_decoder.c in Sources */, 551AA47E27935D6E00658151 /* crc32_fast.c in Sources */, 551AA46E2793586400658151 /* stream_decoder.c in Sources */, 551AA4722793586400658151 /* stream_buffer_encoder.c in Sources */, + 55C767512B7771E0005DC873 /* Ppmd7.c in Sources */, + 55C7674F2B7771E0005DC873 /* Bcj2.c in Sources */, 551AA46A2793586400658151 /* vli_decoder.c in Sources */, 551AA4552793586400658151 /* easy_buffer_encoder.c in Sources */, 551AA4642793586400658151 /* vli_size.c in Sources */, 551AA44F2793586400658151 /* block_header_decoder.c in Sources */, + 55C7676E2B7771E0005DC873 /* 7zBuf.c in Sources */, + 55C7675B2B7771E0005DC873 /* Lzma2Enc.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -8799,123 +7917,125 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 55484D13288555800066EDEB /* zip_source_layered.c in Sources */, - 55484CFC288555800066EDEB /* zip_source_buffer.c in Sources */, - 55484D15288555800066EDEB /* zip_get_archive_flag.c in Sources */, - 55484CE3288555800066EDEB /* zip_source_supports.c in Sources */, - 55484D00288555800066EDEB /* zip_unchange_all.c in Sources */, - 55484CD4288555800066EDEB /* zip_source_zip.c in Sources */, - 55484D23288555800066EDEB /* zip_set_default_password.c in Sources */, - 55484D07288555800066EDEB /* zip_fopen_index_encrypted.c in Sources */, - 55484CFA288555800066EDEB /* zip_source_window.c in Sources */, - 55484CFF288555800066EDEB /* zip_source_tell_write.c in Sources */, - 55484D25288555800066EDEB /* zip_source_begin_write_cloning.c in Sources */, - 55484CAB288555730066EDEB /* zip_add_entry.c in Sources */, - 55484CD7288555800066EDEB /* zip_source_begin_write.c in Sources */, - 55484CBF288555800066EDEB /* zip_dirent.c in Sources */, - 55484CDB288555800066EDEB /* zip_strerror.c in Sources */, - 55484CB8288555800066EDEB /* zip_stat_init.c in Sources */, - 55484CC3288555800066EDEB /* zip_source_commit_write.c in Sources */, - 55484D26288555800066EDEB /* zip_set_file_compression.c in Sources */, - 55484CCC288555800066EDEB /* zip_unchange.c in Sources */, - 55484CAF288555730066EDEB /* zip_buffer.c in Sources */, - 55484D0E288555800066EDEB /* zip_hash.c in Sources */, - 55484CC8288555800066EDEB /* zip_error_to_str.c in Sources */, - 55484CDE288555800066EDEB /* zip_get_num_files.c in Sources */, - 55484D11288555800066EDEB /* zip_source_file_common.c in Sources */, - 55484CFE288555800066EDEB /* zip_source_get_file_attributes.c in Sources */, - 55484CD9288555800066EDEB /* zip_fdopen.c in Sources */, - 55484CB2288555730066EDEB /* zip_close.c in Sources */, - 55484CCB288555800066EDEB /* zip_file_get_comment.c in Sources */, - 55484CB1288555730066EDEB /* zip_algorithm_zstd.c in Sources */, - 55484CE7288555800066EDEB /* zip_source_pkware_encode.c in Sources */, - 55484CFD288555800066EDEB /* zip_source_crc.c in Sources */, - 55484CDC288555800066EDEB /* zip_source_accept_empty.c in Sources */, - 55484CDD288555800066EDEB /* zip_file_set_encryption.c in Sources */, - 55484CEC288555800066EDEB /* zip_source_is_deleted.c in Sources */, - 55484D16288555800066EDEB /* zip_source_stat.c in Sources */, - 55484CD1288555800066EDEB /* zip_unchange_data.c in Sources */, - 55484CE4288555800066EDEB /* zip_rename.c in Sources */, - 55484D22288555800066EDEB /* zip_source_read.c in Sources */, - 55484D19288555800066EDEB /* zip_file_error_get.c in Sources */, - 55484CAE288555730066EDEB /* zip_algorithm_xz.c in Sources */, - 55484CD5288555800066EDEB /* zip_file_add.c in Sources */, - 55484CE2288555800066EDEB /* zip_fopen_index.c in Sources */, - 55484CE8288555800066EDEB /* zip_stat_index.c in Sources */, - 55484CF8288555800066EDEB /* zip_source_write.c in Sources */, - 55484CED288555800066EDEB /* zip_open.c in Sources */, - 55484CCD288555800066EDEB /* zip_winzip_aes.c in Sources */, - 55484CDF288555800066EDEB /* zip_file_set_comment.c in Sources */, - 55484CE6288555800066EDEB /* zip_set_archive_flag.c in Sources */, - 55484CB3288555800066EDEB /* zip_dir_add.c in Sources */, - 55484CEF288555800066EDEB /* zip_name_locate.c in Sources */, - 55484CB6288555800066EDEB /* zip_fread.c in Sources */, - 55484D06288555800066EDEB /* zip_file_replace.c in Sources */, - 55484D04288555800066EDEB /* zip_source_pkware_decode.c in Sources */, - 55484CF2288555800066EDEB /* zip_source_open.c in Sources */, - 55484D02288555800066EDEB /* zip_entry.c in Sources */, - 55484CF4288555800066EDEB /* zip_source_free.c in Sources */, - 55484CC9288555800066EDEB /* zip_source_file_stdio.c in Sources */, - 55484D17288555800066EDEB /* zip_error_strerror.c in Sources */, - 55484D21288555800066EDEB /* zip_extra_field.c in Sources */, - 55484CDA288555800066EDEB /* zip_file_set_mtime.c in Sources */, - 55484CBA288555800066EDEB /* zip_source_seek_write.c in Sources */, - 55484CD2288555800066EDEB /* zip_file_set_external_attributes.c in Sources */, - 55484CB9288555800066EDEB /* zip_source_close.c in Sources */, - 55484CBD288555800066EDEB /* zip_file_strerror.c in Sources */, - 55484CA8288555730066EDEB /* zip_crypto_commoncrypto.c in Sources */, - 55484CB4288555800066EDEB /* zip_source_winzip_aes_encode.c in Sources */, - 55484CD3288555800066EDEB /* zip_source_error.c in Sources */, - 55484D28288555800066EDEB /* zip_libzip_version.c in Sources */, - 55484D0F288555800066EDEB /* zip_set_file_comment.c in Sources */, - 55484CC6288555800066EDEB /* zip_extra_field_api.c in Sources */, - 55484D03288555800066EDEB /* zip_set_name.c in Sources */, - 55484D09288555800066EDEB /* zip_discard.c in Sources */, - 55484CB7288555800066EDEB /* zip_io_util.c in Sources */, - 55484CEA288555800066EDEB /* zip_delete.c in Sources */, - 55484CAA288555730066EDEB /* zip_add.c in Sources */, - 55484D0A288555800066EDEB /* zip_source_rollback_write.c in Sources */, - 55484D18288555800066EDEB /* zip_error_clear.c in Sources */, - 55484D14288555800066EDEB /* zip_get_encryption_implementation.c in Sources */, - 55484CEE288555800066EDEB /* zip_source_file_stdio_named.c in Sources */, - 55484CC4288555800066EDEB /* zip_source_winzip_aes_decode.c in Sources */, - 55484CBC288555800066EDEB /* zip_string.c in Sources */, - 55484CD6288555800066EDEB /* zip_source_zip_new.c in Sources */, - 55484D10288555800066EDEB /* zip_source_compress.c in Sources */, - 55484CCF288555800066EDEB /* zip_utf-8.c in Sources */, - 55484D27288555800066EDEB /* zip_file_get_offset.c in Sources */, - 55484CFB288555800066EDEB /* zip_fclose.c in Sources */, - 55484D05288555800066EDEB /* zip_unchange_archive.c in Sources */, - 55484D1E288555800066EDEB /* zip_set_archive_comment.c in Sources */, - 55484CF0288555800066EDEB /* zip_file_rename.c in Sources */, - 55484CE0288555800066EDEB /* zip_error_get.c in Sources */, - 55484D08288555800066EDEB /* zip_get_name.c in Sources */, - 55484D1C288555800066EDEB /* zip_memdup.c in Sources */, - 55484CAD288555730066EDEB /* zip_algorithm_deflate.c in Sources */, - 55484CAC288555730066EDEB /* zip_algorithm_bzip2.c in Sources */, - 55484CCA288555800066EDEB /* zip_pkware.c in Sources */, - 55484D0D288555800066EDEB /* zip_new.c in Sources */, - 55484D1A288555800066EDEB /* zip_stat.c in Sources */, - 55484D24288555800066EDEB /* zip_error_get_sys_type.c in Sources */, - 55484CF3288555800066EDEB /* zip_source_tell.c in Sources */, - 55484CE5288555800066EDEB /* zip_fopen_encrypted.c in Sources */, - 55484CC1288555800066EDEB /* zip_source_remove.c in Sources */, - 55484D1F288555800066EDEB /* zip_get_file_comment.c in Sources */, - 55484CEB288555800066EDEB /* zip_random_unix.c in Sources */, - 55484CBB288555800066EDEB /* zip_source_seek.c in Sources */, - 55484CD0288555800066EDEB /* zip_source_call.c in Sources */, - 55484D01288555800066EDEB /* zip_ftell.c in Sources */, - 55484CA9288555730066EDEB /* zip_add_dir.c in Sources */, - 55484CE1288555800066EDEB /* zip_fopen.c in Sources */, - 55484CF9288555800066EDEB /* zip_replace.c in Sources */, - 55484CC2288555800066EDEB /* zip_get_archive_comment.c in Sources */, - 55484D1B288555800066EDEB /* zip_get_num_entries.c in Sources */, - 55484D12288555800066EDEB /* zip_source_function.c in Sources */, - 55484D0B288555800066EDEB /* zip_file_error_clear.c in Sources */, - 55484D0C288555800066EDEB /* zip_fseek.c in Sources */, - 55484CC7288555800066EDEB /* zip_progress.c in Sources */, - 55484CB5288555800066EDEB /* zip_file_get_external_attributes.c in Sources */, - 55484CF7288555800066EDEB /* zip_error.c in Sources */, + 55C766A72B777023005DC873 /* zip_get_num_entries.c in Sources */, + 55C766602B777022005DC873 /* zip_source_buffer.c in Sources */, + 55C766682B777022005DC873 /* zip_set_name.c in Sources */, + 55C766572B777022005DC873 /* zip_source_supports.c in Sources */, + 55C766952B777023005DC873 /* zip_source_zip_new.c in Sources */, + 55C766C62B777023005DC873 /* zip_source_error.c in Sources */, + 55C766852B777023005DC873 /* zip_unchange_archive.c in Sources */, + 55C766AA2B777023005DC873 /* zip_source_function.c in Sources */, + 55C766D92B777023005DC873 /* zip_algorithm_zstd.c in Sources */, + 55C766DB2B777023005DC873 /* zip_io_util.c in Sources */, + 55C7668F2B777023005DC873 /* zip_strerror.c in Sources */, + 55C766AC2B777023005DC873 /* zip_fseek.c in Sources */, + 55C7665E2B777022005DC873 /* zip_fopen_index.c in Sources */, + 55C7665C2B777022005DC873 /* zip_get_name.c in Sources */, + 55C766B02B777023005DC873 /* zip_source_crc.c in Sources */, + 55C766D62B777023005DC873 /* zip_fopen.c in Sources */, + 55C766C52B777023005DC873 /* zip_file_add.c in Sources */, + 55C7667D2B777022005DC873 /* zip_fopen_encrypted.c in Sources */, + 55C766B22B777023005DC873 /* zip_set_file_comment.c in Sources */, + 55C766B92B777023005DC873 /* zip_source_read.c in Sources */, + 55C7669A2B777023005DC873 /* zip_crypto_commoncrypto.c in Sources */, + 55C766A42B777023005DC873 /* zip_rename.c in Sources */, + 55C766C02B777023005DC873 /* zip_utf-8.c in Sources */, + 55C766582B777022005DC873 /* zip_file_get_external_attributes.c in Sources */, + 55C766CB2B777023005DC873 /* zip_source_compress.c in Sources */, + 55C766802B777022005DC873 /* zip_source_file_stdio.c in Sources */, + 55C766612B777022005DC873 /* zip_error_clear.c in Sources */, + 55C766882B777023005DC873 /* zip_get_num_files.c in Sources */, + 55C767842B77772A005DC873 /* zip_err_str.c in Sources */, + 55C766CA2B777023005DC873 /* zip_file_error_clear.c in Sources */, + 55C766C72B777023005DC873 /* zip_source_tell.c in Sources */, + 55C766AB2B777023005DC873 /* zip_file_set_external_attributes.c in Sources */, + 55C7667E2B777022005DC873 /* zip_set_archive_comment.c in Sources */, + 55C766662B777022005DC873 /* zip_discard.c in Sources */, + 55C766A12B777023005DC873 /* zip_fread.c in Sources */, + 55C766AE2B777023005DC873 /* zip_replace.c in Sources */, + 55C766622B777022005DC873 /* zip_source_stat.c in Sources */, + 55C7666C2B777022005DC873 /* zip_set_file_compression.c in Sources */, + 55C766A52B777023005DC873 /* zip_source_zip.c in Sources */, + 55C766C12B777023005DC873 /* zip_error_get.c in Sources */, + 55C766B52B777023005DC873 /* zip_get_file_comment.c in Sources */, + 55C766B12B777023005DC873 /* zip_source_accept_empty.c in Sources */, + 55C766592B777022005DC873 /* zip_source_begin_write.c in Sources */, + 55C766BB2B777023005DC873 /* zip_source_begin_write_cloning.c in Sources */, + 55C766A32B777023005DC873 /* zip_progress.c in Sources */, + 55C7666B2B777022005DC873 /* zip_source_open.c in Sources */, + 55C766892B777023005DC873 /* zip_pkware.c in Sources */, + 55C7668A2B777023005DC873 /* zip_add_entry.c in Sources */, + 55C7665D2B777022005DC873 /* zip_file_strerror.c in Sources */, + 55C766752B777022005DC873 /* zip_random_unix.c in Sources */, + 55C7668C2B777023005DC873 /* zip_buffer.c in Sources */, + 55C766652B777022005DC873 /* zip_ftell.c in Sources */, + 55C766562B777022005DC873 /* zip_memdup.c in Sources */, + 55C7669F2B777023005DC873 /* zip_source_file_stdio_named.c in Sources */, + 55C7666D2B777022005DC873 /* zip_hash.c in Sources */, + 55C766902B777023005DC873 /* zip_source_seek.c in Sources */, + 55C766B62B777023005DC873 /* zip_algorithm_xz.c in Sources */, + 55C766642B777022005DC873 /* zip_file_rename.c in Sources */, + 55C766CD2B777023005DC873 /* zip_error_to_str.c in Sources */, + 55C766CE2B777023005DC873 /* zip_source_remove.c in Sources */, + 55C766DA2B777023005DC873 /* zip_unchange_all.c in Sources */, + 55C766D52B777023005DC873 /* zip_stat_init.c in Sources */, + 55C766942B777023005DC873 /* zip_set_archive_flag.c in Sources */, + 55C7669E2B777023005DC873 /* zip_set_default_password.c in Sources */, + 55C766922B777023005DC873 /* zip_get_archive_flag.c in Sources */, + 55C766C42B777023005DC873 /* zip_source_write.c in Sources */, + 55C7666A2B777022005DC873 /* zip_file_set_encryption.c in Sources */, + 55C766712B777022005DC873 /* zip_file_get_offset.c in Sources */, + 55C766A22B777023005DC873 /* zip_source_rollback_write.c in Sources */, + 55C7665B2B777022005DC873 /* zip_add.c in Sources */, + 55C766A62B777023005DC873 /* zip_stat_index.c in Sources */, + 55C766B42B777023005DC873 /* zip_stat.c in Sources */, + 55C766792B777022005DC873 /* zip_add_dir.c in Sources */, + 55C766812B777022005DC873 /* zip_dir_add.c in Sources */, + 55C766872B777023005DC873 /* zip_source_file_common.c in Sources */, + 55C766862B777023005DC873 /* zip_source_free.c in Sources */, + 55C766BA2B777023005DC873 /* zip_open.c in Sources */, + 55C766742B777022005DC873 /* zip_file_set_comment.c in Sources */, + 55C766B82B777023005DC873 /* zip_source_close.c in Sources */, + 55C7669C2B777023005DC873 /* zip_file_set_mtime.c in Sources */, + 55C766AF2B777023005DC873 /* zip_delete.c in Sources */, + 55C766822B777022005DC873 /* zip_name_locate.c in Sources */, + 55C766932B777023005DC873 /* zip_source_pkware_encode.c in Sources */, + 55C7667F2B777022005DC873 /* zip_extra_field.c in Sources */, + 55C766552B777022005DC873 /* zip_source_tell_write.c in Sources */, + 55C766C92B777023005DC873 /* zip_source_get_file_attributes.c in Sources */, + 55C766D22B777023005DC873 /* zip_source_window.c in Sources */, + 55C7668D2B777023005DC873 /* zip_error.c in Sources */, + 55C766C22B777023005DC873 /* zip_fclose.c in Sources */, + 55C766632B777022005DC873 /* zip_get_archive_comment.c in Sources */, + 55C766CC2B777023005DC873 /* zip_libzip_version.c in Sources */, + 55C766722B777022005DC873 /* zip_unchange.c in Sources */, + 55C766DF2B777023005DC873 /* zip_error_strerror.c in Sources */, + 55C766DD2B777023005DC873 /* zip_source_layered.c in Sources */, + 55C7667B2B777022005DC873 /* zip_source_call.c in Sources */, + 55C7665F2B777022005DC873 /* zip_source_commit_write.c in Sources */, + 55C7666E2B777022005DC873 /* zip_file_error_get.c in Sources */, + 55C766912B777023005DC873 /* zip_get_encryption_implementation.c in Sources */, + 55C766CF2B777023005DC873 /* zip_algorithm_bzip2.c in Sources */, + 55C766982B777023005DC873 /* zip_fdopen.c in Sources */, + 55C7666F2B777022005DC873 /* zip_file_replace.c in Sources */, + 55C7667C2B777022005DC873 /* zip_source_is_deleted.c in Sources */, + 55C766672B777022005DC873 /* zip_string.c in Sources */, + 55C766A02B777023005DC873 /* zip_extra_field_api.c in Sources */, + 55C766D42B777023005DC873 /* zip_source_winzip_aes_decode.c in Sources */, + 55C766992B777023005DC873 /* zip_unchange_data.c in Sources */, + 55C766C32B777023005DC873 /* zip_dirent.c in Sources */, + 55C766BE2B777023005DC873 /* zip_fopen_index_encrypted.c in Sources */, + 55C766732B777022005DC873 /* zip_new.c in Sources */, + 55C766A82B777023005DC873 /* zip_source_pass_to_lower_layer.c in Sources */, + 55C766D32B777023005DC873 /* zip_file_get_comment.c in Sources */, + 55C7669B2B777023005DC873 /* zip_source_pkware_decode.c in Sources */, + 55C766842B777023005DC873 /* zip_algorithm_deflate.c in Sources */, + 55C766DC2B777023005DC873 /* zip_source_winzip_aes_encode.c in Sources */, + 55C7667A2B777022005DC873 /* zip_error_get_sys_type.c in Sources */, + 55C766AD2B777023005DC873 /* zip_winzip_aes.c in Sources */, + 55C766762B777022005DC873 /* zip_close.c in Sources */, + 55C766832B777022005DC873 /* zip_source_seek_write.c in Sources */, + 55C766692B777022005DC873 /* zip_entry.c in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -9387,7 +8507,7 @@ "\"$(SRCROOT)/pcsx2/pcsx2/frontend\"", "\"$(SRCROOT)/pcsx2\"", "\"$(SRCROOT)/pcsx2/pcsx2/GS/Renderers/Metal\"", - "\"$(SRCROOT)/pcsx2/3rdparty/libzip/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libzip/lib/\"", "\"$(SRCROOT)/libzip/private\"", ); USER_HEADER_SEARCH_PATHS = ( @@ -9408,6 +8528,7 @@ "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\"", "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/lz4/lz4/lib\"", + "\"$(SRCROOT)/pcsx2/3rdparty/discord-rpc/include\"", ); USE_HEADERMAP = NO; WRAPPER_EXTENSION = oecoreplugin; @@ -9472,7 +8593,7 @@ "\"$(SRCROOT)/pcsx2/pcsx2/frontend\"", "\"$(SRCROOT)/pcsx2\"", "\"$(SRCROOT)/pcsx2/pcsx2/GS/Renderers/Metal\"", - "\"$(SRCROOT)/pcsx2/3rdparty/libzip/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libzip/lib/\"", "\"$(SRCROOT)/libzip/private\"", ); USER_HEADER_SEARCH_PATHS = ( @@ -9493,6 +8614,7 @@ "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\"", "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/lz4/lz4/lib\"", + "\"$(SRCROOT)/pcsx2/3rdparty/discord-rpc/include\"", ); USE_HEADERMAP = NO; WRAPPER_EXTENSION = oecoreplugin; @@ -9521,14 +8643,14 @@ CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/include\"", "$(inherited)", ); PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; USER_HEADER_SEARCH_PATHS = ( - "\"${SRCROOT}/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", "$(inherited)", ); }; @@ -9542,14 +8664,14 @@ EXECUTABLE_PREFIX = lib; GCC_WARN_INHIBIT_ALL_WARNINGS = YES; HEADER_SEARCH_PATHS = ( - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/include\"", + "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/include\"", "$(inherited)", ); PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; STRIP_INSTALLED_PRODUCT = NO; USER_HEADER_SEARCH_PATHS = ( - "\"${SRCROOT}/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", "$(inherited)", ); }; @@ -9579,7 +8701,7 @@ USER_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2/3rdparty/xz/xz/src/common\"", "\"$(SRCROOT)/pcsx2/3rdparty/xz/xz/src/liblzma\"/**", - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", ); USE_HEADERMAP = NO; }; @@ -9611,7 +8733,7 @@ USER_HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2/3rdparty/xz/xz/src/common\"", "\"$(SRCROOT)/pcsx2/3rdparty/xz/xz/src/liblzma\"/**", - "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", ); USE_HEADERMAP = NO; }; @@ -9980,7 +9102,7 @@ "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/zstd/zstd/lib\"", ); - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\""; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libzip/lib\""; USE_HEADERMAP = NO; }; name = Debug; @@ -10006,7 +9128,7 @@ "\"$(SRCROOT)/pcsx2/3rdparty/libchdr/libchdr/deps/lzma-19.00/include\"", "\"$(SRCROOT)/pcsx2/3rdparty/zstd/zstd/lib\"", ); - USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libzip/libzip/lib\""; + USER_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/libzip/lib\""; USE_HEADERMAP = NO; }; name = Release; @@ -10195,7 +9317,6 @@ "$(inherited)", ); LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 13.6; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -10210,7 +9331,6 @@ EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu17; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; - MACOSX_DEPLOYMENT_TARGET = 13.6; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; diff --git a/libzip/private/zip_err_str.c b/libzip/private/zip_err_str.c new file mode 100644 index 0000000..28af773 --- /dev/null +++ b/libzip/private/zip_err_str.c @@ -0,0 +1,79 @@ +/* + This file was generated automatically by CMake + from zip.h and zipint.h; make changes there. +*/ + +#include "zipint.h" + +#define L ZIP_ET_LIBZIP +#define N ZIP_ET_NONE +#define S ZIP_ET_SYS +#define Z ZIP_ET_ZLIB + +#define E ZIP_DETAIL_ET_ENTRY +#define G ZIP_DETAIL_ET_GLOBAL + +const struct _zip_err_info _zip_err_str[] = { + { N, "No error" }, + { N, "Multi-disk zip archives not supported" }, + { S, "Renaming temporary file failed" }, + { S, "Closing zip archive failed" }, + { S, "Seek error" }, + { S, "Read error" }, + { S, "Write error" }, + { N, "CRC error" }, + { N, "Containing zip archive was closed" }, + { N, "No such file" }, + { N, "File already exists" }, + { S, "Can't open file" }, + { S, "Failure to create temporary file" }, + { Z, "Zlib error" }, + { N, "Malloc failure" }, + { N, "Entry has been changed" }, + { N, "Compression method not supported" }, + { N, "Premature end of file" }, + { N, "Invalid argument" }, + { N, "Not a zip archive" }, + { N, "Internal error" }, + { L, "Zip archive inconsistent" }, + { S, "Can't remove file" }, + { N, "Entry has been deleted" }, + { N, "Encryption method not supported" }, + { N, "Read-only archive" }, + { N, "No password provided" }, + { N, "Wrong password provided" }, + { N, "Operation not supported" }, + { N, "Resource still in use" }, + { S, "Tell error" }, + { N, "Compressed data invalid" }, + { N, "Operation cancelled" }, + { N, "Unexpected length of data" }, + { N, "Not allowed in torrentzip" }, +}; + +const int _zip_err_str_count = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]); + +const struct _zip_err_info _zip_err_details[] = { + { G, "no detail" }, + { G, "central directory overlaps EOCD, or there is space between them" }, + { G, "archive comment length incorrect" }, + { G, "central directory length invalid" }, + { E, "central header invalid" }, + { G, "central directory count of entries is incorrect" }, + { E, "local and central headers do not match" }, + { G, "wrong EOCD length" }, + { G, "EOCD64 overlaps EOCD, or there is space between them" }, + { G, "EOCD64 magic incorrect" }, + { G, "EOCD64 and EOCD do not match" }, + { G, "invalid value in central directory" }, + { E, "variable size fields overflow header" }, + { E, "invalid UTF-8 in filename" }, + { E, "invalid UTF-8 in comment" }, + { E, "invalid Zip64 extra field" }, + { E, "invalid WinZip AES extra field" }, + { E, "garbage at end of extra fields" }, + { E, "extra field length is invalid" }, + { E, "file length in header doesn't match actual file length" }, +}; + +const int _zip_err_details_count = sizeof(_zip_err_details)/sizeof(_zip_err_details[0]); From 75a67f4fa99fb6c53f1b3f1c311df603195c77e9 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 10 Feb 2024 14:21:01 -0700 Subject: [PATCH 04/16] More stubs. --- Classes/PCSX2GameCore.mm | 90 ++++++--------- Classes/achievements-oe.mm | 97 ++++++++++++++++ Classes/imgui_stubs.cpp | 189 ++++++++++++++++++++++++++++++++ PCSX2.xcodeproj/project.pbxproj | 48 +++++++- 4 files changed, 359 insertions(+), 65 deletions(-) create mode 100644 Classes/achievements-oe.mm create mode 100644 Classes/imgui_stubs.cpp diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index ff8926e..a36e3e9 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -775,73 +775,28 @@ - (void)changeDisplayWithMode:(NSString *)displayMode #pragma mark Host Display -//std::optional EmuThread::acquireRenderWindow() -//{ -// return {}; -//} -// -//bool Host::AcquireHostDisplay(RenderAPI api, bool clear_state_on_fail) -//{ -// GET_CURRENT_OR_RETURN(false); -// -// [current.renderDelegate willRenderFrameOnAlternateThread]; -// return g_host_display.get(); -//} -// -//void Host::ReleaseHostDisplay(bool clear_state) -//{ -// GET_CURRENT_OR_RETURN(); -// if (g_host_display.get()) { -// g_host_display.reset(); -// } -//} +void Host::BeginPresentFrame() +{ + +} -//HostDisplay::PresentResult Host::BeginPresentFrame(bool frame_skip) -//{ -// GET_CURRENT_OR_RETURN(HostDisplay::PresentResult::DeviceLost); -// -// return g_host_display.get()->BeginPresent(frame_skip); -//} -// -//void Host::EndPresentFrame() -//{ -// GET_CURRENT_OR_RETURN(); -// -// g_host_display.get()->EndPresent(); -//} -// -//int Host::PresentFrameBuffer() -//{ -// GET_CURRENT_OR_RETURN(0); -// -// return [[current.renderDelegate presentationFramebuffer] intValue]; -//} +std::optional Host::AcquireRenderWindow(bool recreate_window) +{ + GET_CURRENT_OR_RETURN(std::nullopt); -//void Host::ResizeHostDisplay(u32 new_window_width, u32 new_window_height, float new_window_scale) -//{ - - //Once We have METAL, we may be able to scale the frontend canvas - -// GET_CURRENT_OR_RETURN(); -// -// WindowInfo wi; -// wi.type = WindowInfo::Type::MacOS; -// wi.surface_width = new_window_width; -// wi.surface_height = new_window_height; -// current->hostDisplay.get()->ChangeRenderWindow(wi); -// current->screenRect = OEIntRectMake(0, 0 , new_window_width, new_window_height); -// -//} + //TODO: implement! + return {}; +} +void Host::ReleaseRenderWindow() +{ + +} void Host::CancelGameListRefresh() { } -//void Host::UpdateHostDisplay() -//{ -//} - #pragma mark Host Settings void Host::LoadSettings(SettingsInterface& si, std::unique_lock& lock) @@ -854,6 +809,18 @@ - (void)changeDisplayWithMode:(NSString *)displayMode // CommonHost::CheckForSettingsChanges(old_config); } +s32 Host::Internal::GetTranslatedStringImpl(const std::string_view &context, const std::string_view &msg, char *tbuf, size_t tbuf_space) +{ + if (msg.size() > tbuf_space) { + return -1; + } else if (msg.empty()) { + return 0; + } + + std::memcpy(tbuf, msg.data(), msg.size()); + return static_cast(msg.size()); +} + #pragma mark - std::optional InputManager::ConvertHostKeyboardStringToCode(const std::string_view& str) @@ -866,6 +833,11 @@ - (void)changeDisplayWithMode:(NSString *)displayMode return std::nullopt; } +void VMManager::Internal::ResetVMHotkeyState() +{ + +} + BEGIN_HOTKEY_LIST(g_host_hotkeys) END_HOTKEY_LIST() diff --git a/Classes/achievements-oe.mm b/Classes/achievements-oe.mm new file mode 100644 index 0000000..e33b8b3 --- /dev/null +++ b/Classes/achievements-oe.mm @@ -0,0 +1,97 @@ + +// Stubs for achievements. Obj-C++ for when OpenEmu adds support. + + +#include "Achievements.h" + +static std::recursive_mutex s_achievements_mutex; + +bool Achievements::IsUsingRAIntegration() +{ + return false; +} + +void Achievements::IdleUpdate() +{ + +} + +bool Achievements::Initialize() +{ + return false; +} + +void Achievements::FrameUpdate() { + +} + +bool Achievements::HasRichPresence() +{ + return false; +} + +static std::string blank = ""; +const std::string& Achievements::GetRichPresenceString() +{ + return blank; +} + +void Achievements::GameChanged(u32 disc_crc, u32 crc) +{ + +} + +void Achievements::ResetClient() +{ + +} + +void Achievements::OnVMPaused(bool paused) +{ + +} + +void Achievements::UpdateSettings(const Pcsx2Config::AchievementsOptions &old_config) +{ + +} + +bool Achievements::ResetHardcoreMode() +{ + return false; +} + +bool Achievements::ConfirmSystemReset() +{ + return false; +} + +void Achievements::DisableHardcoreMode() +{ + +} + +bool Achievements::IsHardcoreModeActive() +{ + return false; +} + +bool Achievements::ConfirmHardcoreModeDisable(const char* trigger) +{ + return false; +} + +void Achievements::ConfirmHardcoreModeDisableAsync(const char* trigger, std::function callback) +{ + callback(false); +} + +bool Achievements::IsActive() +{ + return false; +} + +bool Achievements::Shutdown(bool allow_cancel) +{ + return true; +} diff --git a/Classes/imgui_stubs.cpp b/Classes/imgui_stubs.cpp new file mode 100644 index 0000000..fafb11d --- /dev/null +++ b/Classes/imgui_stubs.cpp @@ -0,0 +1,189 @@ +// Copyright (c) 2024, OpenEmu Team +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above copyright +// notice, this list of conditions and the following disclaimer in the +// documentation and/or other materials provided with the distribution. +// * Neither the name of the OpenEmu Team nor the +// names of its contributors may be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY +// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +// DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY +// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#include "ImGui/ImGuiManager.h" +#include "ImGui/ImGuiOverlays.h" +#include "ImGui/FullscreenUI.h" + +void ImGuiManager::SetFontPathAndRange(std::string path, std::vector range) +{ + +} + +bool ImGuiManager::Initialize() +{ + return true; +} + +void ImGuiManager::Shutdown(bool clear_state) +{ + +} + +float ImGuiManager::GetWindowWidth() +{ + return 640; +} + +float ImGuiManager::GetWindowHeight() +{ + return 480; +} + +void ImGuiManager::WindowResized() +{ + +} + +void ImGuiManager::UpdateScale() +{ + +} + +void ImGuiManager::NewFrame() +{ + +} + +void ImGuiManager::RenderOSD() +{ + +} + +float ImGuiManager::GetGlobalScale() +{ + return 1; +} + +bool ImGuiManager::HasFullscreenFonts() +{ + return true; +} + +bool ImGuiManager::AddFullscreenFontsIfMissing() +{ + return true; +} + +ImFont* ImGuiManager::GetStandardFont() +{ + return nullptr; +} + +ImFont* ImGuiManager::GetFixedFont() +{ + return nullptr; +} + +ImFont* ImGuiManager::GetMediumFont() +{ + return nullptr; +} + +ImFont* ImGuiManager::GetLargeFont() +{ + return nullptr; +} + +bool ImGuiManager::WantsTextInput() +{ + return false; +} + +bool ImGuiManager::WantsMouseInput() +{ + return false; +} + +void ImGuiManager::AddTextInput(std::string str) +{ + +} + +void ImGuiManager::UpdateMousePosition(float x, float y) +{ + +} + +bool ImGuiManager::ProcessGenericInputEvent(GenericInputBinding key, float value) +{ + return false; +} + +void ImGuiManager::SetSoftwareCursor(u32 index, std::string image_path, float image_scale, u32 multiply_color) +{ + +} + +bool ImGuiManager::HasSoftwareCursor(u32 index) +{ + return false; +} + +void ImGuiManager::ClearSoftwareCursor(u32 index) +{ + +} + +void ImGuiManager::SetSoftwareCursorPosition(u32 index, float pos_x, float pos_y) +{ + +} + +void ImGuiManager::SkipFrame() +{ + +} + +#pragma mark - FullscreenUI stubs + +void FullscreenUI::GameChanged(std::string title, std::string path, std::string serial, u32 disc_crc, u32 crc) +{ + +} + +void FullscreenUI::OnVMStarted() +{ + +} + +void FullscreenUI::OnVMDestroyed() +{ + +} + +void FullscreenUI::CheckForConfigChanges(const Pcsx2Config &old_config) +{ + +} + +void FullscreenUI::Render() +{ + +} + +void SaveStateSelectorUI::Clear() +{ + +} diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index de0668d..043dc65 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -700,6 +700,8 @@ 55C767822B777677005DC873 /* GLProgram.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767812B777677005DC873 /* GLProgram.cpp */; }; 55C767842B77772A005DC873 /* zip_err_str.c in Sources */ = {isa = PBXBuildFile; fileRef = 55C767832B77772A005DC873 /* zip_err_str.c */; }; 55C767872B7778A5005DC873 /* GLContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C767862B7778A5005DC873 /* GLContext.cpp */; }; + 55C97CF12B7817AC004AB53D /* achievements-oe.mm in Sources */ = {isa = PBXBuildFile; fileRef = 55C97CF02B7817AC004AB53D /* achievements-oe.mm */; }; + 55C97CF32B78192D004AB53D /* imgui_stubs.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55C97CF22B78192D004AB53D /* imgui_stubs.cpp */; }; 55DB5A352B59027B00B3BD75 /* RedumpDatabase.yaml in Resources */ = {isa = PBXBuildFile; fileRef = 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */; }; 55DB5A592B5903E400B3BD75 /* Assertions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A412B5903B000B3BD75 /* Assertions.cpp */; }; 55DB5A5A2B5903EA00B3BD75 /* CrashHandler.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55DB5A392B5903AE00B3BD75 /* CrashHandler.cpp */; }; @@ -2647,6 +2649,18 @@ 55C767832B77772A005DC873 /* zip_err_str.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = zip_err_str.c; sourceTree = ""; }; 55C767852B77781A005DC873 /* GLContext.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GLContext.h; sourceTree = ""; }; 55C767862B7778A5005DC873 /* GLContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GLContext.cpp; sourceTree = ""; }; + 55C97CEF2B781775004AB53D /* Achievements.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Achievements.h; sourceTree = ""; }; + 55C97CF02B7817AC004AB53D /* achievements-oe.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = "achievements-oe.mm"; sourceTree = ""; }; + 55C97CF22B78192D004AB53D /* imgui_stubs.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = imgui_stubs.cpp; sourceTree = ""; }; + 55C97CF52B78196B004AB53D /* ImGuiOverlays.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImGuiOverlays.cpp; sourceTree = ""; }; + 55C97CF62B78196B004AB53D /* FullscreenUI.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FullscreenUI.h; sourceTree = ""; }; + 55C97CF72B78196B004AB53D /* ImGuiOverlays.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImGuiOverlays.h; sourceTree = ""; }; + 55C97CF82B78196B004AB53D /* FullscreenUI.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = FullscreenUI.cpp; sourceTree = ""; }; + 55C97CF92B78196B004AB53D /* ImGuiFullscreen.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImGuiFullscreen.h; sourceTree = ""; }; + 55C97CFA2B78196B004AB53D /* ImGuiManager.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImGuiManager.h; sourceTree = ""; }; + 55C97CFB2B78196B004AB53D /* ImGuiFullscreen.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImGuiFullscreen.cpp; sourceTree = ""; }; + 55C97CFC2B78196B004AB53D /* ImGuiAnimated.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ImGuiAnimated.h; sourceTree = ""; }; + 55C97CFD2B78196B004AB53D /* ImGuiManager.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = ImGuiManager.cpp; sourceTree = ""; }; 55DB5A342B59027B00B3BD75 /* RedumpDatabase.yaml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.yaml; path = RedumpDatabase.yaml; sourceTree = ""; }; 55DB5A362B5903AE00B3BD75 /* StackWalker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = StackWalker.cpp; sourceTree = ""; }; 55DB5A372B5903AE00B3BD75 /* FPControl.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FPControl.h; sourceTree = ""; }; @@ -3193,19 +3207,21 @@ 5517E8B6263D4213000219EC /* Classes */ = { isa = PBXGroup; children = ( + DD0302B327C491020006ABDC /* Audio */, + DD0302B627C491020006ABDC /* Input */, 55484D2E2885595F0066EDEB /* libzip */, DD1134E727CBCE8900C2E60B /* SaveState */, DD0302B827C491160006ABDC /* Video */, - DD0302B327C491020006ABDC /* Audio */, - DD0302B627C491020006ABDC /* Input */, + 55C97CF02B7817AC004AB53D /* achievements-oe.mm */, + 55C767722B777407005DC873 /* DiscordStubs.cpp */, + 55C97CF22B78192D004AB53D /* imgui_stubs.cpp */, + 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */, 5517E8C3263D4598000219EC /* OEPS2SystemResponderClient.h */, + 5580653527AB5369008CD5D2 /* PCSX2Exports.exp */, 5517E8C5263D45F4000219EC /* PCSX2GameCore.h */, 5517E8C6263D45F4000219EC /* PCSX2GameCore.mm */, - 5580653527AB5369008CD5D2 /* PCSX2Exports.exp */, - 551BF5B626420FFC0008C529 /* svnrev.h */, 551BF5ED264212D60008C529 /* soundtouch_config.h */, - 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */, - 55C767722B777407005DC873 /* DiscordStubs.cpp */, + 551BF5B626420FFC0008C529 /* svnrev.h */, ); path = Classes; sourceTree = ""; @@ -3927,6 +3943,7 @@ 5517FAA7263D49BB000219EC /* pcsx2 */ = { isa = PBXGroup; children = ( + 55C97CEF2B781775004AB53D /* Achievements.h */, 5517FDEF263D49BC000219EC /* AsyncFileReader.h */, 5517FCBC263D49BC000219EC /* Cache.cpp */, 5517FB54263D49BB000219EC /* Cache.h */, @@ -3970,6 +3987,7 @@ 5517FDF4263D49BC000219EC /* Hw.h */, 5517FE14263D49BC000219EC /* HwRead.cpp */, 5517FB32263D49BB000219EC /* HwWrite.cpp */, + 55C97CF42B78196B004AB53D /* ImGui */, 55B1EFB7295BA12E00DB297F /* INISettingsInterface.cpp */, 55B1EFB8295BA12E00DB297F /* INISettingsInterface.h */, 55C765852B776805005DC873 /* Input */, @@ -6027,6 +6045,22 @@ path = src; sourceTree = ""; }; + 55C97CF42B78196B004AB53D /* ImGui */ = { + isa = PBXGroup; + children = ( + 55C97CF82B78196B004AB53D /* FullscreenUI.cpp */, + 55C97CF62B78196B004AB53D /* FullscreenUI.h */, + 55C97CFC2B78196B004AB53D /* ImGuiAnimated.h */, + 55C97CFB2B78196B004AB53D /* ImGuiFullscreen.cpp */, + 55C97CF92B78196B004AB53D /* ImGuiFullscreen.h */, + 55C97CFD2B78196B004AB53D /* ImGuiManager.cpp */, + 55C97CFA2B78196B004AB53D /* ImGuiManager.h */, + 55C97CF52B78196B004AB53D /* ImGuiOverlays.cpp */, + 55C97CF72B78196B004AB53D /* ImGuiOverlays.h */, + ); + path = ImGui; + sourceTree = ""; + }; 55DB5A7F2B590A6C00B3BD75 /* libwebp */ = { isa = PBXGroup; children = ( @@ -7461,6 +7495,7 @@ 551BF689264241E80008C529 /* DisR5900asm.cpp in Sources */, DD0302C027C491160006ABDC /* GLContextAGL.mm in Sources */, 55484D3D28855E740066EDEB /* GSDumpReplayer.cpp in Sources */, + 55C97CF32B78192D004AB53D /* imgui_stubs.cpp in Sources */, DD75EE5F29898A3A0056B3BA /* GSMTLDeviceInfo.mm in Sources */, 551BF5CC264212070008C529 /* IPU.cpp in Sources */, 551BF56726420DE90008C529 /* SymbolMap.cpp in Sources */, @@ -7625,6 +7660,7 @@ 551BF638264216F50008C529 /* CDVD.cpp in Sources */, 551BF62B264216F50008C529 /* CDVDdiscReader.cpp in Sources */, DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */, + 55C97CF12B7817AC004AB53D /* achievements-oe.mm in Sources */, 551BF6A92642444F0008C529 /* DplIIdecoder.cpp in Sources */, 551BF5AF26420FA50008C529 /* IopDma.cpp in Sources */, 55C765B72B776E88005DC873 /* MultitapProtocol.cpp in Sources */, From 4fcfe12d6c57af93f4af19982a7dffbfeccf3bf1 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 10 Feb 2024 20:30:45 -0700 Subject: [PATCH 05/16] Well, it doesn't crash on launch, but it just displays a purple screen. And it crashes on closing. --- Classes/PCSX2GameCore.mm | 45 +++++++++++++++++++++++++++++++-- PCSX2.xcodeproj/project.pbxproj | 40 +++++++++++++++-------------- 2 files changed, 64 insertions(+), 21 deletions(-) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index a36e3e9..ef3f9db 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -48,6 +48,7 @@ #include "R3000A.h" #include "MTVU.h" #include "Elfheader.h" +#include "USB/deviceproxy.h" #undef BOOL #include @@ -306,8 +307,8 @@ - (void)startEmulation wi.surface_height = screenRect.size.height ; // g_host_display->CreateDevice(wi, VsyncMode::Adaptive); -// VMManager::Internal::InitializeGlobals(); - + VMManager::Internal::CPUThreadInitialize(); + if (VMManager::Initialize(params)) { hasInitialized = true; @@ -323,6 +324,10 @@ - (void)startEmulation - (void)runVMThread:(id)unused { + const char *tmp; + if (!VMManager::PerformEarlyHardwareChecks(&tmp)) { + abort(); + } OESetThreadRealtime(1. / 50, .007, .03); // guessed from bsnes while(!ExitRequested) @@ -833,6 +838,42 @@ - (void)changeDisplayWithMode:(NSString *)displayMode return std::nullopt; } +void InputManager::SetPadVibrationIntensity(u32 pad_index, float large_or_single_motor_intensity, float small_motor_intensity) +{ + // TODO: add vibration support to OpenEmu +} + +void InputManager::ReloadBindings(SettingsInterface &si, SettingsInterface &binding_si) +{ + +} + +void InputManager::PauseVibration() +{ + +} + +void InputManager::ReloadSources(SettingsInterface &si, std::unique_lock &settings_lock) +{ + +} + +void InputManager::PollSources() +{ + +} + +std::pair InputManager::GetPointerAbsolutePosition(u32 index) +{ + return {0, 0}; +} + +RegisterDevice* RegisterDevice::registerDevice = nullptr; +void RegisterDevice::Register() +{ + +} + void VMManager::Internal::ResetVMHotkeyState() { diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 043dc65..b02f6b0 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -467,7 +467,6 @@ 55B1F030295BAD5600DB297F /* AdapterUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1F028295BAD5600DB297F /* AdapterUtils.cpp */; }; 55B1F034295BADAC00DB297F /* ICMP_Packet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1F033295BADAC00DB297F /* ICMP_Packet.cpp */; }; 55B1F037295BAE5100DB297F /* IPU_MultiISA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1F035295BAE5000DB297F /* IPU_MultiISA.cpp */; }; - 55B1F038295BAE9900DB297F /* deviceproxy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FBFF263D49BC000219EC /* deviceproxy.cpp */; }; 55B1F03A295BAF0A00DB297F /* GSRendererHWMultiISA.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1F039295BAF0900DB297F /* GSRendererHWMultiISA.cpp */; }; 55B1F03C295BAF4300DB297F /* GSVertexTraceFMM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 55B1F03B295BAF4200DB297F /* GSVertexTraceFMM.cpp */; }; 55BD3E67295A58B3001DD03E /* ffx_a.h in Copy Common Shaders */ = {isa = PBXBuildFile; fileRef = 55BD3E64295A587C001DD03E /* ffx_a.h */; }; @@ -2909,11 +2908,7 @@ 55DB5CDA2B590FBB00B3BD75 /* libcpuinfo-pcsx2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libcpuinfo-pcsx2.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 55DB5CE62B590FF200B3BD75 /* cpuinfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = cpuinfo.h; sourceTree = ""; }; 55DB5CE72B590FF200B3BD75 /* cpuinfo-mock.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "cpuinfo-mock.h"; sourceTree = ""; }; - 55DB5CED2B590FF200B3BD75 /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; - 55DB5CEE2B590FF200B3BD75 /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 55DB5CF02B590FF200B3BD75 /* clog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = clog.h; sourceTree = ""; }; - 55DB5CF12B590FF200B3BD75 /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; - 55DB5CF22B590FF200B3BD75 /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = ""; }; 55DB5CF42B590FF200B3BD75 /* clog.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = clog.c; sourceTree = ""; }; 55DB5CF72B590FF200B3BD75 /* log.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = log.c; sourceTree = ""; }; 55DB5CF82B590FF200B3BD75 /* api.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = api.c; sourceTree = ""; }; @@ -6390,11 +6385,7 @@ 55DB5CEC2B590FF200B3BD75 /* clog */ = { isa = PBXGroup; children = ( - 55DB5CED2B590FF200B3BD75 /* CMakeLists.txt */, - 55DB5CEE2B590FF200B3BD75 /* LICENSE */, 55DB5CEF2B590FF200B3BD75 /* include */, - 55DB5CF12B590FF200B3BD75 /* README.md */, - 55DB5CF22B590FF200B3BD75 /* .gitignore */, 55DB5CF32B590FF200B3BD75 /* src */, ); path = clog; @@ -6434,18 +6425,18 @@ 55DB5CFC2B590FF200B3BD75 /* x86 */ = { isa = PBXGroup; children = ( + 55DB5D082B590FF200B3BD75 /* api.h */, 55DB5CFD2B590FF200B3BD75 /* cache */, 55DB5D012B590FF200B3BD75 /* cpuid.h */, - 55DB5D022B590FF200B3BD75 /* init.c */, - 55DB5D032B590FF200B3BD75 /* vendor.c */, 55DB5D042B590FF200B3BD75 /* info.c */, - 55DB5D052B590FF200B3BD75 /* topology.c */, - 55DB5D062B590FF200B3BD75 /* mockcpuid.c */, - 55DB5D072B590FF200B3BD75 /* uarch.c */, - 55DB5D082B590FF200B3BD75 /* api.h */, - 55DB5D0D2B590FF200B3BD75 /* name.c */, + 55DB5D022B590FF200B3BD75 /* init.c */, 55DB5D0E2B590FF200B3BD75 /* isa.c */, 55DB5D0F2B590FF300B3BD75 /* mach */, + 55DB5D062B590FF200B3BD75 /* mockcpuid.c */, + 55DB5D0D2B590FF200B3BD75 /* name.c */, + 55DB5D052B590FF200B3BD75 /* topology.c */, + 55DB5D072B590FF200B3BD75 /* uarch.c */, + 55DB5D032B590FF200B3BD75 /* vendor.c */, ); path = x86; sourceTree = ""; @@ -7631,7 +7622,6 @@ 551BF58726420E9A0008C529 /* pgif.cpp in Sources */, DD03FFD827B721F20006ABDC /* GSTextureMTL.mm in Sources */, 551BF61E264214530008C529 /* iMMI.cpp in Sources */, - 55B1F038295BAE9900DB297F /* deviceproxy.cpp in Sources */, 55B1F004295BABDB00DB297F /* bus.cpp in Sources */, 551BF5DB264212270008C529 /* MMI.cpp in Sources */, 55B1F00D295BACE200DB297F /* ARP_Packet.cpp in Sources */, @@ -9306,6 +9296,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ENABLE_MODULES = NO; CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = dwarf; ENABLE_USER_SCRIPT_SANDBOXING = YES; @@ -9317,7 +9308,12 @@ LOCALIZATION_PREFERS_STRING_CATALOGS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/deps/clog/include\"", + ); + USE_HEADERMAP = NO; }; name = Debug; }; @@ -9325,6 +9321,7 @@ isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES; + CLANG_ENABLE_MODULES = NO; CODE_SIGN_STYLE = Automatic; ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_PREFIX = lib; @@ -9335,7 +9332,12 @@ LOCALIZATION_PREFERS_STRING_CATALOGS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; - SYSTEM_HEADER_SEARCH_PATHS = "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src\""; + SYSTEM_HEADER_SEARCH_PATHS = ( + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/src/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/include/\"", + "\"$(SRCROOT)/pcsx2/3rdparty/cpuinfo/deps/clog/include\"", + ); + USE_HEADERMAP = NO; }; name = Release; }; From 1ee03f901fc8dae7a66eafec984cb451071a20cf Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Mon, 12 Feb 2024 13:43:24 -0700 Subject: [PATCH 06/16] Remove commented-out and disabled code. More modernization work. --- Classes/OEPatching.cpp | 298 -------------------------------- Classes/PCSX2GameCore.mm | 112 ++---------- Classes/soundtouch_config.h | 3 + PCSX2.xcodeproj/project.pbxproj | 2 - 4 files changed, 22 insertions(+), 393 deletions(-) delete mode 100644 Classes/OEPatching.cpp diff --git a/Classes/OEPatching.cpp b/Classes/OEPatching.cpp deleted file mode 100644 index d5f5e66..0000000 --- a/Classes/OEPatching.cpp +++ /dev/null @@ -1,298 +0,0 @@ -// Copyright (c) 2022, OpenEmu Team -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the OpenEmu Team nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -// -// Code taken and adapted from PCSX2's AppCoreThread.cpp file. -// - -#include "PrecompiledHeader.h" -#include "GameDatabase.h" - -#include -#include -#include "fmt/core.h" - -#include "common/FileSystem.h" -#include "common/StringUtil.h" -#include "common/Threading.h" - -#include "ps2/BiosTools.h" -#include "GS.h" - -#include "CDVD/CDVD.h" -#include "USB/USB.h" -#include "Elfheader.h" -#include "Patch.h" -#include "R5900Exceptions.h" -#include "Sio.h" - - -namespace GameInfo { - static std::string gameName; - static std::string gameSerial; - static std::string gameCRC; - static std::string gameVersion; -}; - -/// Load Game Settings found in database -/// (game fixes, round modes, clamp modes, etc...) -/// \return Returns number of gamefixes set -static int loadGameSettings(Pcsx2Config& dest, const GameDatabaseSchema::GameEntry& game) -{ - int gf = 0; - - if (game.eeRoundMode != GameDatabaseSchema::RoundMode::Undefined) - { - const SSE_RoundMode eeRM = (SSE_RoundMode)enum_cast(game.eeRoundMode); - if (EnumIsValid(eeRM)) - { - PatchesCon->WriteLn("(GameDB) Changing EE/FPU roundmode to %d [%s]", eeRM, EnumToString(eeRM)); - dest.Cpu.sseMXCSR.SetRoundMode(eeRM); - gf++; - } - } - - if (game.vuRoundMode != GameDatabaseSchema::RoundMode::Undefined) - { - const SSE_RoundMode vuRM = (SSE_RoundMode)enum_cast(game.vuRoundMode); - if (EnumIsValid(vuRM)) - { - PatchesCon->WriteLn("(GameDB) Changing VU0/VU1 roundmode to %d [%s]", vuRM, EnumToString(vuRM)); - dest.Cpu.sseVUMXCSR.SetRoundMode(vuRM); - gf++; - } - } - - if (game.eeClampMode != GameDatabaseSchema::ClampMode::Undefined) - { - const int clampMode = enum_cast(game.eeClampMode); - PatchesCon->WriteLn("(GameDB) Changing EE/FPU clamp mode [mode=%d]", clampMode); - dest.Cpu.Recompiler.fpuOverflow = (clampMode >= 1); - dest.Cpu.Recompiler.fpuExtraOverflow = (clampMode >= 2); - dest.Cpu.Recompiler.fpuFullMode = (clampMode >= 3); - gf++; - } - - if (game.vuClampMode != GameDatabaseSchema::ClampMode::Undefined) - { - const int clampMode = enum_cast(game.vuClampMode); - PatchesCon->WriteLn("(GameDB) Changing VU0/VU1 clamp mode [mode=%d]", clampMode); - dest.Cpu.Recompiler.vuOverflow = (clampMode >= 1); - dest.Cpu.Recompiler.vuExtraOverflow = (clampMode >= 2); - dest.Cpu.Recompiler.vuSignOverflow = (clampMode >= 3); - gf++; - } - - for (const auto& [id, mode] : game.speedHacks) - { - // Gamefixes are already guaranteed to be valid, any invalid ones are dropped - // Legacy note - speedhacks are setup in the GameDB as integer values, but - // are effectively booleans like the gamefixes - dest.Speedhacks.Set(id, mode != 0); - PatchesCon->WriteLn("(GameDB) Setting Speedhack '%s' to [mode=%d]", EnumToString(id), static_cast(mode != 0)); - gf++; - } - - for (const GamefixId id : game.gameFixes) - { - // Gamefixes are already guaranteed to be valid, any invalid ones are dropped - // if the fix is present, it is said to be enabled - dest.Gamefixes.Set(id, true); - PatchesCon->WriteLn("(GameDB) Enabled Gamefix: %s", EnumToString(id)); - gf++; - - // The LUT is only used for 1 game so we allocate it only when the gamefix is enabled (save 4MB) - if (id == Fix_GoemonTlbMiss && true) - vtlb_Alloc_Ppmap(); - } - - return gf; -} - -static std::string string_format(const std::string fmt, ...) { - int size = ((int)fmt.size()) * 2 + 50; // Use a rubric appropriate for your code - std::string str; - va_list ap; - while (1) { // Maximum two passes on a POSIX system... - str.resize(size); - va_start(ap, fmt); - int n = vsnprintf((char *)str.data(), size, fmt.c_str(), ap); - va_end(ap); - if (n > -1 && n < size) { // Everything worked - str.resize(n); - return str; - } - if (n > -1) // Needed size returned - size = n + 1; // For null char - else - size *= 2; // Guess at a larger size (OS specific) - } - return str; -} - - -#define _UNKNOWN_GAME_KEY ("_UNKNOWN_GAME_KEY") -/// Used to track the current game serial/id, and used to disable verbose logging of -/// applied patches if the game info hasn't changed. (avoids spam when suspending/resuming -/// or using TAB or other things), but gets verbose again when booting (even if the same game). -/// File scope since it gets reset externally when rebooting -static std::string curGameKey = _UNKNOWN_GAME_KEY; - -static std::mutex mtx__ApplySettings; -/// fixup = src + command line overrides + game overrides (according to elfCRC). -/// -/// While at it, also [re]loads the relevant patches (but doesn't apply them), -/// updates the console title, and, for good measures, does some (static) sio stuff. -/// Oh, and updates curGameKey. I think that's it. -/// It doesn't require that the emulation is paused, and console writes/title should -/// be thread safe, but it's best if things don't move around much while it runs. -/// TODO: Trim this down so only OpenEmu-needed patches are loaded. -static void _ApplySettings(const Pcsx2Config& src, Pcsx2Config& fixup) -{ - std::scoped_lock lock(mtx__ApplySettings); - // 'fixup' is the EmuConfig we're going to upload to the emulator, which very well may - // differ from the user-configured EmuConfig settings. So we make a copy here and then - // we apply the commandline overrides and database gamefixes, and then upload 'fixup' - // to the global EmuConfig. - // - // Note: It's important that we apply the commandline overrides *before* database fixes. - // The database takes precedence (if enabled). - - fixup.CopyConfig(src); - - //Disable speed hacks as they might result in bad game quality -// if (!g_Conf->EnableSpeedHacks) - fixup.Speedhacks.DisableAll(); - - // ...but enable game fixes which might allow games to run. -// if (!g_Conf->EnableGameFixes) -// fixup.Gamefixes.DisableAll(); - - std::string gamePatch; - std::string gameFixes; - std::string gameCheats; - std::string gameWsHacks; - - std::string gameCompat; - std::string gameMemCardFilter; - - // The CRC can be known before the game actually starts (at the bios), so when - // we have the CRC but we're still at the bios and the settings are changed - // (e.g. the user presses TAB to speed up emulation), we don't want to apply the - // settings as if the game is already running (title, loadeding patches, etc). - bool ingame = (ElfCRC && (g_GameLoading || g_GameStarted)); - if (ingame) - GameInfo::gameCRC = string_format("%8.8x", ElfCRC); - else - GameInfo::gameCRC = ""; // Needs to be reset when rebooting otherwise previously loaded patches may load - - if (ingame && !DiscSerial.empty()) - GameInfo::gameSerial = DiscSerial; - - const std::string newGameKey(ingame ? SysGetDiscID() : SysGetBiosDiscID()); -// const bool verbose(newGameKey != curGameKey && ingame); - //Console.WriteLn(L"------> patches verbose: %d prev: '%s' new: '%s'", (int)verbose, WX_STR(curGameKey), WX_STR(newGameKey)); - - curGameKey = newGameKey; - - ForgetLoadedPatches(); - - if (!curGameKey.empty()) { - auto game = GameDatabase::findGame(std::string(curGameKey)); - if (game) { - GameInfo::gameName = string_format("%s (%s)", game->name.c_str(), game->region.c_str()); - gameCompat = string_format(" [Status = %s]", game->compatAsString()); - gameMemCardFilter = game->memcardFiltersAsString(); - - if (fixup.EnablePatches) { - if (int patches = LoadPatchesFromGamesDB(GameInfo::gameCRC, *game)) - { - gamePatch += string_format(" [%d Patches]", patches); - PatchesCon->WriteLn(Color_Green, "(GameDB) Patches Loaded: %d", patches); - } - if (int fixes = loadGameSettings(fixup, *game)) - gameFixes += string_format(" [%d Fixes]", fixes); - } - } - else - { - // Set correct title for loading standalone/homebrew ELFs - GameInfo::gameName = LastELF.AfterLast('\\'); - } - } - - if (!gameMemCardFilter.empty()) - sioSetGameSerial(gameMemCardFilter); - else - sioSetGameSerial(curGameKey); - - if (GameInfo::gameName.empty() && GameInfo::gameSerial.empty() && GameInfo::gameCRC.empty()) - { - // if all these conditions are met, it should mean that we're currently running BIOS code. - // Chances are the BiosChecksum value is still zero or out of date, however -- because - // the BIos isn't loaded until after initial calls to ApplySettings. - - GameInfo::gameName = "Booting PS2 BIOS... "; - } - - //Till the end of this function, entry CRC will be 00000000 - if (!GameInfo::gameCRC.Length()) - { - Console.WriteLn(Color_Gray, "Patches: No CRC found, using 00000000 instead."); - GameInfo::gameCRC = "00000000"; - } - - // regular cheat patches -// if (fixup.EnableCheats) -// gameCheats.Printf(L" [%d Cheats]", LoadPatchesFromDir(GameInfo::gameCRC, EmuFolders::Cheats, L"Cheats")); - - // wide screen patches - if (fixup.EnableWideScreenPatches) - { - if (int numberLoadedWideScreenPatches = LoadPatchesFromDir(GameInfo::gameCRC, EmuFolders::CheatsWS, "Widescreen hacks")) - { - gameWsHacks.Printf(" [%d widescreen hacks]", numberLoadedWideScreenPatches); - Console.WriteLn(Color_Gray, "Found widescreen patches in the cheats_ws folder --> skipping cheats_ws.zip"); - } - else - { - // No ws cheat files found at the cheats_ws folder, try the ws cheats zip file. - const std::string cheats_ws_archive(Path::Combine(EmuFolders::Resources, wxFileName(L"cheats_ws.zip"))); - if (wxFile::Exists(cheats_ws_archive)) - { - wxFFileInputStream* strm = new wxFFileInputStream(cheats_ws_archive); - int numberDbfCheatsLoaded = LoadPatchesFromZip(GameInfo::gameCRC, cheats_ws_archive, strm); - PatchesCon->WriteLn(Color_Green, "(Wide Screen Cheats DB) Patches Loaded: %d", numberDbfCheatsLoaded); - gameWsHacks.Printf(L" [%d widescreen hacks]", numberDbfCheatsLoaded); - } - } - } - - gsUpdateFrequency(fixup); -} - -void LoadAllPatchesAndStuff(const Pcsx2Config& cfg) -{ - Pcsx2Config dummy; - _ApplySettings(cfg, dummy); -} diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index ef3f9db..09f75b3 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -27,16 +27,12 @@ #import #include "Video/OEHostDisplay.h" #include "Audio/OESndOut.h" -//#include "Input/keymap.h" #define BOOL PCSX2BOOL #include "PrecompiledHeader.h" #include "GS.h" -//#include "HostSettings.h" #include "Host.h" -//#include "core/host_display.h" #include "VMManager.h" -//#include "AppConfig.h" #include "Input/InputManager.h" #include "pcsx2/INISettingsInterface.h" #include "MTGS.h" @@ -44,7 +40,6 @@ #include "CDVD/CDVD.h" #include "SPU2/Global.h" #include "SPU2/SndOut.h" -//#include "PAD/Host/KeyStatus.h" #include "R3000A.h" #include "MTVU.h" #include "Elfheader.h" @@ -54,8 +49,6 @@ #include #include -//class MetalHostDisplay : public HostDisplay {}; - static bool ExitRequested = false; static bool WaitRequested = false; static bool isExecuting = false; @@ -70,7 +63,6 @@ bool isRunning = false; } -//alignas(16) static MTGS::Thread s_mtgs_thread; PCSX2GameCore *_current; @implementation PCSX2GameCore { @@ -93,13 +85,13 @@ @implementation PCSX2GameCore { // Display modes. NSMutableDictionary *_displayModes; OEIntRect screenRect; + WindowInfo windowInfo; } - (instancetype)init { if (self = [super init]) { _current = self; -// VMManager::Internal::InitializeMemory(); _maxDiscs = 0; _displayModes = [[NSMutableDictionary alloc] initWithDictionary: @{OEPSCSX2InternalResolution: @1, @@ -301,14 +293,7 @@ - (void)startEmulation // else if (self.gameCoreRendering == OEGameCoreRenderingMetal2Video) // g_host_display = HostDisplay::CreateForAPI(RenderAPI::Metal); - WindowInfo wi; - wi.type = WindowInfo::Type::MacOS; - wi.surface_width = screenRect.size.width ; - wi.surface_height = screenRect.size.height ; -// g_host_display->CreateDevice(wi, VsyncMode::Adaptive); - VMManager::Internal::CPUThreadInitialize(); - if (VMManager::Initialize(params)) { hasInitialized = true; @@ -450,16 +435,18 @@ - (double)audioSampleRate #pragma mark Input - (oneway void)didMovePS2JoystickDirection:(OEPS2Button)button withValue:(CGFloat)value forPlayer:(NSUInteger)player { + //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , value); } - (oneway void)didPushPS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { + //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , 1.0f); - } - (oneway void)didReleasePS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { + //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key, 0.0f); } @@ -469,6 +456,7 @@ - (void)loadStateFromFileAtURL:(NSURL *)fileURL completionHandler:(void (^)(BOOL { if (!VMManager::HasValidVM()){ stateToLoad = fileURL; + block(true, nil); return; } @@ -484,8 +472,10 @@ - (void)loadStateFromFileAtURL:(NSURL *)fileURL completionHandler:(void (^)(BOOL - (void)saveStateToFileAtURL:(NSURL *)fileURL completionHandler:(void (^)(BOOL, NSError *))block { - if (!VMManager::HasValidVM()) + if (!VMManager::HasValidVM()) { + block(false, [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotSaveStateError userInfo:nil]); return; + } bool success = VMManager::SaveState(fileURL.fileSystemRepresentation, false, false); block(success, success ? nil : [NSError errorWithDomain:OEGameCoreErrorDomain code:OEGameCoreCouldNotSaveStateError userInfo:@{NSLocalizedDescriptionKey: @"PCSX2 Could not save the current state.", NSURLErrorKey: fileURL}]); @@ -596,80 +586,8 @@ - (void)changeDisplayWithMode:(NSString *)displayMode @end -//SysMtgsThread& GetMTGS() -//{ -// return s_mtgs_thread; -//} - #pragma mark - Host Namespace -#if 0 -std::optional> Host::ReadResourceFile(const char* filename) -{ - @autoreleasepool { - NSString *nsFile = @(filename); - NSString *baseName = nsFile.lastPathComponent.stringByDeletingPathExtension; - NSString *upperName = nsFile.stringByDeletingLastPathComponent; - NSString *baseExt = nsFile.pathExtension; - if (baseExt.length == 0) { - baseExt = nil; - } - if (upperName.length == 0 || [upperName isEqualToString:@"/"]) { - upperName = nil; - } - NSURL *aURL; - if (upperName) { - aURL = [[NSBundle bundleForClass:[PCSX2GameCore class]] URLForResource:baseName withExtension:baseExt subdirectory:upperName]; - } else { - aURL = [[NSBundle bundleForClass:[PCSX2GameCore class]] URLForResource:baseName withExtension:baseExt]; - } - if (!aURL) { - return std::nullopt; - } - NSData *data = [[NSData alloc] initWithContentsOfURL:aURL]; - if (!data) { - return std::nullopt; - } - auto retVal = std::vector(data.length); - [data getBytes:retVal.data() length:retVal.size()]; - return retVal; - } -} - -std::optional Host::ReadResourceFileToString(const char* filename) -{ - @autoreleasepool { - NSString *nsFile = @(filename); - NSString *baseName = nsFile.lastPathComponent.stringByDeletingPathExtension; - NSString *upperName = nsFile.stringByDeletingLastPathComponent; - NSString *baseExt = nsFile.pathExtension; - if (baseExt.length == 0) { - baseExt = nil; - } - if (upperName.length == 0 || [upperName isEqualToString:@"/"]) { - upperName = nil; - } - NSURL *aURL; - if (upperName) { - aURL = [[NSBundle bundleForClass:[PCSX2GameCore class]] URLForResource:baseName withExtension:baseExt subdirectory:upperName]; - } else { - aURL = [[NSBundle bundleForClass:[PCSX2GameCore class]] URLForResource:baseName withExtension:baseExt]; - } - if (!aURL) { - return std::nullopt; - } - NSData *data = [[NSData alloc] initWithContentsOfURL:aURL]; - if (!data) { - return std::nullopt; - } - std::string ret; - ret.resize(data.length); - [data getBytes:ret.data() length:ret.size()]; - return ret; - } -} -#endif - void Host::WriteToSoundBuffer(s16 Left, s16 Right) { GET_CURRENT_OR_RETURN(); @@ -689,7 +607,9 @@ - (void)changeDisplayWithMode:(NSString *)displayMode std::optional Host::GetTopLevelWindowInfo() { - return {}; + GET_CURRENT_OR_RETURN(std::nullopt); + + return current->windowInfo; } void Host::SetMouseMode(bool relative_mode, bool hide_cursor) @@ -789,8 +709,14 @@ - (void)changeDisplayWithMode:(NSString *)displayMode { GET_CURRENT_OR_RETURN(std::nullopt); - //TODO: implement! - return {}; + WindowInfo wi; + wi.type = WindowInfo::Type::MacOS; + wi.surface_width = current->screenRect.size.width; + wi.surface_height = current->screenRect.size.height; + + current->windowInfo = wi; + + return current->windowInfo; } void Host::ReleaseRenderWindow() diff --git a/Classes/soundtouch_config.h b/Classes/soundtouch_config.h index 8345d32..b18b763 100644 --- a/Classes/soundtouch_config.h +++ b/Classes/soundtouch_config.h @@ -29,5 +29,8 @@ //#define SOUNDTOUCH_ALLOW_SSE //#define SOUNDTOUCH_ALLOW_X86_OPTIMIZATIONS //#endif +#ifdef __arm64__ +#define SOUNDTOUCH_USE_NEON +#endif #endif /* soundtouch_config_h */ diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index b02f6b0..c836a25 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -2006,7 +2006,6 @@ 55325A062A00FAFA00D4CFFA /* GSDevice.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSDevice.cpp; sourceTree = ""; }; 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSDeviceOGL.cpp; sourceTree = ""; }; 553CF8172640CCCD003A437C /* libemitter_PCSX2.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libemitter_PCSX2.a; sourceTree = BUILT_PRODUCTS_DIR; }; - 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = OEPatching.cpp; sourceTree = ""; }; 5548491928853D2E0066EDEB /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; 5548491A28853D2E0066EDEB /* zstd.vcxproj */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = zstd.vcxproj; sourceTree = ""; }; 5548491B28853D2E0066EDEB /* zstd.vcxproj.filters */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = zstd.vcxproj.filters; sourceTree = ""; }; @@ -3210,7 +3209,6 @@ 55C97CF02B7817AC004AB53D /* achievements-oe.mm */, 55C767722B777407005DC873 /* DiscordStubs.cpp */, 55C97CF22B78192D004AB53D /* imgui_stubs.cpp */, - 5541B76E27CECF3200AE70C2 /* OEPatching.cpp */, 5517E8C3263D4598000219EC /* OEPS2SystemResponderClient.h */, 5580653527AB5369008CD5D2 /* PCSX2Exports.exp */, 5517E8C5263D45F4000219EC /* PCSX2GameCore.h */, From 2f2944ff5e9d724cf6f34a5a2b7fc06f763d4d54 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 24 Feb 2024 13:51:35 -0700 Subject: [PATCH 07/16] Restore drawing to OpenEmu. --- Classes/Video/GSDeviceMTL.mm | 32 +++++++++++++++++--------------- PCSX2.xcodeproj/project.pbxproj | 4 +--- 2 files changed, 18 insertions(+), 18 deletions(-) diff --git a/Classes/Video/GSDeviceMTL.mm b/Classes/Video/GSDeviceMTL.mm index 0295ce7..8faaff7 100644 --- a/Classes/Video/GSDeviceMTL.mm +++ b/Classes/Video/GSDeviceMTL.mm @@ -14,6 +14,7 @@ #ifdef __APPLE__ #include "GSMTLSharedHeader.h" +#include "PCSX2GameCore.h" static constexpr simd::float2 ToSimd(const GSVector2& vec) { @@ -383,7 +384,7 @@ || depth != m_current_render.depth_target || stencil != m_current_render.stencil_target; GSVector4 color_clear; - float depth_clear; + float depth_clear=0; // Depth and stencil might be the same, so do all invalidation checks before resetting invalidation #define CHECK_CLEAR(tex, load_action, clear, ClearGetter) \ if (tex) \ @@ -727,7 +728,7 @@ static void OnMainThread(Fn&& fn) if ([NSThread isMainThread]) fn(); else - dispatch_sync(dispatch_get_main_queue(), fn); + ::dispatch_sync(dispatch_get_main_queue(), fn); } RenderAPI GSDeviceMTL::GetRenderAPI() const @@ -827,20 +828,10 @@ static void OnMainThread(Fn&& fn) if (!GSDevice::Create()) return false; - NSString* ns_adapter_name = [NSString stringWithUTF8String:GSConfig.Adapter.c_str()]; - auto devs = MRCTransfer(MTLCopyAllDevices()); - for (id dev in devs.Get()) - { - if ([[dev name] isEqualToString:ns_adapter_name]) - m_dev = GSMTLDevice(MRCRetain(dev)); - } + m_dev = GSMTLDevice(MRCRetain([_current metalDevice])); if (!m_dev.dev) { - if (!GSConfig.Adapter.empty()) - Console.Warning("Metal: Couldn't find adapter %s, using default", GSConfig.Adapter.c_str()); - m_dev = GSMTLDevice(MRCTransfer(MTLCreateSystemDefaultDevice())); - if (!m_dev.dev) - Host::ReportErrorAsync("No Metal Devices Available", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all macs from 2012 onwards)."); + Host::ReportErrorAsync("No Metal Devices Available", "No Metal-supporting GPUs were found. PCSX2 requires a Metal GPU (available on all macs from 2012 onwards)."); } m_queue = MRCTransfer([m_dev.dev newCommandQueue]); @@ -1286,7 +1277,18 @@ static void OnMainThread(Fn&& fn) // RenderImGui(ImGui::GetDrawData()); EndRenderPass(); if (m_current_drawable) - { + { //Here is where we blit the Metal Texture to the OEMetalRenderTexture + id blitCommandEncoder = [m_current_render_cmdbuf blitCommandEncoder]; + + if (@available(macOS 10.15, *)) { + [blitCommandEncoder copyFromTexture:[m_current_drawable texture] toTexture:id([_current metalTexture])]; + } else { + // Fallback on earlier versions + // TODO: Add pre 10.15 metal blit + } + + [blitCommandEncoder endEncoding]; + const bool use_present_drawable = m_use_present_drawable == UsePresentDrawable::Always || (m_use_present_drawable == UsePresentDrawable::IfVsync && m_vsync_mode != VsyncMode::Off); diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 271fd48..6181e42 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -2292,7 +2292,6 @@ 558065D427AD3A31008CD5D2 /* GPL.html */ = {isa = PBXFileReference; lastKnownFileType = text.html; path = GPL.html; sourceTree = ""; }; 558065D727AD3A31008CD5D2 /* Debugger.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = Debugger.pdf; sourceTree = ""; }; 558065D927AD3A31008CD5D2 /* GameIndex.pdf */ = {isa = PBXFileReference; lastKnownFileType = image.pdf; path = GameIndex.pdf; sourceTree = ""; }; - 5580662D27AD3A31008CD5D2 /* portable.ini */ = {isa = PBXFileReference; lastKnownFileType = text; path = portable.ini; sourceTree = ""; }; 5591D80927B468F70073E97D /* AudioUnit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AudioUnit.framework; path = System/Library/Frameworks/AudioUnit.framework; sourceTree = SDKROOT; }; 5591D80B27B469200073E97D /* CoreAudio.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreAudio.framework; path = System/Library/Frameworks/CoreAudio.framework; sourceTree = SDKROOT; }; 5591D82627B5C12D0073E97D /* GSTextureVK.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = GSTextureVK.cpp; sourceTree = ""; }; @@ -3013,7 +3012,7 @@ DD0302B427C491020006ABDC /* OESndOut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OESndOut.h; sourceTree = ""; }; DD0302B527C491020006ABDC /* OESndOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OESndOut.cpp; sourceTree = ""; }; DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLHostDisplayOverride.cpp; sourceTree = ""; }; - DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 0; }; + DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 1; }; DD0302BC27C491160006ABDC /* GLContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GLContextAGL.mm; sourceTree = ""; }; DD0302C827C5494A0006ABDC /* keymap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keymap.h; sourceTree = ""; }; DD03FFB427B70F0C0006ABDC /* GSMetalCPPAccessible.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSMetalCPPAccessible.h; sourceTree = ""; }; @@ -5514,7 +5513,6 @@ isa = PBXGroup; children = ( 558065D227AD3A31008CD5D2 /* docs */, - 5580662D27AD3A31008CD5D2 /* portable.ini */, 558065B227AD3A31008CD5D2 /* resources */, ); path = bin; From 4027b3838bbe19b74a7a25947e51d54427a624ca Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 24 Feb 2024 13:55:47 -0700 Subject: [PATCH 08/16] Move save state initialization when starting to a better place. --- Classes/PCSX2GameCore.mm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index dafcc0e..d78ba1b 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -281,7 +281,12 @@ - (void)startEmulation [self.renderDelegate suspendFPSLimiting]; params.filename = gamePath.fileSystemRepresentation; - params.save_state = ""; + if ([stateToLoad.path length] > 0) { + params.save_state = stateToLoad.fileSystemRepresentation; + stateToLoad = nil; + } else { + params.save_state = ""; + } params.source_type = CDVD_SourceType::Iso; params.elf_override = ""; params.fast_boot = true; @@ -298,10 +303,6 @@ - (void)startEmulation if (VMManager::Initialize(params)) { hasInitialized = true; VMManager::SetState(VMState::Running); - if ([stateToLoad.path length] > 0) { - VMManager::LoadState(stateToLoad.fileSystemRepresentation); - stateToLoad = nil; - } [NSThread detachNewThreadSelector:@selector(runVMThread:) toTarget:self withObject:nil]; } From 7588d0b86091a68c96f1f1c4db55df84733dd078 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 28 Feb 2024 01:06:43 -0700 Subject: [PATCH 09/16] More pokes. Nothing really fixed yet. --- Classes/PCSX2GameCore.mm | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index d78ba1b..bfa68e4 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -40,6 +40,9 @@ #include "CDVD/CDVD.h" #include "SPU2/Global.h" #include "SPU2/SndOut.h" +#include "SIO/Pad/Pad.h" +#include "SIO/Pad/PadBase.h" +#include "SIO/Pad/PadDualshock2.h" #include "R3000A.h" #include "MTVU.h" #include "Elfheader.h" @@ -300,6 +303,8 @@ - (void)startEmulation VMManager::Internal::CPUThreadInitialize(); + VMManager::ApplySettings(); + if (VMManager::Initialize(params)) { hasInitialized = true; VMManager::SetState(VMState::Running); @@ -344,6 +349,7 @@ - (void)runVMThread:(id)unused case VMState::Stopping: VMManager::Shutdown(true); + VMManager::Internal::CPUThreadShutdown(); } } } @@ -437,17 +443,20 @@ - (double)audioSampleRate #pragma mark Input - (oneway void)didMovePS2JoystickDirection:(OEPS2Button)button withValue:(CGFloat)value forPlayer:(NSUInteger)player { + auto pad = Pad::GetPad(player); //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , value); } - (oneway void)didPushPS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { + auto pad = Pad::GetPad(player); //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , 1.0f); } - (oneway void)didReleasePS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { + auto pad = Pad::GetPad(player); //TODO: update! // g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key, 0.0f); } @@ -696,6 +705,8 @@ - (void)changeDisplayWithMode:(NSString *)displayMode void Host::RunOnCPUThread(std::function function, bool block) { + //TODO: put this in the right thread... + function(); } void Host::RequestVMShutdown(bool allow_confirm, bool allow_save_state, bool default_save_state) @@ -793,6 +804,11 @@ - (void)changeDisplayWithMode:(NSString *)displayMode } +void InputManager::CloseSources() +{ + +} + std::pair InputManager::GetPointerAbsolutePosition(u32 index) { return {0, 0}; @@ -804,6 +820,13 @@ - (void)changeDisplayWithMode:(NSString *)displayMode } +void RegisterDevice::Unregister() +{ + +} + +#pragma mark - + void VMManager::Internal::ResetVMHotkeyState() { From fb2df2b1178bb3f7f36ad61922073deab2ab14f7 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 2 Mar 2024 01:48:05 -0700 Subject: [PATCH 10/16] Add back PS2 controller support. Note: it's untested! --- Classes/PCSX2GameCore.mm | 77 +++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 9 deletions(-) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index bfa68e4..2d2d774 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -441,24 +441,83 @@ - (double)audioSampleRate } #pragma mark Input + +/// The code assumes the controller is a PadDualshock2. This tests it and returns the actual object if it is, or \c NULL if it is not. +static PadDualshock2* getPadToDualShock(const NSUInteger player); +static PadDualshock2* getPadToDualShock(const NSUInteger player) +{ + auto pad = Pad::GetPad(player - 1); + auto pad2 = static_cast(pad); + return pad2; +} + + +typedef struct +{ + PadDualshock2::Inputs ps2key; +}keymap; + +static const keymap ps2keymap[25]={ + {PadDualshock2::PAD_UP}, // OEPS2ButtonUp, + {PadDualshock2::PAD_DOWN}, // OEPS2ButtonDown, + {PadDualshock2::PAD_LEFT}, // OEPS2ButtonLeft, + {PadDualshock2::PAD_RIGHT}, // OEPS2ButtonRight, + {PadDualshock2::PAD_TRIANGLE}, // OEPS2ButtonTriangle, + {PadDualshock2::PAD_CIRCLE}, // OEPS2ButtonCircle, + {PadDualshock2::PAD_CROSS}, // OEPS2ButtonCross, + {PadDualshock2::PAD_SQUARE}, // OEPS2ButtonSquare, + {PadDualshock2::PAD_L1}, // OEPS2ButtonL1, + {PadDualshock2::PAD_L2}, // OEPS2ButtonL2, + {PadDualshock2::PAD_L3}, // OEPS2ButtonL3, + {PadDualshock2::PAD_R1}, // OEPS2ButtonR1, + {PadDualshock2::PAD_R2}, // OEPS2ButtonR2, + {PadDualshock2::PAD_R3}, // OEPS2ButtonR3, + {PadDualshock2::PAD_START}, // OEPS2ButtonStart, + {PadDualshock2::PAD_SELECT}, // OEPS2ButtonSelect, + {PadDualshock2::PAD_ANALOG}, // OEPS2ButtonAnalogMode, + {PadDualshock2::PAD_L_UP}, // OEPS2LeftAnalogUp, + {PadDualshock2::PAD_L_DOWN}, // OEPS2LeftAnalogDown, + {PadDualshock2::PAD_L_LEFT}, // OEPS2LeftAnalogLeft, + {PadDualshock2::PAD_L_RIGHT}, // OEPS2LeftAnalogRight, + {PadDualshock2::PAD_R_UP}, // OEPS2RightAnalogUp, + {PadDualshock2::PAD_R_DOWN}, // OEPS2RightAnalogDown, + {PadDualshock2::PAD_R_LEFT}, // OEPS2RightAnalogLeft, + {PadDualshock2::PAD_R_RIGHT}, // OEPS2RightAnalogRight +}; + - (oneway void)didMovePS2JoystickDirection:(OEPS2Button)button withValue:(CGFloat)value forPlayer:(NSUInteger)player { - auto pad = Pad::GetPad(player); - //TODO: update! -// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , value); + auto pad = getPadToDualShock(player); + if (pad == nullptr) { + // A setting is wrong... + NSLog(@"Unknown controller on port %lu", (unsigned long)player); + // Bailing out! + return; + } + pad->Set(ps2keymap[button].ps2key, value); } - (oneway void)didPushPS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { - auto pad = Pad::GetPad(player); - //TODO: update! -// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key , 1.0f); + auto pad = getPadToDualShock(player); + if (pad == nullptr) { + // A setting is wrong... + NSLog(@"Unknown controller on port %lu", (unsigned long)player); + // Bailing out! + return; + } + pad->Set(ps2keymap[button].ps2key, 1.0f); } - (oneway void)didReleasePS2Button:(OEPS2Button)button forPlayer:(NSUInteger)player { - auto pad = Pad::GetPad(player); - //TODO: update! -// g_key_status.Set(u32(player - 1), ps2keymap[button].ps2key, 0.0f); + auto pad = getPadToDualShock(player); + if (pad == nullptr) { + // A setting is wrong... + NSLog(@"Unknown controller on port %lu", (unsigned long)player); + // Bailing out! + return; + } + pad->Set(ps2keymap[button].ps2key, 0.0f); } From 14075f09acea6656bb789231c9ee499eacef019d Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 2 Mar 2024 01:52:40 -0700 Subject: [PATCH 11/16] Update the version number to better match which version of PCSX2 it's based off of. --- PCSX2.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 6181e42..37bdb84 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -8589,7 +8589,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.4452; + CURRENT_PROJECT_VERSION = 1.7.5556; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; @@ -8617,7 +8617,7 @@ ); INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; - MARKETING_VERSION = 1.7.4452; + MARKETING_VERSION = 1.7.5556; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -8674,7 +8674,7 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 1.7.4452; + CURRENT_PROJECT_VERSION = 1.7.5556; DEAD_CODE_STRIPPING = YES; EXPORTED_SYMBOLS_FILE = Classes/PCSX2Exports.exp; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -8704,7 +8704,7 @@ INFOPLIST_FILE = Resources/Info.plist; INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles"; LLVM_LTO = YES_THIN; - MARKETING_VERSION = 1.7.4452; + MARKETING_VERSION = 1.7.5556; PRODUCT_BUNDLE_IDENTIFIER = "org.openemu.${PRODUCT_NAME:identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; From 1579cb299060a2ad7a6d5d72f8aebe2d0590cbb4 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 2 Mar 2024 02:21:15 -0700 Subject: [PATCH 12/16] Remove another outdated bridge source file. --- Classes/Video/OpenGLHostDisplayOverride.cpp | 489 -------------------- PCSX2.xcodeproj/project.pbxproj | 4 - 2 files changed, 493 deletions(-) delete mode 100644 Classes/Video/OpenGLHostDisplayOverride.cpp diff --git a/Classes/Video/OpenGLHostDisplayOverride.cpp b/Classes/Video/OpenGLHostDisplayOverride.cpp deleted file mode 100644 index a0116e7..0000000 --- a/Classes/Video/OpenGLHostDisplayOverride.cpp +++ /dev/null @@ -1,489 +0,0 @@ -/* PCSX2 - PS2 Emulator for PCs - * Copyright (C) 2002-2021 PCSX2 Dev Team - * - * PCSX2 is free software: you can redistribute it and/or modify it under the terms - * of the GNU Lesser General Public License as published by the Free Software Found- - * ation, either version 3 of the License, or (at your option) any later version. - * - * PCSX2 is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - * PURPOSE. See the GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along with PCSX2. - * If not, see . - */ - -#include "PrecompiledHeader.h" -#include "Video/OEHostDisplay.h" - -#include "common/Assertions.h" -#include "common/Console.h" -#include "common/ScopedGuard.h" -#include "common/StringUtil.h" -//#include "common/GL/Program.h" -#include -#include - -static int OE_FBO = 0; - -#if 0 -class OpenGLHostDisplayTexture : public HostDisplayTexture -{ -public: - OpenGLHostDisplayTexture(GLuint texture, u32 width, u32 height) - : m_texture(texture) - , m_width(width) - , m_height(height) - { - } - ~OpenGLHostDisplayTexture() override = default; - - void* GetHandle() const override { return reinterpret_cast(static_cast(m_texture)); } - u32 GetWidth() const override { return m_width; } - u32 GetHeight() const override { return m_height; } - - GLuint GetGLID() const { return m_texture; } - -private: - GLuint m_texture; - u32 m_width; - u32 m_height; -}; - -OpenGLHostDisplay::OpenGLHostDisplay() = default; - -OpenGLHostDisplay::~OpenGLHostDisplay() -{ - if (m_gl_context) - { - m_gl_context->DoneCurrent(); - m_gl_context.reset(); - } -} - -RenderAPI OpenGLHostDisplay::GetRenderAPI() const -{ - return m_gl_context->IsGLES() ? RenderAPI::OpenGLES : RenderAPI::OpenGL; -} - -void* OpenGLHostDisplay::GetDevice() const -{ - return nullptr; -} - -void* OpenGLHostDisplay::GetContext() const -{ - return m_gl_context.get(); -} - -void* OpenGLHostDisplay::GetSurface() const -{ - return nullptr; -} - -std::unique_ptr OpenGLHostDisplay::CreateTexture(u32 width, u32 height, const void* data, u32 data_stride, bool dynamic /* = false */) -{ - // clear error - glGetError(); - - // don't worry, I'm planning on removing this eventually - we'll use GSTexture instead. - glActiveTexture(GL_TEXTURE7); - - GLuint id; - glGenTextures(1, &id); - glBindTexture(GL_TEXTURE_2D, id); - - if (GLAD_GL_ARB_texture_storage || GLAD_GL_ES_VERSION_3_0) - { - glTexStorage2D(GL_TEXTURE_2D, 1, GL_RGBA8, width, height); - glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, data); - } - else - { - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); - } - - glActiveTexture(GL_TEXTURE0); - - GLenum error = glGetError(); - if (error != GL_NO_ERROR) - { - Console.Error("Failed to create texture: 0x%X", error); - glDeleteTextures(1, &id); - return nullptr; - } - - return std::make_unique(id, width, height); -} - -void OpenGLHostDisplay::UpdateTexture(HostDisplayTexture* texture, u32 x, u32 y, u32 width, u32 height, const void* texture_data, u32 texture_data_stride) -{ - glActiveTexture(GL_TEXTURE7); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, texture_data_stride / sizeof(u32)); - - glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, GL_RGBA8, GL_UNSIGNED_BYTE, texture_data); - - glPixelStorei(GL_UNPACK_ROW_LENGTH, 0); - - glActiveTexture(GL_TEXTURE0); -} - -void OpenGLHostDisplay::SetVSync(VsyncMode mode) -{ - if (m_vsync_mode == mode || m_gl_context->GetWindowInfo().type == WindowInfo::Type::Surfaceless) - return; - - // Window framebuffer has to be bound to call SetSwapInterval. - GLint current_fbo = 0; - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, ¤t_fbo); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0); - - if (mode != VsyncMode::Adaptive || !m_gl_context->SetSwapInterval(-1)) - m_gl_context->SetSwapInterval(static_cast(mode != VsyncMode::Off)); - - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, current_fbo); - m_vsync_mode = mode; -} - -const char* OpenGLHostDisplay::GetGLSLVersionString() const -{ - if (GetRenderAPI() == RenderAPI::OpenGLES) - { - if (GLAD_GL_ES_VERSION_3_0) - return "#version 300 es"; - else - return "#version 100"; - } - else - { - if (GLAD_GL_VERSION_3_3) - return "#version 330"; - else - return "#version 130"; - } -} - -std::string OpenGLHostDisplay::GetGLSLVersionHeader() const -{ - std::string header = GetGLSLVersionString(); - header += "\n\n"; - if (GetRenderAPI() == RenderAPI::OpenGLES) - { - header += "precision highp float;\n"; - header += "precision highp int;\n\n"; - } - - return header; -} - -bool OpenGLHostDisplay::HasDevice() const -{ - return static_cast(m_gl_context); -} - -bool OpenGLHostDisplay::HasSurface() const -{ - return m_window_info.type != WindowInfo::Type::Surfaceless; -} - -bool OpenGLHostDisplay::CreateDevice(const WindowInfo& wi, VsyncMode vsync) -{ - m_gl_context = GL::Context::Create(wi); - if (!m_gl_context) - { - Console.Error("Failed to create any GL context"); - m_gl_context.reset(); - return false; - } - - OE_FBO = Host::PresentFrameBuffer(); - - m_window_info = m_gl_context->GetWindowInfo(); - m_vsync_mode = vsync; - return true; -} - -bool OpenGLHostDisplay::SetupDevice() -{ - // We do use 8-bit formats, and higher alignment for 32-bit formats won't hurt anything. - glPixelStorei(GL_UNPACK_ALIGNMENT, 1); - - SetSwapInterval(); - GL::Program::ResetLastProgram(); - return true; -} - -void OpenGLHostDisplay::SetSwapInterval() -{ - const int interval = ((m_vsync_mode == VsyncMode::Adaptive) ? -1 : ((m_vsync_mode == VsyncMode::On) ? 1 : 0)); - m_gl_context->SetSwapInterval(interval); -} - -bool OpenGLHostDisplay::MakeCurrent() -{ - if (!m_gl_context->MakeCurrent()) - { - Console.Error("Failed to make GL context current"); - return false; - } - - SetSwapInterval(); - return true; -} - -bool OpenGLHostDisplay::DoneCurrent() -{ - return m_gl_context->DoneCurrent(); -} - -bool OpenGLHostDisplay::ChangeWindow(const WindowInfo& new_wi) -{ - pxAssert(m_gl_context); - - if (!m_gl_context->ChangeSurface(new_wi)) - { - Console.Error("Failed to change surface"); - return false; - } - - m_window_info = m_gl_context->GetWindowInfo(); - - if (new_wi.type != WindowInfo::Type::Surfaceless) - { - // reset vsync rate, since it (usually) gets lost - if (m_vsync_mode != VsyncMode::Adaptive || !m_gl_context->SetSwapInterval(-1)) - m_gl_context->SetSwapInterval(static_cast(m_vsync_mode != VsyncMode::Off)); - } - - return true; -} - -void OpenGLHostDisplay::ResizeWindow(s32 new_window_width, s32 new_window_height, float new_window_scale) -{ - if (!m_gl_context) - return; - - m_window_info.surface_scale = new_window_scale; - if (m_window_info.surface_width == static_cast(new_window_width) && - m_window_info.surface_height == static_cast(new_window_height)) - { - return; - } - - m_gl_context->ResizeSurface(static_cast(new_window_width), static_cast(new_window_height)); - m_window_info = m_gl_context->GetWindowInfo(); -} - -bool OpenGLHostDisplay::SupportsFullscreen() const -{ - return false; -} - -bool OpenGLHostDisplay::IsFullscreen() -{ - return false; -} - -bool OpenGLHostDisplay::SetFullscreen(bool fullscreen, u32 width, u32 height, float refresh_rate) -{ - return false; -} - -HostDisplay::AdapterAndModeList OpenGLHostDisplay::GetAdapterAndModeList() -{ - AdapterAndModeList aml; - - if (m_gl_context) - { - for (const GL::Context::FullscreenModeInfo& fmi : m_gl_context->EnumerateFullscreenModes()) - aml.fullscreen_modes.push_back(GetFullscreenModeString(fmi.width, fmi.height, fmi.refresh_rate)); - } - - return aml; -} - -void OpenGLHostDisplay::DestroySurface() -{ - if (!m_gl_context) - return; - - m_window_info = {}; - if (!m_gl_context->ChangeSurface(m_window_info)) - Console.Error("Failed to switch to surfaceless"); -} - -std::string OpenGLHostDisplay::GetDriverInfo() const -{ - const char* gl_vendor = reinterpret_cast(glGetString(GL_VENDOR)); - const char* gl_renderer = reinterpret_cast(glGetString(GL_RENDERER)); - const char* gl_version = reinterpret_cast(glGetString(GL_VERSION)); - return StringUtil::StdStringFromFormat( - "%s Context:\n%s\n%s %s", m_gl_context->IsGLES() ? "OpenGL ES" : "OpenGL", gl_version, gl_vendor, gl_renderer); -} - -bool OpenGLHostDisplay::CreateImGuiContext() -{ - return true; -} - -void OpenGLHostDisplay::DestroyImGuiContext() -{ -} - -bool OpenGLHostDisplay::UpdateImGuiFontTexture() -{ - return true; -} - -HostDisplay::PresentResult OpenGLHostDisplay::BeginPresent(bool frame_skip) -{ - if (frame_skip || m_window_info.type == WindowInfo::Type::Surfaceless) - { - return PresentResult::FrameSkipped; - } - - glDisable(GL_SCISSOR_TEST); - glBindFramebuffer(GL_DRAW_FRAMEBUFFER, OE_FBO); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); - glClear(GL_COLOR_BUFFER_BIT); - glViewport(0, 0, m_window_info.surface_width, m_window_info.surface_height); - - return PresentResult::OK; -} - -void OpenGLHostDisplay::EndPresent() -{ - glDisable(GL_SCISSOR_TEST); - glDisable(GL_STENCIL_TEST); - - GL::Program::ResetLastProgram(); - - if (m_gpu_timing_enabled) - PopTimestampQuery(); - - m_gl_context->SwapBuffers(); - - if (m_gpu_timing_enabled) - KickTimestampQuery(); -} - -void OpenGLHostDisplay::CreateTimestampQueries() -{ - const bool gles = m_gl_context->IsGLES(); - const auto GenQueries = gles ? glGenQueriesEXT : glGenQueries; - - GenQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); - KickTimestampQuery(); -} - -void OpenGLHostDisplay::DestroyTimestampQueries() -{ - if (m_timestamp_queries[0] == 0) - return; - - const bool gles = m_gl_context->IsGLES(); - const auto DeleteQueries = gles ? glDeleteQueriesEXT : glDeleteQueries; - - if (m_timestamp_query_started) - { - const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; - EndQuery(GL_TIME_ELAPSED); - } - - DeleteQueries(static_cast(m_timestamp_queries.size()), m_timestamp_queries.data()); - m_timestamp_queries.fill(0); - m_read_timestamp_query = 0; - m_write_timestamp_query = 0; - m_waiting_timestamp_queries = 0; - m_timestamp_query_started = false; -} - -void OpenGLHostDisplay::PopTimestampQuery() -{ - const bool gles = m_gl_context->IsGLES(); - - if (gles) - { - GLint disjoint = 0; - glGetIntegerv(GL_GPU_DISJOINT_EXT, &disjoint); - if (disjoint) - { - DevCon.WriteLn("GPU timing disjoint, resetting."); - if (m_timestamp_query_started) - glEndQueryEXT(GL_TIME_ELAPSED); - - m_read_timestamp_query = 0; - m_write_timestamp_query = 0; - m_waiting_timestamp_queries = 0; - m_timestamp_query_started = false; - } - } - - while (m_waiting_timestamp_queries > 0) - { - const auto GetQueryObjectiv = gles ? glGetQueryObjectivEXT : glGetQueryObjectiv; - const auto GetQueryObjectui64v = gles ? glGetQueryObjectui64vEXT : glGetQueryObjectui64v; - - GLint available = 0; - GetQueryObjectiv(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT_AVAILABLE, &available); - - if (!available) - break; - - u64 result = 0; - GetQueryObjectui64v(m_timestamp_queries[m_read_timestamp_query], GL_QUERY_RESULT, &result); - m_accumulated_gpu_time += static_cast(static_cast(result) / 1000000.0); - m_read_timestamp_query = (m_read_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; - m_waiting_timestamp_queries--; - } - - if (m_timestamp_query_started) - { - const auto EndQuery = gles ? glEndQueryEXT : glEndQuery; - EndQuery(GL_TIME_ELAPSED); - - m_write_timestamp_query = (m_write_timestamp_query + 1) % NUM_TIMESTAMP_QUERIES; - m_timestamp_query_started = false; - m_waiting_timestamp_queries++; - } -} - -void OpenGLHostDisplay::KickTimestampQuery() -{ - if (m_timestamp_query_started || m_waiting_timestamp_queries == NUM_TIMESTAMP_QUERIES) - return; - - const bool gles = m_gl_context->IsGLES(); - const auto BeginQuery = gles ? glBeginQueryEXT : glBeginQuery; - - BeginQuery(GL_TIME_ELAPSED, m_timestamp_queries[m_write_timestamp_query]); - m_timestamp_query_started = true; -} - -bool OpenGLHostDisplay::SetGPUTimingEnabled(bool enabled) -{ - if (m_gpu_timing_enabled == enabled) - return true; - - if (enabled && m_gl_context->IsGLES() && !GLAD_GL_EXT_disjoint_timer_query) - return false; - - m_gpu_timing_enabled = enabled; - if (m_gpu_timing_enabled) - CreateTimestampQueries(); - else - DestroyTimestampQueries(); - - return true; -} - -float OpenGLHostDisplay::GetAndResetAccumulatedGPUTime() -{ - const float value = m_accumulated_gpu_time; - m_accumulated_gpu_time = 0.0f; - return value; -} - -#endif diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 37bdb84..ea65df6 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -956,7 +956,6 @@ DD03001927BD695D0006ABDC /* tfx_fs.glsl in Copy OpenGL Shaders */ = {isa = PBXBuildFile; fileRef = 558065C627AD3A31008CD5D2 /* tfx_fs.glsl */; }; DD0302B127C435760006ABDC /* SndOut_Cubeb.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 558063BB27AB4B6C008CD5D2 /* SndOut_Cubeb.cpp */; }; DD0302B727C491020006ABDC /* OESndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B527C491020006ABDC /* OESndOut.cpp */; }; - DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */; }; DD0302C027C491160006ABDC /* GLContextAGL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD0302BC27C491160006ABDC /* GLContextAGL.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD03FFD827B721F20006ABDC /* GSTextureMTL.mm in Sources */ = {isa = PBXBuildFile; fileRef = DD03FFB927B70F0C0006ABDC /* GSTextureMTL.mm */; settings = {COMPILER_FLAGS = "-fno-objc-arc"; }; }; DD5A404E298CA9B700EFBE7A /* SndOut.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5517FCD0263D49BC000219EC /* SndOut.cpp */; }; @@ -3011,7 +3010,6 @@ 55F9D7E228120385005286B6 /* fxaa.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = fxaa.metal; sourceTree = ""; }; DD0302B427C491020006ABDC /* OESndOut.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OESndOut.h; sourceTree = ""; }; DD0302B527C491020006ABDC /* OESndOut.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OESndOut.cpp; sourceTree = ""; }; - DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OpenGLHostDisplayOverride.cpp; sourceTree = ""; }; DD0302BA27C491160006ABDC /* GSDeviceMTL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSDeviceMTL.mm; sourceTree = ""; usesTabs = 1; }; DD0302BC27C491160006ABDC /* GLContextAGL.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GLContextAGL.mm; sourceTree = ""; }; DD0302C827C5494A0006ABDC /* keymap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = keymap.h; sourceTree = ""; }; @@ -6676,7 +6674,6 @@ 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */, DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */, DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */, - DD0302B927C491160006ABDC /* OpenGLHostDisplayOverride.cpp */, ); path = Video; sourceTree = ""; @@ -7665,7 +7662,6 @@ 551BF637264216F50008C529 /* BlockdumpFileReader.cpp in Sources */, DDE1B427298C68130028DF05 /* audiodev-cubeb.cpp in Sources */, 551BF57926420E720008C529 /* Vif0_Dma.cpp in Sources */, - DD0302BD27C491160006ABDC /* OpenGLHostDisplayOverride.cpp in Sources */, 55B1F02C295BAD5600DB297F /* ICMP_Session.cpp in Sources */, 551BF56826420E3B0008C529 /* newVif_Unpack.cpp in Sources */, 557D49D027D00BE7006C2C69 /* merge.metal in Sources */, From f14415c53faf874df4118fa2639744dd7c218bcd Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 2 Mar 2024 15:40:06 -0700 Subject: [PATCH 13/16] Minor clean-up. --- Classes/Input/keymap.h | 54 ++++++++++++++++----------------- Classes/PCSX2GameCore.mm | 42 +------------------------ Classes/Video/OEHostDisplay.h | 34 --------------------- PCSX2.xcodeproj/project.pbxproj | 2 -- 4 files changed, 28 insertions(+), 104 deletions(-) delete mode 100644 Classes/Video/OEHostDisplay.h diff --git a/Classes/Input/keymap.h b/Classes/Input/keymap.h index 4fe86ec..d37450f 100644 --- a/Classes/Input/keymap.h +++ b/Classes/Input/keymap.h @@ -25,38 +25,38 @@ #ifndef keymap_h #define keymap_h -#include "PAD/Host/Global.h" +#include "SIO/Pad/PadDualshock2.h" typedef struct { - gamePadValues ps2key; + PadDualshock2::Inputs ps2key; }keymap; keymap ps2keymap[25]={ - {PAD_UP}, // OEPS2ButtonUp, - {PAD_DOWN}, // OEPS2ButtonDown, - {PAD_LEFT}, // OEPS2ButtonLeft, - {PAD_RIGHT}, // OEPS2ButtonRight, - {PAD_TRIANGLE}, // OEPS2ButtonTriangle, - {PAD_CIRCLE}, // OEPS2ButtonCircle, - {PAD_CROSS}, // OEPS2ButtonCross, - {PAD_SQUARE}, // OEPS2ButtonSquare, - {PAD_L1}, // OEPS2ButtonL1, - {PAD_L2}, // OEPS2ButtonL2, - {PAD_L3}, // OEPS2ButtonL3, - {PAD_R1}, // OEPS2ButtonR1, - {PAD_R2}, // OEPS2ButtonR2, - {PAD_R3}, // OEPS2ButtonR3, - {PAD_START}, // OEPS2ButtonStart, - {PAD_SELECT}, // OEPS2ButtonSelect, - {}, // OEPS2ButtonAnalogMode, - {PAD_L_UP}, // OEPS2LeftAnalogUp, - {PAD_L_DOWN}, // OEPS2LeftAnalogDown, - {PAD_L_LEFT}, // OEPS2LeftAnalogLeft, - {PAD_L_RIGHT}, // OEPS2LeftAnalogRight, - {PAD_R_UP}, // OEPS2RightAnalogUp, - {PAD_R_DOWN}, // OEPS2RightAnalogDown, - {PAD_R_LEFT}, // OEPS2RightAnalogLeft, - {PAD_R_RIGHT}, // OEPS2RightAnalogRight + {PadDualshock2::PAD_UP}, // OEPS2ButtonUp, + {PadDualshock2::PAD_DOWN}, // OEPS2ButtonDown, + {PadDualshock2::PAD_LEFT}, // OEPS2ButtonLeft, + {PadDualshock2::PAD_RIGHT}, // OEPS2ButtonRight, + {PadDualshock2::PAD_TRIANGLE}, // OEPS2ButtonTriangle, + {PadDualshock2::PAD_CIRCLE}, // OEPS2ButtonCircle, + {PadDualshock2::PAD_CROSS}, // OEPS2ButtonCross, + {PadDualshock2::PAD_SQUARE}, // OEPS2ButtonSquare, + {PadDualshock2::PAD_L1}, // OEPS2ButtonL1, + {PadDualshock2::PAD_L2}, // OEPS2ButtonL2, + {PadDualshock2::PAD_L3}, // OEPS2ButtonL3, + {PadDualshock2::PAD_R1}, // OEPS2ButtonR1, + {PadDualshock2::PAD_R2}, // OEPS2ButtonR2, + {PadDualshock2::PAD_R3}, // OEPS2ButtonR3, + {PadDualshock2::PAD_START}, // OEPS2ButtonStart, + {PadDualshock2::PAD_SELECT}, // OEPS2ButtonSelect, + {PadDualshock2::PAD_ANALOG}, // OEPS2ButtonAnalogMode, + {PadDualshock2::PAD_L_UP}, // OEPS2LeftAnalogUp, + {PadDualshock2::PAD_L_DOWN}, // OEPS2LeftAnalogDown, + {PadDualshock2::PAD_L_LEFT}, // OEPS2LeftAnalogLeft, + {PadDualshock2::PAD_L_RIGHT}, // OEPS2LeftAnalogRight, + {PadDualshock2::PAD_R_UP}, // OEPS2RightAnalogUp, + {PadDualshock2::PAD_R_DOWN}, // OEPS2RightAnalogDown, + {PadDualshock2::PAD_R_LEFT}, // OEPS2RightAnalogLeft, + {PadDualshock2::PAD_R_RIGHT}, // OEPS2RightAnalogRight }; #endif /* keymap_h */ diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index 2d2d774..5159cd3 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -25,8 +25,8 @@ #import "PCSX2GameCore.h" #import #import -#include "Video/OEHostDisplay.h" #include "Audio/OESndOut.h" +#include "Input/keymap.h" #define BOOL PCSX2BOOL #include "PrecompiledHeader.h" @@ -296,11 +296,6 @@ - (void)startEmulation params.fullscreen = false; if(!hasInitialized){ -// if (self.gameCoreRendering == OEGameCoreRenderingOpenGL3Video) -// g_host_display = HostDisplay::CreateForAPI(RenderAPI::OpenGL); -// else if (self.gameCoreRendering == OEGameCoreRenderingMetal2Video) -// g_host_display = HostDisplay::CreateForAPI(RenderAPI::Metal); - VMManager::Internal::CPUThreadInitialize(); VMManager::ApplySettings(); @@ -358,7 +353,6 @@ - (void)stopEmulation { ExitRequested = true; VMManager::SetState(VMState::Stopping); -// VMManager::Shutdown(true); [super stopEmulation]; } @@ -451,40 +445,6 @@ - (double)audioSampleRate return pad2; } - -typedef struct -{ - PadDualshock2::Inputs ps2key; -}keymap; - -static const keymap ps2keymap[25]={ - {PadDualshock2::PAD_UP}, // OEPS2ButtonUp, - {PadDualshock2::PAD_DOWN}, // OEPS2ButtonDown, - {PadDualshock2::PAD_LEFT}, // OEPS2ButtonLeft, - {PadDualshock2::PAD_RIGHT}, // OEPS2ButtonRight, - {PadDualshock2::PAD_TRIANGLE}, // OEPS2ButtonTriangle, - {PadDualshock2::PAD_CIRCLE}, // OEPS2ButtonCircle, - {PadDualshock2::PAD_CROSS}, // OEPS2ButtonCross, - {PadDualshock2::PAD_SQUARE}, // OEPS2ButtonSquare, - {PadDualshock2::PAD_L1}, // OEPS2ButtonL1, - {PadDualshock2::PAD_L2}, // OEPS2ButtonL2, - {PadDualshock2::PAD_L3}, // OEPS2ButtonL3, - {PadDualshock2::PAD_R1}, // OEPS2ButtonR1, - {PadDualshock2::PAD_R2}, // OEPS2ButtonR2, - {PadDualshock2::PAD_R3}, // OEPS2ButtonR3, - {PadDualshock2::PAD_START}, // OEPS2ButtonStart, - {PadDualshock2::PAD_SELECT}, // OEPS2ButtonSelect, - {PadDualshock2::PAD_ANALOG}, // OEPS2ButtonAnalogMode, - {PadDualshock2::PAD_L_UP}, // OEPS2LeftAnalogUp, - {PadDualshock2::PAD_L_DOWN}, // OEPS2LeftAnalogDown, - {PadDualshock2::PAD_L_LEFT}, // OEPS2LeftAnalogLeft, - {PadDualshock2::PAD_L_RIGHT}, // OEPS2LeftAnalogRight, - {PadDualshock2::PAD_R_UP}, // OEPS2RightAnalogUp, - {PadDualshock2::PAD_R_DOWN}, // OEPS2RightAnalogDown, - {PadDualshock2::PAD_R_LEFT}, // OEPS2RightAnalogLeft, - {PadDualshock2::PAD_R_RIGHT}, // OEPS2RightAnalogRight -}; - - (oneway void)didMovePS2JoystickDirection:(OEPS2Button)button withValue:(CGFloat)value forPlayer:(NSUInteger)player { auto pad = getPadToDualShock(player); diff --git a/Classes/Video/OEHostDisplay.h b/Classes/Video/OEHostDisplay.h deleted file mode 100644 index 7241266..0000000 --- a/Classes/Video/OEHostDisplay.h +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2022, OpenEmu Team -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are met: -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above copyright -// notice, this list of conditions and the following disclaimer in the -// documentation and/or other materials provided with the distribution. -// * Neither the name of the OpenEmu Team nor the -// names of its contributors may be used to endorse or promote products -// derived from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY OpenEmu Team ''AS IS'' AND ANY -// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -// WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -// DISCLAIMED. IN NO EVENT SHALL OpenEmu Team BE LIABLE FOR ANY -// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -// (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -// ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -#ifndef OEHostDisplay_h -#define OEHostDisplay_h - -namespace Host { - int PresentFrameBuffer(); -} // namespace Host - - - -#endif /* OEHostDisplay_h */ diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index ea65df6..f608ec3 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -3027,7 +3027,6 @@ DD03FFBF27B70F0C0006ABDC /* GSDeviceMTL.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GSDeviceMTL.h; sourceTree = ""; }; DD03FFC127B70F0C0006ABDC /* convert.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = convert.metal; sourceTree = ""; }; DD1134E827CBCE8900C2E60B /* SaveState.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = SaveState.cpp; sourceTree = ""; }; - DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = OEHostDisplay.h; sourceTree = ""; }; DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = GSMTLDeviceInfo.mm; sourceTree = ""; }; DDE1B431298C68320028DF05 /* usb-printer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "usb-printer.h"; sourceTree = ""; }; DDE1B432298C68320028DF05 /* usb-printer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = "usb-printer.cpp"; sourceTree = ""; }; @@ -6673,7 +6672,6 @@ 55325A082A01025600D4CFFA /* GSDeviceOGL.cpp */, 55484D3C28855E740066EDEB /* GSDumpReplayer.cpp */, DD75EE5E29898A3A0056B3BA /* GSMTLDeviceInfo.mm */, - DD5D197D27D708A900ED83D9 /* OEHostDisplay.h */, ); path = Video; sourceTree = ""; From 1a5f7727123b6d807817af2986a12d4ac59c60c1 Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Mon, 4 Mar 2024 20:01:58 -0700 Subject: [PATCH 14/16] Add second controller to PCSX2. --- Classes/PCSX2GameCore.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index 5159cd3..6858958 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -259,6 +259,7 @@ - (void)setupEmulation si.SetBoolValue("EmuCore/GS", "FrameLimitEnable", true); si.SetBoolValue("EmuCore/GS", "SyncToHostRefreshRate",false); si.SetBoolValue("EmuCore/GS", "UserHacks", false); + si.SetStringValue("Pad2", "Type", "DualShock2"); } - (void)resetEmulation From 111ff78469d43ce4a7bb305c2d810e6b991f554b Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Sat, 16 Mar 2024 00:51:27 -0600 Subject: [PATCH 15/16] Pokes. --- Classes/Audio/OESndOut.cpp | 1 + Classes/PCSX2GameCore.mm | 8 +++++++- PCSX2.xcodeproj/project.pbxproj | 11 +++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/Classes/Audio/OESndOut.cpp b/Classes/Audio/OESndOut.cpp index f66c467..7941728 100644 --- a/Classes/Audio/OESndOut.cpp +++ b/Classes/Audio/OESndOut.cpp @@ -671,6 +671,7 @@ __forceinline // output by design. // Good thing though that this code gets the volume exactly right, as per tests :) Out = clamp_mix(Out); + SndBuffer::Write(StereoOut16(Out)); Host::WriteToSoundBuffer(StereoOut16(Out)); diff --git a/Classes/PCSX2GameCore.mm b/Classes/PCSX2GameCore.mm index 6858958..14b8da7 100644 --- a/Classes/PCSX2GameCore.mm +++ b/Classes/PCSX2GameCore.mm @@ -246,10 +246,12 @@ - (void)setupEmulation si.SetBoolValue("EmuCore/CPU/Recompiler", "EnableIOP", true); si.SetBoolValue("EmuCore/CPU/Recompiler", "EnableVU0", true); si.SetBoolValue("EmuCore/CPU/Recompiler", "EnableVU1", true); - si.SetStringValue("EmuCore/SPU2", "OutputModule", "NullOut"); + si.SetStringValue("SPU2/Output", "OutputModule", "nullout"); si.SetBoolValue("EmuCore", "EnablePatches", true); si.SetBoolValue("EmuCore", "EnableCheats", false); si.SetBoolValue("EmuCore", "EnablePerGameSettings", true); + //TODO: somehow work this into OpenEmu... + si.SetBoolValue("EmuCore", "EnableWideScreenPatches", false); si.SetBoolValue("EmuCore", "HostFs", false); si.SetBoolValue("EmuCore/Speedhacks", "vuFlagHack", true); si.SetBoolValue("EmuCore/Speedhacks", "IntcStat", true); @@ -260,6 +262,10 @@ - (void)setupEmulation si.SetBoolValue("EmuCore/GS", "SyncToHostRefreshRate",false); si.SetBoolValue("EmuCore/GS", "UserHacks", false); si.SetStringValue("Pad2", "Type", "DualShock2"); + si.SetIntValue("SPU2/Output", "SynchMode", 2); + si.SetIntValue("SPU2/Output", "Latency", 60); + si.SetIntValue("SPU2/Output", "OutputLatency", 20); + si.SetIntValue("SPU2/Mixing", "FinalVolume", 100); } - (void)resetEmulation diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index f608ec3..7450762 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -7032,6 +7032,7 @@ buildRules = ( ); dependencies = ( + 55860B712B971973002A91B6 /* PBXTargetDependency */, ); name = "chdr-pcsx2"; productName = "chdr-pcsx2"; @@ -8414,6 +8415,10 @@ target = 5580651827AB4BBE008CD5D2 /* cubeb-pcsx2 */; targetProxy = 5580652227AB4CCB008CD5D2 /* PBXContainerItemProxy */; }; + 55860B712B971973002A91B6 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + productRef = 55860B702B971973002A91B6 /* libzstd */; + }; 55B1EFF9295BAA7A00DB297F /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 55B1EFF1295BAA4700DB297F /* jpgd */; @@ -8779,6 +8784,7 @@ STRIP_INSTALLED_PRODUCT = NO; USER_HEADER_SEARCH_PATHS = ( "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/zstd/zstd/lib\"", "$(inherited)", ); }; @@ -8800,6 +8806,7 @@ STRIP_INSTALLED_PRODUCT = NO; USER_HEADER_SEARCH_PATHS = ( "\"${SRCROOT}/pcsx2/3rdparty/lzma/include\"", + "\"${SRCROOT}/pcsx2/3rdparty/zstd/zstd/lib\"", "$(inherited)", ); }; @@ -9696,6 +9703,10 @@ isa = XCSwiftPackageProductDependency; productName = libzstd; }; + 55860B702B971973002A91B6 /* libzstd */ = { + isa = XCSwiftPackageProductDependency; + productName = libzstd; + }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 5517E8AC263D4213000219EC /* Project object */; From f9c9e87c92174736c7874591aab8a3a3eff4369a Mon Sep 17 00:00:00 2001 From: "C.W. Betts" Date: Wed, 1 May 2024 01:57:32 -0600 Subject: [PATCH 16/16] Get ready for when ARM64 support gets added to PCSX2. --- PCSX2.xcodeproj/project.pbxproj | 134 ++++++++++++++++++++++++++------ 1 file changed, 112 insertions(+), 22 deletions(-) diff --git a/PCSX2.xcodeproj/project.pbxproj b/PCSX2.xcodeproj/project.pbxproj index 7450762..04f55a6 100644 --- a/PCSX2.xcodeproj/project.pbxproj +++ b/PCSX2.xcodeproj/project.pbxproj @@ -8602,6 +8602,14 @@ __POSIX__, "GIT_REV=\"\\\"huh...\\\"\"", ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _M_X86, __M_X86_64, @@ -8688,6 +8696,14 @@ __POSIX__, "GIT_REV=\"\\\"huh...\\\"\"", ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _M_X86, __M_X86_64, @@ -8883,11 +8899,28 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "__unix__=1", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( + "__M_X86_64=1", + _M_X86_64, + _M_X86, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64h]" = ( "__M_X86_64=1", _M_X86_64, _M_X86, "$(inherited)", - "__unix__=1", ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2\"", @@ -8938,11 +8971,28 @@ GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/pcsx2/PrecompiledHeader.h; GCC_PREPROCESSOR_DEFINITIONS = ( + "$(inherited)", + "__unix__=1", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( + "__M_X86_64=1", + _M_X86_64, + _M_X86, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64h]" = ( "__M_X86_64=1", _M_X86_64, _M_X86, "$(inherited)", - "__unix__=1", ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2\"", @@ -9045,8 +9095,23 @@ EXECUTABLE_PREFIX = lib; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/common/PrecompiledHeader.h; - GCC_PREPROCESSOR_DEFINITIONS = ( - __M_X86_64, + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( + "__M_X86_64=1", + _M_X86_64, + _M_X86, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64h]" = ( + "__M_X86_64=1", _M_X86_64, _M_X86, "$(inherited)", @@ -9078,8 +9143,23 @@ EXECUTABLE_PREFIX = lib; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = pcsx2/common/PrecompiledHeader.h; - GCC_PREPROCESSOR_DEFINITIONS = ( - __M_X86_64, + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _M_ARM64, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( + "__M_X86_64=1", + _M_X86_64, + _M_X86, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64h]" = ( + "__M_X86_64=1", _M_X86_64, _M_X86, "$(inherited)", @@ -9173,11 +9253,11 @@ CLANG_WARN_DOCUMENTATION_COMMENTS = NO; CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; - GCC_PREPROCESSOR_DEFINITIONS = ( + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( "__M_X86_64=1", _M_X86_64, "$(inherited)", - "__WXOSX_COCOA__=1", ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2\"", @@ -9197,11 +9277,11 @@ CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = dwarf; EXECUTABLE_PREFIX = lib; - GCC_PREPROCESSOR_DEFINITIONS = ( + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; + "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( "__M_X86_64=1", _M_X86_64, "$(inherited)", - "__WXOSX_COCOA__=1", ); HEADER_SEARCH_PATHS = ( "\"$(SRCROOT)/pcsx2\"", @@ -9282,6 +9362,14 @@ "EXPORT=\"\"", FLOATING_POINT, ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _USE_NEON, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _USE_NEON, + "$(inherited)", + ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _USE_SSE, _USE_SSE2, @@ -9318,6 +9406,14 @@ "EXPORT=\"\"", FLOATING_POINT, ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64]" = ( + _USE_NEON, + "$(inherited)", + ); + "GCC_PREPROCESSOR_DEFINITIONS[arch=arm64e]" = ( + _USE_NEON, + "$(inherited)", + ); "GCC_PREPROCESSOR_DEFINITIONS[arch=x86_64]" = ( _USE_SSE, _USE_SSE2, @@ -9350,10 +9446,7 @@ ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 14.2; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -9369,6 +9462,7 @@ ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; MACOSX_DEPLOYMENT_TARGET = 14.2; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -9383,10 +9477,7 @@ CODE_SIGN_STYLE = Automatic; DEBUG_INFORMATION_FORMAT = dwarf; EXECUTABLE_PREFIX = lib; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -9398,6 +9489,7 @@ CLANG_CXX_LANGUAGE_STANDARD = "gnu++20"; CODE_SIGN_STYLE = Automatic; EXECUTABLE_PREFIX = lib; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; }; @@ -9494,10 +9586,7 @@ ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu17; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES; @@ -9512,6 +9601,7 @@ ENABLE_USER_SCRIPT_SANDBOXING = YES; EXECUTABLE_PREFIX = lib; GCC_C_LANGUAGE_STANDARD = gnu17; + GCC_PREPROCESSOR_DEFINITIONS = "$(inherited)"; LOCALIZATION_PREFERS_STRING_CATALOGS = YES; PRODUCT_NAME = "$(TARGET_NAME)"; SKIP_INSTALL = YES;