From e99c73e28310801bf77c188fdcc14bb39c4090b7 Mon Sep 17 00:00:00 2001 From: Gerasim Troeglazov <3dEyes@gmail.com> Date: Wed, 1 Apr 2026 11:37:44 +1000 Subject: Add Haiku build support Based on patches sourced from https://github.com/kenz-gelsoft/gecko-dev/ - Enabled building for Haiku. - Implemented the cubeb audio backend for MediaKit (input and output). - Implemented native notifications. - Fixed build with WebRTC enabled. - Implemented WebRTC modules for desktop capture and video capture. - Made additional modifications for Haiku compatibility. - Implement remote server diff --git a/Cargo.toml b/Cargo.toml index 10b3465..146b6ed 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -67,7 +67,7 @@ exclude = [ resolver = "2" [workspace.package] -rust-version = "1.90.0" +rust-version = "1.89.0" [workspace.dependencies] # Shared across multiple UniFFI consumers. diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js index 141c9a0..ffc2beb 100644 --- a/browser/app/profile/firefox.js +++ b/browser/app/profile/firefox.js @@ -15,7 +15,9 @@ #ifdef XP_UNIX #ifndef XP_MACOSX - #define UNIX_BUT_NOT_MAC + #ifndef XP_HAIKU + #define UNIX_BUT_NOT_MAC_NOR_HAIKU + #endif #endif #endif @@ -251,7 +253,7 @@ pref("browser.uitour.url", "https://www.mozilla.org/%LOCALE%/firefox/%VERSION%/t // How long to show a Hearbeat survey (two hours, in seconds) pref("browser.uitour.surveyDuration", 7200); -#ifdef UNIX_BUT_NOT_MAC +#ifdef UNIX_BUT_NOT_MAC_NOR_HAIKU pref("general.autoScroll", false); #else pref("general.autoScroll", true); @@ -1131,7 +1133,7 @@ pref("browser.unexpectedScriptLoad.logLevel", "Warn"); pref("browser.tabs.min_inactive_duration_before_unload", 600000); // Does middleclick paste of clipboard to new tab button -#ifdef UNIX_BUT_NOT_MAC +#ifdef UNIX_BUT_NOT_MAC_NOR_HAIKU pref("browser.tabs.searchclipboardfor.middleclick", true); #else pref("browser.tabs.searchclipboardfor.middleclick", false); diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc index 8871fc9..a0f65ba 100644 --- a/browser/base/content/browser-sets.inc +++ b/browser/base/content/browser-sets.inc @@ -6,6 +6,12 @@ #ifdef XP_UNIX #ifndef XP_MACOSX #define XP_GNOME 1 + +#ifdef XP_HAIKU +#define XP_MACOSX_OR_HAIKU 1 +#endif +#else +#define XP_MACOSX_OR_HAIKU 1 #endif #endif @@ -211,7 +217,7 @@ -#ifndef XP_MACOSX +#ifndef XP_MACOSX_OR_HAIKU #else @@ -356,10 +362,14 @@ #ifdef XP_GNOME +#ifndef XP_HAIKU #define NUM_SELECT_TAB_MODIFIER alt #else #define NUM_SELECT_TAB_MODIFIER accel #endif +#else +#define NUM_SELECT_TAB_MODIFIER accel +#endif #expand #expand diff --git a/build/RunCbindgen.py b/build/RunCbindgen.py index bb0de61..2459b8a 100644 --- a/build/RunCbindgen.py +++ b/build/RunCbindgen.py @@ -55,7 +55,7 @@ def generate_metadata(output, cargo_config): # within a tree, the Rust dependencies have been vendored in so Cargo won't # touch the lock file. if not buildconfig.substs.get("JS_STANDALONE"): - args.append("--frozen") + args.append("--offline") stdout, returncode = _run_process(args) diff --git a/build/gecko_templates.mozbuild b/build/gecko_templates.mozbuild index af2fc4f..e61403a 100644 --- a/build/gecko_templates.mozbuild +++ b/build/gecko_templates.mozbuild @@ -44,7 +44,8 @@ def GeckoBinary(linkage="dependent", mozglue=None): USE_LIBS += ["sanitizer-options"] DEFINES["MOZ_HAS_MOZGLUE"] = True if CONFIG["MOZ_GLUE_IN_PROGRAM"] and CONFIG["CC_TYPE"] in ("clang", "gcc"): - LDFLAGS += ["-rdynamic"] + #LDFLAGS += ['-rdynamic'] + LDFLAGS += ['-Wl,-export-dynamic'] elif mozglue == "library": LIBRARY_DEFINES["MOZ_HAS_MOZGLUE"] = True if not CONFIG["MOZ_GLUE_IN_PROGRAM"]: diff --git a/build/gn_processor.py b/build/gn_processor.py index 87b73b4..00b7471 100644 --- a/build/gn_processor.py +++ b/build/gn_processor.py @@ -185,6 +185,7 @@ def filter_gn_config(path, gn_result, sandbox_vars, input_vars, gn_target): "loong64": "loongarch64", } oses = { + "haiku": "Haiku", "android": "Android", "linux": "Linux", "mac": "Darwin", @@ -802,7 +803,7 @@ def main(): vars_set = [] for is_debug in (True, False): - for target_os in ("android", "linux", "mac", "openbsd", "win"): + for target_os in ("android", "linux", "mac", "openbsd", "haiku", "win"): target_cpus = ["x64"] if target_os in ("android", "linux", "mac", "win", "openbsd"): target_cpus.append("arm64") @@ -819,7 +820,7 @@ def main(): "host_cpu": "x64", "is_debug": is_debug, "target_cpu": target_cpu, - "target_os": target_os, + "target_os": "haiku", } if target_os == "linux": for enable_x11 in (True, False): diff --git a/build/gyp_includes/common.gypi b/build/gyp_includes/common.gypi index 8acb326..a50a782 100644 --- a/build/gyp_includes/common.gypi +++ b/build/gyp_includes/common.gypi @@ -685,7 +685,7 @@ # Default to enabled PIE; this is important for ASLR but we may need to be # able to turn it off for various reasons. - 'linux_disable_pie%': 0, + 'linux_disable_pie%': 1, # The release channel that this build targets. This is used to restrict # channel-specific build options, like which installer packages to create. @@ -2557,7 +2557,7 @@ 'target_conditions': [ ['_type=="executable"', { 'ldflags': [ - '-pie', + '-fPIC', ], }], ], @@ -3169,7 +3169,7 @@ # understand slide, and get rid of the Valgrind check. 'xcode_settings': { 'OTHER_LDFLAGS': [ - '-Wl,-pie', # Position-independent executable (MH_PIE) + '-Wl,-fPIC', # Position-independent executable (MH_PIE) ], }, }], diff --git a/build/moz.configure/bindgen.configure b/build/moz.configure/bindgen.configure index 533cdc5..f774555 100644 --- a/build/moz.configure/bindgen.configure +++ b/build/moz.configure/bindgen.configure @@ -203,7 +203,7 @@ def bindgen_libclang_path(libclang_path, clang, library_name_info, host): libclang_choices.append( "%sclang%s" % (library_name_info.dll.prefix, library_name_info.dll.suffix) ) - if host.kernel == "Linux": + if host.kernel == "Linux" or host.kernel == "Haiku": libclang_choices.append("libclang.so.*") if host.os == "OpenBSD": diff --git a/build/moz.configure/flags.configure b/build/moz.configure/flags.configure index 2662792..8b77622 100644 --- a/build/moz.configure/flags.configure +++ b/build/moz.configure/flags.configure @@ -520,8 +520,8 @@ set_config("EXPAND_LIBS_LIST_STYLE", expand_libs_list_style) # --------------------------------- @depends(building_with_gnu_compatible_cc, target) def moz_program_ldflags(building_with_gnu_compatible_cc, target): - if building_with_gnu_compatible_cc and target.kernel not in ("Darwin", "WASI"): - return ["-pie"] + if building_with_gnu_compatible_cc and target.kernel not in ("Darwin", "WASI", "Haiku"): + return ["-fPIC"] set_config("MOZ_PROGRAM_LDFLAGS", moz_program_ldflags) diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure index 892faaf..e4e50bf 100644 --- a/build/moz.configure/init.configure +++ b/build/moz.configure/init.configure @@ -519,6 +519,8 @@ def split_triplet(triplet, allow_wasi=False): canonical_os = canonical_kernel = "DragonFly" elif os.startswith("freebsd"): canonical_os = canonical_kernel = "FreeBSD" + elif os.startswith("haiku"): + canonical_os = canonical_kernel = "Haiku" elif os.startswith("netbsd"): canonical_os = canonical_kernel = "NetBSD" elif os.startswith("openbsd"): @@ -947,6 +949,15 @@ def target_is_freebsd(target): set_define("XP_FREEBSD", target_is_freebsd) +@depends(target) +def target_is_haiku(target): + if target.kernel == "Haiku": + return True + + +set_define("XP_HAIKU", target_is_haiku) + + @depends(target) def target_is_solaris(target): if target.kernel == "SunOS": diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure index 4706133..842f545 100644 --- a/build/moz.configure/toolchain.configure +++ b/build/moz.configure/toolchain.configure @@ -2921,7 +2921,7 @@ def security_hardening_cflags( if ( c_compiler.type == "clang" and c_compiler.version >= "11.0.1" - and target.os not in ("WINNT", "OSX", "OpenBSD") + and target.os not in ("WINNT", "OSX", "OpenBSD", "Haiku") and target.cpu in ("x86", "x86_64", "ppc64", "s390x") ): flags.append("-fstack-clash-protection") diff --git a/config/makefiles/rust.mk b/config/makefiles/rust.mk index c18221d..94d64c5 100644 --- a/config/makefiles/rust.mk +++ b/config/makefiles/rust.mk @@ -134,6 +134,10 @@ ifdef DEVELOPER_OPTIONS rustflags_override += -Clto=off endif +ifeq ($(OS_ARCH), Haiku) +rustflags_override += -Clto=off +endif + ifdef MOZ_USING_SCCACHE export RUSTC_WRAPPER=$(CCACHE) endif diff --git a/config/system-headers.mozbuild b/config/system-headers.mozbuild index e74e125..1655e23 100644 --- a/config/system-headers.mozbuild +++ b/config/system-headers.mozbuild @@ -864,7 +864,6 @@ system_headers = [ "sys/shm.h", "sys/siginfo.h", "sys/signal.h", - "sys/single_threaded.h", "sys/socket.h", "sys/sockio.h", "sys/sparc/frame.h", diff --git a/dom/events/ShortcutKeyDefinitions.cpp b/dom/events/ShortcutKeyDefinitions.cpp index 3f34f45..97b7c98 100644 --- a/dom/events/ShortcutKeyDefinitions.cpp +++ b/dom/events/ShortcutKeyDefinitions.cpp @@ -435,13 +435,13 @@ ShortcutKeyData ShortcutKeys::sBrowserHandlers[] = { {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectWordPrevious"}, // Android, Emacs {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectWordNext"}, // Android, Emacs #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS -#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK) +#if defined(XP_WIN) || (defined(MOZ_WIDGET_GTK) && !defined(XP_HAIKU)) {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_moveLeft2"}, // Win, Linux {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_moveRight2"}, // Win, Linux {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectLeft2"}, // Win, Linux {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectRight2"}, // Win, Linux #endif // XP_WIN || MOZ_WIDGET_GTK -#if defined(MOZ_WIDGET_COCOA) +#if defined(MOZ_WIDGET_COCOA) || defined(XP_HAIKU) {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_moveLeft2"}, // macOS {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_moveRight2"}, // macOS {u"keypress", u"VK_LEFT", nullptr, u"alt,shift", u"cmd_selectLeft2"}, // macOS diff --git a/dom/media/CallbackThreadRegistry.cpp b/dom/media/CallbackThreadRegistry.cpp index 4a1ec72..fc70f51 100644 --- a/dom/media/CallbackThreadRegistry.cpp +++ b/dom/media/CallbackThreadRegistry.cpp @@ -97,7 +97,9 @@ void CallbackThreadRegistry::Unregister(ProfilerThreadId aThreadId) { return; } } +#ifndef XP_HAIKU MOZ_ASSERT_UNREACHABLE("Current thread was not registered"); +#endif } } // namespace mozilla diff --git a/dom/media/webrtc/transport/common.build b/dom/media/webrtc/transport/common.build index 6f89323..1e13b49 100644 --- a/dom/media/webrtc/transport/common.build +++ b/dom/media/webrtc/transport/common.build @@ -62,6 +62,11 @@ if CONFIG["OS_TARGET"] in ["Darwin", "DragonFly", "FreeBSD", "NetBSD", "OpenBSD" LOCAL_INCLUDES += [ "/dom/media/webrtc/transport/third_party/nrappkit/src/port/darwin/include", ] +elif CONFIG["OS_TARGET"] == "Haiku": + DEFINES["HAIKU"] = True + LOCAL_INCLUDES += [ + "/dom/media/webrtc/transport/third_party/nrappkit/src/port/haiku/include", + ] elif CONFIG["OS_TARGET"] == "Linux": DEFINES["LINUX"] = True LOCAL_INCLUDES += [ diff --git a/dom/media/webrtc/transport/third_party/nICEr/nicer.gyp b/dom/media/webrtc/transport/third_party/nICEr/nicer.gyp index e9c72b5..3dadeea 100644 --- a/dom/media/webrtc/transport/third_party/nICEr/nicer.gyp +++ b/dom/media/webrtc/transport/third_party/nICEr/nicer.gyp @@ -7,7 +7,8 @@ # { 'variables' : { - 'have_ethtool_cmd_speed_hi%': 1 + 'have_ethtool_cmd_speed_hi%': 1, + 'OS' : 'haiku' }, 'targets' : [ { @@ -174,6 +175,38 @@ ], }], + ## Haiku + [ 'OS == "haiku"', { + 'cflags_mozilla': [ + '-Wall', + '-Wno-parentheses', + '-Wno-strict-prototypes', + '-Wmissing-prototypes', + '-Wno-format', + '-Wno-format-security', + ], + 'defines' : [ + 'HAIKU', + 'HAVE_LIBM=1', + 'HAVE_STRDUP=1', + 'HAVE_STRLCPY=1', + 'HAVE_SYS_TIME_H=1', + 'HAVE_VFPRINTF=1', + 'NEW_STDIO' + 'RETSIGTYPE=void', + 'TIME_WITH_SYS_TIME_H=1', + '__UNUSED__=__attribute__((unused))', + 'NO_REG_RPC' + ], + + 'include_dirs': [ + '../nrappkit/src/port/haiku/include' + ], + + 'sources': [ + ], + }], + ## Win [ 'OS == "win"', { 'defines' : [ diff --git a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs.c b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs.c index 4491b2b..5a6fb6b 100644 --- a/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs.c +++ b/dom/media/webrtc/transport/third_party/nICEr/src/stun/addrs.c @@ -211,8 +211,12 @@ nr_stun_get_addrs(nr_local_addr addrs[], int maxaddrs, int *count) if (maxaddrs > 0) { memset(addrs, 0, maxaddrs * sizeof(nr_local_addr)); } - +#if defined(HAIKU) + count = 0; + _status = R_INTERNAL; +#else _status = stun_getaddrs_filtered(addrs, maxaddrs, count); +#endif for (i = 0; i < *count; ++i) { nr_local_addr_fmt_info_string(addrs+i,typestr,sizeof(typestr)); diff --git a/dom/media/webrtc/transport/third_party/nICEr/src/stun/stun.h b/dom/media/webrtc/transport/third_party/nICEr/src/stun/stun.h index a32751d..ca054e0 100644 --- a/dom/media/webrtc/transport/third_party/nICEr/src/stun/stun.h +++ b/dom/media/webrtc/transport/third_party/nICEr/src/stun/stun.h @@ -53,9 +53,13 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include #endif #include +#ifdef HAIKU +#include +#else #ifndef LINUX #include #endif +#endif #include #include #endif diff --git a/dom/media/webrtc/transport/third_party/nrappkit/nrappkit.gyp b/dom/media/webrtc/transport/third_party/nrappkit/nrappkit.gyp index 3faf272..0b007ea 100644 --- a/dom/media/webrtc/transport/third_party/nrappkit/nrappkit.gyp +++ b/dom/media/webrtc/transport/third_party/nrappkit/nrappkit.gyp @@ -6,6 +6,9 @@ # # { + 'variables' : { + 'OS' : 'haiku' + }, 'targets' : [ { 'target_name' : 'nrappkit', @@ -127,6 +130,39 @@ ], }], + ## Haiku + [ 'OS == "haiku"', { + 'cflags_mozilla': [ + '-Wall', + '-Wno-parentheses', + '-Wno-strict-prototypes', + '-Wmissing-prototypes', + '-Wno-format', + '-Wno-format-security', + ], + 'defines' : [ + 'HAIKU', + 'HAVE_LIBM=1', + 'HAVE_STRDUP=1', + 'HAVE_STRLCPY=1', + 'HAVE_SYS_TIME_H=1', + 'HAVE_VFPRINTF=1', + 'NEW_STDIO' + 'RETSIGTYPE=void', + 'TIME_WITH_SYS_TIME_H=1', + '__UNUSED__=__attribute__((unused))', + 'NO_REG_RPC' + ], + + 'include_dirs': [ + 'src/port/haiku/include' + ], + + 'sources': [ + './src/port/haiku/include/csi_platform.h', + ], + }], + ## Win [ 'OS == "win"', { 'defines' : [ diff --git a/dom/media/webrtc/transport/third_party/nrappkit/src/log/r_log.c b/dom/media/webrtc/transport/third_party/nrappkit/src/log/r_log.c index cbf974f..35fd277 100644 --- a/dom/media/webrtc/transport/third_party/nrappkit/src/log/r_log.c +++ b/dom/media/webrtc/transport/third_party/nrappkit/src/log/r_log.c @@ -36,7 +36,7 @@ ekr@rtfm.com Mon Dec 3 15:24:38 2001 */ -#ifdef LINUX +#if defined(LINUX) || defined(HAIKU) #define _BSD_SOURCE #define _DEFAULT_SOURCE #endif diff --git a/dom/media/webrtc/transport/third_party/nrappkit/src/port/haiku/include/csi_platform.h b/dom/media/webrtc/transport/third_party/nrappkit/src/port/haiku/include/csi_platform.h new file mode 100644 index 0000000..bc8ad50 --- /dev/null +++ b/dom/media/webrtc/transport/third_party/nrappkit/src/port/haiku/include/csi_platform.h @@ -0,0 +1,58 @@ +/** + platform.h + + + Copyright (C) 2005, Network Resonance, Inc. + Copyright (C) 2006, Network Resonance, Inc. + All Rights Reserved + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. 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. + 3. Neither the name of Network Resonance, Inc. nor the name of any + contributors to this software may be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``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 THE COPYRIGHT OWNER OR CONTRIBUTORS 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. + + + briank@network-resonance.com Tue Mar 15 14:28:12 PST 2005 + */ + + +#ifndef _platform_h +#define _platform_h + +#include +#include + +#define STDIO_BYTES_BUFFERED(fp) (fp->_r) + +#ifdef NR_SOCKET_IS_VOID_PTR +typedef void* NR_SOCKET; +#else +typedef int NR_SOCKET; +#define NR_SOCKET_READ(sock,buf,count) read((sock),(buf),(count)) +#define NR_SOCKET_WRITE(sock,buf,count) write((sock),(buf),(count)) +#define NR_SOCKET_CLOSE(sock) close(sock) +#endif + +#endif + diff --git a/gfx/angle/checkout/src/common/system_utils_posix.cpp b/gfx/angle/checkout/src/common/system_utils_posix.cpp index ab0faee..f9c9389 100644 --- a/gfx/angle/checkout/src/common/system_utils_posix.cpp +++ b/gfx/angle/checkout/src/common/system_utils_posix.cpp @@ -201,7 +201,9 @@ void *OpenSystemLibraryWithExtensionAndGetError(const char *libraryName, int extraFlags = 0; if (searchType == SearchType::AlreadyLoaded) { +#ifndef __HAIKU__ extraFlags = RTLD_NOLOAD; +#endif } std::string fullPath = directory + libraryName; diff --git a/gfx/layers/wr/IpcResourceUpdateQueue.cpp b/gfx/layers/wr/IpcResourceUpdateQueue.cpp index 1c04ba7..c6257e0 100644 --- a/gfx/layers/wr/IpcResourceUpdateQueue.cpp +++ b/gfx/layers/wr/IpcResourceUpdateQueue.cpp @@ -50,7 +50,8 @@ layers::OffsetRange ShmSegmentsWriter::Write(Range aBytes) { const size_t start = mCursor; const size_t length = aBytes.length(); - if (length >= mChunkSize * 4) { +// if (length >= mChunkSize * 4) { + if (length > 0) { auto range = AllocLargeChunk(length); if (range.length()) { // Allocation was successful diff --git a/gfx/skia/skia/include/private/base/SkTArray.h b/gfx/skia/skia/include/private/base/SkTArray.h index a0ec09e..59d98a3 100644 --- a/gfx/skia/skia/include/private/base/SkTArray.h +++ b/gfx/skia/skia/include/private/base/SkTArray.h @@ -562,7 +562,7 @@ private: // Note for 32-bit machines kMaxCapacity will be <= SIZE_MAX. For 64-bit machines it will // just be INT_MAX if the sizeof(T) < 2^32. - static constexpr int kMaxCapacity = SkToInt(std::min(SIZE_MAX / sizeof(T), (size_t)INT_MAX)); + static constexpr int kMaxCapacity = SkToInt(std::min((size_t)SIZE_MAX / sizeof(T), (size_t)INT_MAX)); void setDataFromBytes(SkSpan allocation) { T* data = TCast(allocation.data()); diff --git a/image/SurfaceCache.cpp b/image/SurfaceCache.cpp index c01b18e..4e47963 100644 --- a/image/SurfaceCache.cpp +++ b/image/SurfaceCache.cpp @@ -1625,7 +1625,7 @@ void SurfaceCache::Initialize() { // Compute the size of the surface cache. uint64_t memorySize = PR_GetPhysicalMemorySize(); if (memorySize == 0) { -#if !defined(__DragonFly__) +#if !defined(__DragonFly__) && !defined(__HAIKU__) MOZ_ASSERT_UNREACHABLE("PR_GetPhysicalMemorySize not implemented here"); #endif memorySize = 256 * 1024 * 1024; // Fall back to 256MB. diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build index 8454c22..1daaa7f 100644 --- a/ipc/chromium/moz.build +++ b/ipc/chromium/moz.build @@ -112,7 +112,7 @@ if CONFIG["TARGET_OS"] == "iOS": "src/base/process_util_ios.cpp", ] -if CONFIG["TARGET_KERNEL"] in ("DragonFly", "FreeBSD", "NetBSD", "OpenBSD"): +if CONFIG["TARGET_KERNEL"] in ("DragonFly", "FreeBSD", "NetBSD", "OpenBSD", "Haiku"): SOURCES += [ "src/base/process_util_linux.cc", "src/base/time_posix.cc", diff --git a/ipc/chromium/src/base/message_loop.cc b/ipc/chromium/src/base/message_loop.cc index de843ad..f5ca10f 100644 --- a/ipc/chromium/src/base/message_loop.cc +++ b/ipc/chromium/src/base/message_loop.cc @@ -29,7 +29,7 @@ # include "base/message_pump_libevent.h" #endif #if defined(XP_LINUX) || defined(__DragonFly__) || defined(XP_FREEBSD) || \ - defined(XP_NETBSD) || defined(XP_OPENBSD) + defined(XP_NETBSD) || defined(XP_OPENBSD) || defined(XP_HAIKU) # if defined(MOZ_WIDGET_GTK) # include "base/message_pump_glib.h" # endif @@ -280,7 +280,7 @@ MessageLoop::MessageLoop(Type type, nsISerialEventTarget* aEventTarget) # if defined(XP_DARWIN) pump_ = base::MessagePumpMac::Create(); # elif defined(XP_LINUX) || defined(__DragonFly__) || defined(XP_FREEBSD) || \ - defined(XP_NETBSD) || defined(XP_OPENBSD) + defined(XP_NETBSD) || defined(XP_OPENBSD) || defined(XP_HAIKU) pump_ = new base::MessagePumpForUI(); # endif // XP_LINUX } else if (type_ == TYPE_IO) { diff --git a/ipc/chromium/src/base/platform_thread.h b/ipc/chromium/src/base/platform_thread.h index f3a65e8..40ad58b 100644 --- a/ipc/chromium/src/base/platform_thread.h +++ b/ipc/chromium/src/base/platform_thread.h @@ -24,7 +24,7 @@ typedef void* PlatformThreadHandle; // HANDLE #else # include typedef pthread_t PlatformThreadHandle; -# if defined(XP_LINUX) || defined(XP_OPENBSD) || defined(XP_SOLARIS) || \ +# if defined(XP_LINUX) || defined(XP_OPENBSD) || defined(XP_SOLARIS) || defined(XP_HAIKU) || \ defined(__GLIBC__) # include typedef pid_t PlatformThreadId; diff --git a/ipc/chromium/src/base/platform_thread_posix.cc b/ipc/chromium/src/base/platform_thread_posix.cc index d28abbc..af56adf 100644 --- a/ipc/chromium/src/base/platform_thread_posix.cc +++ b/ipc/chromium/src/base/platform_thread_posix.cc @@ -16,6 +16,8 @@ #elif defined(XP_LINUX) # include # include +#elif defined(__HAIKU__) +# include #endif #if !defined(XP_DARWIN) @@ -60,6 +62,8 @@ PlatformThreadId PlatformThread::CurrentId() { return lwp_gettid(); #elif defined(XP_FREEBSD) return pthread_getthreadid_np(); +#elif defined(__HAIKU__) + return find_thread(NULL); #endif } diff --git a/ipc/chromium/src/base/process_util_posix.cc b/ipc/chromium/src/base/process_util_posix.cc index f9ad5f6..5fd15e1 100644 --- a/ipc/chromium/src/base/process_util_posix.cc +++ b/ipc/chromium/src/base/process_util_posix.cc @@ -125,7 +125,7 @@ void CloseSuperfluousFds(void* aCtx, bool (*aShouldPreserve)(void*, int)) { #if defined(ANDROID) static const rlim_t kSystemDefaultMaxFds = 1024; static const char kFDDir[] = "/proc/self/fd"; -#elif defined(XP_LINUX) || defined(XP_SOLARIS) +#elif defined(XP_LINUX) || defined(XP_SOLARIS) || defined(XP_HAIKU) static const rlim_t kSystemDefaultMaxFds = 8192; static const char kFDDir[] = "/proc/self/fd"; #elif defined(XP_DARWIN) diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc index 85911fe..d8e4a51 100644 --- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc +++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc @@ -291,6 +291,18 @@ bool ChannelPosix::ProcessIncomingMessages() { if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) { const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0); DCHECK(payload_len % sizeof(int) == 0); +#ifdef XP_HAIKU + if (num_wire_fds > 0) { + if (input_overflow_fds_.empty()) { + input_overflow_fds_ = std::vector(&wire_fds[0], &wire_fds[num_wire_fds]); + } else { + const size_t prev_size = input_overflow_fds_.size(); + input_overflow_fds_.resize(prev_size + num_wire_fds); + memcpy(&input_overflow_fds_[prev_size], wire_fds, + num_wire_fds * sizeof(int)); + } + } +#endif wire_fds = reinterpret_cast(CMSG_DATA(cmsg)); num_wire_fds = payload_len / 4; @@ -302,7 +314,9 @@ bool ChannelPosix::ProcessIncomingMessages() { IGNORE_EINTR(close(wire_fds[i])); return false; } +#ifndef XP_HAIKU break; +#endif } } } diff --git a/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc b/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc index 1bb8b31..c8aa63e 100644 --- a/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc +++ b/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc @@ -43,7 +43,7 @@ # error Unsupported OS #endif -#if !defined(XP_DARWIN) +#if !defined(XP_DARWIN) && !defined(XP_HAIKU) // Linux, {Free,Net,Open}BSD, and Solaris; but not macOS, yet. # define HAVE_PIPE2 1 #endif diff --git a/ipc/glue/GeckoChildProcessHost.cpp b/ipc/glue/GeckoChildProcessHost.cpp index ef75406..02a76ce 100644 --- a/ipc/glue/GeckoChildProcessHost.cpp +++ b/ipc/glue/GeckoChildProcessHost.cpp @@ -1129,7 +1129,7 @@ Result BaseProcessLauncher::DoSetup() { #if defined(MOZ_WIDGET_COCOA) || defined(XP_WIN) geckoargs::sCrashReporter.Put(CrashReporter::GetChildNotificationPipe(), mChildArgs); -#elif defined(XP_UNIX) && !defined(XP_IOS) +#elif defined(XP_UNIX) && !defined(XP_IOS) && !defined(XP_HAIKU) UniqueFileHandle childCrashFd = CrashReporter::GetChildNotificationPipe(); if (!childCrashFd) { return Err(LaunchError("DuplicateFileHandle failed")); diff --git a/js/src/threading/moz.build b/js/src/threading/moz.build index 78e4cd1..15f60e3 100644 --- a/js/src/threading/moz.build +++ b/js/src/threading/moz.build @@ -34,6 +34,11 @@ elif CONFIG["OS_ARCH"] == "WASI": "noop/NoopThread.cpp", ] else: + if CONFIG["OS_ARCH"] == "Haiku": + DEFINES["_GNU_SOURCE"] = True + OS_LIBS += [ + "gnu", + ] UNIFIED_SOURCES += [ "posix/CpuCount.cpp", "posix/PosixThread.cpp", diff --git a/js/src/util/NativeStack.cpp b/js/src/util/NativeStack.cpp index e77289c..4946275 100644 --- a/js/src/util/NativeStack.cpp +++ b/js/src/util/NativeStack.cpp @@ -31,6 +31,9 @@ # include # define gettid() static_cast(syscall(__NR_gettid)) # endif +# if defined(XP_HAIKU) +# include +# endif #else # error "Unsupported platform" #endif @@ -116,6 +119,14 @@ void* js::GetNativeStackBaseImpl() { # endif } +#elif defined(XP_HAIKU) + +void* js::GetNativeStackBaseImpl() { + thread_info info; + get_thread_info(find_thread(NULL), &info); + return info.stack_end; +} + #elif defined(__wasi__) // Since we rearrange the layout for wasi via --stack-first flag for the linker diff --git a/js/src/vm/DateTime.cpp b/js/src/vm/DateTime.cpp index 12cf871..a8a7750 100644 --- a/js/src/vm/DateTime.cpp +++ b/js/src/vm/DateTime.cpp @@ -10,6 +10,15 @@ # include "mozilla/intl/ICU4CGlue.h" # include "mozilla/intl/TimeZone.h" #endif + +#if JS_HAS_INTL_API && defined(__HAIKU__) +# pragma GCC visibility push(default) +# include +# include +# include +# pragma GCC visibility pop +#endif + #include "mozilla/ScopeExit.h" #include "mozilla/Span.h" #include "mozilla/TextUtils.h" @@ -811,6 +820,21 @@ static bool ReadTimeZoneLink(std::string_view tz, #endif /* JS_HAS_INTL_API */ void js::DateTimeInfo::internalResyncICUDefaultTimeZone() { +#if defined(__HAIKU__) + BTimeZone timeZone; + if (BLocaleRoster::Default()->GetDefaultTimeZone(&timeZone) == B_OK) { + BString timeZoneID = timeZone.ID(); + if (timeZoneID.Length() > 0) { + mozilla::Span tzid(timeZoneID.String(), + timeZoneID.Length()); + auto result = mozilla::intl::TimeZone::SetDefaultTimeZone(tzid); + if (result.isOk() && result.unwrap()) { + return; + } + } + } + (void)mozilla::intl::TimeZone::SetDefaultTimeZoneFromHostTimeZone(); +#else #if JS_HAS_INTL_API if (const char* tzenv = std::getenv("TZ")) { std::string_view tz(tzenv); @@ -873,5 +897,6 @@ void js::DateTimeInfo::internalResyncICUDefaultTimeZone() { // Intentionally ignore any errors, because we don't have a good way to report // errors from this function. (void)mozilla::intl::TimeZone::SetDefaultTimeZoneFromHostTimeZone(); -#endif +#endif /* JS_HAS_INTL_API */ +#endif /* __HAIKU__ */ } diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp index 91c620a..cfef64d 100644 --- a/js/src/wasm/WasmSignalHandlers.cpp +++ b/js/src/wasm/WasmSignalHandlers.cpp @@ -238,6 +238,17 @@ using namespace js::wasm; # define R01_sig(p) ((p)->uc_mcontext.mc_gpr[1]) # define R32_sig(p) ((p)->uc_mcontext.mc_srr0) # endif +# elif defined(XP_HAIKU) +# define EIP_sig(p) ((p)->uc_mcontext.eip) +# define EBP_sig(p) ((p)->uc_mcontext.ebp) +# define ESP_sig(p) ((p)->uc_mcontext.esp) +# define RIP_sig(p) ((p)->uc_mcontext.rip) +# define RSP_sig(p) ((p)->uc_mcontext.rsp) +# define RBP_sig(p) ((p)->uc_mcontext.rbp) +# define R11_sig(p) ((p)->uc_mcontext.r11) +# define R13_sig(p) ((p)->uc_mcontext.r13) +# define R14_sig(p) ((p)->uc_mcontext.r14) +# define R15_sig(p) ((p)->uc_mcontext.r15) # elif defined(XP_DARWIN) # define EIP_sig(p) ((p)->thread.uts.ts32.__eip) # define EBP_sig(p) ((p)->thread.uts.ts32.__ebp) diff --git a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h index 7d63f47..f72e3bd 100644 --- a/media/ffvpx/config_unix64.h +++ b/media/ffvpx/config_unix64.h @@ -291,7 +291,7 @@ #define HAVE_COMMANDLINETOARGVW 0 #define HAVE_FCNTL 1 #define HAVE_GETADDRINFO 1 -#define HAVE_GETAUXVAL 1 +#define HAVE_GETAUXVAL 0 #define HAVE_GETENV 1 #define HAVE_GETHRTIME 0 #define HAVE_GETOPT 1 @@ -319,7 +319,7 @@ #define HAVE_NANOSLEEP 1 #define HAVE_PEEKNAMEDPIPE 0 #define HAVE_PTHREAD_CANCEL 1 -#define HAVE_SCHED_GETAFFINITY 1 +#define HAVE_SCHED_GETAFFINITY 0 #define HAVE_SECITEMIMPORT 0 #define HAVE_SETCONSOLETEXTATTRIBUTE 0 #define HAVE_SETCONSOLECTRLHANDLER 0 diff --git a/media/libcubeb/src/cubeb.c b/media/libcubeb/src/cubeb.c index 0511ad9..1e0b48e 100644 --- a/media/libcubeb/src/cubeb.c +++ b/media/libcubeb/src/cubeb.c @@ -79,6 +79,10 @@ oss_init(cubeb ** context, char const * context_name); int aaudio_init(cubeb ** context, char const * context_name); #endif +#if defined(USE_HAIKU) +int +haiku_init(cubeb ** context, char const * context_name); +#endif #if defined(USE_AUDIOTRACK) int audiotrack_init(cubeb ** context, char const * context_name); @@ -199,6 +203,10 @@ cubeb_init(cubeb ** context, char const * context_name, } else if (!strcmp(backend_name, "aaudio")) { #if defined(USE_AAUDIO) init_oneshot = aaudio_init; +#endif + } else if (!strcmp(backend_name, "haiku")) { +#if defined(USE_HAIKU) + init_oneshot = haiku_init; #endif } else if (!strcmp(backend_name, "audiotrack")) { #if defined(USE_AUDIOTRACK) @@ -255,6 +263,9 @@ cubeb_init(cubeb ** context, char const * context_name, #if defined(USE_AAUDIO) aaudio_init, #endif +#if defined(USE_HAIKU) + haiku_init, +#endif #if defined(USE_OPENSL) opensl_init, #endif diff --git a/media/libcubeb/src/cubeb_haiku.cpp b/media/libcubeb/src/cubeb_haiku.cpp new file mode 100644 index 0000000..d2385d7 --- /dev/null +++ b/media/libcubeb/src/cubeb_haiku.cpp @@ -0,0 +1,952 @@ +/* + * Copyright © 2024-2025 Troeglazov Gerasim + * + * This program is made available under an ISC-style license. See the + * accompanying file LICENSE for details. + */ + +#include "cubeb-internal.h" +#include "cubeb/cubeb.h" +#include "cubeb_utils.h" +#include "cubeb_ringbuffer.h" + +#include +#include +#include +#include +#include +#include + +// Workaround for gcc_hidden.h hack of libxul.so +#pragma GCC visibility push(default) + +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#pragma GCC visibility pop + +static const int MAX_CHANNELS = 2; +static const char DEFAULT_CONTEXT_NAME[] = "Cubeb"; + +static const char HAIKU_DEFAULT_IN[] = "Default Input"; +static const char HAIKU_DEFAULT_OUT[] = "Default Output"; + +#define HAIKU_DEFAULT_IN_ID ((cubeb_devid)(uintptr_t)HAIKU_DEFAULT_IN) +#define HAIKU_DEFAULT_OUT_ID ((cubeb_devid)(uintptr_t)HAIKU_DEFAULT_OUT) + +// Function Declarations +extern "C" { +int haiku_init(cubeb ** context, char const * context_name); +} +static void haiku_destroy(cubeb* context); +static char const* haiku_get_backend_id(cubeb* context); +static int haiku_get_max_channel_count(cubeb* ctx, uint32_t* max_channels); +static int haiku_get_min_latency(cubeb* ctx, cubeb_stream_params params, uint32_t* latency_frames); +static int haiku_get_preferred_sample_rate(cubeb* ctx, uint32_t* rate); +static int haiku_stream_init(cubeb* context, + cubeb_stream** stream, + char const* stream_name, + cubeb_devid input_device, + cubeb_stream_params* input_stream_params, + cubeb_devid output_device, + cubeb_stream_params* output_stream_params, + unsigned int latency_frames, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, + void* user_ptr); +static void haiku_stream_destroy(cubeb_stream* stream); +static int haiku_stream_start(cubeb_stream* stream); +static int haiku_stream_stop(cubeb_stream* stream); +static int haiku_stream_get_position(cubeb_stream* stream, uint64_t* position); +static int haiku_stream_get_latency(cubeb_stream* stream, uint32_t* latency_frames); +static int haiku_stream_set_volume(cubeb_stream* stream, float volume); +static int haiku_stream_get_current_device(cubeb_stream* stream, cubeb_device** const device); +static int haiku_enumerate_devices(cubeb* context, cubeb_device_type type, cubeb_device_collection* collection); +static int haiku_device_collection_destroy(cubeb* context, cubeb_device_collection* collection); + +// Cubeb Ops Table +static struct cubeb_ops const cubeb_haiku_ops = { + .init = haiku_init, + .get_backend_id = haiku_get_backend_id, + .get_max_channel_count = haiku_get_max_channel_count, + .get_min_latency = haiku_get_min_latency, + .get_preferred_sample_rate = haiku_get_preferred_sample_rate, + .get_supported_input_processing_params = NULL, + .enumerate_devices = haiku_enumerate_devices, + .device_collection_destroy = haiku_device_collection_destroy, + .destroy = haiku_destroy, + .stream_init = haiku_stream_init, + .stream_destroy = haiku_stream_destroy, + .stream_start = haiku_stream_start, + .stream_stop = haiku_stream_stop, + .stream_get_position = haiku_stream_get_position, + .stream_get_latency = haiku_stream_get_latency, + .stream_set_volume = haiku_stream_set_volume, + .stream_set_name = NULL, + .stream_get_current_device = haiku_stream_get_current_device, + .stream_set_input_mute = NULL, + .stream_set_input_processing_params = NULL, + .stream_device_destroy = NULL, + .stream_register_device_changed_callback = NULL, + .register_device_collection_changed = NULL, +}; + +// Forward declaration for input thread function +static void* input_thread_func(void* user_data); + +// Stream and Context Structs +struct cubeb_stream { + /* Note: Must match cubeb_stream layout in cubeb.c. */ + cubeb* context; + void* user_ptr; + /**/ + + pthread_mutex_t mutex; + + cubeb_data_callback data_callback; + cubeb_state_callback state_callback; + + // Output related members + cubeb_stream_params output_params; + BSoundPlayer* sound_player; + media_raw_audio_format output_format_haiku; + uint64_t output_position; + bool output_pause; + float output_volume; + + // Input related members + cubeb_stream_params input_params; + AudioCapture* audio_capturer; + lock_free_audio_ring_buffer* input_ring_buffer; + float* input_temp_buffer; + size_t input_temp_buffer_frames; + bool input_enabled; + uint32_t input_channels_cubeb; + uint32_t input_channels_capture; + + // Input thread (for input-only streams) + pthread_t input_thread; + bool input_thread_running; + bool input_thread_created; + + char stream_name[256]; +}; + +struct cubeb { + struct cubeb_ops const* ops; + pthread_mutex_t mutex; + char context_name[256]; +}; + +// AudioCapture Callback (Input) +static void +haiku_audio_input_callback(const float* stereoData, size_t frameCount, void* userData) +{ + cubeb_stream* stm = static_cast(userData); + + if (!stm || !stm->input_enabled || !stm->input_ring_buffer) { + return; + } + + // AudioCapture always provides stereo (2 channels) + if (stm->input_channels_cubeb == 1 && stm->input_channels_capture == 2) { + float* mono_buffer = (float*)malloc(frameCount * sizeof(float)); + if (!mono_buffer) { + fprintf(stderr, "Cubeb Haiku: Failed to allocate mono buffer in capture callback!\n"); + return; + } + for (size_t i = 0; i < frameCount; ++i) { + mono_buffer[i] = stereoData[i * 2]; // Take left channel + } + int written_frames = stm->input_ring_buffer->enqueue(mono_buffer, frameCount); + free(mono_buffer); + if (written_frames != (int)frameCount) { + fprintf(stderr, "Cubeb Haiku: Input ring buffer enqueue failed/partial (%d/%zu frames)\n", written_frames, frameCount); + } + } else { + int written_frames = stm->input_ring_buffer->enqueue(const_cast(stereoData), frameCount); + if (written_frames != (int)frameCount) { + fprintf(stderr, "Cubeb Haiku: Input ring buffer enqueue failed/partial (%d/%zu frames)\n", written_frames, frameCount); + } + } +} + +// BSoundPlayer Callback (Output) +static void +haiku_audio_output_callback(void* cookie, void* buffer, size_t size, const media_raw_audio_format& format) +{ + cubeb_stream* stm = static_cast(cookie); + + if (buffer == nullptr || cookie == nullptr) { + fprintf(stderr, "Cubeb Haiku: Invalid args in output callback\n"); + return; + } + + long output_frames = 0; + uint32_t output_bytes_per_frame = 0; + if (format.channel_count > 0) { + if (format.format == media_raw_audio_format::B_AUDIO_FLOAT) { + output_bytes_per_frame = format.channel_count * sizeof(float); + } else { + fprintf(stderr, "Cubeb Haiku: Unexpected output format in callback: 0x%x\n", format.format); + memset(buffer, 0, size); // Silence on error + return; + } + if (output_bytes_per_frame > 0) { + output_frames = size / output_bytes_per_frame; + } + } + + if (output_frames <= 0) { + fprintf(stderr, "Cubeb Haiku: Zero frames requested in output callback\n"); + return; + } + + if (stm->output_pause) { + memset(buffer, 0, size); + return; + } + + if (pthread_mutex_lock(&stm->mutex) != 0) { + // Failed to lock, mutex error. Output silence + fprintf(stderr, "Cubeb Haiku: Mutex lock failed in output callback\n"); + memset(buffer, 0, size); + return; + } + + void* input_buffer_ptr = nullptr; + long input_frames_read = 0; // Frames read from ring buffer + + // Handle input if enabled + if (stm->input_enabled && stm->input_ring_buffer) { + // Ensure temporary input buffer is large enough + if (stm->input_temp_buffer_frames < (size_t)output_frames) { + free(stm->input_temp_buffer); + // Allocate based on channels requested by cubeb + stm->input_temp_buffer = (float*)malloc(output_frames * stm->input_params.channels * sizeof(float)); + if (!stm->input_temp_buffer) { + fprintf(stderr, "Cubeb Haiku: Failed to allocate input temp buffer\n"); + stm->input_temp_buffer_frames = 0; + memset(buffer, 0, size); // Output silence on error + pthread_mutex_unlock(&stm->mutex); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + return; + } + stm->input_temp_buffer_frames = output_frames; + } + + // Dequeue data from the ring buffer into the temp buffer + input_frames_read = stm->input_ring_buffer->dequeue(stm->input_temp_buffer, output_frames); + + if (input_frames_read < output_frames) { + size_t remaining_frames = output_frames - input_frames_read; + size_t offset_samples = input_frames_read * stm->input_params.channels; + memset(stm->input_temp_buffer + offset_samples, 0, remaining_frames * stm->input_params.channels * sizeof(float)); + input_frames_read = output_frames; // We filled the gap with silence + } + input_buffer_ptr = stm->input_temp_buffer; + } + + // Call the user's data callback + long frames_processed = stm->data_callback(stm, stm->user_ptr, + input_buffer_ptr, + buffer, + output_frames); + + // Check callback result + if (frames_processed < 0 || frames_processed > output_frames) { + memset(buffer, 0, size); + stm->output_position += output_frames; + pthread_mutex_unlock(&stm->mutex); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + fprintf(stderr, "Cubeb Haiku: User callback error (%ld/%ld frames)\n", frames_processed, output_frames); + return; + } + + if (frames_processed < output_frames) { + size_t remaining_frames = output_frames - frames_processed; + size_t offset_bytes = frames_processed * output_bytes_per_frame; + memset((char*)buffer + offset_bytes, 0, remaining_frames * output_bytes_per_frame); + } + + stm->output_position += output_frames; + pthread_mutex_unlock(&stm->mutex); +} + +// Input Thread Function (for Input-Only streams) +static void* input_thread_func(void* user_data) { + cubeb_stream* stm = static_cast(user_data); + if (!stm || !stm->input_enabled || !stm->input_ring_buffer) { + return NULL; + } + + // Target chunk size in frames (e.g., ~20ms) + unsigned int frames_per_iteration = (stm->input_params.rate * 20) / 1000; + if (frames_per_iteration < 128) frames_per_iteration = 128; + + // Allocate buffer for reading data from ring buffer + float* read_buffer = (float*)malloc(frames_per_iteration * stm->input_params.channels * sizeof(float)); + if (!read_buffer) { + fprintf(stderr, "Cubeb Haiku: Failed to allocate read buffer for input thread\n"); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + stm->input_thread_running = false; + return NULL; + } + + printf("Cubeb Haiku: Input thread started (chunk size: %u frames)\n", frames_per_iteration); + + while (stm->input_thread_running) { + // Check available frames without blocking excessively + int frames_available = stm->input_ring_buffer->available_read(); + + if (frames_available >= (int)frames_per_iteration) { + // Dequeue data + int frames_read = stm->input_ring_buffer->dequeue(read_buffer, frames_per_iteration); + + if (frames_read > 0) { + // Lock mutex before calling user callback + if (pthread_mutex_lock(&stm->mutex) == 0) { + long frames_processed = stm->data_callback(stm, stm->user_ptr, + read_buffer, + nullptr, + frames_read); + pthread_mutex_unlock(&stm->mutex); + + if (frames_processed < 0 || frames_processed > frames_read) { + fprintf(stderr, "Cubeb Haiku: User callback error in input thread (%ld/%d frames)\n", frames_processed, frames_read); + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + // Optional: Stop thread on error? + // stm->input_thread_running = false; + } + } else { + fprintf(stderr, "Cubeb Haiku: Mutex lock failed in input thread\n"); + } + } + } else { + // Not enough data, wait a bit + usleep(5 * 1000); // Sleep 5ms + } + } + + printf("Cubeb Haiku: Input thread stopping.\n"); + free(read_buffer); + return NULL; +} + + +// Utility Functions + +static size_t calculate_haiku_buffer_size(cubeb_stream_params* params, unsigned int latency_frames) +{ + if (!params || params->rate == 0 || params->channels == 0) + return 2048; + + return 1024 * params->channels; +} + + +static media_raw_audio_format +cubeb_format_to_haiku(cubeb_stream_params *params, size_t buffer_size_bytes) +{ + media_raw_audio_format format; + memset(&format, 0, sizeof(format)); + if (!params) return format; + + format.frame_rate = params->rate; + format.channel_count = params->channels; + format.buffer_size = buffer_size_bytes; + format.byte_order = B_MEDIA_HOST_ENDIAN; + + if (params->format == CUBEB_SAMPLE_FLOAT32NE) { + format.format = media_raw_audio_format::B_AUDIO_FLOAT; + } else { + format.format = 0; // Mark as invalid/unsupported + } + return format; +} + +// Cubeb API Implementation + +int +haiku_init(cubeb** context, char const* context_name) +{ + *context = NULL; + cubeb* ctx = (cubeb*)calloc(1, sizeof(*ctx)); + if (!ctx) + return CUBEB_ERROR; + + ctx->ops = &cubeb_haiku_ops; + if (pthread_mutex_init(&ctx->mutex, NULL) != 0) { + free(ctx); + return CUBEB_ERROR; + } + + snprintf(ctx->context_name, sizeof(ctx->context_name), "%s", context_name ? context_name : DEFAULT_CONTEXT_NAME); + *context = ctx; + + return CUBEB_OK; +} + +static void +haiku_destroy(cubeb* context) +{ + if (!context) + return; + + pthread_mutex_destroy(&context->mutex); + free(context); +} + +static char const* +haiku_get_backend_id(cubeb* context) +{ + return "haiku"; +} + +static int +haiku_get_max_channel_count(cubeb* ctx, uint32_t* max_channels) +{ + *max_channels = MAX_CHANNELS; + return CUBEB_OK; +} + +static int +haiku_get_min_latency(cubeb* ctx, cubeb_stream_params params, uint32_t* latency_frames) +{ + if (params.rate == 0) + return CUBEB_ERROR_INVALID_PARAMETER; + + *latency_frames = (params.rate * 10) / 1000; // ~10ms + if (*latency_frames < 128) *latency_frames = 128; + + return CUBEB_OK; +} + +static int +haiku_get_preferred_sample_rate(cubeb* ctx, uint32_t* rate) +{ + *rate = 48000; + return CUBEB_OK; +} + +static int +haiku_stream_init(cubeb* context, + cubeb_stream** stream, + char const* stream_name, + cubeb_devid input_device, + cubeb_stream_params* input_stream_params, + cubeb_devid output_device, + cubeb_stream_params* output_stream_params, + unsigned int latency_frames, + cubeb_data_callback data_callback, + cubeb_state_callback state_callback, + void* user_ptr) +{ + if (!context || !stream || !data_callback || !state_callback) + return CUBEB_ERROR_INVALID_PARAMETER; + + if (!input_stream_params && !output_stream_params) + return CUBEB_ERROR_INVALID_PARAMETER; + + if (output_stream_params) { + if (output_stream_params->format != CUBEB_SAMPLE_FLOAT32NE) + return CUBEB_ERROR_INVALID_FORMAT; + if (output_stream_params->rate == 0 || output_stream_params->channels == 0 || output_stream_params->channels > MAX_CHANNELS) + return CUBEB_ERROR_INVALID_PARAMETER; + if (output_device != NULL && output_device != HAIKU_DEFAULT_OUT_ID) + return CUBEB_ERROR_DEVICE_UNAVAILABLE; + if (output_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) + return CUBEB_ERROR_NOT_SUPPORTED; + } + + if (input_stream_params) { + if (input_stream_params->format != CUBEB_SAMPLE_FLOAT32NE) + return CUBEB_ERROR_INVALID_FORMAT; + if (input_stream_params->rate == 0 || input_stream_params->channels == 0 || input_stream_params->channels > MAX_CHANNELS) + return CUBEB_ERROR_INVALID_PARAMETER; + if (input_device != NULL && input_device != HAIKU_DEFAULT_IN_ID) + return CUBEB_ERROR_DEVICE_UNAVAILABLE; + if (input_stream_params->prefs & CUBEB_STREAM_PREF_LOOPBACK) + return CUBEB_ERROR_NOT_SUPPORTED; + } + + if (input_stream_params && output_stream_params && input_stream_params->rate != output_stream_params->rate) { + fprintf(stderr, "Cubeb Haiku: Input/output rate mismatch not supported (%u != %u).\n", + input_stream_params->rate, output_stream_params->rate); + return CUBEB_ERROR_INVALID_PARAMETER; + } + + // Allocate Stream + *stream = NULL; + cubeb_stream* stm = reinterpret_cast(calloc(1, sizeof(*stm))); + if (!stm) + return CUBEB_ERROR; + + stm->context = context; + stm->user_ptr = user_ptr; + stm->data_callback = data_callback; + stm->state_callback = state_callback; + stm->output_volume = 1.0f; + stm->output_position = 0; + stm->sound_player = nullptr; + stm->audio_capturer = nullptr; + stm->input_ring_buffer = nullptr; + stm->input_temp_buffer = nullptr; + stm->input_temp_buffer_frames = 0; + stm->input_thread_created = false; + stm->input_thread_running = false; + + pthread_mutex_lock(&context->mutex); + if (stream_name && strcmp(stream_name, "AudioStream") != 0) { + snprintf(stm->stream_name, sizeof(stm->stream_name), "%s", stream_name); + } else { + snprintf(stm->stream_name, sizeof(stm->stream_name), "%s", context->context_name); + } + pthread_mutex_unlock(&context->mutex); + + if (pthread_mutex_init(&stm->mutex, NULL) != 0) { + free(stm); + return CUBEB_ERROR; + } + + pthread_mutex_lock(&stm->mutex); + + // Configure Input + if (input_stream_params) { + stm->input_enabled = true; + stm->input_params = *input_stream_params; + stm->input_channels_cubeb = input_stream_params->channels; + + uint32_t rate; + haiku_get_preferred_sample_rate(context, &rate); + + stm->audio_capturer = new AudioCapture(haiku_audio_input_callback, stm, input_stream_params->rate); + if (!stm->audio_capturer || stm->audio_capturer->Status() != B_OK) { + fprintf(stderr, "Cubeb Haiku: Failed to initialize AudioCapture: %s\n", stm->audio_capturer ? strerror(stm->audio_capturer->Status()) : "alloc failed"); + goto init_error; + } + + float capture_rate = stm->audio_capturer->TargetSampleRate(); + if (abs(capture_rate - input_stream_params->rate) > 1.0f) { + fprintf(stderr, "Cubeb Haiku: Input sample rate mismatch! Requested: %u, Device: %.1f\n", input_stream_params->rate, capture_rate); + goto init_error_format; + } + stm->input_channels_capture = stm->audio_capturer->InputChannelCount(); + if (stm->input_channels_cubeb > stm->input_channels_capture) { + fprintf(stderr, "Cubeb Haiku: Requested input channels (%u) > available (%u)\n", stm->input_channels_cubeb, stm->input_channels_capture); + goto init_error_param; + } + + // Initialize Ring Buffer + size_t ring_buffer_frames = latency_frames * 8; + if (ring_buffer_frames < 2048) + ring_buffer_frames = 2048; + + stm->input_ring_buffer = new lock_free_audio_ring_buffer(stm->input_params.channels, ring_buffer_frames); + if (!stm->input_ring_buffer) { + fprintf(stderr, "Cubeb Haiku: Failed to initialize input ring buffer (alloc)\n"); + goto init_error_nomem; + } + } else { + stm->input_enabled = false; + } + + // Configure Output + if (output_stream_params) { + stm->output_params = *output_stream_params; + size_t buffer_size_bytes = calculate_haiku_buffer_size(&stm->output_params, latency_frames); + stm->output_format_haiku = cubeb_format_to_haiku(&stm->output_params, buffer_size_bytes); + if (stm->output_format_haiku.format == 0) { + fprintf(stderr, "Cubeb Haiku: Output format mapping failed.\n"); + goto init_error_format; + } + } else { + memset(&stm->output_params, 0, sizeof(stm->output_params)); + } + + *stream = stm; + + pthread_mutex_unlock(&stm->mutex); + + return CUBEB_OK; + +// --- Error Handling --- +init_error_nomem: + if (stm->audio_capturer) delete stm->audio_capturer; + pthread_mutex_unlock(&stm->mutex); + pthread_mutex_destroy(&stm->mutex); + free(stm); + return CUBEB_ERROR; + +init_error_format: + if (stm->audio_capturer) delete stm->audio_capturer; + if (stm->input_ring_buffer) delete stm->input_ring_buffer; + pthread_mutex_unlock(&stm->mutex); + pthread_mutex_destroy(&stm->mutex); + free(stm); + return CUBEB_ERROR_INVALID_FORMAT; + +init_error_param: + if (stm->audio_capturer) delete stm->audio_capturer; + if (stm->input_ring_buffer) delete stm->input_ring_buffer; + pthread_mutex_unlock(&stm->mutex); + pthread_mutex_destroy(&stm->mutex); + free(stm); + return CUBEB_ERROR_INVALID_PARAMETER; + +init_error: // Generic error + if (stm->audio_capturer) delete stm->audio_capturer; + if (stm->input_ring_buffer) delete stm->input_ring_buffer; + pthread_mutex_unlock(&stm->mutex); + pthread_mutex_destroy(&stm->mutex); + free(stm); + return CUBEB_ERROR; +} + +static void +haiku_stream_destroy(cubeb_stream* stm) +{ + if (!stm) + return; + + haiku_stream_stop(stm); + + pthread_mutex_lock(&stm->mutex); + + free(stm->input_temp_buffer); + + if (stm->audio_capturer) + delete stm->audio_capturer; + + if (stm->input_ring_buffer) + delete stm->input_ring_buffer; + + pthread_mutex_unlock(&stm->mutex); + pthread_mutex_destroy(&stm->mutex); + + free(stm); +} + +static int +haiku_stream_start(cubeb_stream* stm) +{ + if (!stm) + return CUBEB_ERROR_INVALID_PARAMETER; + + int rc = CUBEB_OK; + bool input_started = false, output_started = false; + + pthread_mutex_lock(&stm->mutex); + + // Start Input + if (stm->input_enabled && stm->audio_capturer && !stm->audio_capturer->IsRunning()) { + status_t capture_status = stm->audio_capturer->Start(); + if (capture_status == B_OK) { + input_started = true; + } else { + fprintf(stderr, "Cubeb Haiku: Failed start AudioCapture: %s\n", strerror(capture_status)); + rc = CUBEB_ERROR; + } + } else if (stm->input_enabled && stm->audio_capturer && stm->audio_capturer->IsRunning()) { + input_started = true; + } + + // Start Input Thread + if (rc == CUBEB_OK && input_started && !stm->sound_player && stm->output_params.rate == 0 && !stm->input_thread_created) { + stm->input_thread_running = true; + if (pthread_create(&stm->input_thread, NULL, input_thread_func, stm) == 0) { + stm->input_thread_created = true; + } else { + fprintf(stderr, "Cubeb Haiku: Failed create input thread\n"); + + stm->input_thread_running = false; + rc = CUBEB_ERROR; + + if (stm->audio_capturer) + stm->audio_capturer->Stop(); + + input_started = false; + } + } + + // Start Output + if (rc == CUBEB_OK && stm->output_params.rate > 0) { + if (!stm->sound_player) { + stm->sound_player = new BSoundPlayer(&stm->output_format_haiku, stm->stream_name, + haiku_audio_output_callback, nullptr, stm); + if (!stm->sound_player || stm->sound_player->InitCheck() != B_OK) { + fprintf(stderr, "Cubeb Haiku: Failed create BSoundPlayer: %s\n", + stm->sound_player ? strerror(stm->sound_player->InitCheck()) : "alloc failed"); + delete stm->sound_player; + + stm->sound_player = nullptr; + rc = CUBEB_ERROR; + + if (input_started && stm->audio_capturer) + stm->audio_capturer->Stop(); + + if (stm->input_thread_created) + stm->input_thread_running = false; + } else { + stm->output_pause = false; + stm->sound_player->SetVolume(stm->output_volume); + stm->sound_player->Start(); + stm->sound_player->SetHasData(true); + output_started = true; + } + } else { + stm->output_pause = false; + stm->sound_player->SetHasData(true); + output_started = true; + } + } + + pthread_mutex_unlock(&stm->mutex); + + // State Callback + if (rc == CUBEB_OK && (input_started || output_started)) { + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STARTED); + } else if (rc != CUBEB_OK) { + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR); + } + + return rc; +} + +static int +haiku_stream_stop(cubeb_stream* stm) +{ + printf("haiku_stream_stop\n"); + if (!stm) + return CUBEB_ERROR_INVALID_PARAMETER; + + bool needs_stopped_cb = false; + + // Stop Input Thread + if (stm->input_thread_created) { + pthread_mutex_lock(&stm->mutex); + bool was_running = stm->input_thread_running; + stm->input_thread_running = false; + pthread_mutex_unlock(&stm->mutex); + if (was_running) { + pthread_join(stm->input_thread, NULL); + needs_stopped_cb = true; + } + stm->input_thread_created = false; + } + + pthread_mutex_lock(&stm->mutex); + + // Stop Input Device + if (stm->input_enabled && stm->audio_capturer && stm->audio_capturer->IsRunning()) { + stm->audio_capturer->Stop(); + needs_stopped_cb = true; + } + + // Stop Output Device + if (stm->sound_player) { + stm->output_pause = true; + stm->sound_player->SetHasData(false); + stm->sound_player->Stop(); + delete stm->sound_player; + stm->sound_player = nullptr; + needs_stopped_cb = true; + } + + pthread_mutex_unlock(&stm->mutex); + + // State Callback + if (needs_stopped_cb) + stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_STOPPED); + + return CUBEB_OK; +} + +static int +haiku_stream_get_position(cubeb_stream* stm, uint64_t* position) +{ + if (!stm || !position) + return CUBEB_ERROR_INVALID_PARAMETER; + + pthread_mutex_lock(&stm->mutex); + *position = stm->output_position; + pthread_mutex_unlock(&stm->mutex); + + return CUBEB_OK; +} + +static int +haiku_stream_get_latency(cubeb_stream* stm, uint32_t* latency_frames) +{ + if (!stm || !latency_frames) return CUBEB_ERROR_INVALID_PARAMETER; + pthread_mutex_lock(&stm->mutex); + if (stm->sound_player && stm->output_format_haiku.channel_count > 0) { + uint32_t bytes_per_frame = stm->output_format_haiku.channel_count * sizeof(float); + *latency_frames = (bytes_per_frame > 0) ? (stm->output_format_haiku.buffer_size / bytes_per_frame) : 0; + } else if (stm->input_enabled && stm->input_ring_buffer) { + // Estimate: half ring buffer + capture latency guess + size_t ring_buffer_latency = stm->input_ring_buffer->capacity() / 2; + uint32_t capture_latency_est = (stm->input_params.rate * 15) / 1000; // ~15ms + *latency_frames = capture_latency_est + ring_buffer_latency; + } else { *latency_frames = 0; } + pthread_mutex_unlock(&stm->mutex); + return CUBEB_OK; +} + +static int +haiku_stream_set_volume(cubeb_stream* stm, float volume) +{ + if (!stm) + return CUBEB_ERROR_INVALID_PARAMETER; + + float clamped_volume = std::max(0.0f, std::min(1.0f, volume)); + + pthread_mutex_lock(&stm->mutex); + + stm->output_volume = clamped_volume; + + if (stm->sound_player) + stm->sound_player->SetVolume(stm->output_volume); + + pthread_mutex_unlock(&stm->mutex); + + return CUBEB_OK; +} + + +static int +haiku_stream_get_current_device(cubeb_stream* stm, cubeb_device** const device) +{ + if (!stm || !device) + return CUBEB_ERROR_INVALID_PARAMETER; + + static cubeb_device output_device_info; + static cubeb_device input_device_info; + static bool static_devices_initialized = false; + + if (!static_devices_initialized) { + output_device_info.output_name = (char *)HAIKU_DEFAULT_OUT; + output_device_info.input_name = NULL; + input_device_info.input_name = (char *)HAIKU_DEFAULT_IN; + input_device_info.output_name = NULL; + static_devices_initialized = true; + } + + pthread_mutex_lock(&stm->mutex); + bool has_output = (stm->output_params.rate > 0); + bool has_input = stm->input_enabled; + pthread_mutex_unlock(&stm->mutex); + + if (has_output) { + *device = &output_device_info; + } else if (has_input) { + *device = &input_device_info; + } else { + return CUBEB_ERROR; + } + + return CUBEB_OK; +} + +static int +haiku_enumerate_devices(cubeb* context, cubeb_device_type type, + cubeb_device_collection* collection) +{ + if (!context || !collection) + return CUBEB_ERROR_INVALID_PARAMETER; + + collection->device = NULL; + collection->count = 0; + int device_count = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) + device_count++; + + if (type & CUBEB_DEVICE_TYPE_INPUT) + device_count++; + + if (device_count == 0) + return CUBEB_OK; + + cubeb_device_info* devices = (cubeb_device_info*)calloc(device_count, sizeof(cubeb_device_info)); + if (!devices) + return CUBEB_ERROR; + + uint32_t rate; + haiku_get_preferred_sample_rate(context, &rate); + + uint32_t latency; + haiku_get_min_latency(context, {}, &latency); + + int current_index = 0; + + if (type & CUBEB_DEVICE_TYPE_OUTPUT) { + cubeb_device_info* cur = &devices[current_index++]; + cur->devid = HAIKU_DEFAULT_OUT_ID; + cur->device_id = HAIKU_DEFAULT_OUT; + cur->friendly_name = HAIKU_DEFAULT_OUT; + cur->group_id = HAIKU_DEFAULT_OUT; + cur->vendor_name = strdup("MediaKit"); + cur->type = CUBEB_DEVICE_TYPE_OUTPUT; + cur->state = CUBEB_DEVICE_STATE_ENABLED; + cur->preferred = CUBEB_DEVICE_PREF_ALL; + cur->format = CUBEB_DEVICE_FMT_F32NE; + cur->default_format = CUBEB_DEVICE_FMT_F32NE; + cur->max_channels = MAX_CHANNELS; + cur->min_rate = rate; + cur->max_rate = rate; + cur->default_rate = rate; + cur->latency_lo = latency; + cur->latency_hi = latency * 4; + collection->count++; + } + + if (type & CUBEB_DEVICE_TYPE_INPUT) { + cubeb_device_info* cur = &devices[current_index++]; + cur->devid = HAIKU_DEFAULT_IN_ID; + cur->device_id = HAIKU_DEFAULT_IN; + cur->friendly_name = HAIKU_DEFAULT_IN; + cur->group_id = HAIKU_DEFAULT_IN; + cur->vendor_name = strdup("MediaKit"); + cur->type = CUBEB_DEVICE_TYPE_INPUT; + cur->state = CUBEB_DEVICE_STATE_ENABLED; + cur->preferred = CUBEB_DEVICE_PREF_ALL; + cur->format = CUBEB_DEVICE_FMT_F32NE; + cur->default_format = CUBEB_DEVICE_FMT_F32NE; + cur->max_channels = MAX_CHANNELS; + cur->min_rate = rate; + cur->max_rate = rate; + cur->default_rate = rate; + cur->latency_lo = latency; + cur->latency_hi = latency * 4; + collection->count++; + } + + collection->device = devices; + + return CUBEB_OK; +} + +static int +haiku_device_collection_destroy(cubeb* context, + cubeb_device_collection* collection) +{ + if (!context || !collection) + return CUBEB_ERROR_INVALID_PARAMETER; + + if (collection->device) { + free(collection->device); + collection->device = NULL; + collection->count = 0; + } + + return CUBEB_OK; +} diff --git a/media/libcubeb/src/moz.build b/media/libcubeb/src/moz.build index 7ab524b..4c5fef4 100644 --- a/media/libcubeb/src/moz.build +++ b/media/libcubeb/src/moz.build @@ -30,6 +30,7 @@ if CONFIG['MOZ_SUNAUDIO']: if ( CONFIG["MOZ_PULSEAUDIO"] + or CONFIG["MOZ_HAIKU"] or CONFIG["MOZ_JACK"] or CONFIG["MOZ_AAUDIO"] or CONFIG["MOZ_OPENSL"] @@ -102,12 +103,23 @@ if CONFIG['MOZ_OPENSL']: SOURCES += ['cubeb_opensl.cpp'] DEFINES['USE_OPENSL'] = True +if CONFIG['MOZ_HAIKU']: + SOURCES += [ + 'cubeb_haiku.cpp', + ] + DEFINES['USE_HAIKU'] = True + OS_LIBS += [ + 'media', + 'mediahelpers', + ] + FINAL_LIBRARY = 'xul' if CONFIG['MOZ_ALSA']: CFLAGS += CONFIG['MOZ_ALSA_CFLAGS'] CFLAGS += CONFIG['MOZ_JACK_CFLAGS'] +CFLAGS += CONFIG['MOZ_HAIKU_CFLAGS'] CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS'] # We allow warnings for third-party code that can be updated from upstream. diff --git a/mfbt/Assertions.h b/mfbt/Assertions.h index d1b7078..a9400b4 100644 --- a/mfbt/Assertions.h +++ b/mfbt/Assertions.h @@ -220,7 +220,7 @@ MOZ_ReportAssertionFailure(const char* aStr, const char* aFilename, MOZ_NoReturn(line); \ } while (false) -#elif __wasi__ +#elif __wasi__ || defined(__HAIKU__) # define MOZ_REALLY_CRASH(line) __builtin_trap() diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml index 262eee8..872e312 100644 --- a/modules/libpref/init/StaticPrefList.yaml +++ b/modules/libpref/init/StaticPrefList.yaml @@ -11872,6 +11872,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -11916,6 +11918,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -11949,6 +11953,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -11968,6 +11974,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -11987,6 +11995,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -12034,6 +12044,8 @@ value: true #elif defined(XP_SOLARIS) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -13042,6 +13054,10 @@ type: bool #if defined(MOZ_WIDGET_ANDROID) value: true +#elif defined(XP_HAIKU) + value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -13140,6 +13156,8 @@ type: bool #if !defined(MOZ_WIDGET_ANDROID) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -13149,6 +13167,8 @@ type: bool #if defined(MOZ_WIDGET_ANDROID) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif @@ -14569,6 +14589,8 @@ type: RelaxedAtomicBool #if !defined(XP_MACOSX) value: true +#elif defined(XP_HAIKU) + value: true #else value: false #endif diff --git a/moz.configure b/moz.configure index e7f32df..bb56c49 100755 --- a/moz.configure +++ b/moz.configure @@ -871,6 +871,8 @@ def strip_flags(flags, profiling, target): # On Darwin, it tries to strip things it can't, so we need to limit its scope. elif target.kernel == "Darwin": return ["-x", "-S"] + elif target.kernel == "Haiku": + return ["--strip-debug"] set_config("STRIP_FLAGS", strip_flags) diff --git a/mozglue/baseprofiler/core/ProfilerUtils.cpp b/mozglue/baseprofiler/core/ProfilerUtils.cpp index 517efcb..d896644 100644 --- a/mozglue/baseprofiler/core/ProfilerUtils.cpp +++ b/mozglue/baseprofiler/core/ProfilerUtils.cpp @@ -129,6 +129,19 @@ BaseProfilerThreadId profiler_current_thread_id() { } // namespace mozilla::baseprofiler +// ------------------------------------------------------- Haiku +# elif defined(XP_HAIKU) + +# include + +namespace mozilla::baseprofiler { + +BaseProfilerThreadId profiler_current_thread_id() { + return BaseProfilerThreadId::FromNativeId(find_thread(NULL)); +} + +} // namespace mozilla::baseprofiler + // ------------------------------------------------------- Others # else diff --git a/mozglue/baseprofiler/public/BaseProfilerUtils.h b/mozglue/baseprofiler/public/BaseProfilerUtils.h index ab02e03..6d55f37 100644 --- a/mozglue/baseprofiler/public/BaseProfilerUtils.h +++ b/mozglue/baseprofiler/public/BaseProfilerUtils.h @@ -66,6 +66,13 @@ namespace mozilla::baseprofiler::detail { using ThreadIdType = long; } // namespace mozilla::baseprofiler::detail +// ------------------------------------------------------- Haiku +# elif defined(XP_HAIKU) + +namespace mozilla::baseprofiler::detail { +using ThreadIdType = int; +} // namespace mozilla::baseprofiler::detail + // ------------------------------------------------------- Others # else diff --git a/mozglue/misc/MutexPlatformData_posix.h b/mozglue/misc/MutexPlatformData_posix.h index d1659d8..b43e029 100644 --- a/mozglue/misc/MutexPlatformData_posix.h +++ b/mozglue/misc/MutexPlatformData_posix.h @@ -11,8 +11,19 @@ #include "mozilla/PlatformMutex.h" +#ifdef __HAIKU__ + +struct __attribute__((packed)) mozilla::detail::MutexImpl::PlatformData { + pthread_mutex_t ptMutex; + uint32_t padding; +}; + +#else + struct mozilla::detail::MutexImpl::PlatformData { pthread_mutex_t ptMutex; }; +#endif + #endif // MutexPlatformData_posix_h diff --git a/mozglue/misc/PlatformMutex.h b/mozglue/misc/PlatformMutex.h index cf4ec23..92cf202 100644 --- a/mozglue/misc/PlatformMutex.h +++ b/mozglue/misc/PlatformMutex.h @@ -46,10 +46,17 @@ class MutexImpl { PlatformData* platformData(); #if !defined(XP_WIN) && !defined(__wasi__) +# ifdef __HAIKU__ + void* platformData_[(sizeof(pthread_mutex_t) + sizeof(uint32_t)) / sizeof(void*)]; + static_assert((sizeof(pthread_mutex_t) + sizeof(uint32_t)) / sizeof(void*) != 0 && + (sizeof(pthread_mutex_t) + sizeof(uint32_t)) % sizeof(void*) == 0, + "pthread_mutex_t must have pointer alignment"); +# else void* platformData_[sizeof(pthread_mutex_t) / sizeof(void*)]; static_assert(sizeof(pthread_mutex_t) / sizeof(void*) != 0 && sizeof(pthread_mutex_t) % sizeof(void*) == 0, "pthread_mutex_t must have pointer alignment"); +#endif #else void* platformData_[6]; #endif diff --git a/mozglue/misc/TimeStamp_posix.cpp b/mozglue/misc/TimeStamp_posix.cpp index 6505d7f..6ec30ce 100644 --- a/mozglue/misc/TimeStamp_posix.cpp +++ b/mozglue/misc/TimeStamp_posix.cpp @@ -13,7 +13,9 @@ // obtained with this API; see TimeDuration::Resolution; // -#include +#ifndef __HAIKU__ +# include +#endif #include #include #include diff --git a/netwerk/base/nsStandardURL.cpp b/netwerk/base/nsStandardURL.cpp index 8817b62..ed352ce 100644 --- a/netwerk/base/nsStandardURL.cpp +++ b/netwerk/base/nsStandardURL.cpp @@ -319,7 +319,7 @@ struct DumpLeakedURLs { }; DumpLeakedURLs::~DumpLeakedURLs() { - MOZ_ASSERT(NS_IsMainThread()); +// MOZ_ASSERT(NS_IsMainThread()); StaticMutexAutoLock lock(gAllURLsMutex); if (!gAllURLs.isEmpty()) { printf("Leaked URLs:\n"); diff --git a/netwerk/dns/moz.build b/netwerk/dns/moz.build index b2456d2..127baf9 100644 --- a/netwerk/dns/moz.build +++ b/netwerk/dns/moz.build @@ -115,3 +115,7 @@ LOCAL_INCLUDES += [ ] USE_LIBS += ["icu"] + +OS_LIBS += [ + "network" +] diff --git a/netwerk/sctp/src/netinet/sctp.h b/netwerk/sctp/src/netinet/sctp.h index 6129e77..be8e413 100644 --- a/netwerk/sctp/src/netinet/sctp.h +++ b/netwerk/sctp/src/netinet/sctp.h @@ -35,7 +35,7 @@ #ifndef _NETINET_SCTP_H_ #define _NETINET_SCTP_H_ -#if defined(__APPLE__) || defined(__linux__) +#if defined(__APPLE__) || defined(__linux__) || defined(__HAIKU__) #include #endif #if defined(__FreeBSD__) && !defined(__Userspace__) diff --git a/netwerk/sctp/src/netinet/sctp_input.c b/netwerk/sctp/src/netinet/sctp_input.c index a3c1476..6fdae00 100644 --- a/netwerk/sctp/src/netinet/sctp_input.c +++ b/netwerk/sctp/src/netinet/sctp_input.c @@ -6310,11 +6310,11 @@ sctp_input_with_port(struct mbuf *i_pak, int off, uint16_t port) #if defined(_WIN32) && !defined(__Userspace__) NTOHS(ip->ip_len); #endif -#if defined(__linux__) || (defined(_WIN32) && defined(__Userspace__)) +#if defined(__linux__) || defined(__HAIKU__) || (defined(_WIN32) && defined(__Userspace__)) ip->ip_len = ntohs(ip->ip_len); #endif #if defined(__Userspace__) -#if defined(__linux__) || defined(_WIN32) +#if defined(__linux__) || defined(_WIN32) || defined(__HAIKU__) length = ip->ip_len; #else length = ip->ip_len + iphlen; diff --git a/netwerk/sctp/src/netinet/sctp_os_userspace.h b/netwerk/sctp/src/netinet/sctp_os_userspace.h index 493ae02..cd160c5 100644 --- a/netwerk/sctp/src/netinet/sctp_os_userspace.h +++ b/netwerk/sctp/src/netinet/sctp_os_userspace.h @@ -1145,7 +1145,7 @@ sctp_get_mbuf_for_msg(unsigned int space_needed, int want_header, int how, int a #define SCTP_IS_LISTENING(inp) ((inp->sctp_flags & SCTP_PCB_FLAGS_ACCEPTING) != 0) -#if defined(__APPLE__) || defined(__DragonFly__) || defined(__linux__) || defined(__native_client__) || defined(__NetBSD__) || defined(_WIN32) || defined(__Fuchsia__) || defined(__EMSCRIPTEN__) +#if defined(__APPLE__) || defined(__DragonFly__) || defined(__linux__) || defined(__native_client__) || defined(__NetBSD__) || defined(_WIN32) || defined(__Fuchsia__) || defined(__HAIKU__) || defined(__EMSCRIPTEN__) int timingsafe_bcmp(const void *, const void *, size_t); #endif diff --git a/netwerk/sctp/src/netinet/sctp_userspace.c b/netwerk/sctp/src/netinet/sctp_userspace.c index 7188890..fac3e16 100644 --- a/netwerk/sctp/src/netinet/sctp_userspace.c +++ b/netwerk/sctp/src/netinet/sctp_userspace.c @@ -94,7 +94,7 @@ sctp_userspace_set_threadname(const char *name) #endif } -#if !defined(_WIN32) && !defined(__native_client__) +#if !defined(_WIN32) && !defined(__HAIKU__) && !defined(__native_client__) int sctp_userspace_get_mtu_from_ifn(uint32_t if_index) { @@ -129,7 +129,7 @@ sctp_userspace_get_mtu_from_ifn(uint32_t if_index) } #endif -#if defined(__native_client__) +#if defined(__native_client__) || defined(__HAIKU__) int sctp_userspace_get_mtu_from_ifn(uint32_t if_index) { @@ -137,7 +137,7 @@ sctp_userspace_get_mtu_from_ifn(uint32_t if_index) } #endif -#if defined(__APPLE__) || defined(__DragonFly__) || defined(__linux__) || defined(__native_client__) || defined(__NetBSD__) || defined(__QNX__) || defined(_WIN32) || defined(__Fuchsia__) || defined(__EMSCRIPTEN__) +#if defined(__APPLE__) || defined(__DragonFly__) || defined(__linux__) || defined(__native_client__) || defined(__NetBSD__) || defined(__QNX__) || defined(_WIN32) || defined(__Fuchsia__) || defined(__HAIKU__) || defined(__EMSCRIPTEN__) int timingsafe_bcmp(const void *b1, const void *b2, size_t n) { diff --git a/netwerk/sctp/src/user_environment.c b/netwerk/sctp/src/user_environment.c index ea52f0a..85b37ee 100644 --- a/netwerk/sctp/src/user_environment.c +++ b/netwerk/sctp/src/user_environment.c @@ -172,7 +172,7 @@ finish_random(void) { return; } -#elif (defined(__ANDROID__) && (__ANDROID_API__ < 28)) || defined(__QNX__) || defined(__EMSCRIPTEN__) +#elif (defined(__ANDROID__) && (__ANDROID_API__ < 28)) || defined(__QNX__) || defined(__EMSCRIPTEN__) || defined(__HAIKU__) #include static int fd = -1; diff --git a/netwerk/sctp/src/user_socket.c b/netwerk/sctp/src/user_socket.c index cde6ecc..0407d01 100644 --- a/netwerk/sctp/src/user_socket.c +++ b/netwerk/sctp/src/user_socket.c @@ -50,6 +50,9 @@ #if defined(__linux__) #define __FAVOR_BSD /* (on Ubuntu at least) enables UDP header field names like BSD in RFC 768 */ #endif +#if defined(__HAIKU__) +#define UIO_MAXIOV _SC_IOV_MAX +#endif #if !defined(_WIN32) #if defined INET || defined INET6 #include @@ -1020,7 +1023,7 @@ userspace_sctp_recvmsg(struct socket *so, if (error) { if ((auio.uio_resid != ulen) && (error == EINTR || -#if !defined(__NetBSD__) +#if !defined(__NetBSD__) && !defined(__HAIKU__) error == ERESTART || #endif error == EWOULDBLOCK)) { @@ -1113,7 +1116,7 @@ usrsctp_recvv(struct socket *so, if (errno) { if ((auio.uio_resid != ulen) && (errno == EINTR || -#if !defined(__NetBSD__) +#if !defined(__NetBSD__) && !defined(__HAIKU__) errno == ERESTART || #endif errno == EWOULDBLOCK)) { @@ -1929,7 +1932,7 @@ int user_connect(struct socket *so, struct sockaddr *sa) error = pthread_cond_wait(SOCK_COND(so), SOCK_MTX(so)); #endif if (error) { -#if defined(__NetBSD__) +#if defined(__NetBSD__) || defined(__HAIKU__) if (error == EINTR) { #else if (error == EINTR || error == ERESTART) { @@ -1949,7 +1952,7 @@ bad: if (!interrupted) { so->so_state &= ~SS_ISCONNECTING; } -#if !defined(__NetBSD__) +#if !defined(__NetBSD__) && !defined(__HAIKU__) if (error == ERESTART) { error = EINTR; } diff --git a/nsprpub/pr/src/misc/Makefile.in b/nsprpub/pr/src/misc/Makefile.in index 3d87da2..64b9b29 100644 --- a/nsprpub/pr/src/misc/Makefile.in +++ b/nsprpub/pr/src/misc/Makefile.in @@ -45,6 +45,12 @@ CSRCS += \ $(NULL) endif +ifeq ($OS_ARCH),Haiku) +CPPSRCS += \ + prhaiku.cpp \ + $(NULL) +endif + TARGETS = $(OBJS) INCLUDES = -I$(dist_includedir) -I$(topsrcdir)/pr/include -I$(topsrcdir)/pr/include/private diff --git a/nsprpub/pr/src/misc/prhaiku.cpp b/nsprpub/pr/src/misc/prhaiku.cpp new file mode 100644 index 0000000..7532003 --- /dev/null +++ b/nsprpub/pr/src/misc/prhaiku.cpp @@ -0,0 +1,46 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +/* + * Haiku-specific time zone support using native BTimeZone API + */ + +#if defined(__HAIKU__) + +#pragma GCC visibility push(default) +#include +#include +#include +#pragma GCC visibility pop + +extern "C" { + +int32_t _PR_Haiku_GetTimeZoneOffset(void) { + BTimeZone timeZone; + if (BLocaleRoster::Default()->GetDefaultTimeZone(&timeZone) != B_OK) { + return 0; + } + return timeZone.OffsetFromGMT(); +} + +int32_t _PR_Haiku_GetDSTOffset(int64_t utcTimeInSeconds) { + BTimeZone timeZone; + if (BLocaleRoster::Default()->GetDefaultTimeZone(&timeZone) != B_OK) { + return 0; + } + + bigtime_t utcTime = utcTimeInSeconds * 1000000LL; + if (!timeZone.IsDaylightSavingTime(utcTime)) { + return 0; + } + + int32_t fullOffset = timeZone.OffsetFromGMT(utcTime); + int32_t standardOffset = timeZone.OffsetFromGMT(); + return fullOffset - standardOffset; +} + +} // extern "C" + +#endif // __HAIKU__ diff --git a/nsprpub/pr/src/misc/prsystem.c b/nsprpub/pr/src/misc/prsystem.c index 863af6b..4994bd4 100644 --- a/nsprpub/pr/src/misc/prsystem.c +++ b/nsprpub/pr/src/misc/prsystem.c @@ -234,7 +234,7 @@ PR_IMPLEMENT(PRInt32) PR_GetNumberOfProcessors(void) { PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void) { PRUint64 bytes = 0; -#if defined(LINUX) || defined(SOLARIS) +#if defined(LINUX) || defined(SOLARIS) || defined(__HAIKU__) long pageSize = sysconf(_SC_PAGESIZE); long pageCount = sysconf(_SC_PHYS_PAGES); diff --git a/nsprpub/pr/src/misc/prtime.c b/nsprpub/pr/src/misc/prtime.c index 64461c6..698af2a 100644 --- a/nsprpub/pr/src/misc/prtime.c +++ b/nsprpub/pr/src/misc/prtime.c @@ -21,6 +21,11 @@ #include /* for EINVAL */ #include +#if defined(__HAIKU__) +extern int32_t _PR_Haiku_GetTimeZoneOffset(void); +extern int32_t _PR_Haiku_GetDSTOffset(int64_t utcTimeInSeconds); +#endif + /* * The COUNT_LEAPS macro counts the number of leap years passed by * till the start of the given year Y. At the start of the year 4 @@ -556,7 +561,47 @@ void _PR_CleanupTime(void) { #endif } -#if defined(XP_UNIX) || defined(XP_PC) +#if defined(__HAIKU__) + +PR_IMPLEMENT(PRTimeParameters) +PR_LocalTimeParameters(const PRExplodedTime* gmt) { + PRTimeParameters retVal; + PRTime secs64; + PRInt64 usecPerSec; + PRInt64 usecPerSec_1; + PRInt64 maxInt32; + PRInt64 minInt32; + int64_t utcSeconds; + + retVal.tp_gmt_offset = _PR_Haiku_GetTimeZoneOffset(); + + secs64 = PR_ImplodeTime(gmt); + LL_I2L(usecPerSec, PR_USEC_PER_SEC); + LL_I2L(usecPerSec_1, PR_USEC_PER_SEC - 1); + + if (LL_GE_ZERO(secs64)) { + LL_DIV(secs64, secs64, usecPerSec); + } else { + LL_NEG(secs64, secs64); + LL_ADD(secs64, secs64, usecPerSec_1); + LL_DIV(secs64, secs64, usecPerSec); + LL_NEG(secs64, secs64); + } + + LL_I2L(maxInt32, PR_INT32_MAX); + LL_I2L(minInt32, PR_INT32_MIN); + if (LL_CMP(secs64, >, maxInt32) || LL_CMP(secs64, <, minInt32)) { + retVal.tp_dst_offset = 0; + return retVal; + } + + LL_L2I(utcSeconds, secs64); + retVal.tp_dst_offset = _PR_Haiku_GetDSTOffset(utcSeconds); + + return retVal; +} + +#elif defined(XP_UNIX) || defined(XP_PC) PR_IMPLEMENT(PRTimeParameters) PR_LocalTimeParameters(const PRExplodedTime* gmt) { diff --git a/python/mach/mach/site.py b/python/mach/mach/site.py index 811e8d2..85302ac 100644 --- a/python/mach/mach/site.py +++ b/python/mach/mach/site.py @@ -1520,6 +1520,14 @@ def _create_venv_with_pthfile( _ensure_python_exe(Path(target_venv.python_path).parent) + if sys.platform.startswith("haiku"): + non_packaged = os.path.join(virtualenv_root, "non-packaged") + os.makedirs(non_packaged, exist_ok=True) + for dir in ("bin", "lib"): + src = os.path.join(virtualenv_root, dir) + dst = os.path.join(non_packaged, dir) + os.symlink(src, dst, target_is_directory=True) + platlib_site_packages_dir = target_venv.resolve_sysconfig_packages_path("platlib") pthfile_contents = "\n".join(pthfile_lines) with open(os.path.join(platlib_site_packages_dir, PTH_FILENAME), "w") as f: diff --git a/python/mozboot/mozboot/base.py b/python/mozboot/mozboot/base.py index 5a133c7..f595526 100644 --- a/python/mozboot/mozboot/base.py +++ b/python/mozboot/mozboot/base.py @@ -568,9 +568,13 @@ class BaseBootstrapper: if modern: print("Your version of Rust (%s) is new enough." % version) + if sys.platform.startswith("haiku"): + return elif version: print("Your version of Rust (%s) is too old." % version) + if sys.platform.startswith("haiku"): + return if rustup and not modern: rustup_version = self._parse_version(rustup) diff --git a/python/mozboot/mozboot/bootstrap.py b/python/mozboot/mozboot/bootstrap.py index ef115f1..618657c 100644 --- a/python/mozboot/mozboot/bootstrap.py +++ b/python/mozboot/mozboot/bootstrap.py @@ -34,6 +34,7 @@ from mozboot.centosfedora import CentOSFedoraBootstrapper from mozboot.debian import DebianBootstrapper from mozboot.freebsd import FreeBSDBootstrapper from mozboot.gentoo import GentooBootstrapper +from mozboot.haiku import HaikuBootstrapper from mozboot.mozconfig import MozconfigBuilder from mozboot.mozillabuild import MozillaBuildBootstrapper from mozboot.openbsd import OpenBSDBootstrapper @@ -311,6 +312,10 @@ class Bootstrapper: args["version"] = platform.release() args["flavor"] = platform.system() + elif sys.platform.startswith("haiku"): + cls = HaikuBootstrapper + args["version"] = platform.uname()[2] + elif sys.platform.startswith("win32") or sys.platform.startswith("msys"): if "MOZILLABUILD" in os.environ: cls = MozillaBuildBootstrapper diff --git a/python/mozboot/mozboot/haiku.py b/python/mozboot/mozboot/haiku.py new file mode 100644 index 0000000..bf8f9fc --- /dev/null +++ b/python/mozboot/mozboot/haiku.py @@ -0,0 +1,59 @@ +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this file, +# You can obtain one at http://mozilla.org/MPL/2.0/. + +from mozboot.base import BaseBootstrapper + + +class HaikuBootstrapper(BaseBootstrapper): + def __init__(self, version, **kwargs): + BaseBootstrapper.__init__(self, **kwargs) + + self.packages = [ + "make", + "pkgconfig", + "rust_bin", + ] + + self.browser_packages = [ + "dbus_devel", + "dbus_glib_devel", + "gtk3_devel", + "libevent_devel", + "libvpx_devel", + "nasm", + "nodejs20", + "nspr_devel", + ] + + def pkgman_install(self, *packages): + command = ["pkgman", "install"] + if self.no_interactive: + command.append("-y") + + command.extend(packages) + self.run_as_root(command) + + def install_system_packages(self): + self.pkgman_install(*self.packages) + + def install_browser_packages(self, mozconfig_builder, artifact_mode=False): + self.pkgman_install(*self.browser_packages) + + def install_browser_artifact_mode_packages(self, mozconfig_builder): + self.install_browser_packages(mozconfig_builder, artifact_mode=True) + + def ensure_clang_static_analysis_package(self): + # TODO: we don't ship clang base static analysis for this platform + pass + + def ensure_stylo_packages(self): + # Clang / llvm already installed as browser package + self.pkgman_install("cbindgen") + + def ensure_nasm_packages(self): + # installed via install_browser_packages + pass + + def ensure_node_packages(self): + self.pkgman_install("npm") diff --git a/python/mozboot/mozboot/util.py b/python/mozboot/mozboot/util.py index 058898f..bc473df 100644 --- a/python/mozboot/mozboot/util.py +++ b/python/mozboot/mozboot/util.py @@ -13,7 +13,7 @@ from mach.site import PythonVirtualenv from mach.util import get_state_dir # Keep in sync with rust-version in top-level Cargo.toml. -MINIMUM_RUST_VERSION = "1.90.0" +MINIMUM_RUST_VERSION = "1.89.0" def get_tools_dir(srcdir=False): diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py index 4e60004..7847014 100644 --- a/python/mozbuild/mozbuild/configure/constants.py +++ b/python/mozbuild/mozbuild/configure/constants.py @@ -36,6 +36,7 @@ class OS(EnumString): "DragonFly", "FreeBSD", "GNU", + "Haiku", "iOS", "NetBSD", "OpenBSD", @@ -51,6 +52,7 @@ class Kernel(EnumString): "Darwin", "DragonFly", "FreeBSD", + "Haiku", "kFreeBSD", "Linux", "NetBSD", @@ -140,6 +142,7 @@ kernel_preprocessor_checks = { "Darwin": "__APPLE__", "DragonFly": "__DragonFly__", "FreeBSD": "__FreeBSD__", + "Haiku": "__HAIKU__", "kFreeBSD": "__FreeBSD_kernel__", "Linux": "__linux__", "NetBSD": "__NetBSD__", diff --git a/python/mozbuild/mozbuild/vendor/vendor_rust.py b/python/mozbuild/mozbuild/vendor/vendor_rust.py index 927d05e..33605fd 100644 --- a/python/mozbuild/mozbuild/vendor/vendor_rust.py +++ b/python/mozbuild/mozbuild/vendor/vendor_rust.py @@ -230,8 +230,8 @@ class VendorRust(MozbuildObject): # if we go back and forth between vendoring with an older version and # a newer version. Only allow the newer versions. minimum_rust_version = MINIMUM_RUST_VERSION - if LooseVersion("1.90.0") >= MINIMUM_RUST_VERSION: - minimum_rust_version = "1.90.0" + if LooseVersion("1.89.0") >= MINIMUM_RUST_VERSION: + minimum_rust_version = "1.89.0" if version < minimum_rust_version: self.log( logging.ERROR, diff --git a/security/certverifier/ExtendedValidation.cpp b/security/certverifier/ExtendedValidation.cpp index ffd7d37..2ce0dfc 100644 --- a/security/certverifier/ExtendedValidation.cpp +++ b/security/certverifier/ExtendedValidation.cpp @@ -1350,7 +1350,9 @@ nsresult LoadExtendedValidationInfo() { // The entries for the debug EV roots are at indices 0 through // NUM_TEST_EV_ROOTS - 1. Since they're not built-in, they probably // haven't been loaded yet. +# ifndef __HAIKU__ MOZ_ASSERT(i < NUM_TEST_EV_ROOTS, "Could not find built-in EV root"); +# endif } else { unsigned char certFingerprint[SHA256_LENGTH]; srv = PK11_HashBuf(SEC_OID_SHA256, certFingerprint, cert->derCert.data, diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml index 4e61a55..74eecfa 100644 --- a/supply-chain/audits.toml +++ b/supply-chain/audits.toml @@ -2959,6 +2959,12 @@ criteria = "safe-to-deploy" delta = "0.1.11 -> 0.1.12" notes = "Only a minor build tweak." +[[audits.glslopt]] +who = "KENZ " +criteria = "safe-to-deploy" +delta = "0.1.10 -> 0.1.10@git:f9fb33cdab7d55ee0b06fbde64f61be74bd4ef2b" +importable = false + [[audits.goblin]] who = "Jan-Erik Rediger " criteria = "safe-to-deploy" @@ -3959,6 +3965,12 @@ criteria = "safe-to-deploy" version = "0.14.0" notes = "Victor and Myk developed this crate at Mozilla." +[[audits.lmdb-rkv-sys]] +who = "KENZ " +criteria = "safe-to-deploy" +delta = "0.11.2 -> 0.11.2@git:9a481259e3b15932bd88bc90a8d7dc49e7ac9cd6" +importable = false + [[audits.lock_api]] who = "Mike Hommey " criteria = "safe-to-deploy" diff --git a/supply-chain/config.toml b/supply-chain/config.toml index 89d7130..e56a9eb 100644 --- a/supply-chain/config.toml +++ b/supply-chain/config.toml @@ -64,6 +64,10 @@ notes = "Used for testing." dependency-criteria = { tokio-reactor = [], tokio-threadpool = [] } notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack to pin the version used by audioipc-{client,server}. Suppress vetting on those for the same reasons behind the policy entries." +[policy.glslopt] +audit-as-crates-io = true +notes = "Patched version of upstream" + [policy.gluesmith] criteria = "safe-to-run" notes = "Used for fuzzing." @@ -92,6 +96,10 @@ notes = "Patched version of upstream to avoid unnecessary unused dependencies an audit-as-crates-io = false notes = "This override is an api-compatible fork with an orthogonal implementation." +[policy.lmdb-rkv-sys] +audit-as-crates-io = true +notes = "Patched version of upstream" + [policy.malloc_size_of_derive] audit-as-crates-io = false notes = "This was originally servo code which Bobby Holley put on crates.io some years ago and that was moved in-tree as first-party code later on." diff --git a/taskcluster/kinds/fetch/toolchains.yml b/taskcluster/kinds/fetch/toolchains.yml index e1549cd..92bc792 100644 --- a/taskcluster/kinds/fetch/toolchains.yml +++ b/taskcluster/kinds/fetch/toolchains.yml @@ -410,8 +410,8 @@ clang-trunk: # We build stable rust from source so the resulting compiler acts as a nightly # rust compiler, allowing to use unstable features like -Zbuild-std and # sanitizers. -rust-1.90.0: - description: Rust 1.90.0 source code +rust-1.89.0: + description: Rust 1.89.0 source code fetch: type: git include-dot-git: true diff --git a/testing/mozbase/mozinfo/mozinfo/mozinfo.py b/testing/mozbase/mozinfo/mozinfo/mozinfo.py index 06254d9..d61b40a 100755 --- a/testing/mozbase/mozinfo/mozinfo/mozinfo.py +++ b/testing/mozbase/mozinfo/mozinfo/mozinfo.py @@ -94,7 +94,7 @@ elif system == "Linux": info["os"] = "linux" info["linux_distro"] = distribution -elif system in ["DragonFly", "FreeBSD", "NetBSD", "OpenBSD"]: +elif system in ["DragonFly", "FreeBSD", "Haiku", "NetBSD", "OpenBSD"]: info["os"] = "bsd" # community builds version = os_version = sys.platform elif system == "Darwin": diff --git a/third_party/abseil-cpp/absl/base/internal/sysinfo.cc b/third_party/abseil-cpp/absl/base/internal/sysinfo.cc index 1937db3..08fdd1d 100644 --- a/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +++ b/third_party/abseil-cpp/absl/base/internal/sysinfo.cc @@ -50,6 +50,10 @@ #include #endif +#if defined(__HAIKU__) +#include +#endif + #include #include @@ -475,6 +479,10 @@ pid_t GetTID() { return static_cast(zx_thread_self()); } +#elif defined(__HAIKU__) + +pid_t GetTID() { return find_thread(NULL); } + #else // Fallback implementation of `GetTID` using `pthread_self`. diff --git a/third_party/abseil-cpp/absl/log/internal/log_message.cc b/third_party/abseil-cpp/absl/log/internal/log_message.cc index 8dc5722..44a5e3f 100644 --- a/third_party/abseil-cpp/absl/log/internal/log_message.cc +++ b/third_party/abseil-cpp/absl/log/internal/log_message.cc @@ -224,7 +224,7 @@ void LogMessage::LogMessageData::InitializeEncodingAndFormat() { EncodeVarint(EventTag::kSeverity, ProtoSeverity(entry.log_severity(), entry.verbosity()), &encoded_remaining()); - EncodeVarint(EventTag::kThreadId, entry.tid(), &encoded_remaining()); + EncodeVarint(EventTag::kThreadId, (uint32_t)entry.tid(), &encoded_remaining()); } void LogMessage::LogMessageData::FinalizeEncodingAndFormat() { diff --git a/third_party/chromium/build/config/BUILDCONFIG.gn b/third_party/chromium/build/config/BUILDCONFIG.gn index 4bb38fe..f42d1e9 100644 --- a/third_party/chromium/build/config/BUILDCONFIG.gn +++ b/third_party/chromium/build/config/BUILDCONFIG.gn @@ -206,7 +206,7 @@ if (host_toolchain == "") { # TODO(dpranke): Add some sort of assert here that verifies that # no toolchain omitted host_toolchain from its toolchain_args(). - if (host_os == "linux" || host_os == "openbsd") { + if (host_os == "linux" || host_os == "openbsd" || host_os == "haiku") { if (target_os != "linux") { host_toolchain = "//chromium/build/toolchain/linux:clang_$host_cpu" } else if (is_clang) { @@ -246,7 +246,7 @@ if (target_os == "android") { # Targeting android on Mac is best-effort and not guaranteed to work. #assert(host_os == "linux", "Android builds are only supported on Linux.") _default_toolchain = "//chromium/build/toolchain/android:android_clang_$target_cpu" -} else if (target_os == "chromeos" || target_os == "linux" || target_os == "openbsd") { +} else if (target_os == "chromeos" || target_os == "linux" || target_os == "openbsd" || host_os == "haiku") { # See comments in build/toolchain/cros/BUILD.gn about board compiles. if (is_clang) { _default_toolchain = "//chromium/build/toolchain/linux:clang_$target_cpu" @@ -312,6 +312,7 @@ if (custom_toolchain != "") { is_android = current_os == "android" is_chromeos = current_os == "chromeos" is_fuchsia = current_os == "fuchsia" +is_haiku = current_os == "haiku" is_ios = current_os == "ios" is_linux = current_os == "linux" is_bsd = current_os == "openbsd" diff --git a/third_party/chromium/build/config/gcc/BUILD.gn b/third_party/chromium/build/config/gcc/BUILD.gn index 6e291bb..89c0f24 100644 --- a/third_party/chromium/build/config/gcc/BUILD.gn +++ b/third_party/chromium/build/config/gcc/BUILD.gn @@ -93,7 +93,7 @@ if (is_component_build && !is_android) { # Settings for executables. config("executable_config") { configs = executable_and_shared_library_configs_ - ldflags = [ "-pie" ] + ldflags = [ "-fPIC" ] if (is_android) { ldflags += [ "-Bdynamic", diff --git a/third_party/chromium/build/config/ozone.gni b/third_party/chromium/build/config/ozone.gni index 9d98d89..0bd4076 100644 --- a/third_party/chromium/build/config/ozone.gni +++ b/third_party/chromium/build/config/ozone.gni @@ -8,7 +8,7 @@ import("//chromium/build/toolchain/toolchain.gni") declare_args() { # Indicates if Ozone is enabled. Ozone is a low-level library layer for Linux # that does not require X11. - use_ozone = is_chromeos || is_fuchsia || is_linux || is_bsd + use_ozone = is_chromeos || is_fuchsia || is_linux || is_bsd || is_haiku } declare_args() { @@ -76,6 +76,11 @@ declare_args() { } else { ozone_platform = "cast" } + } else if (is_haiku) { + ozone_platform = "wayland" + ozone_platform_drm = false + ozone_platform_x11 = false + ozone_platform_wayland = true } else if (is_chromeos) { ozone_platform = "x11" ozone_platform_drm = true diff --git a/third_party/chromium/build/toolchain/siso.gni b/third_party/chromium/build/toolchain/siso.gni index 94055d5..6f11061 100644 --- a/third_party/chromium/build/toolchain/siso.gni +++ b/third_party/chromium/build/toolchain/siso.gni @@ -1,30 +1,11 @@ -# Defines the configuration of siso (next-gen build system) +# Copyright 2023 The Chromium Authors +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. -import("//chromium/build/config/gclient_args.gni") - -# use_siso_default is default value of use_siso. -# need to match with autoninja's logic. -use_siso_default = false - -_is_google_corp_machine = false -if (path_exists("/usr/bin/gcert") || # linux - path_exists("/usr/local/bin/gcert") || # mac - path_exists("/c:/gnubby/bin/gcert.exe")) { - _is_google_corp_machine = true -} - -_is_ninja_used = path_exists(rebase_path(".ninja_deps", root_build_dir)) - -if (path_exists("//chromium/build/config/siso/.sisoenv") && - defined(build_with_chromium) && build_with_chromium && - _is_google_corp_machine && !_is_ninja_used) { - use_siso_default = true -} +# Configuration for AnyAsk/SISO build system +# Disabled for Haiku - path_exists() not supported declare_args() { - # Placeholder to allow having use_siso in args.gn file. - # Explicit `use_siso` in args.gn can override default. - # This is used only for autoninja (to dispatch siso or ninja), - # and for use_reclient's default. - use_siso = use_siso_default + # Disable SISO for Haiku build + use_siso = false } diff --git a/third_party/chromium/build/toolchain/toolchain.gni b/third_party/chromium/build/toolchain/toolchain.gni index 754f0e3..185b04f 100644 --- a/third_party/chromium/build/toolchain/toolchain.gni +++ b/third_party/chromium/build/toolchain/toolchain.gni @@ -75,7 +75,7 @@ if (host_os == "mac") { host_shlib_extension = ".dylib" } else if (host_os == "win") { host_shlib_extension = ".dll" -} else if (host_os == "linux" || host_os == "aix" || host_os == "zos") { +} else if (host_os == "linux" || host_os == "aix" || host_os == "zos" || host_os == "haiku") { host_shlib_extension = ".so" } else { assert(false, "Host platform not supported") diff --git a/third_party/dav1d/src/thread.h b/third_party/dav1d/src/thread.h index 459aace..b2989da 100644 --- a/third_party/dav1d/src/thread.h +++ b/third_party/dav1d/src/thread.h @@ -177,14 +177,14 @@ static inline void dav1d_set_thread_name(const char *const name) { pthread_set_name_np(pthread_self(), name); } -#elif defined(__HAIKU__) - -#include - -static inline void dav1d_set_thread_name(const char *const name) { - rename_thread(find_thread(NULL), name); -} - +//#elif defined(__HAIKU__) +// +//#include +// +//static inline void dav1d_set_thread_name(const char *const name) { +// rename_thread(find_thread(NULL), name); +//} +// #else #define dav1d_set_thread_name(name) do {} while (0) diff --git a/third_party/libepoxy/libepoxy/src/dispatch_common.c b/third_party/libepoxy/libepoxy/src/dispatch_common.c index 9f3dac4..e5ef5a8 100644 --- a/third_party/libepoxy/libepoxy/src/dispatch_common.c +++ b/third_party/libepoxy/libepoxy/src/dispatch_common.c @@ -306,8 +306,10 @@ get_dlopen_handle(void **handle, const char *lib_name, bool exit_on_fail, bool l pthread_mutex_lock(&api.mutex); if (!*handle) { int flags = RTLD_LAZY | RTLD_LOCAL; +#ifndef __HAIKU__ if (!load) flags |= RTLD_NOLOAD; +#endif *handle = dlopen(lib_name, flags); if (!*handle) { diff --git a/third_party/libwebrtc/.gn b/third_party/libwebrtc/.gn index e30bfef..dfa911b 100644 --- a/third_party/libwebrtc/.gn +++ b/third_party/libwebrtc/.gn @@ -35,8 +35,8 @@ no_check_targets = [ # These are the list of GN files that run exec_script. This allowlist exists # to force additional review for new uses of exec_script, which is strongly # discouraged except for gypi_to_gn calls. -exec_script_allowlist = build_dotfile_settings.exec_script_allowlist + - [ "//build_overrides/build.gni" ] +#exec_script_allowlist = build_dotfile_settings.exec_script_allowlist + +# [ "//build_overrides/build.gni" ] # Normally, we'd use 'if (!build_with_mozilla)', but that flag isn't # available yet. diff --git a/third_party/libwebrtc/BUILD.gn b/third_party/libwebrtc/BUILD.gn index 487897d..9b50842 100644 --- a/third_party/libwebrtc/BUILD.gn +++ b/third_party/libwebrtc/BUILD.gn @@ -213,7 +213,7 @@ config("common_inherited_config") { target_gen_dir, ] } - if (is_posix || is_fuchsia) { + if (is_posix || is_fuchsia || is_haiku) { defines += [ "WEBRTC_POSIX" ] } if (is_ios) { @@ -222,7 +222,7 @@ config("common_inherited_config") { "WEBRTC_IOS", ] } - if (is_linux || is_chromeos) { + if ((is_linux && !is_haiku) || is_chromeos) { defines += [ "WEBRTC_LINUX" ] } if (is_bsd) { @@ -234,6 +234,9 @@ config("common_inherited_config") { if (is_fuchsia) { defines += [ "WEBRTC_FUCHSIA" ] } + if (is_haiku) { + defines += [ "WEBRTC_HAIKU", "_BSD_SOURCE" ] + } if (is_win) { defines += [ "WEBRTC_WIN" ] } diff --git a/third_party/libwebrtc/modules/desktop_capture/BUILD.gn b/third_party/libwebrtc/modules/desktop_capture/BUILD.gn index aa174d5..7c0d653 100644 --- a/third_party/libwebrtc/modules/desktop_capture/BUILD.gn +++ b/third_party/libwebrtc/modules/desktop_capture/BUILD.gn @@ -356,6 +356,19 @@ rtc_library("desktop_capture") { ] } + if (is_haiku) { + sources += [ + "haiku/screen_capturer_haiku_impl.cc", + "screen_capturer_haiku.cc", + "mouse_cursor_monitor_haiku.cc", + "window_capturer_haiku.cc", + ] + libs = [ + "be", + "game", + ] + } + if (rtc_use_x11_extensions) { sources += [ "linux/x11/mouse_cursor_monitor_x11.cc", @@ -403,7 +416,7 @@ rtc_library("desktop_capture") { } if (!is_win && !is_mac && !rtc_use_x11_extensions && !rtc_use_pipewire && - !is_fuchsia) { + !is_fuchsia && !is_haiku) { sources += [ "mouse_cursor_monitor_null.cc", "screen_capturer_null.cc", diff --git a/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.cc b/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.cc new file mode 100644 index 0000000..fe5b937 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.cc @@ -0,0 +1,111 @@ +/* + * Copyright 2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "modules/desktop_capture/haiku/screen_capturer_haiku_impl.h" + +#include +#include + +#include +#include + +#include "modules/desktop_capture/desktop_capture_options.h" +#include "modules/desktop_capture/desktop_capturer.h" +#include "modules/desktop_capture/desktop_frame.h" +#include "modules/desktop_capture/desktop_geometry.h" +#include "modules/desktop_capture/screen_capture_frame_queue.h" +#include "modules/desktop_capture/screen_capturer_helper.h" +#include "modules/desktop_capture/shared_desktop_frame.h" +#include "rtc_base/checks.h" +#include "rtc_base/logging.h" +#include "rtc_base/sanitizer.h" +#include "rtc_base/time_utils.h" +#include "rtc_base/trace_event.h" + +#define MAX_FPS 5 + +namespace webrtc { + +namespace { + +static constexpr DesktopCapturer::SourceId kDirectScreenId = 1; +static constexpr DesktopCapturer::SourceId kGetBitmapScreenId = 2; + +} + +ScreenCapturerHaiku::ScreenCapturerHaiku() { + screen_ = new BScreen(B_MAIN_SCREEN_ID); + bitmap_ = new BBitmap(screen_->Frame(), B_RGB32); + memset(bitmap_->Bits(), 0, bitmap_->BitsLength()); + reader_ = new ScreenReader(screen_); + reader_->Show(); +} + +ScreenCapturerHaiku::~ScreenCapturerHaiku() { + reader_->Lock(); + reader_->Quit(); + delete screen_; + delete bitmap_; +} + +bool ScreenCapturerHaiku::Init(const DesktopCaptureOptions& options) { + options_ = options; + return true; +} + +void ScreenCapturerHaiku::Start(Callback* callback) { + RTC_DCHECK(!callback_); + RTC_DCHECK(callback); + callback_ = callback; + lastShot_ = system_time(); +} + +void ScreenCapturerHaiku::CaptureFrame() { + int64_t capture_start_time_nanos = TimeNanos(); + bigtime_t now_ = system_time(); + if (now_ - lastShot_ > 1000000 / MAX_FPS) { + reader_->ReadBitmap(bitmap_, id_ == kDirectScreenId); + lastShot_ = now_; + } + DesktopRect r = DesktopRect::MakeXYWH(0, 0, bitmap_->Bounds().Width() + 1, bitmap_->Bounds().Height() + 1); + std::unique_ptr frame(new BasicDesktopFrame(r.size())); + frame->CopyPixelsFrom((const uint8_t*)bitmap_->Bits(), bitmap_->BytesPerRow(), r); + frame->set_capture_time_ms((TimeNanos() - capture_start_time_nanos) / kNumNanosecsPerMillisec); + callback_->OnCaptureResult(Result::SUCCESS, std::move(frame)); +} + +bool ScreenCapturerHaiku::GetSourceList(SourceList* sources) { + sources->push_back({kDirectScreenId, 0, std::string("Active Desktop (BDirectWindow)")}); + sources->push_back({kGetBitmapScreenId, 1, std::string("Active Desktop (GetBitmap)")}); + return true; +} + +bool ScreenCapturerHaiku::SelectSource(SourceId id) { + if (id != kDirectScreenId && id != kGetBitmapScreenId) + return false; + + id_ = id; + + return true; +} + + +// static +std::unique_ptr ScreenCapturerHaiku::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + std::unique_ptr capturer(new ScreenCapturerHaiku()); + if (!capturer.get()->Init(options)) { + return nullptr; + } + + return std::move(capturer); +} + +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.h b/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.h new file mode 100644 index 0000000..1f2dbd6 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/haiku/screen_capturer_haiku_impl.h @@ -0,0 +1,96 @@ +/* + * Copyright 2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef MODULES_DESKTOP_CAPTURE_HAIKU_SCREEN_CAPTURER_HAIKU_H_ +#define MODULES_DESKTOP_CAPTURE_HAIKU_SCREEN_CAPTURER_HAIKU_H_ + +#include + +#include "modules/desktop_capture/desktop_capture_options.h" +#include "modules/desktop_capture/desktop_capturer.h" +#include "modules/desktop_capture/desktop_frame.h" +#include "modules/desktop_capture/desktop_region.h" +#include "modules/desktop_capture/screen_capture_frame_queue.h" +#include "modules/desktop_capture/screen_capturer_helper.h" +#include "modules/desktop_capture/shared_desktop_frame.h" + +#pragma GCC visibility push(default) +#include +#include +#include +#include +#include +#pragma GCC visibility pop + +namespace webrtc { + +class ScreenReader: public BDirectWindow { +public: + ScreenReader(BScreen *screen) : BDirectWindow(BRect(-2, -2, -1, -1), "DirectWindow", + B_NO_BORDER_WINDOW_LOOK, window_feel(1025), + B_AVOID_FRONT | B_AVOID_FOCUS | B_NO_WORKSPACE_ACTIVATION, + B_ALL_WORKSPACES), fScreen(screen), fDirectAvailable(false) { }; + virtual void DirectConnected(direct_buffer_info *info) { + switch (info->buffer_state & B_DIRECT_MODE_MASK) { + case B_DIRECT_START: + case B_DIRECT_MODIFY: + fDirectInfo = *info; + fDirectAvailable = true; + break; + case B_DIRECT_STOP: + fDirectAvailable = false; + break; + default: + break; + } + }; + status_t ReadBitmap(BBitmap *bitmap, bool direct) { + if (direct && fDirectAvailable) { + memcpy(bitmap->Bits(), fDirectInfo.bits, bitmap->BitsLength()); + return B_OK; + } + return fScreen->ReadBitmap(bitmap); +}; +private: + BScreen* fScreen; + direct_buffer_info fDirectInfo; + bool fDirectAvailable; +}; + +class ScreenCapturerHaiku : public DesktopCapturer { + public: + ScreenCapturerHaiku(); + ~ScreenCapturerHaiku() override; + + static std::unique_ptr CreateRawScreenCapturer( + const DesktopCaptureOptions& options); + + bool Init(const DesktopCaptureOptions& options); + + void Start(Callback* delegate) override; + void CaptureFrame() override; + bool GetSourceList(SourceList* sources) override; + bool SelectSource(SourceId id) override; + + private: + BScreen* screen_; + BBitmap* bitmap_; + ScreenReader *reader_; + bigtime_t lastShot_; + + SourceId id_; + + DesktopCaptureOptions options_; + Callback* callback_ = nullptr; +}; + +} + +#endif // MODULES_DESKTOP_CAPTURE_HAIKU_SCREEN_CAPTURER_HAIKU_H_ diff --git a/third_party/libwebrtc/modules/desktop_capture/mouse_cursor_monitor_haiku.cc b/third_party/libwebrtc/modules/desktop_capture/mouse_cursor_monitor_haiku.cc new file mode 100644 index 0000000..8ea2aa2 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/mouse_cursor_monitor_haiku.cc @@ -0,0 +1,39 @@ +/* + * Copyright 2018 The WebRTC project authors. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +#include "modules/desktop_capture/desktop_capture_types.h" +#include "modules/desktop_capture/mouse_cursor_monitor.h" +//#include "modules/desktop_capture/haiku/mouse_cursor_monitor.h" + +namespace webrtc { + +// static +MouseCursorMonitor* MouseCursorMonitor::CreateForWindow( + const DesktopCaptureOptions& options, + WindowId window) { + return nullptr; +} + +// static +MouseCursorMonitor* MouseCursorMonitor::CreateForScreen( + const DesktopCaptureOptions& options, + ScreenId screen) { + return nullptr; +} + +// static +std::unique_ptr MouseCursorMonitor::Create( + const DesktopCaptureOptions& options) { + return nullptr; +} + +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/desktop_capture/screen_capturer_haiku.cc b/third_party/libwebrtc/modules/desktop_capture/screen_capturer_haiku.cc new file mode 100644 index 0000000..e30fb04 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/screen_capturer_haiku.cc @@ -0,0 +1,26 @@ +/* + * Copyright 2021 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include + +#include "modules/desktop_capture/desktop_capture_options.h" +#include "modules/desktop_capture/desktop_capturer.h" + +#include "modules/desktop_capture/haiku/screen_capturer_haiku_impl.h" + +namespace webrtc { + +// static +std::unique_ptr DesktopCapturer::CreateRawScreenCapturer( + const DesktopCaptureOptions& options) { + return ScreenCapturerHaiku::CreateRawScreenCapturer(options); +} + +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/desktop_capture/window_capturer_haiku.cc b/third_party/libwebrtc/modules/desktop_capture/window_capturer_haiku.cc new file mode 100644 index 0000000..a89b4a1 --- /dev/null +++ b/third_party/libwebrtc/modules/desktop_capture/window_capturer_haiku.cc @@ -0,0 +1,64 @@ +/* + * Copyright 2021 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "modules/desktop_capture/desktop_capturer.h" +#include "modules/desktop_capture/desktop_frame.h" + +#include + +namespace webrtc { + +namespace { + +class WindowCapturerHaiku : public DesktopCapturer { + public: + WindowCapturerHaiku(); + ~WindowCapturerHaiku() override; + + void Start(Callback* callback) override; + void CaptureFrame() override; + bool GetSourceList(SourceList* sources) override; + bool SelectSource(SourceId id) override; + + private: + Callback* callback_ = nullptr; +}; + +WindowCapturerHaiku::WindowCapturerHaiku() {} +WindowCapturerHaiku::~WindowCapturerHaiku() {} + +bool WindowCapturerHaiku::GetSourceList(SourceList* sources) { + return false; +} + +bool WindowCapturerHaiku::SelectSource(SourceId id) { + return false; +} + +void WindowCapturerHaiku::Start(Callback* callback) { + assert(!callback_); + assert(callback); + + callback_ = callback; +} + +void WindowCapturerHaiku::CaptureFrame() { + callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr); +} + +} // namespace + +// static +std::unique_ptr DesktopCapturer::CreateRawWindowCapturer( + const DesktopCaptureOptions& options) { + return std::unique_ptr(new WindowCapturerHaiku()); +} + +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/video_capture/BUILD.gn b/third_party/libwebrtc/modules/video_capture/BUILD.gn index e32e3ab..d8075f5 100644 --- a/third_party/libwebrtc/modules/video_capture/BUILD.gn +++ b/third_party/libwebrtc/modules/video_capture/BUILD.gn @@ -145,6 +145,20 @@ if (!build_with_chromium || is_linux || is_chromeos) { if (is_fuchsia) { sources += [ "video_capture_factory_null.cc" ] } + if (is_haiku) { + sources += [ + "haiku/video_capture_haiku.cc", + "haiku/video_capture_haiku.h", + "haiku/device_info_haiku.cc", + "haiku/device_info_haiku.h", + ] + + libs = [ + "be", + "media", + "mediahelpers", + ] + } if (!build_with_mozilla && is_android) { include_dirs = [ diff --git a/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.cc b/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.cc new file mode 100644 index 0000000..a9f55e1 --- /dev/null +++ b/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.cc @@ -0,0 +1,157 @@ +/* + * Copyright 2021-2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "modules/video_capture/haiku/device_info_haiku.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "modules/video_capture/video_capture.h" +#include "modules/video_capture/video_capture_defines.h" +#include "modules/video_capture/video_capture_impl.h" +#include "rtc_base/logging.h" + +#define MAX_DORMANT_NODES 32 + +namespace webrtc { +namespace videocapturemodule { +VideoCaptureModule::DeviceInfo* VideoCaptureImpl::CreateDeviceInfo() { + return new videocapturemodule::DeviceInfoHaiku(); +} + +DeviceInfoHaiku::DeviceInfoHaiku() : DeviceInfoImpl() {} + +int32_t DeviceInfoHaiku::Init() { + return 0; +} + +DeviceInfoHaiku::~DeviceInfoHaiku() {} + +uint32_t DeviceInfoHaiku::NumberOfDevices() { + status_t err = B_OK; + + int32_t countDevices = 0; + + dormant_node_info dni[MAX_DORMANT_NODES]; + int32 ioCount = MAX_DORMANT_NODES; + media_format out; + out.type = B_MEDIA_RAW_VIDEO; + err = BMediaRoster::Roster()->GetDormantNodes(dni, &ioCount, 0, &out, 0, B_BUFFER_PRODUCER); + if (err < B_OK) + return countDevices; + + for (int ix = 0; ix < ioCount; ix++) { + media_node_id running = -1; + if ((B_OK == BMediaRoster::CurrentRoster()->GetInstancesFor( + dni[ix].addon, dni[ix].flavor_id, &running)) && (running > -1)) { + media_node node; + BMediaRoster::CurrentRoster()->GetNodeFor(running, &node); + int32 count = 1; + media_output videoOutput; + BMediaRoster::CurrentRoster()->GetAllOutputsFor(node, &videoOutput, 1, &count); + if (count > 0) + countDevices++; + BMediaRoster::CurrentRoster()->ReleaseNode(node); + } + } + + return countDevices; +} + +int32_t DeviceInfoHaiku::GetDeviceName(uint32_t deviceNumber, + char* deviceNameUTF8, + uint32_t deviceNameLength, + char* deviceUniqueIdUTF8, + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8, + uint32_t productUniqueIdUTF8Length, + pid_t* pid, + bool* deviceIsPlaceholder) { + if (deviceNumber >= NumberOfDevices()) + return -1; + + status_t err = B_OK; + + int32_t countDevices = 0; + + media_output videoOutput; + + dormant_node_info dni[MAX_DORMANT_NODES]; + int32 ioCount = MAX_DORMANT_NODES; + media_format out; + out.type = B_MEDIA_RAW_VIDEO; + err = BMediaRoster::Roster()->GetDormantNodes(dni, &ioCount, 0, &out, 0, B_BUFFER_PRODUCER); + if (err < B_OK) + return countDevices; + + err = B_ERROR; + + for (int ix = 0; ix < ioCount; ix++) { + media_node_id running = -1; + if ((B_OK == BMediaRoster::CurrentRoster()->GetInstancesFor( + dni[ix].addon, dni[ix].flavor_id, &running)) && (running > -1)) { + media_node node; + BMediaRoster::CurrentRoster()->GetNodeFor(running, &node); + int32 count = 1; + BMediaRoster::CurrentRoster()->GetAllOutputsFor(node, &videoOutput, 1, &count); + BMediaRoster::CurrentRoster()->ReleaseNode(node); + if (count > 0) { + if (countDevices == deviceNumber) { + if (deviceNameLength > strlen(videoOutput.name)) { + strncpy(deviceNameUTF8, videoOutput.name, deviceNameLength); + strncpy(deviceUniqueIdUTF8, videoOutput.name, deviceUniqueIdUTF8Length); + err = B_OK; + } else + err = B_ERROR; + break; + } + countDevices++; + } + BMediaRoster::CurrentRoster()->ReleaseNode(node); + } + } + return err == B_OK ? 0 : -1; +} + +int32_t DeviceInfoHaiku::CreateCapabilityMap(const char* deviceUniqueIdUTF8) { + _captureCapabilities.clear(); + + unsigned int size[][2] = {{352, 288}, {640, 480}, {1280, 720}, {1920, 1080}, {0, 0}}; + + for (int i = 0; size[i][0] != 0; i++) { + VideoCaptureCapability cap; + cap.width = size[i][0]; + cap.height = size[i][1]; + cap.maxFPS = 30; + cap.videoType = VideoType::kARGB; + _captureCapabilities.push_back(cap); + } + + return _captureCapabilities.size(); +} + +int32_t DeviceInfoHaiku::DisplayCaptureSettingsDialogBox( + const char* deviceUniqueIdUTF8, + const char* dialogTitleUTF8, + void* parentWindow, + uint32_t positionX, + uint32_t positionY) { + return -1; +} + +} // namespace videocapturemodule +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.h b/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.h new file mode 100644 index 0000000..cdf5adb --- /dev/null +++ b/third_party/libwebrtc/modules/video_capture/haiku/device_info_haiku.h @@ -0,0 +1,63 @@ +/* + * Copyright 2021-2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_DEVICE_INFO_HAIKU_H_ +#define MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_DEVICE_INFO_HAIKU_H_ + +#include + +#pragma GCC visibility push(default) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#pragma GCC visibility pop + +#include "modules/video_capture/device_info_impl.h" +#include "rtc_base/logging.h" + +namespace webrtc { +namespace videocapturemodule { + +class DeviceInfoHaiku : public DeviceInfoImpl { + public: + DeviceInfoHaiku(); + ~DeviceInfoHaiku() override; + uint32_t NumberOfDevices() override; + int32_t GetDeviceName(uint32_t deviceNumber, + char* deviceNameUTF8, + uint32_t deviceNameLength, + char* deviceUniqueIdUTF8, + uint32_t deviceUniqueIdUTF8Length, + char* productUniqueIdUTF8 = 0, + uint32_t productUniqueIdUTF8Length = 0, + pid_t* pid = 0, + bool* deviceIsPlaceholder = 0) override; + int32_t CreateCapabilityMap(const char* deviceUniqueIdUTF8) override; + int32_t DisplayCaptureSettingsDialogBox(const char*, + const char*, + void*, + uint32_t, + uint32_t) override; + int32_t Init() override; +}; +} // namespace videocapturemodule +} // namespace webrtc +#endif // MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_DEVICE_INFO_HAIKU_H_ diff --git a/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.cc b/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.cc new file mode 100644 index 0000000..121c925 --- /dev/null +++ b/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.cc @@ -0,0 +1,214 @@ +/* + * Copyright 2021-2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#include "modules/video_capture/haiku/video_capture_haiku.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "api/scoped_refptr.h" +#include "media/base/video_common.h" +#include "modules/video_capture/video_capture.h" +#include "rtc_base/logging.h" +#include "rtc_base/ref_counted_object.h" + +namespace webrtc { +namespace videocapturemodule { +scoped_refptr VideoCaptureImpl::Create( + Clock* clock, + const char* deviceUniqueId) { + + auto implementation = make_ref_counted(clock); + + if (implementation->Init(deviceUniqueId) != 0) + return nullptr; + + return implementation; +} + +VideoCaptureModuleHaiku::VideoCaptureModuleHaiku(Clock* clock) + : VideoCaptureImpl(clock), + _currentWidth(-1), + _currentHeight(-1), + _currentFrameRate(-1), + _captureStarted(false), + _captureVideoType(VideoType::kARGB) {} + +int32_t VideoCaptureModuleHaiku::Init(const char* deviceUniqueIdUTF8) { + int len = strlen((const char*)deviceUniqueIdUTF8); + _deviceUniqueId = new (std::nothrow) char[len + 1]; + if (_deviceUniqueId) { + memcpy(_deviceUniqueId, deviceUniqueIdUTF8, len + 1); + } + + return 0; +} + +VideoCaptureModuleHaiku::~VideoCaptureModuleHaiku() { + StopCapture(); +} + + +void MyFrameCallback(BBitmap* frame, void* userData) { + webrtc::videocapturemodule::VideoCaptureImpl *fVideoCapture = (webrtc::videocapturemodule::VideoCaptureImpl*)userData; + + webrtc::VideoCaptureCapability frameInfo; + frameInfo.width = frame->Bounds().Width() + 1; + frameInfo.height = frame->Bounds().Height() + 1; + frameInfo.videoType = webrtc::VideoType::kARGB; + + fVideoCapture->IncomingFrame((unsigned char*)frame->Bits(), frame->BitsLength(), frameInfo); +} + +int32_t VideoCaptureModuleHaiku::StartCapture( + const VideoCaptureCapability& capability) { + if (_captureStarted) { + if (capability.width == _currentWidth && + capability.height == _currentHeight && + _captureVideoType == capability.videoType) { + return 0; + } else { + StopCapture(); + } + } + + _currentWidth = capability.width; + _currentHeight = capability.height; + _currentFrameRate = 30; + + status_t fStatus; + fMediaRoster = BMediaRoster::Roster(&fStatus); + if (fStatus != B_OK) + return -1; + + media_node fTimeSource; + fStatus = fMediaRoster->GetTimeSource(&fTimeSource); + if (fStatus != B_OK) + return -1; + + fVideoConsumer = new VideoConsumer("Iceweasel", NULL, 0); + fVideoConsumer->SetFrameCallback(MyFrameCallback, (void*)this); + + dormant_node_info dni[30]; + int32 ioCount = 30; + media_format out; + out.type = B_MEDIA_RAW_VIDEO; + fStatus = BMediaRoster::Roster()->GetDormantNodes(dni, &ioCount, 0, &out, 0, B_BUFFER_PRODUCER); + if (fStatus < B_OK) + return -1; + + fStatus = B_ERROR; + for (int ix=0; ixGetInstancesFor( + dni[ix].addon, dni[ix].flavor_id, &running)) && (running > -1)) { + BMediaRoster::CurrentRoster()->GetNodeFor(running, &fProducerNode); + int32 count = 1; + BMediaRoster::CurrentRoster()->GetFreeOutputsFor( + fProducerNode, &videoOutput, 1, &count, B_MEDIA_RAW_VIDEO); + if (count > 0) { + if (strcmp(videoOutput.name, _deviceUniqueId) == 0) { + fStatus = B_OK; + break; + } + } + BMediaRoster::CurrentRoster()->ReleaseNode(fProducerNode); + } + } + if (fStatus != B_OK) + return -1; + + fStatus = fMediaRoster->RegisterNode(fVideoConsumer); + if (fStatus != B_OK) + return -1; + fConsumerNode = fVideoConsumer->Node(); + + int32 count = 1; + fStatus = fMediaRoster->GetFreeInputsFor(fConsumerNode, &videoInput, 1, &count, B_MEDIA_RAW_VIDEO); + if (fStatus != B_OK || count < 1) + return -1; + + // connect the nodes + media_format format; + format.type = B_MEDIA_RAW_VIDEO; + media_raw_video_format videoFormat = { + 30.0f, 1, 0, + (uint32)(_currentWidth - 1), + B_VIDEO_TOP_LEFT_RIGHT, 1, 1, + { + B_RGB32, + (uint32)(_currentWidth), + (uint32)(_currentHeight), + 0, 0, 0 + } + }; + format.u.raw_video = videoFormat; + + fStatus = fMediaRoster->Connect(videoOutput.source, videoInput.destination, + &format, &videoOutput, &videoInput); + + if (fStatus != B_OK) + return -1; + + timeSource = fMediaRoster->MakeTimeSourceFor(fTimeSource); + bigtime_t real = BTimeSource::RealTime(); + bigtime_t perf = timeSource->PerformanceTimeFor(real) + 3000000; + + fStatus = fMediaRoster->StartNode(fConsumerNode, perf); + if (fStatus != B_OK) + return -1; + + fStatus = fMediaRoster->StopNode(fProducerNode, perf, true); + fStatus = fMediaRoster->StartNode(fProducerNode, perf); + if (fStatus != B_OK) + return -1; + + _captureStarted = true; + return 0; +} + +int32_t VideoCaptureModuleHaiku::StopCapture() { + if (_captureStarted) { + fMediaRoster->StopNode(fProducerNode, BTimeSource::RealTime(), true); + fMediaRoster->Disconnect(fProducerNode.node, videoOutput.source, + fConsumerNode.node, videoInput.destination); + fMediaRoster->UnregisterNode(fVideoConsumer); + delete fVideoConsumer; + _captureStarted = false; + } + + return 0; +} + +bool VideoCaptureModuleHaiku::CaptureStarted() { + return _captureStarted; +} + +int32_t VideoCaptureModuleHaiku::CaptureSettings( + VideoCaptureCapability& settings) { + settings.width = _currentWidth; + settings.height = _currentHeight; + settings.maxFPS = _currentFrameRate; + settings.videoType = _captureVideoType; + + return 0; +} +} // namespace videocapturemodule +} // namespace webrtc diff --git a/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.h b/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.h new file mode 100644 index 0000000..5a1cef6 --- /dev/null +++ b/third_party/libwebrtc/modules/video_capture/haiku/video_capture_haiku.h @@ -0,0 +1,74 @@ +/* + * Copyright 2021-2025 Gerasim Troeglazov + * + * Use of this source code is governed by a BSD-style license + * that can be found in the LICENSE file in the root of the source + * tree. An additional intellectual property rights grant can be found + * in the file PATENTS. All contributing project authors may + * be found in the AUTHORS file in the root of the source tree. + */ + +#ifndef MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_VIDEO_CAPTURE_HAIKU_H_ +#define MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_VIDEO_CAPTURE_HAIKU_H_ + +#include +#include + +#include + +#pragma GCC visibility push(default) +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#pragma GCC visibility pop + +#include "modules/video_capture/video_capture_defines.h" +#include "modules/video_capture/video_capture_impl.h" +#include "rtc_base/platform_thread.h" +#include "rtc_base/synchronization/mutex.h" +#include "system_wrappers/include/clock.h" + +namespace webrtc { +namespace videocapturemodule { +class VideoCaptureModuleHaiku : public VideoCaptureImpl { + public: + VideoCaptureModuleHaiku(Clock* clock); + ~VideoCaptureModuleHaiku() override; + int32_t Init(const char* deviceUniqueId); + int32_t StartCapture(const VideoCaptureCapability& capability) override; + int32_t StopCapture() override; + bool CaptureStarted() override; + int32_t CaptureSettings(VideoCaptureCapability& settings) override; + + private: + BMediaRoster *fMediaRoster; + VideoConsumer *fVideoConsumer; + BTimeSource* timeSource; + media_node fProducerNode; + media_node fConsumerNode; + media_input videoInput; + media_output videoOutput; + + int32_t _currentWidth; + int32_t _currentHeight; + int32_t _currentFrameRate; + bool _captureStarted; + VideoType _captureVideoType; +}; +} // namespace videocapturemodule +} // namespace webrtc + +#endif // MODULES_VIDEO_CAPTURE_MAIN_SOURCE_HAIKU_VIDEO_CAPTURE_HAIKU_H_ diff --git a/third_party/libwebrtc/modules/video_capture/video_capture_factory.cc b/third_party/libwebrtc/modules/video_capture/video_capture_factory.cc index 98e5e5e..36392e6 100644 --- a/third_party/libwebrtc/modules/video_capture/video_capture_factory.cc +++ b/third_party/libwebrtc/modules/video_capture/video_capture_factory.cc @@ -28,7 +28,7 @@ scoped_refptr VideoCaptureFactory::Create( [[maybe_unused]] const char* deviceUniqueIdUTF8) { // This is only implemented on pure Linux and WEBRTC_LINUX is defined for // Android as well -#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)) || defined(WEBRTC_ANDROID) +#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD) && !defined(WEBRTC_HAIKU)) || defined(WEBRTC_ANDROID) return nullptr; #else return videocapturemodule::VideoCaptureImpl::Create( @@ -44,7 +44,7 @@ VideoCaptureModule::DeviceInfo* VideoCaptureFactory::CreateDeviceInfo( [[maybe_unused]] VideoCaptureOptions* options) { // This is only implemented on pure Linux and WEBRTC_LINUX is defined for // Android as well -#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD)) || defined(WEBRTC_ANDROID) +#if (!defined(WEBRTC_LINUX) && !defined(WEBRTC_BSD) && !defined(WEBRTC_HAIKU)) || defined(WEBRTC_ANDROID) return nullptr; #else return videocapturemodule::VideoCaptureImpl::CreateDeviceInfo(options); diff --git a/third_party/libwebrtc/rtc_base/BUILD.gn b/third_party/libwebrtc/rtc_base/BUILD.gn index b2a85d2..7390f69 100644 --- a/third_party/libwebrtc/rtc_base/BUILD.gn +++ b/third_party/libwebrtc/rtc_base/BUILD.gn @@ -1184,6 +1184,10 @@ rtc_library("ifaddrs_converter") { "ifaddrs_converter.h", ] } + + if (is_haiku) { + defines = [ "_BSD_SOURCE" ] + } } rtc_library("rolling_accumulator") { diff --git a/third_party/libwebrtc/rtc_base/logging.cc b/third_party/libwebrtc/rtc_base/logging.cc index c3a1f94..e450e83 100644 --- a/third_party/libwebrtc/rtc_base/logging.cc +++ b/third_party/libwebrtc/rtc_base/logging.cc @@ -114,7 +114,11 @@ std::string LogLineRef::DefaultLogLine() const { log_output << timestamp; } if (thread_id_.has_value()) { +#ifdef WEBRTC_HAIKU + log_output << "[" << (uint64_t)(*thread_id_) << "] "; +#else log_output << "[" << *thread_id_ << "] "; +#endif } if (!filename_.empty()) { #if defined(WEBRTC_ANDROID) diff --git a/third_party/libwebrtc/rtc_base/physical_socket_server.cc b/third_party/libwebrtc/rtc_base/physical_socket_server.cc index 069504d..64faa06 100644 --- a/third_party/libwebrtc/rtc_base/physical_socket_server.cc +++ b/third_party/libwebrtc/rtc_base/physical_socket_server.cc @@ -78,7 +78,7 @@ typedef void* SockOptArg; #endif // WEBRTC_POSIX -#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) +#if defined(WEBRTC_POSIX) && !defined(WEBRTC_MAC) && !defined(WEBRTC_BSD) && !defined(__HAIKU__) #if defined(WEBRTC_LINUX) #include #endif @@ -375,7 +375,7 @@ int PhysicalSocket::SetOption(Option opt, int value) { ecn_ = value; value = dscp_ + (ecn_ & kEcnMask); } -#if defined(WEBRTC_POSIX) +#if defined(WEBRTC_POSIX) && !defined(__HAIKU__) if (sopt == IPV6_TCLASS) { // Set the IPv4 option in all cases to support dual-stack sockets. // Don't bother checking the return code, as this is expected to fail if @@ -519,7 +519,7 @@ int PhysicalSocket::DoReadFromSocket(void* buffer, socklen_t addr_len = sizeof(addr_storage); sockaddr* addr = reinterpret_cast(&addr_storage); -#if defined(WEBRTC_POSIX) +#if defined(WEBRTC_POSIX) && !defined(WEBRTC_HAIKU) int received = 0; iovec iov = {.iov_base = buffer, .iov_len = length}; msghdr msg = {.msg_iov = &iov, .msg_iovlen = 1}; @@ -704,7 +704,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) { #elif defined(WEBRTC_MAC) || defined(WEBRTC_BSD) RTC_LOG(LS_WARNING) << "Socket::OPT_DONTFRAGMENT not supported."; return -1; -#elif defined(WEBRTC_POSIX) +#elif defined(WEBRTC_POSIX) && !defined(__HAIKU__) *slevel = IPPROTO_IP; *sopt = IP_MTU_DISCOVER; break; @@ -722,7 +722,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) { *sopt = TCP_NODELAY; break; case OPT_DSCP: -#if defined(WEBRTC_POSIX) +#if defined(WEBRTC_POSIX) && !defined(__HAIKU__) if (family_ == AF_INET6) { *slevel = IPPROTO_IPV6; *sopt = IPV6_TCLASS; @@ -736,7 +736,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) { return -1; #endif case OPT_SEND_ECN: -#if defined(WEBRTC_POSIX) +#if defined(WEBRTC_POSIX) && !defined(__HAIKU__) if (family_ == AF_INET6) { *slevel = IPPROTO_IPV6; *sopt = IPV6_TCLASS; @@ -750,7 +750,7 @@ int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) { return -1; #endif case OPT_RECV_ECN: -#if defined(WEBRTC_POSIX) +#if defined(WEBRTC_POSIX) && !defined(__HAIKU__) if (family_ == AF_INET6) { *slevel = IPPROTO_IPV6; *sopt = IPV6_RECVTCLASS; @@ -769,22 +769,30 @@ int PhysicalSocket::TranslateOption(Option opt, int* slevel, int* sopt) { *slevel = SOL_SOCKET; *sopt = SO_KEEPALIVE; break; +#if !defined(WEBRTC_HAIKU) case OPT_TCP_KEEPCNT: *slevel = IPPROTO_TCP; *sopt = TCP_KEEPCNT; break; +#endif case OPT_TCP_KEEPIDLE: *slevel = IPPROTO_TCP; +#if defined(WEBRTC_HAIKU) + *sopt = SO_KEEPALIVE; +#else #if !defined(WEBRTC_MAC) *sopt = TCP_KEEPIDLE; #else *sopt = TCP_KEEPALIVE; +#endif #endif break; +#if !defined(WEBRTC_HAIKU) case OPT_TCP_KEEPINTVL: *slevel = IPPROTO_TCP; *sopt = TCP_KEEPINTVL; break; +#endif case OPT_TCP_USER_TIMEOUT: #if defined(WEBRTC_LINUX) || defined(WEBRTC_ANDROID) *slevel = IPPROTO_TCP; @@ -833,7 +841,7 @@ bool SocketDispatcher::Initialize() { #if defined(WEBRTC_WIN) u_long argp = 1; ioctlsocket(s_, FIONBIO, &argp); -#elif defined(WEBRTC_POSIX) +#elif defined(WEBRTC_POSIX) && !defined(WEBRTC_HAIKU) fcntl(s_, F_SETFL, fcntl(s_, F_GETFL, 0) | O_NONBLOCK); int value = 1; // Attempt to get receive packet timestamp from the socket. diff --git a/third_party/libwebrtc/rtc_base/platform_thread_types.cc b/third_party/libwebrtc/rtc_base/platform_thread_types.cc index 697beda..054989e 100644 --- a/third_party/libwebrtc/rtc_base/platform_thread_types.cc +++ b/third_party/libwebrtc/rtc_base/platform_thread_types.cc @@ -21,6 +21,10 @@ #endif #endif +#if defined(WEBRTC_HAIKU) +#include +#endif + #if defined(WEBRTC_WIN) #include @@ -50,6 +54,8 @@ PlatformThreadId CurrentThreadId() { return gettid(); #elif defined(WEBRTC_FUCHSIA) return zx_thread_self(); +#elif defined(WEBRTC_HAIKU) + return find_thread(NULL); #elif defined(WEBRTC_LINUX) return syscall(__NR_gettid); #elif defined(__EMSCRIPTEN__) @@ -124,6 +130,8 @@ void SetCurrentThreadName(const char* name) { prctl(PR_SET_NAME, reinterpret_cast(name)); // NOLINT #elif defined(WEBRTC_MAC) || defined(WEBRTC_IOS) pthread_setname_np(name); +#elif defined(WEBRTC_HAIKU) + rename_thread(find_thread(NULL), name); #elif defined(WEBRTC_FUCHSIA) zx_status_t status = zx_object_set_property(zx_thread_self(), ZX_PROP_NAME, name, strlen(name)); diff --git a/third_party/libwebrtc/webrtc.gni b/third_party/libwebrtc/webrtc.gni index 0f8d25a..154356f 100644 --- a/third_party/libwebrtc/webrtc.gni +++ b/third_party/libwebrtc/webrtc.gni @@ -132,7 +132,7 @@ declare_args() { rtc_build_tools = false # Set this to false to skip building code that requires X11. - rtc_use_x11 = ozone_platform_x11 + rtc_use_x11 = ozone_platform_x11 && !is_haiku # Set this to use PipeWire on the Wayland display server. # By default it's only enabled on desktop Linux (excludes ChromeOS) and @@ -349,7 +349,7 @@ rtc_opus_dir = "//third_party/opus" # Desktop capturer is supported only on Windows, OSX and Linux. rtc_desktop_capture_supported = - (is_win && current_os != "winuwp") || is_mac || is_bsd || + (is_win && current_os != "winuwp") || is_mac || is_bsd || is_haiku || ((is_linux || is_chromeos) && (rtc_use_x11_extensions || rtc_use_pipewire)) ############################################################################### diff --git a/third_party/llama.cpp/src/llama-mmap.cpp b/third_party/llama.cpp/src/llama-mmap.cpp index 519e81b..6389354 100644 --- a/third_party/llama.cpp/src/llama-mmap.cpp +++ b/third_party/llama.cpp/src/llama-mmap.cpp @@ -23,6 +23,10 @@ #endif #endif +#ifdef __HAIKU__ +#undef _POSIX_MEMLOCK_RANGE +#endif + #if defined(_WIN32) #define WIN32_LEAN_AND_MEAN #ifndef NOMINMAX @@ -448,7 +452,7 @@ void * llama_mmap::addr() const { return pimpl->addr; } void llama_mmap::unmap_fragment(size_t first, size_t last) { pimpl->unmap_fragment(first, last); } -#if defined(_POSIX_MEMLOCK_RANGE) || defined(_WIN32) +#if defined(_POSIX_MEMLOCK_RANGE) || defined(_WIN32) || defined(__HAIKU__) const bool llama_mmap::SUPPORTED = true; #else const bool llama_mmap::SUPPORTED = false; diff --git a/third_party/pipewire/pipewire/utils.h b/third_party/pipewire/pipewire/utils.h index 528f676..8807d9c 100644 --- a/third_party/pipewire/pipewire/utils.h +++ b/third_party/pipewire/pipewire/utils.h @@ -12,7 +12,7 @@ extern "C" { #include #include #include -#ifndef _POSIX_C_SOURCE +#if !defined(_POSIX_C_SOURCE) && !defined(__HAIKU__) # include #endif #include diff --git a/third_party/rust/glslopt/.cargo-checksum.json b/third_party/rust/glslopt/.cargo-checksum.json index e3300c7..68175e2 100644 --- a/third_party/rust/glslopt/.cargo-checksum.json +++ b/third_party/rust/glslopt/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","Cargo.toml.orig":"c46463ed28492baaaa17c772384cd1654093f96e900cefdb13d578e10561974f","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"} \ No newline at end of file +{"files":{".cargo_vcs_info.json":"7075d1c5c5e19288cefb431f16462eaa23229d02791120f4885ab1d20470cb7e",".gitmodules":"ffc0cce90e856d4f4bdb3bd3c950c9e59501a45ebd5022b91cfe8c07c79ef1ac","Cargo.lock":"f7970552595dc803ace9ef19b5f5d7b1fc784aac30cb27b2ebc3002d97122b9d","Cargo.toml":"335d14cea36b15461ff15802c159d1372c539e0dc40c2cd32938d4274f56b66e","Cargo.toml.orig":"7c53ee20d848f9913cacbfcb3ab2e89e30deee8d619d173c95130c7c5d065827","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"92e29699487c21389fc823c50b410cfbfc74cc774265d24958489909ee48a076","glsl-optimizer/.editorconfig":"dca7ff05a95f608849c4dc640af7f83a0f415618e327a2ecb6a0afa0d9d2bacb","glsl-optimizer/.gitignore":"8ba554a4ca510ea7d9684475aa043edbeba7d15a5c9c4a04d8b1379a04ec6270","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/.editorconfig":"f96a2354e5f2b90367d643e6d9e980ce76278d4d47afd8b2713b595753aa8b4b","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"4a76d998a4f1952085c3377a30c7944dbfc0422b5418a6a13e3280a497bc5f2f","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"420a4320adfc37f89cfbf761f289651600b773468f2f881a1f7e9afa377987f5","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"4f334f6cd005b5703e41fa145f761f882b7f3a15e61c3234773af4f4adde1036","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"8ba4741358604ca0848c27ecc069d68e62e11cde81e38aac1da3c54b79ab5adf"} diff --git a/third_party/rust/glslopt/Cargo.toml b/third_party/rust/glslopt/Cargo.toml index a5a4b99..5a2fca4 100644 --- a/third_party/rust/glslopt/Cargo.toml +++ b/third_party/rust/glslopt/Cargo.toml @@ -9,6 +9,11 @@ # will likely look very different (and much more reasonable). # See Cargo.toml.orig for the original contents. +bin = [] +example = [] +test = [] +bench = [] + [package] edition = "2018" name = "glslopt" @@ -36,5 +41,5 @@ repository = "https://github.com/jamienicol/glslopt-rs" name = "glslopt" path = "src/lib.rs" -[build-dependencies.cc] -version = "1.0" +[build-dependencies] +cc = "1.0" diff --git a/third_party/rust/glslopt/Cargo.toml.orig b/third_party/rust/glslopt/Cargo.toml.orig index 452381f..a5a4b99 100644 --- a/third_party/rust/glslopt/Cargo.toml.orig +++ b/third_party/rust/glslopt/Cargo.toml.orig @@ -1,12 +1,40 @@ +# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO +# +# When uploading crates to the registry Cargo will automatically +# "normalize" Cargo.toml files for maximal compatibility +# with all versions of Cargo and also rewrite `path` dependencies +# to registry (e.g., crates.io) dependencies. +# +# If you are reading this file be aware that the original Cargo.toml +# will likely look very different (and much more reasonable). +# See Cargo.toml.orig for the original contents. + [package] +edition = "2018" name = "glslopt" version = "0.1.12" authors = ["Jamie Nicol "] -edition = "2018" -license = "MIT" +build = "build.rs" +autolib = false +autobins = false +autoexamples = false +autotests = false +autobenches = false description = "Optimizes GLSL shader code" -keywords = ["opengl", "gl", "gles", "glsl", "shader"] +readme = "README.md" +keywords = [ + "opengl", + "gl", + "gles", + "glsl", + "shader", +] +license = "MIT" repository = "https://github.com/jamienicol/glslopt-rs" -[build-dependencies] -cc = "1.0" +[lib] +name = "glslopt" +path = "src/lib.rs" + +[build-dependencies.cc] +version = "1.0" diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp index 3dafcf0..cc6fe4b 100644 --- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp +++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp @@ -735,7 +735,7 @@ fp64(const _mesa_glsl_parse_state *state) } static bool -int64(const _mesa_glsl_parse_state *state) +int64_(const _mesa_glsl_parse_state *state) { return state->has_int64(); } @@ -1617,10 +1617,10 @@ builtin_builder::create_builtins() _##NAME(fp64, glsl_type::dvec2_type), \ _##NAME(fp64, glsl_type::dvec3_type), \ _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec2_type), \ - _##NAME(int64, glsl_type::i64vec3_type), \ - _##NAME(int64, glsl_type::i64vec4_type), \ + _##NAME(int64_, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec2_type), \ + _##NAME(int64_, glsl_type::i64vec3_type), \ + _##NAME(int64_, glsl_type::i64vec4_type), \ NULL); #define FIUD_VEC(NAME) \ @@ -1639,14 +1639,14 @@ builtin_builder::create_builtins() _##NAME(fp64, glsl_type::dvec2_type), \ _##NAME(fp64, glsl_type::dvec3_type), \ _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec2_type), \ - _##NAME(int64, glsl_type::i64vec3_type), \ - _##NAME(int64, glsl_type::i64vec4_type), \ - _##NAME(int64, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec2_type), \ - _##NAME(int64, glsl_type::u64vec3_type), \ - _##NAME(int64, glsl_type::u64vec4_type), \ + _##NAME(int64_, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec2_type), \ + _##NAME(int64_, glsl_type::i64vec3_type), \ + _##NAME(int64_, glsl_type::i64vec4_type), \ + _##NAME(int64_, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec2_type), \ + _##NAME(int64_, glsl_type::u64vec3_type), \ + _##NAME(int64_, glsl_type::u64vec4_type), \ NULL); #define IU(NAME) \ @@ -1683,14 +1683,14 @@ builtin_builder::create_builtins() _##NAME(fp64, glsl_type::dvec2_type), \ _##NAME(fp64, glsl_type::dvec3_type), \ _##NAME(fp64, glsl_type::dvec4_type), \ - _##NAME(int64, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec2_type), \ - _##NAME(int64, glsl_type::i64vec3_type), \ - _##NAME(int64, glsl_type::i64vec4_type), \ - _##NAME(int64, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec2_type), \ - _##NAME(int64, glsl_type::u64vec3_type), \ - _##NAME(int64, glsl_type::u64vec4_type), \ + _##NAME(int64_, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec2_type), \ + _##NAME(int64_, glsl_type::i64vec3_type), \ + _##NAME(int64_, glsl_type::i64vec4_type), \ + _##NAME(int64_, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec2_type), \ + _##NAME(int64_, glsl_type::u64vec3_type), \ + _##NAME(int64_, glsl_type::u64vec4_type), \ NULL); #define FIUD2_MIXED(NAME) \ @@ -1730,20 +1730,20 @@ builtin_builder::create_builtins() _##NAME(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), \ _##NAME(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), \ \ - _##NAME(int64, glsl_type::int64_t_type, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec2_type, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec3_type, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec4_type, glsl_type::int64_t_type), \ - _##NAME(int64, glsl_type::i64vec2_type, glsl_type::i64vec2_type), \ - _##NAME(int64, glsl_type::i64vec3_type, glsl_type::i64vec3_type), \ - _##NAME(int64, glsl_type::i64vec4_type, glsl_type::i64vec4_type), \ - _##NAME(int64, glsl_type::uint64_t_type, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec2_type, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec3_type, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec4_type, glsl_type::uint64_t_type), \ - _##NAME(int64, glsl_type::u64vec2_type, glsl_type::u64vec2_type), \ - _##NAME(int64, glsl_type::u64vec3_type, glsl_type::u64vec3_type), \ - _##NAME(int64, glsl_type::u64vec4_type, glsl_type::u64vec4_type), \ + _##NAME(int64_, glsl_type::int64_t_type, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec2_type, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec3_type, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec4_type, glsl_type::int64_t_type), \ + _##NAME(int64_, glsl_type::i64vec2_type, glsl_type::i64vec2_type), \ + _##NAME(int64_, glsl_type::i64vec3_type, glsl_type::i64vec3_type), \ + _##NAME(int64_, glsl_type::i64vec4_type, glsl_type::i64vec4_type), \ + _##NAME(int64_, glsl_type::uint64_t_type, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec2_type, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec3_type, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec4_type, glsl_type::uint64_t_type), \ + _##NAME(int64_, glsl_type::u64vec2_type, glsl_type::u64vec2_type), \ + _##NAME(int64_, glsl_type::u64vec3_type, glsl_type::u64vec3_type), \ + _##NAME(int64_, glsl_type::u64vec4_type, glsl_type::u64vec4_type), \ NULL); F(radians) @@ -1865,15 +1865,15 @@ builtin_builder::create_builtins() _mix_sel(shader_integer_mix, glsl_type::bvec3_type, glsl_type::bvec3_type), _mix_sel(shader_integer_mix, glsl_type::bvec4_type, glsl_type::bvec4_type), - _mix_sel(int64, glsl_type::int64_t_type, glsl_type::bool_type), - _mix_sel(int64, glsl_type::i64vec2_type, glsl_type::bvec2_type), - _mix_sel(int64, glsl_type::i64vec3_type, glsl_type::bvec3_type), - _mix_sel(int64, glsl_type::i64vec4_type, glsl_type::bvec4_type), + _mix_sel(int64_, glsl_type::int64_t_type, glsl_type::bool_type), + _mix_sel(int64_, glsl_type::i64vec2_type, glsl_type::bvec2_type), + _mix_sel(int64_, glsl_type::i64vec3_type, glsl_type::bvec3_type), + _mix_sel(int64_, glsl_type::i64vec4_type, glsl_type::bvec4_type), - _mix_sel(int64, glsl_type::uint64_t_type, glsl_type::bool_type), - _mix_sel(int64, glsl_type::u64vec2_type, glsl_type::bvec2_type), - _mix_sel(int64, glsl_type::u64vec3_type, glsl_type::bvec3_type), - _mix_sel(int64, glsl_type::u64vec4_type, glsl_type::bvec4_type), + _mix_sel(int64_, glsl_type::uint64_t_type, glsl_type::bool_type), + _mix_sel(int64_, glsl_type::u64vec2_type, glsl_type::bvec2_type), + _mix_sel(int64_, glsl_type::u64vec3_type, glsl_type::bvec3_type), + _mix_sel(int64_, glsl_type::u64vec4_type, glsl_type::bvec4_type), NULL); add_function("step", @@ -1973,10 +1973,10 @@ builtin_builder::create_builtins() add_function("packDouble2x32", _packDouble2x32(fp64), NULL); add_function("unpackDouble2x32", _unpackDouble2x32(fp64), NULL); - add_function("packInt2x32", _packInt2x32(int64), NULL); - add_function("unpackInt2x32", _unpackInt2x32(int64), NULL); - add_function("packUint2x32", _packUint2x32(int64), NULL); - add_function("unpackUint2x32", _unpackUint2x32(int64), NULL); + add_function("packInt2x32", _packInt2x32(int64_), NULL); + add_function("unpackInt2x32", _unpackInt2x32(int64_), NULL); + add_function("packUint2x32", _packUint2x32(int64_), NULL); + add_function("unpackUint2x32", _unpackUint2x32(int64_), NULL); FD(length) FD(distance) diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h b/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h index 6bbae3c..d1540e9 100644 --- a/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h +++ b/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h @@ -27,7 +27,7 @@ #ifndef U_ENDIAN_H #define U_ENDIAN_H -#ifdef HAVE_ENDIAN_H +#if defined(HAVE_ENDIAN_H) || defined(__HAIKU__) #include #if __BYTE_ORDER == __LITTLE_ENDIAN diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h b/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h index 42d9e34..240bd41 100644 --- a/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h +++ b/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h @@ -676,6 +676,9 @@ util_memcpy_cpu_to_le32(void * restrict dest, const void * restrict src, size_t #define MAX4( A, B, C, D ) ((A) > (B) ? MAX3(A, C, D) : MAX3(B, C, D)) +#ifdef __HAIKU__ +#undef ALIGN +#endif /** * Align a value up to an alignment value * diff --git a/third_party/rust/iana-time-zone-haiku/.cargo-checksum.json b/third_party/rust/iana-time-zone-haiku/.cargo-checksum.json index 09e7a26..23acc55 100644 --- a/third_party/rust/iana-time-zone-haiku/.cargo-checksum.json +++ b/third_party/rust/iana-time-zone-haiku/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo_vcs_info.json":"e35aa42766bae2002cba8470471a6d73c1916a4b33cf5f99930927ece3ee28d4","Cargo.toml":"8f06eca1c0e108d0422687eeb87030520ae7bd956efc92352599cc9cf079d9a3","Cargo.toml.orig":"4257cf4466c8db10eea012268e3633c483884992885286f906056c4085f192f5","LICENSE-APACHE":"696759d65dfe558ff7d9f031c76db19ec5c0767470fb67c4e8d990820d1e99c9","LICENSE-MIT":"da28ccc6b158fc2d8cccc74e99794b1cff1d29bd7bbeb019442fcf0c04c6cad9","README.md":"5b1ad9309b716374cc1bdcd025f525fac31b2f413e6c4d311e207fa6b1f96a83","build.rs":"10304831100a60c1c2b990762dcfeb47dae8342cf9b54595bec94884e7de5784","src/implementation.cc":"66d2ecfe58ec543e27a6fb3a96526a07cd1ac43a2370344f856529e5a112ce0f","src/lib.rs":"e58db019554bd372f0a187f8f51f96624cdf21bcef507de2093e1d49ca0787cd"},"package":"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"} \ No newline at end of file +{"files":{".cargo_vcs_info.json":"e35aa42766bae2002cba8470471a6d73c1916a4b33cf5f99930927ece3ee28d4","Cargo.toml":"8f06eca1c0e108d0422687eeb87030520ae7bd956efc92352599cc9cf079d9a3","Cargo.toml.orig":"4257cf4466c8db10eea012268e3633c483884992885286f906056c4085f192f5","LICENSE-APACHE":"696759d65dfe558ff7d9f031c76db19ec5c0767470fb67c4e8d990820d1e99c9","LICENSE-MIT":"da28ccc6b158fc2d8cccc74e99794b1cff1d29bd7bbeb019442fcf0c04c6cad9","README.md":"5b1ad9309b716374cc1bdcd025f525fac31b2f413e6c4d311e207fa6b1f96a83","build.rs":"10304831100a60c1c2b990762dcfeb47dae8342cf9b54595bec94884e7de5784","src/implementation.cc":"2f0381747eba552ef428de04fcdfa55993daff9abe94b016db074032cd5ad460","src/lib.rs":"e58db019554bd372f0a187f8f51f96624cdf21bcef507de2093e1d49ca0787cd"},"package":"f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"} diff --git a/third_party/rust/iana-time-zone-haiku/src/implementation.cc b/third_party/rust/iana-time-zone-haiku/src/implementation.cc index d1c92cd..e08b159 100644 --- a/third_party/rust/iana-time-zone-haiku/src/implementation.cc +++ b/third_party/rust/iana-time-zone-haiku/src/implementation.cc @@ -4,56 +4,54 @@ #include +#pragma GCC visibility push(default) #include #include #include #include +#pragma GCC visibility pop extern "C" { size_t iana_time_zone_haiku_get_tz(char *buf, size_t buf_size) { - try { - static_assert(sizeof(char) == sizeof(uint8_t), "Illegal char size"); - - if (buf_size == 0) { - return 0; - } - - // `BLocaleRoster::Default()` returns a reference to a statically allocated object. - // https://github.com/haiku/haiku/blob/8f16317/src/kits/locale/LocaleRoster.cpp#L143-L147 - BLocaleRoster *locale_roster(BLocaleRoster::Default()); - if (!locale_roster) { - return 0; - } - - BTimeZone tz(NULL, NULL); - if (locale_roster->GetDefaultTimeZone(&tz) != B_OK) { - return 0; - } - - BString bname(tz.ID()); - int32_t ilength(bname.Length()); - if (ilength <= 0) { - return 0; - } - - size_t length(ilength); - if (length > buf_size) { - return 0; - } - - // BString::String() returns a borrowed string. - // https://www.haiku-os.org/docs/api/classBString.html#ae4fe78b06c8e3310093b80305e14ba87 - const char *sname(bname.String()); - if (!sname) { - return 0; - } - - std::memcpy(buf, sname, length); - return length; - } catch (...) { + static_assert(sizeof(char) == sizeof(uint8_t), "Illegal char size"); + + if (buf_size == 0) { return 0; } + + // `BLocaleRoster::Default()` returns a reference to a statically allocated object. + // https://github.com/haiku/haiku/blob/8f16317/src/kits/locale/LocaleRoster.cpp#L143-L147 + BLocaleRoster *locale_roster(BLocaleRoster::Default()); + if (!locale_roster) { + return 0; + } + + BTimeZone tz(NULL, NULL); + if (locale_roster->GetDefaultTimeZone(&tz) != B_OK) { + return 0; + } + + BString bname(tz.ID()); + int32_t ilength(bname.Length()); + if (ilength <= 0) { + return 0; + } + + size_t length(ilength); + if (length > buf_size) { + return 0; + } + + // BString::String() returns a borrowed string. + // https://www.haiku-os.org/docs/api/classBString.html#ae4fe78b06c8e3310093b80305e14ba87 + const char *sname(bname.String()); + if (!sname) { + return 0; + } + + std::memcpy(buf, sname, length); + return length; } } // extern "C" diff --git a/third_party/rust/lmdb-rkv-sys/.rustfmt.toml b/third_party/rust/lmdb-rkv-sys/.rustfmt.toml new file mode 100644 index 0000000..fc441bb --- /dev/null +++ b/third_party/rust/lmdb-rkv-sys/.rustfmt.toml @@ -0,0 +1,3 @@ +ignore = [ + "src/bindings.rs" +] \ No newline at end of file diff --git a/third_party/rust/mtu/.cargo-checksum.json b/third_party/rust/mtu/.cargo-checksum.json index 442cabc..6536f3a 100644 --- a/third_party/rust/mtu/.cargo-checksum.json +++ b/third_party/rust/mtu/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".clippy.toml":"6ab1a673bd5c7ba29bd77e62f42183db3ace327c23d446d5b4b0618f6c39d639","Cargo.toml":"4a6be4bf3e84f9f29a3f03a1b80d55a7cc6c6fad494275efb8dc8f44ad1689e4","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"4ad721b5b6a3d39ca3e2202f403d897c4a1d42896486dd58963a81f8e64ef61d","README.md":"24df0e24154b7f0096570ad221aea02bd53a0f1124a2adafff5730af5443a65c","SECURITY.md":"75455814b6cf997e22a927eb979b4356d788583aa1eb96e90853aaab0f82ad1b","build.rs":"a4bcd0562c80914a8e909e8b10507605bfd6f0f268fad9ef4d79f4c48bdaed6c","src/bin/mtu-lookup.rs":"9ff9ae9873d1f6faeacf45d8ab5924d3ec680a9c51976538aa15bbe304a228c6","src/bsd.rs":"8f9a16fe7741853e15f55f0755ac53fe0374c664f24e4fadb460dd77d734ea62","src/lib.rs":"b419420d13472477e9c7557d7f65f692b32fa2b52f64a3e1d3003d21a8f93ef2","src/linux.rs":"f4bd05e05791fe1728c02a73d309ae1565111d5632cf0d402c20698d5ee4839b","src/routesocket.rs":"b4e27289bfc91ef9ea1ec29b2c5ff407bad49ff01391115e852f2133667de7aa","src/windows.rs":"086ae53c72d03e51366db09e11aedf92ae391ecc8143fcfe45b1a1af82cf035e"},"package":null} \ No newline at end of file +{"files":{".clippy.toml":"6ab1a673bd5c7ba29bd77e62f42183db3ace327c23d446d5b4b0618f6c39d639","Cargo.toml":"4a6be4bf3e84f9f29a3f03a1b80d55a7cc6c6fad494275efb8dc8f44ad1689e4","LICENSE-APACHE":"a60eea817514531668d7e00765731449fe14d059d3249e0bc93b36de45f759f2","LICENSE-MIT":"4ad721b5b6a3d39ca3e2202f403d897c4a1d42896486dd58963a81f8e64ef61d","README.md":"24df0e24154b7f0096570ad221aea02bd53a0f1124a2adafff5730af5443a65c","SECURITY.md":"75455814b6cf997e22a927eb979b4356d788583aa1eb96e90853aaab0f82ad1b","build.rs":"2c51040e4db5d6cbe0cfcc3ed1121c628c254e88dbb1c00a27036ff8c1aa8f26","src/bin/mtu-lookup.rs":"9ff9ae9873d1f6faeacf45d8ab5924d3ec680a9c51976538aa15bbe304a228c6","src/bsd.rs":"8f9a16fe7741853e15f55f0755ac53fe0374c664f24e4fadb460dd77d734ea62","src/lib.rs":"782b93868afffed3a3b35bf1a4cd6229213dc37979621a0346518ecb929a3989","src/linux.rs":"f4bd05e05791fe1728c02a73d309ae1565111d5632cf0d402c20698d5ee4839b","src/routesocket.rs":"b4e27289bfc91ef9ea1ec29b2c5ff407bad49ff01391115e852f2133667de7aa","src/windows.rs":"086ae53c72d03e51366db09e11aedf92ae391ecc8143fcfe45b1a1af82cf035e"},"package":null} diff --git a/third_party/rust/mtu/build.rs b/third_party/rust/mtu/build.rs index a649819..14dbb00 100644 --- a/third_party/rust/mtu/build.rs +++ b/third_party/rust/mtu/build.rs @@ -40,14 +40,14 @@ fn bindgen() { // Platforms currently not supported. // // See . - if matches!(target_os.as_str(), "ios" | "tvos" | "visionos") { + if matches!(target_os.as_str(), "ios" | "tvos" | "visionos" | "haiku") { return; } if target_os == "windows" { return; } - + let bindings = if matches!(target_os.as_str(), "linux" | "android") { bindgen::Builder::default() .header_contents("rtnetlink.h", "#include ") diff --git a/third_party/rust/mtu/src/lib.rs b/third_party/rust/mtu/src/lib.rs index 215f620..9b7f9a2 100644 --- a/third_party/rust/mtu/src/lib.rs +++ b/third_party/rust/mtu/src/lib.rs @@ -110,7 +110,7 @@ const fn aligned_by(size: usize, align: usize) -> usize { // Platforms currently not supported. // // See . -#[cfg(any(target_os = "ios", target_os = "tvos", target_os = "visionos"))] +#[cfg(any(target_os = "ios", target_os = "tvos", target_os = "visionos", target_os = "haiku"))] pub fn interface_and_mtu_impl(remote: IpAddr) -> Result<(String, usize)> { return Err(default_err()); } diff --git a/third_party/rust/naga/.cargo-checksum.json b/third_party/rust/naga/.cargo-checksum.json index 174a061..8d40435 100644 --- a/third_party/rust/naga/.cargo-checksum.json +++ b/third_party/rust/naga/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo/config.toml":"7248ed3bed246d755d7bf9e5d7842d74b5c270ba6c29ad907872b55a67707ee0","CHANGELOG.md":"e60105d413f857e37dae165f819c47491d0a595183d3c9146b259d811b98b14f","Cargo.toml":"501a46717ffddc4d586ebd04524a77b55281be68b9a35d108cf48c133e6e0e6b","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"5f2e894ebee3fabf280690ac67117d500824b69036a50ab63d09b84100377b3a","build.rs":"e9098f486e87d91710c07d40f1b32716e5debfe94a0b5e53e37075b0ee997eec","src/arena/handle.rs":"897b2b0eebe0d9ae6a65bf2e8c210c8391924da06ef4c9e2a1225ad622400b6c","src/arena/handle_set.rs":"5c2a0bcf41d85c8173ac68b2d439552e79d0c3c0fe1ff3b1e1a48f0c83a4d48f","src/arena/handlevec.rs":"208d99644f9a6b6c1e88bbf9b280b01c62ce5bc8243727b31bafc3cc296d71c9","src/arena/mod.rs":"e7b574f5c592e3c32bae4a6e08b065ba1a9766740c9c85649e99b6dbdb790843","src/arena/range.rs":"0041168cee4c25d6b5bd4ba5cd42e138383f6a845e95ead3689bd3dd85c8b55c","src/arena/unique_arena.rs":"0e2d1c372a7c40b77793dc413b8920e86459e4656775a010f32974b4ad67a7fd","src/back/continue_forward.rs":"8194d238763caa6d5601ec3af56ba39a471c39945f43152b58d582092c99aefa","src/back/dot/mod.rs":"ec559c1cf6f3c92c75af639c7150c48862fff04965ec6b3f30e20e3a41c7c772","src/back/glsl/conv.rs":"86f03b46c66c907d3561508fd1c6c05c05d21d957d64d14631ac6ce9eeb36277","src/back/glsl/features.rs":"6ec0267f1ee47195d99fe849f291358efee00a7d035b964d9aeff8652c1700c4","src/back/glsl/keywords.rs":"fee8ed132e44bace54869a7c169a1ab7ed55db1bf590b4b1bce9efa4552e1dd7","src/back/glsl/mod.rs":"2486447c7cc9462d2407d55015d7f92249e148ff77c6a69b7b9a4623fb06742d","src/back/glsl/writer.rs":"a703268ac13b598842a16b4c641043921fd6205b33c395b3a17d35819d820ba1","src/back/hlsl/conv.rs":"d1a28aefba71eda7cb4533deeca16d65cb8a0a2a6f3210fdec3c4ab4fbe3c1d4","src/back/hlsl/help.rs":"12ddb9d08fe64eb34b66ae2166edffce5106a04ccef0b8cc0391a6fafd676270","src/back/hlsl/keywords.rs":"35285ad56319ba8c8ba86064d71e7cdba82303ecfe4cfda97fb983a53c17a14b","src/back/hlsl/mod.rs":"032cbf74d7bd488e7fc44e83c98c0dd6132f2edb945e68bf8fd2cbbfe51d43e4","src/back/hlsl/ray.rs":"e3c9edc9b410af18ccf8bf717e4a33af20eefd15a404cdf460460236000dc8bd","src/back/hlsl/storage.rs":"5083d03b1f25fe767e45e0c507bd30424352fccd48484c081620712d3682aae8","src/back/hlsl/writer.rs":"091835f0e6f77ac5aa1092da91cd218ada31c9865ab3bb6836204b609537110e","src/back/mod.rs":"6776b7d04e5c6ce89c020a35d2e8009a80b9468a12c06dc8f89674a33c043cf2","src/back/msl/keywords.rs":"bba3d9da01ef28ad71b4aebcdb0cd3a0c17f7ebbe6a75f5defad0ccf7d905a2d","src/back/msl/mod.rs":"813ed385e1a03a976b444542b21a3f3d689038169b8f164a92d9a4826f09b2ae","src/back/msl/sampler.rs":"173ffc391fae1b3008cea89d7bb2e183eeb182acd30a5bae80b1f0cf1af569f9","src/back/msl/writer.rs":"8624ad46a3e43693bb848e9c32650ee29a7668d4d1abb28b99d4719176620ae4","src/back/pipeline_constants.rs":"8a0ef8a03605007bf238b611fe0e626e0b84eb3714a6d354b6c6cc6817b589b9","src/back/spv/block.rs":"8038957c694aebac807b015ab960337adc8bca65d8d6b3d39cd44e81e305f989","src/back/spv/f16_polyfill.rs":"44ce07ef497dff13a9152eb9bc5936c486ef53de6d476da6b0a39396b0e6abdb","src/back/spv/helpers.rs":"d8f710a1ad34486fd6a69802c041db6453d06e94296f1829056d60107b10d130","src/back/spv/image.rs":"105b5f8286d6afaabbb6fd7a5f86380274bae4011f3ba28c4f860c3694678557","src/back/spv/index.rs":"cbc5b99f38fca8c5dd19a622a7b4b66907594532774958be28833f399c066168","src/back/spv/instructions.rs":"520e2c35d799e228a44758f5fb18b047dfa6701023e320447f30f003233d01b4","src/back/spv/layout.rs":"279b6da152a113781df2ce42c73bf8b2861f7affdfd8d48d5f35c810363831e7","src/back/spv/mesh_shader.rs":"8687c7e45557fa85d144a68fba5510431a2000cd10d31d36684a4ec908e6a967","src/back/spv/mod.rs":"655b9cb06175c7ccd455b62cc123a1cd8666627d23f48a4b37c527ab064ae14e","src/back/spv/ray/mod.rs":"bcd6fe9cd407c13d6eb76740217e49992e3479a8e327410b8d9688d2b0eea21c","src/back/spv/ray/query.rs":"e49a8d5be0a828f7b6f0dc076b57a37b402942ea0fc777130b550e80aff73ff0","src/back/spv/recyclable.rs":"8ea397d4d8d3f2cd5fbc8e0be94d136c2d6e0f0e8a4b5eb567dcc1be104c9ae5","src/back/spv/selection.rs":"4d8b695a9796ca2cb701ef3c4a52d8c0099c55818487f5163edd3c58e1610156","src/back/spv/subgroup.rs":"68fc3e3153022a0a8bddec20ad9221820678f02921878318e571d5aa2ca13cee","src/back/spv/writer.rs":"98cc96ec547bdd22ea507b608fdbbe33c93a72c5d296ffc2aec262bc9bd08947","src/back/wgsl/mod.rs":"1b04d66e8dba609513d43431d1f0ee9a209fbfd8453862d6e8a7aa41f8910997","src/back/wgsl/polyfill/inverse/inverse_2x2_f16.wgsl":"9e7635d04724822931c805a8b35e76d6d294d447e4ea8d57b308ce45609bf736","src/back/wgsl/polyfill/inverse/inverse_2x2_f32.wgsl":"340d491abde07f93996391796db65a5f88402663eaf6b9d2d894d11cb8cf8b6d","src/back/wgsl/polyfill/inverse/inverse_3x3_f16.wgsl":"4f13a1a4b3e1b51f0f992d13c55cf854a80917554a4d13c997819fa1fe776ba4","src/back/wgsl/polyfill/inverse/inverse_3x3_f32.wgsl":"9b16d2f4b9e433c8e03a0cb46ab48508f3bf7e185ce1b4e26106c47e81a677cb","src/back/wgsl/polyfill/inverse/inverse_4x4_f16.wgsl":"86d39d1db5d03995b404950279db7f1698ad9622982aa319fdedb7532673235b","src/back/wgsl/polyfill/inverse/inverse_4x4_f32.wgsl":"dc510525ac2dce66389a8c4bf8b2f31f0dedd9e6debdbe4ffd939a0a7fc533d3","src/back/wgsl/polyfill/mod.rs":"f4ab3c9b9cdc36d16dab00d0f7f07d6e6beda0e27a36053e9b5ffeeb7ca18edc","src/back/wgsl/writer.rs":"61a47a9d23cea6b370b5cc2a49f083c123284f915da5492ea9d614b47133842f","src/common/diagnostic_debug.rs":"8c73fe605e5b6162d0485e264287ac50c061cf581743feebbffe1474d1d3516d","src/common/diagnostic_display.rs":"46f1ff8a32179703ef0bcdb704db9f6e6e8b4eaad6cadf94577eeab3d8a16cd1","src/common/mod.rs":"0c979fd43068cfbceb7b29ff0bc578327e0770d5403c12f48d8605f77efbe200","src/common/predeclared.rs":"a5f42d55f2e13d8f5a8213d4a881e9155c3994c4054d43edcf7bd7bb7c868ccf","src/common/wgsl/diagnostics.rs":"4fec985b4c5cc6dfae4dd78bd7c850adc88a1761d7b6691de0355ea49300e532","src/common/wgsl/mod.rs":"d944915ff692c96aecca67737bccc2d5d9eb68f475166a2744f29a025f4a4c93","src/common/wgsl/to_wgsl.rs":"882e2404813fb494c9ae6b1c4461b8752b3469040f509dc8bb1d42da242e131a","src/common/wgsl/types.rs":"62da42d9d21f542b7aed9393303ba8c17feed49c4f82cb4a339fa0ac2bfacef0","src/compact/expressions.rs":"e2b4267ef76b75e452bc3b58c474b0a2960f0ffbec15788a79cc63eea14d73d6","src/compact/functions.rs":"b033cfe2212f1fd8170076a960c5793c2e62857603baa738ea5280e8880c0eac","src/compact/handle_set_map.rs":"b4688bff174487f2da4a1a946af07c80b6ba59f60dc84184c6a30039354209e8","src/compact/mod.rs":"25ef93ce732860a253d1cc2041016260737e2f4ae22d17f88f7f5265fdbbb03b","src/compact/statements.rs":"35ea07c549183d8c768bc4dd26dbe9b5c9b2b70ca9b57bc96f6611b7587c5112","src/compact/types.rs":"32abe0e0e0d55044685c5c0d20d1688970217f106270f2bd4a35aa0444a5bdfe","src/diagnostic_filter.rs":"5e3d14a774974148b7d2918617ba3e2c3a07493e0f90485a7de9db86e05a7cd0","src/error.rs":"8ea0b2b39800ec3af13e001df8eaea385f5c23ed41587daf66e545af213f4eec","src/front/atomic_upgrade.rs":"86ce9f9628d92a1a09802cb534bb4310236b83f2799c921b81c687f009c589be","src/front/glsl/ast.rs":"34fdd3d113b85d1f9cad8dc9ccdd944d1c5e88eae8f46b7088baa49e0307ef7b","src/front/glsl/builtins.rs":"ffe36464b5758dd8c917c3e9505d4027268e4b019174f0f95a229cd16d4cafa1","src/front/glsl/context.rs":"504c63d9aeef452b7dfbc1ad25bfbd5e51d3f514ad03818d1fa0a67924c2d2ec","src/front/glsl/error.rs":"f445297e0357919e2345ae15f2d23c58d36a64c9a666f1cf1b09cbcfd6e4627a","src/front/glsl/functions.rs":"4d779157163e354c31fddc635f6c93c8447293c5528311c0814503ff0d8afdfc","src/front/glsl/lex.rs":"24706628b600b5ce435cef464c84196ac5d58013122a97e7b59d509cc25f85a2","src/front/glsl/mod.rs":"132f2a60812b3910f65e6281562d4dc94efa329fd1eb0f2778ffe67631a35f78","src/front/glsl/offset.rs":"66bd524a2d17dc44f431430dcbbb74a771fdab43c9581e88bb1123e6cfec516b","src/front/glsl/parser.rs":"95426e630b3ef8a9581f90c0e98af6e18bd419803baad02ebee0451c64d0f25d","src/front/glsl/parser/declarations.rs":"311212375f0ba39ef77889acadd54b9909cc9d043e424c0b6c9db3220d68d03e","src/front/glsl/parser/expressions.rs":"828f11ed3227de315d5d1b14f6f84ce098f77af9e31ff3ceb4e4906121d932fd","src/front/glsl/parser/functions.rs":"302e24e06190aff555131c33f9a80b15df6a0390d6c776f888a44d5ef7df697e","src/front/glsl/parser/types.rs":"ee242048a65cd3709e16b70a3882e9296e615327480f2ad779e3d2523778181f","src/front/glsl/parser_tests.rs":"6834f0d595f4077266054e5da43e4f1b60e5c6780611ab0f530d9964cc62fad3","src/front/glsl/token.rs":"83780c0c1954ef216896c9d8a48e412b357783e00ccd4909a7a249935c742629","src/front/glsl/types.rs":"286395d82707a09d28b4c1a8bade917822478e53d8eb277ceec5fa9e71649ba2","src/front/glsl/variables.rs":"73db9f5364de14092c81b917c2ec0d4114a727d299e569be5b0cae94a0ecdd2e","src/front/interpolator.rs":"caf8c8c3ddca56fbece33cc18615c4d8c5b3b68112c9de22196d9dd49c84bf96","src/front/mod.rs":"fddd2be54ff44b52743ac8eb4a19e153a8a169af8e65d9061a9b9fc9857f64db","src/front/spv/convert.rs":"5bf4d8d02850c98d4d7fb05e60e1c0ed2cc765a3b675a3d034d64e3dcf17e1f6","src/front/spv/error.rs":"d08e1d65716ccc0f2a94a1285a1d034fa4840dc79ca60a5ec7481697bdec74d1","src/front/spv/function.rs":"22cd3d699eedfdcd44e2c28fe36a0374cf0915950172b47018b0862c8db3ee2c","src/front/spv/image.rs":"c39ffdb19a19861cec009de39431a879be99bdd4d9d08c0ecdef397c2f3f6fa5","src/front/spv/mod.rs":"64fb834905442b0455abf4b39b6924bdf2f3fcfb633d33600eae7cfb5c2c382b","src/front/spv/next_block.rs":"df7903c7de3b5f98fc3308868135ad65f5681f19a08c4c0cc0768735caf98dc8","src/front/spv/null.rs":"ee20287365e025e8bcc91f29df930ff8b63cb6d7f26db0b1789d54de614a7353","src/front/type_gen.rs":"111832af89a268ae3206d2ba2159b9b9d64224ed09375a29eec142725ea7fb34","src/front/wgsl/error.rs":"806c6312929cd599d6356eb5c2f33cabbd131c05d93d2893c5e82c39106a0be1","src/front/wgsl/index.rs":"476e5c4eddb14dfb53eee7976bcf4276c8a3fad81fbed92dc7b5dd31a5ab1593","src/front/wgsl/lower/construction.rs":"4462db904bf230c2fa7b32771933d826891aa41b08879aadd6097e396c66116c","src/front/wgsl/lower/conversion.rs":"f5f82649f91313dde91b2840aa399125c766340ec46a41bef6db33f00cafb7f6","src/front/wgsl/lower/mod.rs":"fa24bdfc69da05002a3a45295170d48768980129f00289f1994693d0ca6cf8ff","src/front/wgsl/lower/template_list.rs":"62ca31b4f3240c16f70caa3e78801a556da740010186e5c1f3723e3ef6f6c815","src/front/wgsl/mod.rs":"c115e0154a68b762d162ef3529060f23659b13f95f8e2d326f043015ff3baf06","src/front/wgsl/parse/ast.rs":"5765cb2046c9a33a19a47d0e1a96be4f35c28625e9b6ebd338fa11bd7ab1cca2","src/front/wgsl/parse/conv.rs":"c9f43e2137ce329a0af9ac7ddeae361b2e56f8216a5e3253915cc7b377bb3900","src/front/wgsl/parse/directive.rs":"c96f33cef2c1d8a374fe1b3827538f7db33d6b7811a6e0914d29de80b8963257","src/front/wgsl/parse/directive/enable_extension.rs":"094dd43ff667fba931cf5a0e1ef1cf22db64923cfbfdc1a9875832440c22a53a","src/front/wgsl/parse/directive/language_extension.rs":"1ddfd0331ece96eddbb07a971991dd6285bd58e0276d94a5c26bf30eab0ac5be","src/front/wgsl/parse/lexer.rs":"73a76177bfb7b0382b908517c5857a2eb5f7de30c0e4afdca3215a8179d32bdd","src/front/wgsl/parse/mod.rs":"4861d16dda7f4dd179e4381e72d8f9ea91c82b37c444fbb9124a7999db30d89d","src/front/wgsl/parse/number.rs":"7af92c71031e4c4258e9d8d323f7ee99a2fd4be3b6975ab9b8b53b95431845d9","src/front/wgsl/tests.rs":"c0bc29cc8cc786a0b589da267b99a9b5e0c0871f8326d84d3b563025860f77bc","src/ir/block.rs":"85bac7b476b48240ebfe3660a2b3e781752faa895f71f7e52393e75e0bd8dbb7","src/ir/mod.rs":"9d3921b1f4304f9912f3fa6c5ef6648be27179a955064f88ce33ba4f68e4f16d","src/keywords/mod.rs":"47a6fde012bf7d1e70f0fac7762f6a8e7dca6b9bbb99e2cada773c61527cfbfe","src/keywords/wgsl.rs":"2448982b88efc945cad1fca249e111f9e8cee7fdca110e13913960b012cc94b4","src/lib.rs":"1e40237435eebd4a91fd5c9b2e8a58664ebd1c40a0d27c0c5220047f0221704a","src/non_max_u32.rs":"b2d81efda0e1e5ace9e2fad990a7adf628f1dec63273b069c93d5423eb78350d","src/proc/constant_evaluator.rs":"bfa528f6f09f2c7b5a9bea0929ec373435987cd971f87ce7800b7cbdf63e7023","src/proc/emitter.rs":"76e264b4c0877fe30bf20135685a289b76001188a78d5ca5b88edae5bb29646b","src/proc/index.rs":"a356017af35132873944f45183de968f3ccb605d9b953365488d2cb80ae0cfba","src/proc/keyword_set.rs":"928414d2b79ee48735d532e03d3f0a58427c3f27a2a0c6938425749b00943784","src/proc/layouter.rs":"fc55708da27682b1977c6aaa8b04ae2756ed7359026ba55dbf127509d8b6c4f4","src/proc/mod.rs":"9b6ec7ed566215ce453c4b045f5aaa101a3d9d77199e314015bbba6e66b90a24","src/proc/namer.rs":"5df27ec6f930fcaa3c2eddf98342dffc088db1e403d09258a82f895bdde70c18","src/proc/overloads/any_overload_set.rs":"877cd637d979abc08caa021dabb9821a79fc9109eb97024a230bcfac82830388","src/proc/overloads/constructor_set.rs":"b702f866ac1472bcc075bd0bede450388123b5899431934fd60a29865498c68b","src/proc/overloads/list.rs":"0a4ff2a43e035da2cf4a321a15afaff676377838095e691d3e5447f8d9180ab7","src/proc/overloads/mathfunction.rs":"305716a575bed3ec456db583e65bd5a972f1448612b6f260b278ae0b79802540","src/proc/overloads/mod.rs":"0e96479cbd0ec9fa8200a5e88c16a22ee7ed2021ecf6f80a7e4ded69cad5239f","src/proc/overloads/one_bits_iter.rs":"6b98769fdec777d311248084f13958c5cca44659d0928603ece8618387ea58b2","src/proc/overloads/regular.rs":"73d64fab79019d589cb0595d0ef606fd6af732c42a418c60c81da4c96e113c89","src/proc/overloads/rule.rs":"b7f87d5ca0cffdaa8ee0db0110918f5a726359fd8a72bc638d8ce27a4b0ae3b2","src/proc/overloads/scalar_set.rs":"3729bc754dbf29a2337379ecb46568fdc3149a48074a354244da91e3d9cb5cef","src/proc/overloads/utils.rs":"d8f661579e917edb892b6a7e8babadbc0db1a110d74558b81b49b3331bd07a5e","src/proc/terminator.rs":"c0eed3f6ab3c392c6953fce47b7487d3a767a1299ec764711ed3bdcfbf1248f6","src/proc/type_methods.rs":"99498c3e300dfdd7c6414c7017e374c15d02e110a07d82242953a12eb30a3943","src/proc/typifier.rs":"2d9d1ec55b1c2d2f8f612cd3dbae8ff98e5d475b8292e3ddf60d3cf2966d0cab","src/racy_lock.rs":"c56313dcaf212301ddf9e665872f35868ce966002d175ae153c1f14c1b2c048a","src/span.rs":"6c3fbc496b5812ea418fd203eb0f28f6e7fc3a6645aa6555d8f833d83bb6114a","src/valid/analyzer.rs":"777d476de2a853a3be81e1016b1d0257f3d0d9a749d3b49ae7f22fce6b74d1af","src/valid/compose.rs":"46eeed8c4d5b66fc043ddb701074bd864a9fdd24e38b88e282046230acefb747","src/valid/expression.rs":"f4268f67c0b612e356cd35982a7be787bf9a5db5cf3b5cde95f293aed8cc7901","src/valid/expression/builtin.rs":"525f146cd1a1e0f554552ee6f1a997be112b9390e3d98034e67d123e2ef41158","src/valid/function.rs":"c6607bc6b2a19abe80048362294826d304ab32d10a502def7f0c39bd5a310c1e","src/valid/handles.rs":"db70ae92d1e043c8e45bad8a356d5e9c6d6f1067f3f70ab29051146621ac6537","src/valid/interface.rs":"8c8ebe2aa97fe635d7fbfcbd940f9348e234c4a6c49722a80435f7801805a717","src/valid/mod.rs":"40360e083b545d255d6f87bf4402ce8a3983795699c34031de8c211e46d2fd36","src/valid/type.rs":"be0ed589f4b0462713e76af1b7a57b033620d68f21d476bbc7ebb848396d4856"},"package":null} \ No newline at end of file +{"files":{".cargo/config.toml":"7248ed3bed246d755d7bf9e5d7842d74b5c270ba6c29ad907872b55a67707ee0","CHANGELOG.md":"e60105d413f857e37dae165f819c47491d0a595183d3c9146b259d811b98b14f","Cargo.toml":"0b1d18e1078097519767622e6f20eebbcfafe531e86e9c7d6bfcc94c495dac09","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"5f2e894ebee3fabf280690ac67117d500824b69036a50ab63d09b84100377b3a","build.rs":"e9098f486e87d91710c07d40f1b32716e5debfe94a0b5e53e37075b0ee997eec","src/arena/handle.rs":"897b2b0eebe0d9ae6a65bf2e8c210c8391924da06ef4c9e2a1225ad622400b6c","src/arena/handle_set.rs":"5c2a0bcf41d85c8173ac68b2d439552e79d0c3c0fe1ff3b1e1a48f0c83a4d48f","src/arena/handlevec.rs":"208d99644f9a6b6c1e88bbf9b280b01c62ce5bc8243727b31bafc3cc296d71c9","src/arena/mod.rs":"e7b574f5c592e3c32bae4a6e08b065ba1a9766740c9c85649e99b6dbdb790843","src/arena/range.rs":"0041168cee4c25d6b5bd4ba5cd42e138383f6a845e95ead3689bd3dd85c8b55c","src/arena/unique_arena.rs":"0e2d1c372a7c40b77793dc413b8920e86459e4656775a010f32974b4ad67a7fd","src/back/continue_forward.rs":"8194d238763caa6d5601ec3af56ba39a471c39945f43152b58d582092c99aefa","src/back/dot/mod.rs":"ec559c1cf6f3c92c75af639c7150c48862fff04965ec6b3f30e20e3a41c7c772","src/back/glsl/conv.rs":"86f03b46c66c907d3561508fd1c6c05c05d21d957d64d14631ac6ce9eeb36277","src/back/glsl/features.rs":"6ec0267f1ee47195d99fe849f291358efee00a7d035b964d9aeff8652c1700c4","src/back/glsl/keywords.rs":"fee8ed132e44bace54869a7c169a1ab7ed55db1bf590b4b1bce9efa4552e1dd7","src/back/glsl/mod.rs":"2486447c7cc9462d2407d55015d7f92249e148ff77c6a69b7b9a4623fb06742d","src/back/glsl/writer.rs":"a703268ac13b598842a16b4c641043921fd6205b33c395b3a17d35819d820ba1","src/back/hlsl/conv.rs":"d1a28aefba71eda7cb4533deeca16d65cb8a0a2a6f3210fdec3c4ab4fbe3c1d4","src/back/hlsl/help.rs":"12ddb9d08fe64eb34b66ae2166edffce5106a04ccef0b8cc0391a6fafd676270","src/back/hlsl/keywords.rs":"35285ad56319ba8c8ba86064d71e7cdba82303ecfe4cfda97fb983a53c17a14b","src/back/hlsl/mod.rs":"032cbf74d7bd488e7fc44e83c98c0dd6132f2edb945e68bf8fd2cbbfe51d43e4","src/back/hlsl/ray.rs":"e3c9edc9b410af18ccf8bf717e4a33af20eefd15a404cdf460460236000dc8bd","src/back/hlsl/storage.rs":"5083d03b1f25fe767e45e0c507bd30424352fccd48484c081620712d3682aae8","src/back/hlsl/writer.rs":"091835f0e6f77ac5aa1092da91cd218ada31c9865ab3bb6836204b609537110e","src/back/mod.rs":"6776b7d04e5c6ce89c020a35d2e8009a80b9468a12c06dc8f89674a33c043cf2","src/back/msl/keywords.rs":"bba3d9da01ef28ad71b4aebcdb0cd3a0c17f7ebbe6a75f5defad0ccf7d905a2d","src/back/msl/mod.rs":"813ed385e1a03a976b444542b21a3f3d689038169b8f164a92d9a4826f09b2ae","src/back/msl/sampler.rs":"173ffc391fae1b3008cea89d7bb2e183eeb182acd30a5bae80b1f0cf1af569f9","src/back/msl/writer.rs":"8624ad46a3e43693bb848e9c32650ee29a7668d4d1abb28b99d4719176620ae4","src/back/pipeline_constants.rs":"8a0ef8a03605007bf238b611fe0e626e0b84eb3714a6d354b6c6cc6817b589b9","src/back/spv/block.rs":"8038957c694aebac807b015ab960337adc8bca65d8d6b3d39cd44e81e305f989","src/back/spv/f16_polyfill.rs":"44ce07ef497dff13a9152eb9bc5936c486ef53de6d476da6b0a39396b0e6abdb","src/back/spv/helpers.rs":"d8f710a1ad34486fd6a69802c041db6453d06e94296f1829056d60107b10d130","src/back/spv/image.rs":"105b5f8286d6afaabbb6fd7a5f86380274bae4011f3ba28c4f860c3694678557","src/back/spv/index.rs":"cbc5b99f38fca8c5dd19a622a7b4b66907594532774958be28833f399c066168","src/back/spv/instructions.rs":"520e2c35d799e228a44758f5fb18b047dfa6701023e320447f30f003233d01b4","src/back/spv/layout.rs":"279b6da152a113781df2ce42c73bf8b2861f7affdfd8d48d5f35c810363831e7","src/back/spv/mesh_shader.rs":"8687c7e45557fa85d144a68fba5510431a2000cd10d31d36684a4ec908e6a967","src/back/spv/mod.rs":"655b9cb06175c7ccd455b62cc123a1cd8666627d23f48a4b37c527ab064ae14e","src/back/spv/ray/mod.rs":"bcd6fe9cd407c13d6eb76740217e49992e3479a8e327410b8d9688d2b0eea21c","src/back/spv/ray/query.rs":"e49a8d5be0a828f7b6f0dc076b57a37b402942ea0fc777130b550e80aff73ff0","src/back/spv/recyclable.rs":"8ea397d4d8d3f2cd5fbc8e0be94d136c2d6e0f0e8a4b5eb567dcc1be104c9ae5","src/back/spv/selection.rs":"4d8b695a9796ca2cb701ef3c4a52d8c0099c55818487f5163edd3c58e1610156","src/back/spv/subgroup.rs":"68fc3e3153022a0a8bddec20ad9221820678f02921878318e571d5aa2ca13cee","src/back/spv/writer.rs":"98cc96ec547bdd22ea507b608fdbbe33c93a72c5d296ffc2aec262bc9bd08947","src/back/wgsl/mod.rs":"1b04d66e8dba609513d43431d1f0ee9a209fbfd8453862d6e8a7aa41f8910997","src/back/wgsl/polyfill/inverse/inverse_2x2_f16.wgsl":"9e7635d04724822931c805a8b35e76d6d294d447e4ea8d57b308ce45609bf736","src/back/wgsl/polyfill/inverse/inverse_2x2_f32.wgsl":"340d491abde07f93996391796db65a5f88402663eaf6b9d2d894d11cb8cf8b6d","src/back/wgsl/polyfill/inverse/inverse_3x3_f16.wgsl":"4f13a1a4b3e1b51f0f992d13c55cf854a80917554a4d13c997819fa1fe776ba4","src/back/wgsl/polyfill/inverse/inverse_3x3_f32.wgsl":"9b16d2f4b9e433c8e03a0cb46ab48508f3bf7e185ce1b4e26106c47e81a677cb","src/back/wgsl/polyfill/inverse/inverse_4x4_f16.wgsl":"86d39d1db5d03995b404950279db7f1698ad9622982aa319fdedb7532673235b","src/back/wgsl/polyfill/inverse/inverse_4x4_f32.wgsl":"dc510525ac2dce66389a8c4bf8b2f31f0dedd9e6debdbe4ffd939a0a7fc533d3","src/back/wgsl/polyfill/mod.rs":"f4ab3c9b9cdc36d16dab00d0f7f07d6e6beda0e27a36053e9b5ffeeb7ca18edc","src/back/wgsl/writer.rs":"61a47a9d23cea6b370b5cc2a49f083c123284f915da5492ea9d614b47133842f","src/common/diagnostic_debug.rs":"8c73fe605e5b6162d0485e264287ac50c061cf581743feebbffe1474d1d3516d","src/common/diagnostic_display.rs":"46f1ff8a32179703ef0bcdb704db9f6e6e8b4eaad6cadf94577eeab3d8a16cd1","src/common/mod.rs":"0c979fd43068cfbceb7b29ff0bc578327e0770d5403c12f48d8605f77efbe200","src/common/predeclared.rs":"a5f42d55f2e13d8f5a8213d4a881e9155c3994c4054d43edcf7bd7bb7c868ccf","src/common/wgsl/diagnostics.rs":"4fec985b4c5cc6dfae4dd78bd7c850adc88a1761d7b6691de0355ea49300e532","src/common/wgsl/mod.rs":"d944915ff692c96aecca67737bccc2d5d9eb68f475166a2744f29a025f4a4c93","src/common/wgsl/to_wgsl.rs":"882e2404813fb494c9ae6b1c4461b8752b3469040f509dc8bb1d42da242e131a","src/common/wgsl/types.rs":"62da42d9d21f542b7aed9393303ba8c17feed49c4f82cb4a339fa0ac2bfacef0","src/compact/expressions.rs":"e2b4267ef76b75e452bc3b58c474b0a2960f0ffbec15788a79cc63eea14d73d6","src/compact/functions.rs":"b033cfe2212f1fd8170076a960c5793c2e62857603baa738ea5280e8880c0eac","src/compact/handle_set_map.rs":"b4688bff174487f2da4a1a946af07c80b6ba59f60dc84184c6a30039354209e8","src/compact/mod.rs":"25ef93ce732860a253d1cc2041016260737e2f4ae22d17f88f7f5265fdbbb03b","src/compact/statements.rs":"35ea07c549183d8c768bc4dd26dbe9b5c9b2b70ca9b57bc96f6611b7587c5112","src/compact/types.rs":"32abe0e0e0d55044685c5c0d20d1688970217f106270f2bd4a35aa0444a5bdfe","src/diagnostic_filter.rs":"5e3d14a774974148b7d2918617ba3e2c3a07493e0f90485a7de9db86e05a7cd0","src/error.rs":"8ea0b2b39800ec3af13e001df8eaea385f5c23ed41587daf66e545af213f4eec","src/front/atomic_upgrade.rs":"86ce9f9628d92a1a09802cb534bb4310236b83f2799c921b81c687f009c589be","src/front/glsl/ast.rs":"34fdd3d113b85d1f9cad8dc9ccdd944d1c5e88eae8f46b7088baa49e0307ef7b","src/front/glsl/builtins.rs":"ffe36464b5758dd8c917c3e9505d4027268e4b019174f0f95a229cd16d4cafa1","src/front/glsl/context.rs":"504c63d9aeef452b7dfbc1ad25bfbd5e51d3f514ad03818d1fa0a67924c2d2ec","src/front/glsl/error.rs":"f445297e0357919e2345ae15f2d23c58d36a64c9a666f1cf1b09cbcfd6e4627a","src/front/glsl/functions.rs":"4d779157163e354c31fddc635f6c93c8447293c5528311c0814503ff0d8afdfc","src/front/glsl/lex.rs":"24706628b600b5ce435cef464c84196ac5d58013122a97e7b59d509cc25f85a2","src/front/glsl/mod.rs":"132f2a60812b3910f65e6281562d4dc94efa329fd1eb0f2778ffe67631a35f78","src/front/glsl/offset.rs":"66bd524a2d17dc44f431430dcbbb74a771fdab43c9581e88bb1123e6cfec516b","src/front/glsl/parser.rs":"95426e630b3ef8a9581f90c0e98af6e18bd419803baad02ebee0451c64d0f25d","src/front/glsl/parser/declarations.rs":"311212375f0ba39ef77889acadd54b9909cc9d043e424c0b6c9db3220d68d03e","src/front/glsl/parser/expressions.rs":"828f11ed3227de315d5d1b14f6f84ce098f77af9e31ff3ceb4e4906121d932fd","src/front/glsl/parser/functions.rs":"302e24e06190aff555131c33f9a80b15df6a0390d6c776f888a44d5ef7df697e","src/front/glsl/parser/types.rs":"ee242048a65cd3709e16b70a3882e9296e615327480f2ad779e3d2523778181f","src/front/glsl/parser_tests.rs":"6834f0d595f4077266054e5da43e4f1b60e5c6780611ab0f530d9964cc62fad3","src/front/glsl/token.rs":"83780c0c1954ef216896c9d8a48e412b357783e00ccd4909a7a249935c742629","src/front/glsl/types.rs":"286395d82707a09d28b4c1a8bade917822478e53d8eb277ceec5fa9e71649ba2","src/front/glsl/variables.rs":"73db9f5364de14092c81b917c2ec0d4114a727d299e569be5b0cae94a0ecdd2e","src/front/interpolator.rs":"caf8c8c3ddca56fbece33cc18615c4d8c5b3b68112c9de22196d9dd49c84bf96","src/front/mod.rs":"fddd2be54ff44b52743ac8eb4a19e153a8a169af8e65d9061a9b9fc9857f64db","src/front/spv/convert.rs":"5bf4d8d02850c98d4d7fb05e60e1c0ed2cc765a3b675a3d034d64e3dcf17e1f6","src/front/spv/error.rs":"d08e1d65716ccc0f2a94a1285a1d034fa4840dc79ca60a5ec7481697bdec74d1","src/front/spv/function.rs":"22cd3d699eedfdcd44e2c28fe36a0374cf0915950172b47018b0862c8db3ee2c","src/front/spv/image.rs":"c39ffdb19a19861cec009de39431a879be99bdd4d9d08c0ecdef397c2f3f6fa5","src/front/spv/mod.rs":"64fb834905442b0455abf4b39b6924bdf2f3fcfb633d33600eae7cfb5c2c382b","src/front/spv/next_block.rs":"df7903c7de3b5f98fc3308868135ad65f5681f19a08c4c0cc0768735caf98dc8","src/front/spv/null.rs":"ee20287365e025e8bcc91f29df930ff8b63cb6d7f26db0b1789d54de614a7353","src/front/type_gen.rs":"111832af89a268ae3206d2ba2159b9b9d64224ed09375a29eec142725ea7fb34","src/front/wgsl/error.rs":"806c6312929cd599d6356eb5c2f33cabbd131c05d93d2893c5e82c39106a0be1","src/front/wgsl/index.rs":"476e5c4eddb14dfb53eee7976bcf4276c8a3fad81fbed92dc7b5dd31a5ab1593","src/front/wgsl/lower/construction.rs":"4462db904bf230c2fa7b32771933d826891aa41b08879aadd6097e396c66116c","src/front/wgsl/lower/conversion.rs":"f5f82649f91313dde91b2840aa399125c766340ec46a41bef6db33f00cafb7f6","src/front/wgsl/lower/mod.rs":"fa24bdfc69da05002a3a45295170d48768980129f00289f1994693d0ca6cf8ff","src/front/wgsl/lower/template_list.rs":"62ca31b4f3240c16f70caa3e78801a556da740010186e5c1f3723e3ef6f6c815","src/front/wgsl/mod.rs":"c115e0154a68b762d162ef3529060f23659b13f95f8e2d326f043015ff3baf06","src/front/wgsl/parse/ast.rs":"5765cb2046c9a33a19a47d0e1a96be4f35c28625e9b6ebd338fa11bd7ab1cca2","src/front/wgsl/parse/conv.rs":"c9f43e2137ce329a0af9ac7ddeae361b2e56f8216a5e3253915cc7b377bb3900","src/front/wgsl/parse/directive.rs":"c96f33cef2c1d8a374fe1b3827538f7db33d6b7811a6e0914d29de80b8963257","src/front/wgsl/parse/directive/enable_extension.rs":"094dd43ff667fba931cf5a0e1ef1cf22db64923cfbfdc1a9875832440c22a53a","src/front/wgsl/parse/directive/language_extension.rs":"1ddfd0331ece96eddbb07a971991dd6285bd58e0276d94a5c26bf30eab0ac5be","src/front/wgsl/parse/lexer.rs":"73a76177bfb7b0382b908517c5857a2eb5f7de30c0e4afdca3215a8179d32bdd","src/front/wgsl/parse/mod.rs":"4861d16dda7f4dd179e4381e72d8f9ea91c82b37c444fbb9124a7999db30d89d","src/front/wgsl/parse/number.rs":"7af92c71031e4c4258e9d8d323f7ee99a2fd4be3b6975ab9b8b53b95431845d9","src/front/wgsl/tests.rs":"c0bc29cc8cc786a0b589da267b99a9b5e0c0871f8326d84d3b563025860f77bc","src/ir/block.rs":"85bac7b476b48240ebfe3660a2b3e781752faa895f71f7e52393e75e0bd8dbb7","src/ir/mod.rs":"9d3921b1f4304f9912f3fa6c5ef6648be27179a955064f88ce33ba4f68e4f16d","src/keywords/mod.rs":"47a6fde012bf7d1e70f0fac7762f6a8e7dca6b9bbb99e2cada773c61527cfbfe","src/keywords/wgsl.rs":"2448982b88efc945cad1fca249e111f9e8cee7fdca110e13913960b012cc94b4","src/lib.rs":"1e40237435eebd4a91fd5c9b2e8a58664ebd1c40a0d27c0c5220047f0221704a","src/non_max_u32.rs":"b2d81efda0e1e5ace9e2fad990a7adf628f1dec63273b069c93d5423eb78350d","src/proc/constant_evaluator.rs":"bfa528f6f09f2c7b5a9bea0929ec373435987cd971f87ce7800b7cbdf63e7023","src/proc/emitter.rs":"76e264b4c0877fe30bf20135685a289b76001188a78d5ca5b88edae5bb29646b","src/proc/index.rs":"a356017af35132873944f45183de968f3ccb605d9b953365488d2cb80ae0cfba","src/proc/keyword_set.rs":"928414d2b79ee48735d532e03d3f0a58427c3f27a2a0c6938425749b00943784","src/proc/layouter.rs":"fc55708da27682b1977c6aaa8b04ae2756ed7359026ba55dbf127509d8b6c4f4","src/proc/mod.rs":"9b6ec7ed566215ce453c4b045f5aaa101a3d9d77199e314015bbba6e66b90a24","src/proc/namer.rs":"5df27ec6f930fcaa3c2eddf98342dffc088db1e403d09258a82f895bdde70c18","src/proc/overloads/any_overload_set.rs":"877cd637d979abc08caa021dabb9821a79fc9109eb97024a230bcfac82830388","src/proc/overloads/constructor_set.rs":"b702f866ac1472bcc075bd0bede450388123b5899431934fd60a29865498c68b","src/proc/overloads/list.rs":"0a4ff2a43e035da2cf4a321a15afaff676377838095e691d3e5447f8d9180ab7","src/proc/overloads/mathfunction.rs":"305716a575bed3ec456db583e65bd5a972f1448612b6f260b278ae0b79802540","src/proc/overloads/mod.rs":"0e96479cbd0ec9fa8200a5e88c16a22ee7ed2021ecf6f80a7e4ded69cad5239f","src/proc/overloads/one_bits_iter.rs":"6b98769fdec777d311248084f13958c5cca44659d0928603ece8618387ea58b2","src/proc/overloads/regular.rs":"73d64fab79019d589cb0595d0ef606fd6af732c42a418c60c81da4c96e113c89","src/proc/overloads/rule.rs":"b7f87d5ca0cffdaa8ee0db0110918f5a726359fd8a72bc638d8ce27a4b0ae3b2","src/proc/overloads/scalar_set.rs":"3729bc754dbf29a2337379ecb46568fdc3149a48074a354244da91e3d9cb5cef","src/proc/overloads/utils.rs":"d8f661579e917edb892b6a7e8babadbc0db1a110d74558b81b49b3331bd07a5e","src/proc/terminator.rs":"c0eed3f6ab3c392c6953fce47b7487d3a767a1299ec764711ed3bdcfbf1248f6","src/proc/type_methods.rs":"99498c3e300dfdd7c6414c7017e374c15d02e110a07d82242953a12eb30a3943","src/proc/typifier.rs":"2d9d1ec55b1c2d2f8f612cd3dbae8ff98e5d475b8292e3ddf60d3cf2966d0cab","src/racy_lock.rs":"c56313dcaf212301ddf9e665872f35868ce966002d175ae153c1f14c1b2c048a","src/span.rs":"6c3fbc496b5812ea418fd203eb0f28f6e7fc3a6645aa6555d8f833d83bb6114a","src/valid/analyzer.rs":"777d476de2a853a3be81e1016b1d0257f3d0d9a749d3b49ae7f22fce6b74d1af","src/valid/compose.rs":"46eeed8c4d5b66fc043ddb701074bd864a9fdd24e38b88e282046230acefb747","src/valid/expression.rs":"f4268f67c0b612e356cd35982a7be787bf9a5db5cf3b5cde95f293aed8cc7901","src/valid/expression/builtin.rs":"525f146cd1a1e0f554552ee6f1a997be112b9390e3d98034e67d123e2ef41158","src/valid/function.rs":"c6607bc6b2a19abe80048362294826d304ab32d10a502def7f0c39bd5a310c1e","src/valid/handles.rs":"db70ae92d1e043c8e45bad8a356d5e9c6d6f1067f3f70ab29051146621ac6537","src/valid/interface.rs":"8c8ebe2aa97fe635d7fbfcbd940f9348e234c4a6c49722a80435f7801805a717","src/valid/mod.rs":"40360e083b545d255d6f87bf4402ce8a3983795699c34031de8c211e46d2fd36","src/valid/type.rs":"be0ed589f4b0462713e76af1b7a57b033620d68f21d476bbc7ebb848396d4856"},"package":null} diff --git a/third_party/rust/naga/Cargo.toml b/third_party/rust/naga/Cargo.toml index 0256a53..dd988b9 100644 --- a/third_party/rust/naga/Cargo.toml +++ b/third_party/rust/naga/Cargo.toml @@ -11,7 +11,7 @@ [package] edition = "2021" -rust-version = "1.90.0" +rust-version = "1.89.0" name = "naga" version = "28.0.0" authors = ["gfx-rs developers"] diff --git a/third_party/rust/quinn-udp/.cargo-checksum.json b/third_party/rust/quinn-udp/.cargo-checksum.json index 94ba909..bfa4065 100644 --- a/third_party/rust/quinn-udp/.cargo-checksum.json +++ b/third_party/rust/quinn-udp/.cargo-checksum.json @@ -1 +1 @@ -{"files":{".cargo_vcs_info.json":"707a4fac36952c0136790853fba415c1e6b3a3418b282599b52a968009c43494","Cargo.lock":"39882ba9584ef645766dbc62a5c9e3ee2a975f62f2c4d22f6abef49a7a528388","Cargo.toml":"7ad4bf29c5b820a2d3a1c7e1b016269f6d501b3067974b56b66577fca1906af0","Cargo.toml.orig":"91e2b9a2b1b3ef22faf5a360a78086820d2e2b60d000b8cdbe7f82220fede109","LICENSE-APACHE":"c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4","LICENSE-MIT":"4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04","benches/throughput.rs":"86cb85d2ae07169da8c279861c53b7a055168aaaa91155576c633b8724748db6","build.rs":"1d7ecadda4a26fb0eba598789eef9b99a1b4febba9bcb61a34f0c92b1d1bbaeb","src/cmsg/mod.rs":"ccf970026c8578b1c4661fbe106093dfb62b084a231ecbb4c62eaa10df5822fe","src/cmsg/unix.rs":"7917bce2f3c8e844eca2e4cfea82669b2a31cf311321dc42532626db4ee42de8","src/cmsg/windows.rs":"6fb936ec4a283efc5796872e777441e3039c40589073865644a8ef7936af4f4b","src/fallback.rs":"1e59ea16c6e1487bbb6aa759e349000431474aa245960512cb3b5117a1ed9e21","src/lib.rs":"77d48436bbfcccaea8dc3f061acc874ef5089148bf1700fc7a61b1b3d1b575e1","src/unix.rs":"2c2a32c3df9d27cc8964b46681700215ecf1f1baa6a363b88f1f11bdd4c92cea","src/windows.rs":"43da25457cb17c61369c3ba2c1d98f0ff758c5ea3207ae22969cca1f620b54af","tests/tests.rs":"bd4ee24b0e1ccab9beb444541b472bc1e815e2aba19d75572a379b6e1533449c"},"package":"fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"} \ No newline at end of file +{"files":{".cargo_vcs_info.json":"707a4fac36952c0136790853fba415c1e6b3a3418b282599b52a968009c43494","Cargo.lock":"39882ba9584ef645766dbc62a5c9e3ee2a975f62f2c4d22f6abef49a7a528388","Cargo.toml":"7ad4bf29c5b820a2d3a1c7e1b016269f6d501b3067974b56b66577fca1906af0","Cargo.toml.orig":"91e2b9a2b1b3ef22faf5a360a78086820d2e2b60d000b8cdbe7f82220fede109","LICENSE-APACHE":"c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4","LICENSE-MIT":"4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04","benches/throughput.rs":"86cb85d2ae07169da8c279861c53b7a055168aaaa91155576c633b8724748db6","build.rs":"1d7ecadda4a26fb0eba598789eef9b99a1b4febba9bcb61a34f0c92b1d1bbaeb","src/cmsg/mod.rs":"ccf970026c8578b1c4661fbe106093dfb62b084a231ecbb4c62eaa10df5822fe","src/cmsg/unix.rs":"7917bce2f3c8e844eca2e4cfea82669b2a31cf311321dc42532626db4ee42de8","src/cmsg/windows.rs":"6fb936ec4a283efc5796872e777441e3039c40589073865644a8ef7936af4f4b","src/fallback.rs":"1e59ea16c6e1487bbb6aa759e349000431474aa245960512cb3b5117a1ed9e21","src/lib.rs":"77d48436bbfcccaea8dc3f061acc874ef5089148bf1700fc7a61b1b3d1b575e1","src/unix.rs":"a71b09bc3d274fc4c43f2f2f3d8b655ee6ae12e6144ee8de99764fc9cc37b40e","src/windows.rs":"43da25457cb17c61369c3ba2c1d98f0ff758c5ea3207ae22969cca1f620b54af","tests/tests.rs":"bd4ee24b0e1ccab9beb444541b472bc1e815e2aba19d75572a379b6e1533449c"},"package":"fcebb1209ee276352ef14ff8732e24cc2b02bbac986cd74a4c81bcb2f9881970"} diff --git a/third_party/rust/quinn-udp/src/unix.rs b/third_party/rust/quinn-udp/src/unix.rs index 3e7212f..a95924b 100644 --- a/third_party/rust/quinn-udp/src/unix.rs +++ b/third_party/rust/quinn-udp/src/unix.rs @@ -53,9 +53,9 @@ extern "C" { // Defined in netinet6/in6.h on OpenBSD, this is not yet exported by the libc crate // directly. See https://github.com/rust-lang/libc/issues/3704 for when we might be able to // rely on this from the libc crate. -#[cfg(any(target_os = "openbsd", target_os = "netbsd"))] +#[cfg(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku"))] const IPV6_DONTFRAG: libc::c_int = 62; -#[cfg(not(any(target_os = "openbsd", target_os = "netbsd")))] +#[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku")))] const IPV6_DONTFRAG: libc::c_int = libc::IPV6_DONTFRAG; #[cfg(target_os = "freebsd")] @@ -86,16 +86,6 @@ impl UdpSocketState { pub fn new(sock: UdpSockRef<'_>) -> io::Result { let io = sock.0; let mut cmsg_platform_space = 0; - if cfg!(target_os = "linux") - || cfg!(bsd) - || cfg!(apple) - || cfg!(target_os = "android") - || cfg!(solarish) - { - cmsg_platform_space += - unsafe { libc::CMSG_SPACE(mem::size_of::() as _) as usize }; - } - assert!( CMSG_LEN >= unsafe { libc::CMSG_SPACE(mem::size_of::() as _) as usize } @@ -113,7 +103,7 @@ impl UdpSocketState { // mac and ios do not support IP_RECVTOS on dual-stack sockets :( // older macos versions also don't have the flag and will error out if we don't ignore it - #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", solarish)))] + #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))] if is_ipv4 || !io.only_v6()? { if let Err(_err) = set_socket_option(&*io, libc::IPPROTO_IP, libc::IP_RECVTOS, OPTION_ON) @@ -174,7 +164,6 @@ impl UdpSocketState { // Options standardized in RFC 3542 if !is_ipv4 { set_socket_option(&*io, libc::IPPROTO_IPV6, libc::IPV6_RECVPKTINFO, OPTION_ON)?; - set_socket_option(&*io, libc::IPPROTO_IPV6, libc::IPV6_RECVTCLASS, OPTION_ON)?; // Linux's IP_PMTUDISC_PROBE allows us to operate under interface MTU rather than the // kernel's path MTU guess, but actually disabling fragmentation requires this too. See // __ip6_append_data in ip6_output.c. @@ -461,7 +450,7 @@ fn send(state: &UdpSocketState, io: SockRef<'_>, transmit: &Transmit<'_>) -> io: } } -#[cfg(not(any(apple, target_os = "openbsd", target_os = "netbsd", solarish)))] +#[cfg(not(any(apple, target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))] fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) -> io::Result { let mut names = [MaybeUninit::::uninit(); BATCH_SIZE]; let mut ctrls = [cmsg::Aligned(MaybeUninit::<[u8; CMSG_LEN]>::uninit()); BATCH_SIZE]; @@ -538,7 +527,7 @@ fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) -> Ok(msg_count as usize) } -#[cfg(any(target_os = "openbsd", target_os = "netbsd", solarish, apple_slow))] +#[cfg(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish, apple_slow))] fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) -> io::Result { let mut name = MaybeUninit::::uninit(); let mut ctrl = cmsg::Aligned(MaybeUninit::<[u8; CMSG_LEN]>::uninit()); @@ -608,8 +597,6 @@ fn prepare_msg( encoder.push(libc::IPPROTO_IP, libc::IP_TOS, ecn as IpTosTy); } } - } else { - encoder.push(libc::IPPROTO_IPV6, libc::IPV6_TCLASS, ecn); } // Only set the segment size if it is less than the size of the contents. @@ -623,42 +610,6 @@ fn prepare_msg( gso::set_segment_size(&mut encoder, segment_size as u16); } - if let Some(ip) = &transmit.src_ip { - match ip { - IpAddr::V4(v4) => { - #[cfg(any(target_os = "linux", target_os = "android"))] - { - let pktinfo = libc::in_pktinfo { - ipi_ifindex: 0, - ipi_spec_dst: libc::in_addr { - s_addr: u32::from_ne_bytes(v4.octets()), - }, - ipi_addr: libc::in_addr { s_addr: 0 }, - }; - encoder.push(libc::IPPROTO_IP, libc::IP_PKTINFO, pktinfo); - } - #[cfg(any(bsd, apple, solarish))] - { - if encode_src_ip { - let addr = libc::in_addr { - s_addr: u32::from_ne_bytes(v4.octets()), - }; - encoder.push(libc::IPPROTO_IP, libc::IP_RECVDSTADDR, addr); - } - } - } - IpAddr::V6(v6) => { - let pktinfo = libc::in6_pktinfo { - ipi6_ifindex: 0, - ipi6_addr: libc::in6_addr { - s6_addr: v6.octets(), - }, - }; - encoder.push(libc::IPPROTO_IPV6, libc::IPV6_PKTINFO, pktinfo); - } - } - } - encoder.finish(); } @@ -714,22 +665,10 @@ fn decode_recv( ecn_bits = cmsg::decode::(cmsg); }, // FreeBSD uses IP_RECVTOS here, and we can be liberal because cmsgs are opt-in. - #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", solarish)))] + #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))] (libc::IPPROTO_IP, libc::IP_RECVTOS) => unsafe { ecn_bits = cmsg::decode::(cmsg); }, - (libc::IPPROTO_IPV6, libc::IPV6_TCLASS) => unsafe { - // Temporary hack around broken macos ABI. Remove once upstream fixes it. - // https://bugreport.apple.com/web/?problemID=48761855 - #[allow(clippy::unnecessary_cast)] // cmsg.cmsg_len defined as size_t - if cfg!(apple) - && cmsg.cmsg_len as usize == libc::CMSG_LEN(mem::size_of::() as _) as usize - { - ecn_bits = cmsg::decode::(cmsg); - } else { - ecn_bits = cmsg::decode::(cmsg) as u8; - } - }, #[cfg(any(target_os = "linux", target_os = "android"))] (libc::IPPROTO_IP, libc::IP_PKTINFO) => { let pktinfo = unsafe { cmsg::decode::(cmsg) }; @@ -742,10 +681,6 @@ fn decode_recv( let in_addr = unsafe { cmsg::decode::(cmsg) }; dst_ip = Some(IpAddr::V4(Ipv4Addr::from(in_addr.s_addr.to_ne_bytes()))); } - (libc::IPPROTO_IPV6, libc::IPV6_PKTINFO) => { - let pktinfo = unsafe { cmsg::decode::(cmsg) }; - dst_ip = Some(IpAddr::V6(Ipv6Addr::from(pktinfo.ipi6_addr.s6_addr))); - } #[cfg(any(target_os = "linux", target_os = "android"))] (libc::SOL_UDP, gro::UDP_GRO) => unsafe { stride = cmsg::decode::(cmsg) as usize; diff --git a/third_party/rust/wgpu-core/.cargo-checksum.json b/third_party/rust/wgpu-core/.cargo-checksum.json index 382cef0..cd7fab0 100644 --- a/third_party/rust/wgpu-core/.cargo-checksum.json +++ b/third_party/rust/wgpu-core/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"db3b322b6ca070a031f975355be3725d9902aa8e3905265390ecf45cb961771b","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","build.rs":"5e3619e28faeac243cbae1a5f739ad15035dc9e1254957b64fd1deed6f393c8a","src/as_hal.rs":"5d08d8e49b016abb662957d8e42ab748d580a2f3e449caeeb7311f222b8818f6","src/binding_model.rs":"7c802de1459aa92bda0ca7792be6dd1f457a5119fb48e08458ff4272f2dbed09","src/command/allocator.rs":"386cb6e60bd332a881dbbe57ff66a0fa83f35e3ee924559f1689418ac6c7273a","src/command/bind.rs":"26e3e693515dd82ae421b5b28d32138e6d9b62031e66b6761f2345bf2aa67148","src/command/bundle.rs":"a95ad3e56c2d53ee03ddd57fe58126d7c17348650261bde14ad920a3727c376a","src/command/clear.rs":"4c9bef9ee29a0a6e72c1e5b48ea6832cf8be7300d7d4890d6cf1dc63c99dd7f1","src/command/compute.rs":"a1dd2aeb7838e6b3c92ef0ebfe7ea6ce55cd50949b230f5914237b2fab6e053a","src/command/compute_command.rs":"92351bef1de6914b5b313dbe0df5a3bd25ef074f68b6d750f2a0f8a9011cfa89","src/command/draw.rs":"6ca62ab86e0b2216a1ac32e0f5b0d12653346a3e39922ffd9df722be7ed263f8","src/command/encoder.rs":"7655f8c248120f39e37f3ad0f84bd9816df78a75657790ab12d5aba144fef65f","src/command/encoder_command.rs":"2f9417c9c6c0cb52db561ed7d8a777fc29b59ade95a98ffaf91e4bb84f3b8cda","src/command/ffi.rs":"4924adbb42a670b5e9827c0f2175939981e8fc78a36b2fe370426e8c550a4ce7","src/command/memory_init.rs":"f68a796c4262d261620cf85e5762e267dee013f4ef5d61f67fcb173b59048983","src/command/mod.rs":"5ca1aaf059424470618e539a3f57b4378b229d908cbd4d3ccbfea99c8879de4a","src/command/pass.rs":"2302e20d9208f1a07fb305da630d03706852746cb48a62b5b2f3c5b1b34ad475","src/command/query.rs":"c722db4332742a06cc396571d44d18e709db5aa4161ba592eb8a319cda4d25be","src/command/ray_tracing.rs":"818788dd5e37325367832ec969e21ce47363a259754f907d518336ae5069f0bd","src/command/render.rs":"69b9a1b629c376058a8633a524ed2cd43593eaeb364e384df477e9850364764e","src/command/render_command.rs":"2e639cb0766d8de3047abb6997cc508b07f0c0adc1dfd1beed5f565af8b9eeef","src/command/timestamp_writes.rs":"da06fb07b8d0917be3e7fb9212d0ffc6b16526e1c1df617213ef354c3e1fb446","src/command/transfer.rs":"02d4fc7473e1b896fa3cdbf9fcaff7c863af131585da4dac41c461448a7b7a02","src/command/transition_resources.rs":"753cb02adfee4758404c403d19fd76e6c8de77de01435a2cbe2f60bdbe44bde1","src/conv.rs":"6142ee1793ad9b59dd3b95c87f15539a17333e0780c5dd5bdff92475711f1b36","src/device/bgl.rs":"b081fe1393f1dd917151efc3a10ee0269fecd3920eac3b45411c1197a98c5a06","src/device/global.rs":"d59fbcfbb2c8923c2cfedf00b86616a4ad1226fb833b38dbbce5db805bfdf072","src/device/life.rs":"44bd34cf5ab1c1a21729f2188df6d2ca0238f11c5f723380c8a4a16fbbd90b88","src/device/mod.rs":"945bcd919033911b99e3a96721dad611251f1f2a33a7dce24f6afad81f48cdca","src/device/queue.rs":"f112a22ff6101196e1089fa6579ff074aef6d898ec4fa80073bf559e5e22768c","src/device/ray_tracing.rs":"6f8df97f9fb1a3405a651d96619760ba7cf14830e28f65e824413a4f922abd95","src/device/resource.rs":"461bfcb87cd3b3bfec022c87449f183041d3ffbb9e61c9fb03e7ea7c20a44edd","src/device/trace.rs":"6008347ef381ec6825567b5cd374a83d4ad8460b3b64e1560caea5baf77f9099","src/device/trace/record.rs":"9a61c3cf1f8a2864b15d5da3e1655fc95364adc97278a5f74da7784148c45a0a","src/device/trace/replay.rs":"8138e5500db77855351bb71225fbb283e44a77257b46a7149c5af0144fd8e22f","src/error.rs":"4f07a0b09b30b2d6cbc855d0091d724000f492018af3b41e80befbeccf2a6f4e","src/global.rs":"b29b96777103398ed337ceae8d866c4606c5cdc5ace2db6555bacf66766306af","src/hash_utils.rs":"9f57a627fe3f00659391670141df62f68d67922c7b186f2a9a5958ab16fb576f","src/hub.rs":"563ef01e7bfbdb2ed5f37f0f3d0925f88d8398849651e97e8ae7922ab5b3bf39","src/id.rs":"055db08b33ce68b582009c01bbffe6cf58553b2a29abae842df1b3eb532ca4a0","src/identity.rs":"712ccda267eb602655c53672a94346aa4c9f88c0044ae6edcd658a814c9a50cf","src/indirect_validation/dispatch.rs":"de779f3f12513f67f24d35e31a1fcc8ae09455a87b0020a5d7671d08a3cd7305","src/indirect_validation/draw.rs":"f5c4ae3bf748d3a23ffcd833619c168f36ddaf2fcdbede91a4f595de0500975e","src/indirect_validation/mod.rs":"79466e4f9a59386e833958b3537beed6ffb6a7ee62aaabcf35382c2683998e43","src/indirect_validation/utils.rs":"e6a3b636dd71ff6b01d5abd5a589a0136fb30aa1d517a43f45cf2e5ad54da245","src/indirect_validation/validate_draw.wgsl":"35a34174ac4a61b9684283878eb42468c1843b6778114bff3ef4dc40976e05d7","src/init_tracker/buffer.rs":"6167a400ab271ba857f1c507e60a46fbd318c185aff87eecf7eb05f7f09b6963","src/init_tracker/mod.rs":"38773a6e51c165d8e54f1ab56f2a0c20c3a126ac3cb19733ea8b423fc305e214","src/init_tracker/texture.rs":"ffdc67d4be23bcd48b22945de94ac0ea8ee571f91eb6d00323b9afe6fa91eef3","src/instance.rs":"f75b9ab96fb6eceab095412789eae89c03deeed45a8bb6f042864f395eb50e8d","src/lib.rs":"57d2562e33b04113cc6c2ca3bc9a215ec779a291be82b680ff037fac7d7a8a15","src/lock/mod.rs":"8d3ae3f8d004d7f7d8a3aefe9f30b35669cb8e2409f5fba27b1fcb116b2429c4","src/lock/observing.rs":"723d57ff30b2abba64e65baf7523f58eecd794408d25e455923c2b293a6689ed","src/lock/rank.rs":"64b554c2c0996b9e5817e2cab49a4b46b9b8e7147873fad045c1b1031caa25db","src/lock/ranked.rs":"a95d6bf7f2ef510047a4c33687076beccf38a0148aac3261bd29fa7555e3f488","src/lock/vanilla.rs":"ca8156d4c981473d437db1056487a44c714760d685819eaff8cf82fb0098a608","src/pipeline.rs":"c602c3ee32442f416e3209788ed5768ea39dc6b0c52d66e419b2ad3d3e0fefab","src/pipeline_cache.rs":"96a7d2a5decf61a2906fe38f73377c9b785490a9510ee51eae553aeeaef799dc","src/pool.rs":"e11bfdc73a66321d26715465fa74657dcd26a9b856b80b8369b4aac2132a4295","src/present.rs":"c978a5cb832bee668e94d96ed0b1fca481b5ed3c34236c75518857fb124883e6","src/ray_tracing.rs":"ae43907290f003f6247bb599927401bd768865f7773a41c327dc73fade014ede","src/registry.rs":"2a76c6397998d263b6f6347299f04a8d27ea4df7dda200e98f205cfa3850dadb","src/resource.rs":"ca81d7f4b82669c034ddd8a5de5ba20cd3777284bef86a5a78e5cffd7e30dc1c","src/scratch.rs":"ea5c40e4d18a12f09cc1038f2dcdddb69b13e99275ac987d826658229a39b326","src/snatch.rs":"bf422810afd952894e365cd397763d42d6365ce3c5a5b4c1170566432f462939","src/storage.rs":"1a5bbf125a1cf65a36d8580e426ef1847c1638003fea0c6f76e309f5923b7692","src/timestamp_normalization/common.wgsl":"9f65aef0526ff9dde945fae70cef064ad961b0aee4291759ae82974cd2ead0a7","src/timestamp_normalization/mod.rs":"4fb7a4d6c53797edc9dd3893a8e25d4efeff14c4846a8927d865101a6d7594a2","src/timestamp_normalization/timestamp_normalization.wgsl":"c0225bf02fdd741542bd20664a6d9195b91936e6f7758c9c4c0ac05b08122e79","src/track/blas.rs":"18c7b5b89a60ab49bbc0f4f8b85a24502c1d968714ef4c586095e119848d902a","src/track/buffer.rs":"7f2393d16d0e8f624327c7a3a1de7176f945f3d33bfd3e12640faddc5c2c9f83","src/track/metadata.rs":"29d8ada9486ac6234ef9de6e7e5ada9cb81ac0db1289dfef905ce1d46c9bbfc6","src/track/mod.rs":"c28de55e31cdde3feb067945a04446dc5343a39418c4b9c2c76148172e7ba855","src/track/range.rs":"2688b05a0c6e8510ff6ba3a9623e8b83f433a05ba743129928c56c93d9a9c233","src/track/stateless.rs":"3db699f5f48a319fa07fb16cdf51e1623d6ecac7a476467ee366e014ea665b89","src/track/texture.rs":"34e72a20364d3ce642c21b29a089811503aa2fb4e7dab1a1e20d8ddd598742d7","src/validation.rs":"70e77edeb901bbaa4eed33bc451f1c856d3515027628b0f7b144d8cbeb060fe0","src/validation/shader_io_deductions.rs":"98f08f0b29570b65c62510b8a66055696b8797ce256ed7c62e282b101cc32e4b","src/weak_vec.rs":"a4193add5912b91226a3155cc613365b7fafdf2e7929d21d68bc19d149696e85"},"package":null} \ No newline at end of file +{"files":{"Cargo.toml":"7f45041c0e0cf2f9e09ea3b602857dc2068108508993bcfa5c89fd5d6cfacc06","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","build.rs":"5e3619e28faeac243cbae1a5f739ad15035dc9e1254957b64fd1deed6f393c8a","src/as_hal.rs":"5d08d8e49b016abb662957d8e42ab748d580a2f3e449caeeb7311f222b8818f6","src/binding_model.rs":"7c802de1459aa92bda0ca7792be6dd1f457a5119fb48e08458ff4272f2dbed09","src/command/allocator.rs":"386cb6e60bd332a881dbbe57ff66a0fa83f35e3ee924559f1689418ac6c7273a","src/command/bind.rs":"26e3e693515dd82ae421b5b28d32138e6d9b62031e66b6761f2345bf2aa67148","src/command/bundle.rs":"a95ad3e56c2d53ee03ddd57fe58126d7c17348650261bde14ad920a3727c376a","src/command/clear.rs":"4c9bef9ee29a0a6e72c1e5b48ea6832cf8be7300d7d4890d6cf1dc63c99dd7f1","src/command/compute.rs":"a1dd2aeb7838e6b3c92ef0ebfe7ea6ce55cd50949b230f5914237b2fab6e053a","src/command/compute_command.rs":"92351bef1de6914b5b313dbe0df5a3bd25ef074f68b6d750f2a0f8a9011cfa89","src/command/draw.rs":"6ca62ab86e0b2216a1ac32e0f5b0d12653346a3e39922ffd9df722be7ed263f8","src/command/encoder.rs":"7655f8c248120f39e37f3ad0f84bd9816df78a75657790ab12d5aba144fef65f","src/command/encoder_command.rs":"2f9417c9c6c0cb52db561ed7d8a777fc29b59ade95a98ffaf91e4bb84f3b8cda","src/command/ffi.rs":"4924adbb42a670b5e9827c0f2175939981e8fc78a36b2fe370426e8c550a4ce7","src/command/memory_init.rs":"f68a796c4262d261620cf85e5762e267dee013f4ef5d61f67fcb173b59048983","src/command/mod.rs":"5ca1aaf059424470618e539a3f57b4378b229d908cbd4d3ccbfea99c8879de4a","src/command/pass.rs":"2302e20d9208f1a07fb305da630d03706852746cb48a62b5b2f3c5b1b34ad475","src/command/query.rs":"c722db4332742a06cc396571d44d18e709db5aa4161ba592eb8a319cda4d25be","src/command/ray_tracing.rs":"818788dd5e37325367832ec969e21ce47363a259754f907d518336ae5069f0bd","src/command/render.rs":"69b9a1b629c376058a8633a524ed2cd43593eaeb364e384df477e9850364764e","src/command/render_command.rs":"2e639cb0766d8de3047abb6997cc508b07f0c0adc1dfd1beed5f565af8b9eeef","src/command/timestamp_writes.rs":"da06fb07b8d0917be3e7fb9212d0ffc6b16526e1c1df617213ef354c3e1fb446","src/command/transfer.rs":"02d4fc7473e1b896fa3cdbf9fcaff7c863af131585da4dac41c461448a7b7a02","src/command/transition_resources.rs":"753cb02adfee4758404c403d19fd76e6c8de77de01435a2cbe2f60bdbe44bde1","src/conv.rs":"6142ee1793ad9b59dd3b95c87f15539a17333e0780c5dd5bdff92475711f1b36","src/device/bgl.rs":"b081fe1393f1dd917151efc3a10ee0269fecd3920eac3b45411c1197a98c5a06","src/device/global.rs":"d59fbcfbb2c8923c2cfedf00b86616a4ad1226fb833b38dbbce5db805bfdf072","src/device/life.rs":"44bd34cf5ab1c1a21729f2188df6d2ca0238f11c5f723380c8a4a16fbbd90b88","src/device/mod.rs":"945bcd919033911b99e3a96721dad611251f1f2a33a7dce24f6afad81f48cdca","src/device/queue.rs":"f112a22ff6101196e1089fa6579ff074aef6d898ec4fa80073bf559e5e22768c","src/device/ray_tracing.rs":"6f8df97f9fb1a3405a651d96619760ba7cf14830e28f65e824413a4f922abd95","src/device/resource.rs":"461bfcb87cd3b3bfec022c87449f183041d3ffbb9e61c9fb03e7ea7c20a44edd","src/device/trace.rs":"6008347ef381ec6825567b5cd374a83d4ad8460b3b64e1560caea5baf77f9099","src/device/trace/record.rs":"9a61c3cf1f8a2864b15d5da3e1655fc95364adc97278a5f74da7784148c45a0a","src/device/trace/replay.rs":"8138e5500db77855351bb71225fbb283e44a77257b46a7149c5af0144fd8e22f","src/error.rs":"4f07a0b09b30b2d6cbc855d0091d724000f492018af3b41e80befbeccf2a6f4e","src/global.rs":"b29b96777103398ed337ceae8d866c4606c5cdc5ace2db6555bacf66766306af","src/hash_utils.rs":"9f57a627fe3f00659391670141df62f68d67922c7b186f2a9a5958ab16fb576f","src/hub.rs":"563ef01e7bfbdb2ed5f37f0f3d0925f88d8398849651e97e8ae7922ab5b3bf39","src/id.rs":"055db08b33ce68b582009c01bbffe6cf58553b2a29abae842df1b3eb532ca4a0","src/identity.rs":"712ccda267eb602655c53672a94346aa4c9f88c0044ae6edcd658a814c9a50cf","src/indirect_validation/dispatch.rs":"de779f3f12513f67f24d35e31a1fcc8ae09455a87b0020a5d7671d08a3cd7305","src/indirect_validation/draw.rs":"f5c4ae3bf748d3a23ffcd833619c168f36ddaf2fcdbede91a4f595de0500975e","src/indirect_validation/mod.rs":"79466e4f9a59386e833958b3537beed6ffb6a7ee62aaabcf35382c2683998e43","src/indirect_validation/utils.rs":"e6a3b636dd71ff6b01d5abd5a589a0136fb30aa1d517a43f45cf2e5ad54da245","src/indirect_validation/validate_draw.wgsl":"35a34174ac4a61b9684283878eb42468c1843b6778114bff3ef4dc40976e05d7","src/init_tracker/buffer.rs":"6167a400ab271ba857f1c507e60a46fbd318c185aff87eecf7eb05f7f09b6963","src/init_tracker/mod.rs":"38773a6e51c165d8e54f1ab56f2a0c20c3a126ac3cb19733ea8b423fc305e214","src/init_tracker/texture.rs":"ffdc67d4be23bcd48b22945de94ac0ea8ee571f91eb6d00323b9afe6fa91eef3","src/instance.rs":"f75b9ab96fb6eceab095412789eae89c03deeed45a8bb6f042864f395eb50e8d","src/lib.rs":"57d2562e33b04113cc6c2ca3bc9a215ec779a291be82b680ff037fac7d7a8a15","src/lock/mod.rs":"8d3ae3f8d004d7f7d8a3aefe9f30b35669cb8e2409f5fba27b1fcb116b2429c4","src/lock/observing.rs":"723d57ff30b2abba64e65baf7523f58eecd794408d25e455923c2b293a6689ed","src/lock/rank.rs":"64b554c2c0996b9e5817e2cab49a4b46b9b8e7147873fad045c1b1031caa25db","src/lock/ranked.rs":"a95d6bf7f2ef510047a4c33687076beccf38a0148aac3261bd29fa7555e3f488","src/lock/vanilla.rs":"ca8156d4c981473d437db1056487a44c714760d685819eaff8cf82fb0098a608","src/pipeline.rs":"c602c3ee32442f416e3209788ed5768ea39dc6b0c52d66e419b2ad3d3e0fefab","src/pipeline_cache.rs":"96a7d2a5decf61a2906fe38f73377c9b785490a9510ee51eae553aeeaef799dc","src/pool.rs":"e11bfdc73a66321d26715465fa74657dcd26a9b856b80b8369b4aac2132a4295","src/present.rs":"c978a5cb832bee668e94d96ed0b1fca481b5ed3c34236c75518857fb124883e6","src/ray_tracing.rs":"ae43907290f003f6247bb599927401bd768865f7773a41c327dc73fade014ede","src/registry.rs":"2a76c6397998d263b6f6347299f04a8d27ea4df7dda200e98f205cfa3850dadb","src/resource.rs":"ca81d7f4b82669c034ddd8a5de5ba20cd3777284bef86a5a78e5cffd7e30dc1c","src/scratch.rs":"ea5c40e4d18a12f09cc1038f2dcdddb69b13e99275ac987d826658229a39b326","src/snatch.rs":"bf422810afd952894e365cd397763d42d6365ce3c5a5b4c1170566432f462939","src/storage.rs":"1a5bbf125a1cf65a36d8580e426ef1847c1638003fea0c6f76e309f5923b7692","src/timestamp_normalization/common.wgsl":"9f65aef0526ff9dde945fae70cef064ad961b0aee4291759ae82974cd2ead0a7","src/timestamp_normalization/mod.rs":"4fb7a4d6c53797edc9dd3893a8e25d4efeff14c4846a8927d865101a6d7594a2","src/timestamp_normalization/timestamp_normalization.wgsl":"c0225bf02fdd741542bd20664a6d9195b91936e6f7758c9c4c0ac05b08122e79","src/track/blas.rs":"18c7b5b89a60ab49bbc0f4f8b85a24502c1d968714ef4c586095e119848d902a","src/track/buffer.rs":"7f2393d16d0e8f624327c7a3a1de7176f945f3d33bfd3e12640faddc5c2c9f83","src/track/metadata.rs":"29d8ada9486ac6234ef9de6e7e5ada9cb81ac0db1289dfef905ce1d46c9bbfc6","src/track/mod.rs":"c28de55e31cdde3feb067945a04446dc5343a39418c4b9c2c76148172e7ba855","src/track/range.rs":"2688b05a0c6e8510ff6ba3a9623e8b83f433a05ba743129928c56c93d9a9c233","src/track/stateless.rs":"3db699f5f48a319fa07fb16cdf51e1623d6ecac7a476467ee366e014ea665b89","src/track/texture.rs":"34e72a20364d3ce642c21b29a089811503aa2fb4e7dab1a1e20d8ddd598742d7","src/validation.rs":"70e77edeb901bbaa4eed33bc451f1c856d3515027628b0f7b144d8cbeb060fe0","src/validation/shader_io_deductions.rs":"98f08f0b29570b65c62510b8a66055696b8797ce256ed7c62e282b101cc32e4b","src/weak_vec.rs":"a4193add5912b91226a3155cc613365b7fafdf2e7929d21d68bc19d149696e85"},"package":null} diff --git a/third_party/rust/wgpu-core/Cargo.toml b/third_party/rust/wgpu-core/Cargo.toml index 468e6cb..9e27540 100644 --- a/third_party/rust/wgpu-core/Cargo.toml +++ b/third_party/rust/wgpu-core/Cargo.toml @@ -11,7 +11,7 @@ [package] edition = "2021" -rust-version = "1.90.0" +rust-version = "1.89.0" name = "wgpu-core" version = "28.0.0" authors = ["gfx-rs developers"] diff --git a/third_party/rust/wgpu-hal/.cargo-checksum.json b/third_party/rust/wgpu-hal/.cargo-checksum.json index eb85ccd..79b4dd7 100644 --- a/third_party/rust/wgpu-hal/.cargo-checksum.json +++ b/third_party/rust/wgpu-hal/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"4880b994ea5185146ddd956d393ca977cf645c2633f263dc08cadbb3951c23ad","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"cf9e84804a635e4a8a9fefc596be9da6bf7354dde0d105e27d56a12cb20dd8e3","build.rs":"92e5ba25cb39fb1eb568ffc84e417d5f272a52a4f7128488c42c26f1f0428a7e","examples/halmark/main.rs":"71e83a4d9759adc8073a137b136a5c18d6914946d7005b0feb2abffd632e8691","examples/halmark/shader.wgsl":"26c256ec36d6f0e9a1647431ca772766bee4382d64eaa718ba7b488dcfb6bcca","examples/raw-gles.em.html":"70fbe68394a1a4522192de1dcfaf7d399f60d7bdf5de70b708f9bb0417427546","examples/raw-gles.rs":"7583874835f178f49c9784f669e53fd22256d06d8b2d0fd8d284b09d0eb56925","examples/ray-traced-triangle/main.rs":"ed7b940951b2dc91b7ebedbe0f7784c6cfe43bafe3ef818880a5541efb6f9fbc","examples/ray-traced-triangle/shader.wgsl":"90a66ffa57a642fd806a5b3c96347448158cd562d8951b5afd067bfd0b3d1e98","src/auxil/dxgi/conv.rs":"3ca856c93916c0be714924ff077aa1f366be5557cc164210154d252e7e49fb77","src/auxil/dxgi/exception.rs":"0eafc977390cf76b6ab92697a60de05b8fd61fbad5f3d3ea0649d6e93777e1bc","src/auxil/dxgi/factory.rs":"81e479e550a09127384d8080e43d5f5bae8e8dda6082fe41a87bea8f872eb0f1","src/auxil/dxgi/mod.rs":"e6c5cc3b73bb97742135d6f35308c42f0822304764978fb8dabb0e848863352a","src/auxil/dxgi/name.rs":"ff942da0da1a497ee4d2be21604f7ba9fae963588105b3d1f63aae1a0c536e82","src/auxil/dxgi/result.rs":"e7a9dfb48d8ef8cbe58b28b1ace5caf7818ee50505ba3220bb0509e66ae469b7","src/auxil/dxgi/time.rs":"b6911800be3873cbe277b2534b3839c6f005f3d9a09341aace4752e207d584a2","src/auxil/mod.rs":"dd6cf4ea2e2f9aa4f84f518a9c8bf541e0c4e51a59a5d5dd2600443044d8d579","src/auxil/renderdoc.rs":"94898f747476e269b2910d42e769f2bbb6be0cb466ad92f9d381f55799d2756e","src/dx12/adapter.rs":"9b71f72c3bf47b22df0d1e47f281416da40b47f9d3b107485d8d80b31ca77c5b","src/dx12/command.rs":"bd615e009cdce641155fb2f2c2112080385a7bf8ac6676ea1ef0b2f27b21eeb4","src/dx12/conv.rs":"a320fca45fd1990762ff10dad1d8bbb29833d9b693b0887bf2898021a737612c","src/dx12/dcomp.rs":"053068fbd393a4b8610c7070a72e5887f0fe09b61d35d2be806083d800b48b08","src/dx12/descriptor.rs":"ccd4feb6bd3e0a0ffc26142f8a81fca26180d0f50146b6eb2f670cbc89ea7064","src/dx12/device.rs":"65f6332bb01d1099b096a9030a427609ff040980366920f6da97ad7fcdd59ba0","src/dx12/instance.rs":"040af8d59d15752d2e7967584a28a8f6d50d14c21c023e5df7cef0aca5d86cf2","src/dx12/mod.rs":"44fdc829d9ede4820211d40706e63beec2f1cb556e9642cd7dd0661156aa56dc","src/dx12/pipeline_desc.rs":"631c72108f6735debe9f7059e22574ad50b11aca4dc0ca804e6d89b1373d19ff","src/dx12/sampler.rs":"d18d243efe4fa667dbab5b75b5b91d47de94d441976d9f44a46a2b49ba38473d","src/dx12/shader_compilation.rs":"a0ce9ca4b9143715ffc4b45a56a18182d54b118161553173c1a546cc6041560c","src/dx12/suballocation.rs":"3abbde338015079fe366c5b76bd155b2c41b31ea5b44b7a67ad42f2c43545239","src/dx12/types.rs":"3fc7619fc09303eb3c936d4ded6889f94ce9e8b9aa62742ce900baa1b1e1cca7","src/dx12/view.rs":"79b3f7331d9795e60f9b53023cbf0df46c3a05b1e8bd5c7bcca8acdd235b124f","src/dynamic/adapter.rs":"e93f7d082a3950c9e8ccff8a631d251c7598b4b25dda9fe6347dadfa3ba07829","src/dynamic/command.rs":"90cb8c795af62a39a4488659dc5d482e8738a494a975d123bcd764cdaecebfc6","src/dynamic/device.rs":"d521f90344bfe54538888a8649500c748d656b1b7668acf4f56af6e17461e83a","src/dynamic/instance.rs":"7b515c201e1ca24f24439544dbfa1d19ea1412a4f89bd803e009aed13b021e55","src/dynamic/mod.rs":"2577d3aef6441f5b42b427d80ba3cf7fee2a97b2fc12335a1fba383e8a79a9b2","src/dynamic/queue.rs":"d76abb4797e90253386d24584f186dbe1909e772560156b2e891fa043cfefbdc","src/dynamic/surface.rs":"4328c2fe86931f50aa00ac3d6982d0879b774eebf7a507903d1b1898c891fb4d","src/gles/adapter.rs":"996975f5d664094b1b72edf1a6784b69e5d54da296a5b0e6d52eebcb8ba0a36c","src/gles/command.rs":"fc27f7d4370c8e84879ceb5efd2e41cc93a9c92309adddd8fe6ecedbb24696c7","src/gles/conv.rs":"1013e1e48bc6b5b0df60a026251b97653528b112600eb3f8d4e905dbf791d897","src/gles/device.rs":"c2be98d957f8a13689bb23b16300f9deb6c1d7def016ef414c0592aa2d2ab40d","src/gles/egl.rs":"38c4af6be2e25fd755adcd71db770cbeef0ecd904f8d1178358ce6d1b9e51ec6","src/gles/emscripten.rs":"316d2bb6f2a4bb126dbe68a223f7393399080d116b61c39504454acdf4f9cfaf","src/gles/fence.rs":"a2e7b6abd2fd4a438de90b9f58452c64cd8bba83999c90fd6390e3db128b9c6c","src/gles/mod.rs":"0276e57149e6cad792369a10cfdaec25f01b3e0149b25686f6687f285f700cfe","src/gles/queue.rs":"949c132a5e7ebc65b5da1b007f90503fd9d080021b3335c884b556b120c150ab","src/gles/shaders/clear.frag":"9133ed8ed97d3641fbb6b5f5ea894a3554c629ccc1b80a5fc9221d7293aa1954","src/gles/shaders/clear.vert":"a543768725f4121ff2e9e1fb5b00644931e9d6f2f946c0ef01968afb5a135abd","src/gles/shaders/srgb_present.frag":"dd9a43c339a2fa4ccf7f6a1854c6f400cabf271a7d5e9230768e9f39d47f3ff5","src/gles/shaders/srgb_present.vert":"6e85d489403d80b81cc94790730bb53b309dfc5eeede8f1ea3412a660f31d357","src/gles/web.rs":"7ce662d1cab08f92e2ecac4a4407ba037c80f9ac2c953f71ac4e53d33b736a37","src/gles/wgl.rs":"61082a0139d34d5f06906477f80727a01fba094181223725d5ded2d7d1a8992a","src/lib.rs":"fbed3228d49cec7d9055e6a22c930036b0dfede6ff50ff964fe84db463fa603f","src/metal/adapter.rs":"c708c6f84587a562615d8e5b4e9ed1acf91a19efc46fa97ea1356820a17cfd2f","src/metal/command.rs":"4f83738e9b87907b9b40fc016c395402a4c6c48faf1ba7e6e21add13d3446e09","src/metal/conv.rs":"0b8c6e0b3ac4137206aeb6cdb8f0fe6b033df335fbe671d722d2aad04b49ceab","src/metal/device.rs":"ff3ee1bea16381f696d6289f0f7a6bbcca6ea3e19ff3be913b4eb3040208d928","src/metal/mod.rs":"845ed8d651203b9123d4f4512feae7d2f3f5abed5be859aa0d3b2145b829afce","src/metal/surface.rs":"5f5f2d10e0674b6729783d4549666a3704fd69aebf5fe617acd916912f21c9ae","src/metal/time.rs":"c32d69f30e846dfcc0e39e01097fb80df63b2bebb6586143bb62494999850246","src/noop/buffer.rs":"b5edc5e2c52287dfbd4f619e36097ac233041eb9ab287b889b6ee477d740fa09","src/noop/command.rs":"2b6c04bb4cd7b7a1f40433266767698e01ed725a9cec42a6c16834c3a369cc67","src/noop/mod.rs":"97b17b0b20db1ec4fb43dec3c7dac73f20c2823cb324cd9c948c469220aff70e","src/validation_canary.rs":"2e8f84e5f85671b3e55ddd410476171c762e34cbea315b37921cbb6ff18bfb4f","src/vulkan/adapter.rs":"3414185bf0d12fda67a5007d4f32f784b77586e744a58f87be6b1b7239fc15c2","src/vulkan/command.rs":"b00b8858363f62b346029e4d67a0cee8b92423af632c903b7151f0f32da487a5","src/vulkan/conv.rs":"237289e3a9403a194482559d9f361c7758e35c61bc916283c2fa7d79081b15fc","src/vulkan/device.rs":"4b849b404e5277909ee81b0e317facacdc18cc066e0177c62be52cb152544ee1","src/vulkan/drm.rs":"45f7bf1dd854688a65261e4674d80f90c997b193a162fd2ae658acf4e2003552","src/vulkan/instance.rs":"f75ced5a603f6f63ba0c8f5dd34636708c53248db9002ae43a60c8b0b7dabbc7","src/vulkan/mod.rs":"5b822bb0a8b493bea3f7b30fe7dd42a4793ffe04fbb8546b231ec3db828e9eff","src/vulkan/sampler.rs":"f65729d6df5cce681b7756b3e48074017f0c7f42da69ca55e26cc723cd14ad59","src/vulkan/semaphore_list.rs":"6e548d810d75daf5ed31b6e520ece32c8ef97e4b66926c17f0d4317f355802e5","src/vulkan/swapchain/mod.rs":"1baef6ef36d005fe03b27ea15a91d1c5c7114eb7f777a50e67ca5f448a53291b","src/vulkan/swapchain/native.rs":"f3bd46ad44f25cf07da44a54a7fc656d0880436dad79eef9c06bd8cc85075455"},"package":null} \ No newline at end of file +{"files":{"Cargo.toml":"8a4f2ae93321b93350c1796c6a6259b2a2d10646b74e0ae8292018f2ebe05743","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","README.md":"cf9e84804a635e4a8a9fefc596be9da6bf7354dde0d105e27d56a12cb20dd8e3","build.rs":"92e5ba25cb39fb1eb568ffc84e417d5f272a52a4f7128488c42c26f1f0428a7e","examples/halmark/main.rs":"71e83a4d9759adc8073a137b136a5c18d6914946d7005b0feb2abffd632e8691","examples/halmark/shader.wgsl":"26c256ec36d6f0e9a1647431ca772766bee4382d64eaa718ba7b488dcfb6bcca","examples/raw-gles.em.html":"70fbe68394a1a4522192de1dcfaf7d399f60d7bdf5de70b708f9bb0417427546","examples/raw-gles.rs":"7583874835f178f49c9784f669e53fd22256d06d8b2d0fd8d284b09d0eb56925","examples/ray-traced-triangle/main.rs":"ed7b940951b2dc91b7ebedbe0f7784c6cfe43bafe3ef818880a5541efb6f9fbc","examples/ray-traced-triangle/shader.wgsl":"90a66ffa57a642fd806a5b3c96347448158cd562d8951b5afd067bfd0b3d1e98","src/auxil/dxgi/conv.rs":"3ca856c93916c0be714924ff077aa1f366be5557cc164210154d252e7e49fb77","src/auxil/dxgi/exception.rs":"0eafc977390cf76b6ab92697a60de05b8fd61fbad5f3d3ea0649d6e93777e1bc","src/auxil/dxgi/factory.rs":"81e479e550a09127384d8080e43d5f5bae8e8dda6082fe41a87bea8f872eb0f1","src/auxil/dxgi/mod.rs":"e6c5cc3b73bb97742135d6f35308c42f0822304764978fb8dabb0e848863352a","src/auxil/dxgi/name.rs":"ff942da0da1a497ee4d2be21604f7ba9fae963588105b3d1f63aae1a0c536e82","src/auxil/dxgi/result.rs":"e7a9dfb48d8ef8cbe58b28b1ace5caf7818ee50505ba3220bb0509e66ae469b7","src/auxil/dxgi/time.rs":"b6911800be3873cbe277b2534b3839c6f005f3d9a09341aace4752e207d584a2","src/auxil/mod.rs":"dd6cf4ea2e2f9aa4f84f518a9c8bf541e0c4e51a59a5d5dd2600443044d8d579","src/auxil/renderdoc.rs":"94898f747476e269b2910d42e769f2bbb6be0cb466ad92f9d381f55799d2756e","src/dx12/adapter.rs":"9b71f72c3bf47b22df0d1e47f281416da40b47f9d3b107485d8d80b31ca77c5b","src/dx12/command.rs":"bd615e009cdce641155fb2f2c2112080385a7bf8ac6676ea1ef0b2f27b21eeb4","src/dx12/conv.rs":"a320fca45fd1990762ff10dad1d8bbb29833d9b693b0887bf2898021a737612c","src/dx12/dcomp.rs":"053068fbd393a4b8610c7070a72e5887f0fe09b61d35d2be806083d800b48b08","src/dx12/descriptor.rs":"ccd4feb6bd3e0a0ffc26142f8a81fca26180d0f50146b6eb2f670cbc89ea7064","src/dx12/device.rs":"65f6332bb01d1099b096a9030a427609ff040980366920f6da97ad7fcdd59ba0","src/dx12/instance.rs":"040af8d59d15752d2e7967584a28a8f6d50d14c21c023e5df7cef0aca5d86cf2","src/dx12/mod.rs":"44fdc829d9ede4820211d40706e63beec2f1cb556e9642cd7dd0661156aa56dc","src/dx12/pipeline_desc.rs":"631c72108f6735debe9f7059e22574ad50b11aca4dc0ca804e6d89b1373d19ff","src/dx12/sampler.rs":"d18d243efe4fa667dbab5b75b5b91d47de94d441976d9f44a46a2b49ba38473d","src/dx12/shader_compilation.rs":"a0ce9ca4b9143715ffc4b45a56a18182d54b118161553173c1a546cc6041560c","src/dx12/suballocation.rs":"3abbde338015079fe366c5b76bd155b2c41b31ea5b44b7a67ad42f2c43545239","src/dx12/types.rs":"3fc7619fc09303eb3c936d4ded6889f94ce9e8b9aa62742ce900baa1b1e1cca7","src/dx12/view.rs":"79b3f7331d9795e60f9b53023cbf0df46c3a05b1e8bd5c7bcca8acdd235b124f","src/dynamic/adapter.rs":"e93f7d082a3950c9e8ccff8a631d251c7598b4b25dda9fe6347dadfa3ba07829","src/dynamic/command.rs":"90cb8c795af62a39a4488659dc5d482e8738a494a975d123bcd764cdaecebfc6","src/dynamic/device.rs":"d521f90344bfe54538888a8649500c748d656b1b7668acf4f56af6e17461e83a","src/dynamic/instance.rs":"7b515c201e1ca24f24439544dbfa1d19ea1412a4f89bd803e009aed13b021e55","src/dynamic/mod.rs":"2577d3aef6441f5b42b427d80ba3cf7fee2a97b2fc12335a1fba383e8a79a9b2","src/dynamic/queue.rs":"d76abb4797e90253386d24584f186dbe1909e772560156b2e891fa043cfefbdc","src/dynamic/surface.rs":"4328c2fe86931f50aa00ac3d6982d0879b774eebf7a507903d1b1898c891fb4d","src/gles/adapter.rs":"996975f5d664094b1b72edf1a6784b69e5d54da296a5b0e6d52eebcb8ba0a36c","src/gles/command.rs":"fc27f7d4370c8e84879ceb5efd2e41cc93a9c92309adddd8fe6ecedbb24696c7","src/gles/conv.rs":"1013e1e48bc6b5b0df60a026251b97653528b112600eb3f8d4e905dbf791d897","src/gles/device.rs":"c2be98d957f8a13689bb23b16300f9deb6c1d7def016ef414c0592aa2d2ab40d","src/gles/egl.rs":"38c4af6be2e25fd755adcd71db770cbeef0ecd904f8d1178358ce6d1b9e51ec6","src/gles/emscripten.rs":"316d2bb6f2a4bb126dbe68a223f7393399080d116b61c39504454acdf4f9cfaf","src/gles/fence.rs":"a2e7b6abd2fd4a438de90b9f58452c64cd8bba83999c90fd6390e3db128b9c6c","src/gles/mod.rs":"0276e57149e6cad792369a10cfdaec25f01b3e0149b25686f6687f285f700cfe","src/gles/queue.rs":"949c132a5e7ebc65b5da1b007f90503fd9d080021b3335c884b556b120c150ab","src/gles/shaders/clear.frag":"9133ed8ed97d3641fbb6b5f5ea894a3554c629ccc1b80a5fc9221d7293aa1954","src/gles/shaders/clear.vert":"a543768725f4121ff2e9e1fb5b00644931e9d6f2f946c0ef01968afb5a135abd","src/gles/shaders/srgb_present.frag":"dd9a43c339a2fa4ccf7f6a1854c6f400cabf271a7d5e9230768e9f39d47f3ff5","src/gles/shaders/srgb_present.vert":"6e85d489403d80b81cc94790730bb53b309dfc5eeede8f1ea3412a660f31d357","src/gles/web.rs":"7ce662d1cab08f92e2ecac4a4407ba037c80f9ac2c953f71ac4e53d33b736a37","src/gles/wgl.rs":"61082a0139d34d5f06906477f80727a01fba094181223725d5ded2d7d1a8992a","src/lib.rs":"fbed3228d49cec7d9055e6a22c930036b0dfede6ff50ff964fe84db463fa603f","src/metal/adapter.rs":"c708c6f84587a562615d8e5b4e9ed1acf91a19efc46fa97ea1356820a17cfd2f","src/metal/command.rs":"4f83738e9b87907b9b40fc016c395402a4c6c48faf1ba7e6e21add13d3446e09","src/metal/conv.rs":"0b8c6e0b3ac4137206aeb6cdb8f0fe6b033df335fbe671d722d2aad04b49ceab","src/metal/device.rs":"ff3ee1bea16381f696d6289f0f7a6bbcca6ea3e19ff3be913b4eb3040208d928","src/metal/mod.rs":"845ed8d651203b9123d4f4512feae7d2f3f5abed5be859aa0d3b2145b829afce","src/metal/surface.rs":"5f5f2d10e0674b6729783d4549666a3704fd69aebf5fe617acd916912f21c9ae","src/metal/time.rs":"c32d69f30e846dfcc0e39e01097fb80df63b2bebb6586143bb62494999850246","src/noop/buffer.rs":"b5edc5e2c52287dfbd4f619e36097ac233041eb9ab287b889b6ee477d740fa09","src/noop/command.rs":"2b6c04bb4cd7b7a1f40433266767698e01ed725a9cec42a6c16834c3a369cc67","src/noop/mod.rs":"97b17b0b20db1ec4fb43dec3c7dac73f20c2823cb324cd9c948c469220aff70e","src/validation_canary.rs":"2e8f84e5f85671b3e55ddd410476171c762e34cbea315b37921cbb6ff18bfb4f","src/vulkan/adapter.rs":"3414185bf0d12fda67a5007d4f32f784b77586e744a58f87be6b1b7239fc15c2","src/vulkan/command.rs":"b00b8858363f62b346029e4d67a0cee8b92423af632c903b7151f0f32da487a5","src/vulkan/conv.rs":"237289e3a9403a194482559d9f361c7758e35c61bc916283c2fa7d79081b15fc","src/vulkan/device.rs":"4b849b404e5277909ee81b0e317facacdc18cc066e0177c62be52cb152544ee1","src/vulkan/drm.rs":"45f7bf1dd854688a65261e4674d80f90c997b193a162fd2ae658acf4e2003552","src/vulkan/instance.rs":"f75ced5a603f6f63ba0c8f5dd34636708c53248db9002ae43a60c8b0b7dabbc7","src/vulkan/mod.rs":"5b822bb0a8b493bea3f7b30fe7dd42a4793ffe04fbb8546b231ec3db828e9eff","src/vulkan/sampler.rs":"f65729d6df5cce681b7756b3e48074017f0c7f42da69ca55e26cc723cd14ad59","src/vulkan/semaphore_list.rs":"6e548d810d75daf5ed31b6e520ece32c8ef97e4b66926c17f0d4317f355802e5","src/vulkan/swapchain/mod.rs":"1baef6ef36d005fe03b27ea15a91d1c5c7114eb7f777a50e67ca5f448a53291b","src/vulkan/swapchain/native.rs":"f3bd46ad44f25cf07da44a54a7fc656d0880436dad79eef9c06bd8cc85075455"},"package":null} diff --git a/third_party/rust/wgpu-hal/Cargo.toml b/third_party/rust/wgpu-hal/Cargo.toml index b903238..e468c73 100644 --- a/third_party/rust/wgpu-hal/Cargo.toml +++ b/third_party/rust/wgpu-hal/Cargo.toml @@ -11,7 +11,7 @@ [package] edition = "2021" -rust-version = "1.90.0" +rust-version = "1.89.0" name = "wgpu-hal" version = "28.0.0" authors = ["gfx-rs developers"] diff --git a/third_party/rust/wgpu-types/.cargo-checksum.json b/third_party/rust/wgpu-types/.cargo-checksum.json index e20a0c5..98fcce1 100644 --- a/third_party/rust/wgpu-types/.cargo-checksum.json +++ b/third_party/rust/wgpu-types/.cargo-checksum.json @@ -1 +1 @@ -{"files":{"Cargo.toml":"02248f64628e131d8fc3e981dea17a6501ac629f0f20f7848fbc85e0edfb1757","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","src/adapter.rs":"4be5fe713a0691b15447487d0b6cf3f0c1e84cc9959f6e258b62d7183b944879","src/assertions.rs":"e4d2d40bc1e870a59637f4b9574743e19565a62f6dbcc21cb18a76b666b796eb","src/backend.rs":"cca0b725680cdc601a2735f64da0371b77b4ff741d76c56401866816a07f47e9","src/binding.rs":"e989b0bd3d9b685f8a664682c0d000e93d7fcd4f02dc6776365b0777178c748c","src/buffer.rs":"bc1d2976e3d54b81686f4597db7155d40d806a2b97d0eeb291bbaabf4b1eaefb","src/cast_utils.rs":"33f03a57ccbedef2699f2305bec584c623db1fd28bfdf584d1260da4fbecd529","src/counters.rs":"e85dc9fa3b52896b35a051de78b2e8d351df5bbf56923aece2d4756c8490fdd0","src/device.rs":"367b952adbe146a54abe3962c47f508c05e7bab2797d2cc503b104da9693dfd9","src/env.rs":"26ffc91867625784159bcf391881187aa92cf92b81b1f40959ce1b96ae6d554d","src/error.rs":"0109e6209cf152abbfd0cee85dd934fb24f2304bf6adad6fb684b77f151fb158","src/features.rs":"8c88ded65e0a2958ac448c3cb7267f48c0efa3bbfdd70463350cba65c1d25e63","src/instance.rs":"266b004e388a566ea43d4c202e6b43ed2c43c4f4d09c4948952b1721ee6dcf91","src/lib.rs":"4e9e917a99af5f2a454e5aba09ccc4708bb0ea68938f818d1d357467f31070d8","src/limits.rs":"83e00e79ff98e276f5ce33ff18a441ebbde123f79936aadc0763243e6933d5e6","src/math.rs":"916d78724b50ed6e9f84240e0aa19b0afc886e21a1b18428ca6ace5a1e6cc80c","src/origin_extent.rs":"31a6956c59c86046aac284bcd6b2d65462554db4ee6552b8fa0f660838113f97","src/ray_tracing.rs":"349245d907020947a40b99fc8fe78b2d0a34ddce6190415284aec2c37d6ba4e2","src/render.rs":"206cc471da7650e72a0d8e2d5b856e48c162f76acd422f9a735e32d3b5125352","src/send_sync.rs":"8d1db3a9b78eecab2e082751aea3b249dbd1a22a6274fe3cebc5384280dd474e","src/shader.rs":"8b97cc9fd5f43410878cd5c81fea1e1b14a815f9054fc946b248e64fa5396c1a","src/surface.rs":"6609fa1ff03da5c537657ceaefe311bb650b0d199f1164167c38962c053fea54","src/texture.rs":"ed85930050d64b0fd9b0629d12f7797cea9583ddf74ef844f9e14b0de866b9bb","src/texture/external_image.rs":"2bb94e9f8c2f7d9df92b320c2dcc628e4a681204b32a8fbcf4da7f0ee32da9da","src/texture/external_texture.rs":"c4be6cd9f352141f72ae0dfbc4a2baa0995bbe968c9973c7067a2a879542eb3a","src/texture/format.rs":"771ae2bcac55ea8336ae86fed5f1eff9b7911f1b6587ef68d6d38972ce4ac625","src/tokens.rs":"db51d2ea67b9ba65347197db69b87202bfc6863104a44b10abb246139dcccb8c","src/transfers.rs":"25f47e9cbc5887f849f5eb4d8952d89de6377df40f480ebbea61c58d2e0e7fc6","src/vertex.rs":"3c66086cb02edbaf7a36b0b62b6e022e8f81333db20d80fa892ce2fc84da9814"},"package":null} \ No newline at end of file +{"files":{"Cargo.toml":"ba1a544586a3de3ade37e5758b5ee33e27936ac2f2c4faf9b6a0fae77ed3f645","LICENSE.APACHE":"a6cba85bc92e0cff7a450b1d873c0eaa2e9fc96bf472df0247a26bec77bf3ff9","LICENSE.MIT":"dc0d97139e8205818c703741c7be7cb3b96888bd5917b8d6fc6133731e403c21","src/adapter.rs":"4be5fe713a0691b15447487d0b6cf3f0c1e84cc9959f6e258b62d7183b944879","src/assertions.rs":"e4d2d40bc1e870a59637f4b9574743e19565a62f6dbcc21cb18a76b666b796eb","src/backend.rs":"cca0b725680cdc601a2735f64da0371b77b4ff741d76c56401866816a07f47e9","src/binding.rs":"e989b0bd3d9b685f8a664682c0d000e93d7fcd4f02dc6776365b0777178c748c","src/buffer.rs":"bc1d2976e3d54b81686f4597db7155d40d806a2b97d0eeb291bbaabf4b1eaefb","src/cast_utils.rs":"33f03a57ccbedef2699f2305bec584c623db1fd28bfdf584d1260da4fbecd529","src/counters.rs":"e85dc9fa3b52896b35a051de78b2e8d351df5bbf56923aece2d4756c8490fdd0","src/device.rs":"367b952adbe146a54abe3962c47f508c05e7bab2797d2cc503b104da9693dfd9","src/env.rs":"26ffc91867625784159bcf391881187aa92cf92b81b1f40959ce1b96ae6d554d","src/error.rs":"0109e6209cf152abbfd0cee85dd934fb24f2304bf6adad6fb684b77f151fb158","src/features.rs":"8c88ded65e0a2958ac448c3cb7267f48c0efa3bbfdd70463350cba65c1d25e63","src/instance.rs":"266b004e388a566ea43d4c202e6b43ed2c43c4f4d09c4948952b1721ee6dcf91","src/lib.rs":"4e9e917a99af5f2a454e5aba09ccc4708bb0ea68938f818d1d357467f31070d8","src/limits.rs":"83e00e79ff98e276f5ce33ff18a441ebbde123f79936aadc0763243e6933d5e6","src/math.rs":"916d78724b50ed6e9f84240e0aa19b0afc886e21a1b18428ca6ace5a1e6cc80c","src/origin_extent.rs":"31a6956c59c86046aac284bcd6b2d65462554db4ee6552b8fa0f660838113f97","src/ray_tracing.rs":"349245d907020947a40b99fc8fe78b2d0a34ddce6190415284aec2c37d6ba4e2","src/render.rs":"206cc471da7650e72a0d8e2d5b856e48c162f76acd422f9a735e32d3b5125352","src/send_sync.rs":"8d1db3a9b78eecab2e082751aea3b249dbd1a22a6274fe3cebc5384280dd474e","src/shader.rs":"8b97cc9fd5f43410878cd5c81fea1e1b14a815f9054fc946b248e64fa5396c1a","src/surface.rs":"6609fa1ff03da5c537657ceaefe311bb650b0d199f1164167c38962c053fea54","src/texture.rs":"ed85930050d64b0fd9b0629d12f7797cea9583ddf74ef844f9e14b0de866b9bb","src/texture/external_image.rs":"2bb94e9f8c2f7d9df92b320c2dcc628e4a681204b32a8fbcf4da7f0ee32da9da","src/texture/external_texture.rs":"c4be6cd9f352141f72ae0dfbc4a2baa0995bbe968c9973c7067a2a879542eb3a","src/texture/format.rs":"771ae2bcac55ea8336ae86fed5f1eff9b7911f1b6587ef68d6d38972ce4ac625","src/tokens.rs":"db51d2ea67b9ba65347197db69b87202bfc6863104a44b10abb246139dcccb8c","src/transfers.rs":"25f47e9cbc5887f849f5eb4d8952d89de6377df40f480ebbea61c58d2e0e7fc6","src/vertex.rs":"3c66086cb02edbaf7a36b0b62b6e022e8f81333db20d80fa892ce2fc84da9814"},"package":null} diff --git a/third_party/rust/wgpu-types/Cargo.toml b/third_party/rust/wgpu-types/Cargo.toml index db015c4..2e2b0c1 100644 --- a/third_party/rust/wgpu-types/Cargo.toml +++ b/third_party/rust/wgpu-types/Cargo.toml @@ -11,7 +11,7 @@ [package] edition = "2021" -rust-version = "1.90.0" +rust-version = "1.89.0" name = "wgpu-types" version = "28.0.0" authors = ["gfx-rs developers"] diff --git a/toolkit/components/processtools/ProcInfo_haiku.cpp b/toolkit/components/processtools/ProcInfo_haiku.cpp new file mode 100644 index 0000000..6c08732 --- /dev/null +++ b/toolkit/components/processtools/ProcInfo_haiku.cpp @@ -0,0 +1,90 @@ +/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set ts=8 sts=2 et sw=2 tw=80: */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "mozilla/ProcInfo.h" + +#include + +namespace mozilla { + +nsresult GetCurrentProcessMemoryUsage(uint64_t* aResult) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +int GetCycleTimeFrequencyMHz() { return 0; } + +nsresult GetCpuTimeSinceProcessStartInMs(uint64_t* aResult) { + team_usage_info usage; + if (B_OK != get_team_usage_info(B_CURRENT_TEAM, B_TEAM_USAGE_SELF, &usage)) { + return NS_ERROR_FAILURE; + } + const bigtime_t microseconds = usage.user_time + usage.kernel_time; + *aResult = microseconds / 1000; + return NS_OK; +} + +nsresult GetGpuTimeSinceProcessStartInMs(uint64_t* aResult) { + return NS_ERROR_NOT_IMPLEMENTED; +} + +ProcInfoPromise::ResolveOrRejectValue GetProcInfoSync( + nsTArray&& aRequests) { + ProcInfoPromise::ResolveOrRejectValue result; + + HashMap gathered; + if (!gathered.reserve(aRequests.Length())) { + result.SetReject(NS_ERROR_OUT_OF_MEMORY); + return result; + } + for (const auto& request : aRequests) { + ProcInfo info; + + team_usage_info usage; + if (B_OK != get_team_usage_info(request.pid, B_TEAM_USAGE_SELF, &usage)) { + continue; + } + const bigtime_t microseconds = usage.user_time + usage.kernel_time; + const uint64_t nanoseconds = microseconds * 1000; + info.cpuTime = nanoseconds; + + info.memory = 0; + ssize_t cookie_area = 0; + area_info area; + while (B_OK == get_next_area_info(request.pid, &cookie_area, &area)) { + info.memory += area.ram_size; + } + + info.pid = request.pid; + info.childId = request.childId; + info.type = request.processType; + info.origin = request.origin; + info.windows = std::move(request.windowInfo); + info.utilityActors = std::move(request.utilityInfo); + + int32 cookie_thread = 0; + thread_info thread; + while (B_OK == get_next_thread_info(request.pid, &cookie_thread, &thread)) { + const bigtime_t microseconds = thread.user_time + thread.kernel_time; + const uint64_t nanoseconds = microseconds * 1000; + + ThreadInfo threadInfo; + threadInfo.tid = thread.thread; + threadInfo.cpuTime = nanoseconds; + info.threads.AppendElement(threadInfo); + } + + if (!gathered.put(request.pid, std::move(info))) { + result.SetReject(NS_ERROR_OUT_OF_MEMORY); + return result; + } + } + + // ... and we're done! + result.SetResolve(std::move(gathered)); + return result; +} + +} // namespace mozilla diff --git a/toolkit/components/processtools/moz.build b/toolkit/components/processtools/moz.build index d5c0aca..506a7b1 100644 --- a/toolkit/components/processtools/moz.build +++ b/toolkit/components/processtools/moz.build @@ -43,6 +43,8 @@ if toolkit == "gtk" or toolkit == "android": UNIFIED_SOURCES += ["ProcInfo_bsd.cpp"] elif CONFIG["OS_TARGET"] == "SunOS": UNIFIED_SOURCES += ["ProcInfo_solaris.cpp"] + elif CONFIG["OS_TARGET"] == "Haiku": + UNIFIED_SOURCES += ["ProcInfo_haiku.cpp"] else: UNIFIED_SOURCES += ["ProcInfo_linux.cpp"] elif toolkit == "windows": diff --git a/toolkit/components/remote/RemoteUtils.h b/toolkit/components/remote/RemoteUtils.h index 134ed34..fcad6db 100644 --- a/toolkit/components/remote/RemoteUtils.h +++ b/toolkit/components/remote/RemoteUtils.h @@ -13,7 +13,7 @@ # include "WinUtils.h" #endif -#if defined XP_WIN || defined XP_MACOSX +#if defined XP_WIN || defined XP_MACOSX || defined XP_HAIKU static void BuildClassName(const char* aProgram, const char* aProfile, nsString& aClassName) { // On Windows, the class name is used as the window class. @@ -30,6 +30,8 @@ static void BuildClassName(const char* aProgram, const char* aProfile, # if defined XP_WIN constexpr size_t ClassNameMaxLength = 256; +# elif defined XP_HAIKU + constexpr size_t ClassNameMaxLength = 32; # else constexpr size_t ClassNameMaxLength = 128; # endif diff --git a/toolkit/components/remote/moz.build b/toolkit/components/remote/moz.build index 4230dfe..f003ea3 100644 --- a/toolkit/components/remote/moz.build +++ b/toolkit/components/remote/moz.build @@ -28,7 +28,7 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": "nsUnixRemoteServer.cpp", "RemoteUtils.cpp", ] - if CONFIG["MOZ_ENABLE_DBUS"]: + if CONFIG["MOZ_ENABLE_DBUS"] and CONFIG["OS_ARCH"] != "Haiku": SOURCES += [ "nsDBusRemoteClient.cpp", "nsDBusRemoteServer.cpp", @@ -39,11 +39,22 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": ] CXXFLAGS += CONFIG["MOZ_DBUS_CFLAGS"] else: - SOURCES += [ - "nsGTKRemoteServer.cpp", - "nsXRemoteClient.cpp", - "nsXRemoteServer.cpp", - ] + if CONFIG["OS_ARCH"] == "Haiku": + SOURCES += [ + "nsHaikuRemoteClient.cpp", + "nsHaikuRemoteServer.cpp", + ] + EXPORTS += [ + "nsUnixRemoteServer.h", + "RemoteUtils.h", + ] + CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] + else: + SOURCES += [ + "nsGTKRemoteServer.cpp", + "nsXRemoteClient.cpp", + "nsXRemoteServer.cpp", + ] CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] if CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows": diff --git a/toolkit/components/remote/nsHaikuRemoteClient.cpp b/toolkit/components/remote/nsHaikuRemoteClient.cpp new file mode 100644 index 0000000..2bec3ce --- /dev/null +++ b/toolkit/components/remote/nsHaikuRemoteClient.cpp @@ -0,0 +1,35 @@ +#include +#include + +#include "nsHaikuRemoteClient.h" + +#include "RemoteUtils.h" + +nsresult nsHaikuRemoteClient::Init() { + return NS_OK; +} + +nsresult nsHaikuRemoteClient::SendCommandLine(const char* aProgram, + const char* aProfile, + int32_t argc, + const char** argv, + bool aRaise) { + nsString className; + BuildClassName(aProgram, aProfile, className); + BString portName; + portName.SetTo(NS_ConvertUTF16toUTF8(className.get()).get()); + + port_id port = find_port(portName.String()); + if (port < 0) { + return NS_ERROR_NOT_AVAILABLE; + } + + BString message; + message << (aRaise ? "1" : "0"); + for (int i = 0; i < argc; i++) { + message << "|" << argv[i]; + } + + status_t result = write_port(port, 1, message.String(), message.Length() + 1); + return (result == B_OK) ? NS_OK : NS_ERROR_FAILURE; +} diff --git a/toolkit/components/remote/nsHaikuRemoteClient.h b/toolkit/components/remote/nsHaikuRemoteClient.h new file mode 100644 index 0000000..de9c0a2 --- /dev/null +++ b/toolkit/components/remote/nsHaikuRemoteClient.h @@ -0,0 +1,22 @@ +#ifndef HAIKU_REMOTE_CLIENT_H +#define HAIKU_REMOTE_CLIENT_H + +#pragma GCC visibility push(default) +#include +#include +#include +#pragma GCC visibility pop + +#include "nsRemoteClient.h" + +class nsHaikuRemoteClient : public nsRemoteClient { +public: + virtual ~nsHaikuRemoteClient() = default; + + nsresult Init() override; + nsresult SendCommandLine(const char* aProgram, const char* aProfile, + int32_t argc, const char** argv, + bool aRaise) override; +}; + +#endif diff --git a/toolkit/components/remote/nsHaikuRemoteServer.cpp b/toolkit/components/remote/nsHaikuRemoteServer.cpp new file mode 100644 index 0000000..aebefa1 --- /dev/null +++ b/toolkit/components/remote/nsHaikuRemoteServer.cpp @@ -0,0 +1,107 @@ +#include "nsHaikuRemoteServer.h" +#include "RemoteUtils.h" + +#include "nsCommandLine.h" +#include "nsICommandLineRunner.h" +#include "nsICommandLine.h" +#include "nsCOMPtr.h" +#include "nsThreadUtils.h" + +#include + +nsHaikuRemoteServer::nsHaikuRemoteServer() + : fRunning(false), fPort(B_BAD_PORT_ID) {} + +nsHaikuRemoteServer::~nsHaikuRemoteServer() { + Shutdown(); +} + +nsresult nsHaikuRemoteServer::Startup(const char* aAppName, const char* aProfileName) { + nsString className; + BuildClassName(aAppName, aProfileName, className); + BString portName; + portName.SetTo(NS_ConvertUTF16toUTF8(className.get()).get()); + + fPort = create_port(10, portName.String()); + if (fPort < 0) { + return NS_ERROR_FAILURE; + } + + fRunning = true; + fListenerThread = std::thread([this]() { ListenLoop(); }); + + return NS_OK; +} + +void nsHaikuRemoteServer::Shutdown() { + fRunning = false; + if (fPort >= 0) { + delete_port(fPort); + fPort = B_BAD_PORT_ID; + } + if (fListenerThread.joinable()) { + fListenerThread.join(); + } +} + +void nsHaikuRemoteServer::ListenLoop() { + while (fRunning) { + char buffer[B_PATH_NAME_LENGTH * 2]; + int32 code; + ssize_t len = read_port(fPort, &code, buffer, sizeof(buffer)); + if (len > 0) { + buffer[len] = '\0'; + HandleMessage(buffer); + } else { + snooze(50000); + } + } +} + +nsresult nsHaikuRemoteServer::HandleMessage(const char* message) { + return NS_DispatchToMainThread( + NS_NewRunnableFunction("HandleMessageOnMainThread", [this, msg = std::string(message)]() { + this->HandleMessageOnMainThread(msg.c_str()); + }) + ); +} + +void nsHaikuRemoteServer::HandleMessageOnMainThread(const char* message) { + BString messageString(message); + BStringList argsList; + messageString.Split("|", true, argsList); + + if (argsList.IsEmpty()) + return; + + bool activate = (argsList.First() == "1"); + + argsList.Remove(0); + + int argc = argsList.CountStrings(); + const char** argv = new const char*[argc]; + for (int i = 0; i < argc; i++) { + argv[i] = argsList.StringAt(i).String(); + } + + nsCOMPtr cmdLine(new nsCommandLine()); + nsresult rv = cmdLine->Init(argc, argv, nullptr, nsICommandLine::STATE_REMOTE_AUTO); + delete[] argv; + + if (NS_SUCCEEDED(rv)) { + cmdLine->Run(); + if (activate) { + team_info teamInfo; + if (get_team_info(B_CURRENT_TEAM, &teamInfo) == B_OK) { + if (be_roster->ActivateApp(teamInfo.team) != B_OK && be_app != NULL) { + // if the activation fails, activate all titled windows + for (int32 i = 0; BWindow* window = be_app->WindowAt(i); i++) { + if (window->Type() == B_TITLED_WINDOW) { + window->Activate(true); + } + } + } + } + } + } +} diff --git a/toolkit/components/remote/nsHaikuRemoteServer.h b/toolkit/components/remote/nsHaikuRemoteServer.h new file mode 100644 index 0000000..7c6d057 --- /dev/null +++ b/toolkit/components/remote/nsHaikuRemoteServer.h @@ -0,0 +1,37 @@ +#ifndef HAIKU_REMOTE_SERVER_H +#define HAIKU_REMOTE_SERVER_H + +#include "nsRemoteServer.h" + +#include +#include + +#pragma GCC visibility push(default) +#include +#include +#include +#include +#include +#include +#include +#pragma GCC visibility pop + +class nsHaikuRemoteServer : public nsRemoteServer { +public: + nsHaikuRemoteServer(); + ~nsHaikuRemoteServer() override; + + nsresult Startup(const char* aAppName, const char* aProfileName) override; + void Shutdown() override; + +private: + void ListenLoop(); + nsresult HandleMessage(const char* message); + void HandleMessageOnMainThread(const char* message); + + std::atomic fRunning; + std::thread fListenerThread; + port_id fPort; +}; + +#endif diff --git a/toolkit/components/remote/nsRemoteService.cpp b/toolkit/components/remote/nsRemoteService.cpp index 46860f6..b010d4d 100644 --- a/toolkit/components/remote/nsRemoteService.cpp +++ b/toolkit/components/remote/nsRemoteService.cpp @@ -7,7 +7,10 @@ #include "nsRemoteClient.h" #ifdef MOZ_WIDGET_GTK -# ifdef MOZ_ENABLE_DBUS +# if defined(XP_HAIKU) +# include "nsHaikuRemoteServer.h" +# include "nsHaikuRemoteClient.h" +# elif defined(MOZ_ENABLE_DBUS) # include "nsDBusRemoteServer.h" # include "nsDBusRemoteClient.h" # else @@ -196,7 +199,9 @@ nsresult nsRemoteService::SendCommandLine(const nsACString& aProfile, UniquePtr client; #ifdef MOZ_WIDGET_GTK -# if defined(MOZ_ENABLE_DBUS) +# if defined(XP_HAIKU) + client = MakeUnique(); +# elif defined(MOZ_ENABLE_DBUS) client = MakeUnique(mStartupToken); # else client = MakeUnique(mStartupToken); @@ -258,7 +263,9 @@ void nsRemoteService::StartupServer() { } #ifdef MOZ_WIDGET_GTK -# if defined(MOZ_ENABLE_DBUS) +# if defined(XP_HAIKU) + mRemoteServer = MakeUnique(); +# elif defined(MOZ_ENABLE_DBUS) mRemoteServer = MakeUnique(); # else mRemoteServer = MakeUnique(); diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build index 2853f66..cd81d58 100644 --- a/toolkit/library/moz.build +++ b/toolkit/library/moz.build @@ -106,6 +106,10 @@ def Libxul(name, output_category=None): if name == "xul-gtest" and CONFIG["MOZ_LTO_FAT"]: LDFLAGS += ["-fno-lto"] +if CONFIG["OS_ARCH"] == "Haiku": + OS_LIBS += [ + "be", + ] # The real libxul definition is in ./build/moz.build, but we define a # xul library here such that # FINAL_LIBRARY = 'xul' refers to here, which diff --git a/toolkit/library/rust/moz.build b/toolkit/library/rust/moz.build index 0115e3b..d753e5b 100644 --- a/toolkit/library/rust/moz.build +++ b/toolkit/library/rust/moz.build @@ -8,6 +8,12 @@ include("gkrust-features.mozbuild") RustLibrary("gkrust", gkrust_features, is_gkrust=True) +if CONFIG["OS_ARCH"] == "Haiku": + # Rust 1.83+ requires arc4random_buf() + OS_LIBS += [ + "bsd" + ] + for feature in gkrust_features: # We don't want to enable refcount logging during rusttests, since the # relevant FFI symbols wouldn't be found. diff --git a/toolkit/modules/ShortcutUtils.sys.mjs b/toolkit/modules/ShortcutUtils.sys.mjs index 0a2a5ac..d87183b 100644 --- a/toolkit/modules/ShortcutUtils.sys.mjs +++ b/toolkit/modules/ShortcutUtils.sys.mjs @@ -95,7 +95,7 @@ export var ShortcutUtils = { let elemString = ""; let haveCloverLeaf = false; if (elemMod.match("accel")) { - if (Services.appinfo.OS == "Darwin") { + if (Services.appinfo.OS == "Darwin" || Services.appinfo.OS == "Haiku") { haveCloverLeaf = true; } else { elemString += @@ -104,7 +104,7 @@ export var ShortcutUtils = { } } if (elemMod.match("access")) { - if (Services.appinfo.OS == "Darwin") { + if (Services.appinfo.OS == "Darwin" || Services.appinfo.OS == "Haiku") { elemString += lazy.PlatformKeys.GetStringFromName("VK_CONTROL") + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); @@ -125,14 +125,26 @@ export var ShortcutUtils = { lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); } if (elemMod.match("alt")) { - elemString += - lazy.PlatformKeys.GetStringFromName("VK_ALT") + - lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + if (Services.appinfo.OS == "Haiku") { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_CONTROL") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } else { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_ALT") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } } if (elemMod.match("ctrl") || elemMod.match("control")) { - elemString += - lazy.PlatformKeys.GetStringFromName("VK_CONTROL") + - lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + if (Services.appinfo.OS == "Haiku") { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_ALT") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } else { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_CONTROL") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } } if (elemMod.match("meta") && this.metaKeyIsCommandKey()) { elemString += @@ -141,9 +153,15 @@ export var ShortcutUtils = { } if (haveCloverLeaf) { - elemString += - lazy.PlatformKeys.GetStringFromName("VK_COMMAND_OR_WIN") + - lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + if (Services.appinfo.OS == "Haiku") { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_ALT") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } else { + elemString += + lazy.PlatformKeys.GetStringFromName("VK_COMMAND_OR_WIN") + + lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR"); + } } return elemString; diff --git a/toolkit/moz.configure b/toolkit/moz.configure index bdb2222..64d6a55 100644 --- a/toolkit/moz.configure +++ b/toolkit/moz.configure @@ -301,6 +301,8 @@ def audio_backends_default(target): return ("sndio",) elif target.kernel == "Darwin": return ("audiounit",) + elif target.os == "Haiku": + return ("haiku",) elif target.os == "NetBSD": return ("sunaudio",) elif target.os == "SunOS": @@ -318,6 +320,7 @@ option( "aaudio", "alsa", "audiounit", + "haiku", "jack", "opensl", "oss", @@ -356,6 +359,11 @@ def imply_audiounit(values, target): return any("audiounit" in value for value in values) or None +@depends("--enable-audio-backends") +def imply_haiku(values): + return any("haiku" in value for value in values) or None + + @depends("--enable-audio-backends") def imply_jack(values): return any("jack" in value for value in values) or None @@ -419,6 +427,8 @@ imply_option( set_config("MOZ_AUDIOUNIT_RUST", imply_audiounit, when="--enable-audio-backends") +set_config("MOZ_HAIKU", imply_haiku, when="--enable-audio-backends") + imply_option( "--enable-jack", imply_jack, reason="--enable-audio-backends", when=use_pkg_config ) @@ -1755,7 +1765,7 @@ with only_when("--enable-compile-environment"): # being built as position independent. "int main() { return 0; }\nint (*ptr)() = main;", pack_rel_relocs - + ["-pie", "-o", path] + + ["-fPIC", "-o", path] + (extra_toolchain_flags or []) + linker_ldflags, wrapper=c_compiler.wrapper, @@ -3158,6 +3168,7 @@ def forkserver_default(target, build_project): (target.os == "GNU" and target.kernel == "Linux") or target.os == "FreeBSD" or target.os == "OpenBSD" + or target.os == "Haiku" ) @@ -3952,7 +3963,7 @@ with only_when(compile_environment): @depends(target) def default_user_appdir(target): - if target.kernel in ("WINNT", "Darwin"): + if target.kernel in ("WINNT", "Darwin", "Haiku"): return "Mozilla" elif target.os == "Android": return ".mozilla" diff --git a/toolkit/system/gnome/moz.build b/toolkit/system/gnome/moz.build index ce84646..1ebee31 100644 --- a/toolkit/system/gnome/moz.build +++ b/toolkit/system/gnome/moz.build @@ -7,8 +7,12 @@ with Files("**"): BUG_COMPONENT = ("Firefox", "Shell Integration") +if CONFIG["OS_ARCH"] != "Haiku": + SOURCES += [ + "nsAlertsIconListener.cpp", + ] + SOURCES += [ - "nsAlertsIconListener.cpp", "nsSystemAlertsService.cpp", ] diff --git a/toolkit/system/gnome/nsGIOService.cpp b/toolkit/system/gnome/nsGIOService.cpp index c505594..f72bd16 100644 --- a/toolkit/system/gnome/nsGIOService.cpp +++ b/toolkit/system/gnome/nsGIOService.cpp @@ -494,6 +494,32 @@ gboolean g_app_info_launch_default_for_uri_openbsd(const char* uri, } #endif +#ifdef __HAIKU__ + +gboolean g_app_info_launch_uris_haiku(GAppInfo* mApp, const char* uri, + GAppLaunchContext* context, + GError** error) { + gchar* command = g_strdup_printf("open '%s'", uri); + auto releaseCommand = MakeScopeExit([&] { g_free(command); }); + + int result = system(command); + + if (result != 0) { + g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED, + "Failed to open URI '%s' using 'open' utility", uri); + return FALSE; + } + return TRUE; +} + +gboolean g_app_info_launch_default_for_uri_haiku(const char* uri, + GAppLaunchContext* context, + GError** error) { + return g_app_info_launch_uris_haiku(NULL, uri, context, error); +} + +#endif // __HAIKU__ + static NS_IMETHODIMP LaunchWithURIImpl(RefPtr aInfo, nsIURI* aUri, const char* aXDGToken = nullptr) { GList uris = {nullptr}; @@ -507,6 +533,10 @@ static NS_IMETHODIMP LaunchWithURIImpl(RefPtr aInfo, nsIURI* aUri, gboolean result = g_app_info_launch_uris_openbsd( aInfo, spec.get(), GetLaunchContext(aXDGToken).get(), getter_Transfers(error)); +#elif defined(__HAIKU__) + gboolean result = g_app_info_launch_uris_haiku( + aInfo, spec.get(), GetLaunchContext(aXDGToken).get(), + getter_Transfers(error)); #else gboolean result = g_app_info_launch_uris( aInfo, &uris, GetLaunchContext(aXDGToken).get(), getter_Transfers(error)); @@ -926,6 +956,9 @@ static nsresult ShowURIImpl(nsIURI* aURI, const char* aXDGToken = nullptr) { #ifdef __OpenBSD__ if (!g_app_info_launch_default_for_uri_openbsd( spec.get(), GetLaunchContext(aXDGToken).get(), +#elif defined(__HAIKU__) + if (!g_app_info_launch_default_for_uri_haiku( + spec.get(), GetLaunchContext(aXDGToken).get(), #else if (!g_app_info_launch_default_for_uri(spec.get(), GetLaunchContext(aXDGToken).get(), @@ -971,6 +1004,9 @@ static nsresult LaunchPathImpl(const nsACString& aPath, #ifdef __OpenBSD__ g_app_info_launch_default_for_uri_openbsd(spec.get(), GetLaunchContext(aXDGToken).get(), +#elif defined(__HAIKU__) + g_app_info_launch_default_for_uri_haiku(spec.get(), + GetLaunchContext(aXDGToken).get(), #else g_app_info_launch_default_for_uri(spec.get(), GetLaunchContext(aXDGToken).get(), diff --git a/toolkit/system/haiku/moz.build b/toolkit/system/haiku/moz.build new file mode 100644 index 0000000..8c3bf79 --- /dev/null +++ b/toolkit/system/haiku/moz.build @@ -0,0 +1,26 @@ +# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*- +# vim: set filetype=python: +# This Source Code Form is subject to the terms of the Mozilla Public +# License, v. 2.0. If a copy of the MPL was not distributed with this +# file, You can obtain one at http://mozilla.org/MPL/2.0/. + +with Files("**"): + BUG_COMPONENT = ("Firefox", "Shell Integration") + +if CONFIG["OS_ARCH"] == "Haiku": + SOURCES += [ + "nsAlertsIconListener.cpp", + ] + OS_LIBS += [ + 'be', + ] + + +FINAL_LIBRARY = "xul" + +LOCAL_INCLUDES += [ + "/toolkit/components/build/", +] + +CXXFLAGS += CONFIG["GLIB_CFLAGS"] +CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"] diff --git a/toolkit/system/haiku/nsAlertsIconListener.cpp b/toolkit/system/haiku/nsAlertsIconListener.cpp new file mode 100644 index 0000000..89bd0bb --- /dev/null +++ b/toolkit/system/haiku/nsAlertsIconListener.cpp @@ -0,0 +1,170 @@ +#include "../gnome/nsSystemAlertsService.h" +#include "nsAlertsIconListener.h" +#include "imgIContainer.h" +#include "nsServiceManagerUtils.h" +#include "nsIAlertsService.h" +#include "nsImageToPixbuf.h" +#include "nsIStringBundle.h" +#include "nsIObserverService.h" +#include "nsCRT.h" +#include "mozilla/UniquePtrExtensions.h" +#include "nsNetUtil.h" +#include "mozilla/GRefPtr.h" + +#include +#include +#include + +using namespace mozilla; + +NS_IMPL_ISUPPORTS(nsAlertsIconListener, nsISupports) + +GdkPixbuf* nsAlertsIconListener::GetPixbufFromContainer(imgIContainer* aImage) { + if (!aImage) { + return nullptr; + } + + RefPtr pixbuf = nsImageToPixbuf::ImageToPixbuf(aImage); + if (!pixbuf) { + return nullptr; + } + + return pixbuf.forget().take(); +} + +BBitmap* nsAlertsIconListener::PixbufToBitmap(GdkPixbuf* aPixbuf) { + if (!aPixbuf) return nullptr; + + int width = gdk_pixbuf_get_width(aPixbuf); + int height = gdk_pixbuf_get_height(aPixbuf); + + const int maxWidth = 64; + const int maxHeight = 64; + + GdkPixbuf* pixbufToUse = aPixbuf; + RefPtr scaledPixbuf; + + if (width > maxWidth || height > maxHeight) { + double ratio = std::min(static_cast(maxWidth) / width, + static_cast(maxHeight) / height); + int newWidth = std::max(1, static_cast(std::round(width * ratio))); + int newHeight = std::max(1, static_cast(std::round(height * ratio))); + + scaledPixbuf = dont_AddRef(gdk_pixbuf_scale_simple(aPixbuf, newWidth, newHeight, GDK_INTERP_BILINEAR)); + if (!scaledPixbuf) return nullptr; + pixbufToUse = scaledPixbuf.get(); + width = newWidth; + height = newHeight; + } + + BRect bounds(0, 0, width - 1, height - 1); + BBitmap* bitmap = new BBitmap(bounds, B_RGBA32); + if (!bitmap || bitmap->InitCheck() != B_OK) { + delete bitmap; + return nullptr; + } + + guchar* pixels = gdk_pixbuf_get_pixels(pixbufToUse); + int rowstride = gdk_pixbuf_get_rowstride(pixbufToUse); + uint8* dest = (uint8*)bitmap->Bits(); + uint32 destRowstride = bitmap->BytesPerRow(); + + for (int y = 0; y < height; ++y) { + guchar* srcP = pixels + y * rowstride; + uint8* destP = dest + y * destRowstride; + for (int x = 0; x < width; ++x) { + destP[0] = srcP[2]; // B + destP[1] = srcP[1]; // G + destP[2] = srcP[0]; // R + destP[3] = srcP[3]; // A + srcP += 4; + destP += 4; + } + } + + return bitmap; +} + +nsAlertsIconListener::nsAlertsIconListener(nsSystemAlertsService* aBackend, + nsIAlertNotification* aAlertNotification, + const nsAString& aAlertName) + : mAlertName(aAlertName), mBackend(aBackend), mAlertNotification(aAlertNotification) {} + +nsAlertsIconListener::~nsAlertsIconListener() { + mBackend->RemoveListener(mAlertName, this); +} + +nsresult nsAlertsIconListener::InitAlert(nsIAlertNotification* aAlert, + nsIObserver* aAlertListener) { + aAlert->GetTextClickable(&mAlertHasAction); + aAlert->GetSilent(&mAlertIsSilent); + aAlert->GetRequireInteraction(&mAlertRequiresInteraction); + + nsAutoString title, text; + aAlert->GetTitle(title); + aAlert->GetText(text); + CopyUTF16toUTF8(title, mAlertTitle); + CopyUTF16toUTF8(text, mAlertText); + + mAlertListener = aAlertListener; + aAlert->GetCookie(mAlertCookie); + + nsCOMPtr image; + aAlert->GetImage(getter_AddRefs(image)); + + return ShowAlert(image); +} + +nsresult nsAlertsIconListener::ShowAlert(imgIContainer* aImage) { + if (!mBackend->IsActiveListener(mAlertName, this)) return NS_OK; + + BNotification notification(B_INFORMATION_NOTIFICATION); + if (notification.InitCheck() != B_OK) return NS_ERROR_FAILURE; + + if (aImage) { + GdkPixbuf* pixbuf = GetPixbufFromContainer(aImage); + if (pixbuf) { + BBitmap* bitmap = PixbufToBitmap(pixbuf); + if (bitmap) { + notification.SetIcon(bitmap); + delete bitmap; + } + g_object_unref(pixbuf); + } + } + + notification.SetTitle(mAlertTitle.IsEmpty() ? "Notification" : mAlertTitle.get()); + notification.SetContent(mAlertText.get()); + + notification.SetGroup("Mozilla"); + + bigtime_t timeout = mAlertRequiresInteraction ? 15000000 : -1; + status_t err = notification.Send(timeout); + + if (mAlertListener) + mAlertListener->Observe(nullptr, "alertshow", mAlertCookie.get()); + + return (err == B_OK) ? NS_OK : NS_ERROR_FAILURE; +} + +void nsAlertsIconListener::SendCallback() { + if (mAlertListener) + mAlertListener->Observe(nullptr, "alertclickcallback", mAlertCookie.get()); +} + +void nsAlertsIconListener::SendClosed() { + NotifyFinished(); +} + +void nsAlertsIconListener::Disconnect() { +} + +nsresult nsAlertsIconListener::Close() { + NotifyFinished(); + return NS_OK; +} + +void nsAlertsIconListener::NotifyFinished() { + if (mAlertListener) + mAlertListener->Observe(nullptr, "alertfinished", mAlertCookie.get()); +} diff --git a/toolkit/system/haiku/nsAlertsIconListener.h b/toolkit/system/haiku/nsAlertsIconListener.h new file mode 100644 index 0000000..b3f81b7 --- /dev/null +++ b/toolkit/system/haiku/nsAlertsIconListener.h @@ -0,0 +1,68 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef nsAlertsIconListener_h__ +#define nsAlertsIconListener_h__ + +#include "nsCOMPtr.h" +#include "nsIAlertsService.h" +#include "nsString.h" +#include "nsIObserver.h" +#include "mozilla/RefPtr.h" + +#include + +#pragma GCC visibility push(default) +#include +#include +#include +#include +#pragma GCC visibility pop + +class nsIAlertNotification; +class nsSystemAlertsService; +class imgIContainer; + +class nsAlertsIconListener final : public nsISupports { + public: + NS_DECL_ISUPPORTS + + nsAlertsIconListener(nsSystemAlertsService* aBackend, + nsIAlertNotification* aAlertNotification, + const nsAString& aAlertName); + + nsresult InitAlert(nsIAlertNotification* aAlert, nsIObserver* aAlertListener); + nsresult Close(); + + void SendCallback(); + void SendClosed(); + void Disconnect(); + + protected: + virtual ~nsAlertsIconListener(); + + static BBitmap* PixbufToBitmap(GdkPixbuf* aPixbuf); + static GdkPixbuf* GetPixbufFromContainer(imgIContainer* aContainer); + + nsCString mAlertTitle; + nsCString mAlertText; + + nsCOMPtr mAlertListener; + nsString mAlertCookie; + nsString mAlertName; + + RefPtr mBackend; + nsCOMPtr mAlertNotification; + + bool mAlertHasAction; + bool mAlertIsSilent; + bool mAlertRequiresInteraction; + + nsresult ShowAlert(imgIContainer* aImage); + + void NotifyFinished(); +}; + +#endif diff --git a/toolkit/themes/shared/popup.css b/toolkit/themes/shared/popup.css index 064d39c..73e7e4d 100644 --- a/toolkit/themes/shared/popup.css +++ b/toolkit/themes/shared/popup.css @@ -45,6 +45,12 @@ panel { } } + /* Disable border-radius and shadow for Haiku popups */ + @media (-moz-platform: linux) { + --panel-border-radius: 0px; + --panel-shadow-margin: 0px; + } + @media (-moz-platform: macos) { appearance: auto; -moz-default-appearance: menupopup; diff --git a/toolkit/toolkit.mozbuild b/toolkit/toolkit.mozbuild index 24f86c7..59534b6 100644 --- a/toolkit/toolkit.mozbuild +++ b/toolkit/toolkit.mozbuild @@ -148,6 +148,7 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk": DIRS += [ "/media/mozva", "/toolkit/system/gnome", + "/toolkit/system/haiku", ] if CONFIG["ENABLE_WEBDRIVER"]: diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp index 950ff0b..ea6c2c9 100644 --- a/toolkit/xre/nsAppRunner.cpp +++ b/toolkit/xre/nsAppRunner.cpp @@ -341,14 +341,16 @@ constinit nsString gProcessStartupShortcut; # ifdef MOZ_WAYLAND # include # include "mozilla/widget/nsWaylandDisplay.h" +# ifndef XP_HAIKU # include "wayland-proxy.h" +# endif # endif # ifdef MOZ_X11 # include # endif /* MOZ_X11 */ #endif -#if defined(MOZ_WAYLAND) +#if defined(MOZ_WAYLAND) && !defined(XP_HAIKU) constinit std::unique_ptr gWaylandProxy; #endif @@ -429,6 +431,9 @@ static void UnexpectedExit() { #if defined(MOZ_WAYLAND) bool IsWaylandEnabled() { +#ifdef XP_HAIKU + return true; +#else static bool isWaylandEnabled = []() { const char* waylandDisplay = PR_GetEnv("WAYLAND_DISPLAY"); if (!waylandDisplay) { @@ -459,6 +464,7 @@ bool IsWaylandEnabled() { return !gtk_check_version(3, 24, 30); }(); return isWaylandEnabled; +#endif // !XP_HAIKU } #else bool IsWaylandEnabled() { return false; } @@ -3826,7 +3832,7 @@ class XREMain { #endif }; -#if defined(XP_UNIX) && !defined(ANDROID) +#if defined(XP_UNIX) && !defined(ANDROID) && !defined(XP_HAIKU) static SmprintfPointer FormatUid(uid_t aId) { if (const auto pw = getpwuid(aId)) { return mozilla::Smprintf("%s", pw->pw_name); @@ -3875,7 +3881,7 @@ static bool CheckForUserMismatch() { } return false; } -#else // !XP_UNIX || ANDROID +#else // !XP_UNIX || ANDROID || XP_HAIKU static bool CheckForUserMismatch() { return false; } #endif @@ -4872,7 +4878,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { // display_name is owned by gdk. display_name = gdk_get_display_arg_name(); bool waylandEnabled = IsWaylandEnabled(); -# ifdef MOZ_WAYLAND +# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU) if (!display_name) { auto* proxyEnv = getenv("MOZ_DISABLE_WAYLAND_PROXY"); bool disableWaylandProxy = proxyEnv && *proxyEnv; @@ -4927,7 +4933,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) { } else { gdk_display_manager_open_display(gdk_display_manager_get(), nullptr); } -# if defined(MOZ_WAYLAND) +# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU) // We want to use proxy for main connection only so // restore original Wayland display for next potential Wayland connections // from gfx probe code and so on. @@ -6236,7 +6242,9 @@ int XREMain::XRE_main(int argc, char* argv[], const BootstrapConfig& aConfig) { if (!gfxPlatform::IsHeadless()) { # ifdef MOZ_WAYLAND WaylandDisplayRelease(); +# ifndef XP_HAIKU gWaylandProxy = nullptr; +# endif // !XP_HAIKU # endif } #endif diff --git a/toolkit/xre/nsEmbedFunctions.cpp b/toolkit/xre/nsEmbedFunctions.cpp index eac36ad..5b8cc19 100644 --- a/toolkit/xre/nsEmbedFunctions.cpp +++ b/toolkit/xre/nsEmbedFunctions.cpp @@ -349,6 +349,7 @@ nsresult XRE_InitChildProcess(int aArgc, char* aArgv[], SetupErrorHandling(aArgv[0]); +#ifndef XP_HAIKU bool exceptionHandlerIsSet = false; if (!CrashReporter::IsDummy()) { exceptionHandlerIsSet = @@ -365,6 +366,7 @@ nsresult XRE_InitChildProcess(int aArgc, char* aArgv[], CrashReporter::UnregisterRuntimeExceptionModule(); } } +#endif #ifdef MOZ_X11 XInitThreads(); @@ -596,7 +598,9 @@ nsresult XRE_InitChildProcess(int aArgc, char* aArgv[], } } +#ifndef XP_HAIKU CrashReporter::UnsetRemoteExceptionHandler(exceptionHandlerIsSet); +#endif return XRE_DeinitCommandLine(); } diff --git a/toolkit/xre/nsSigHandlers.cpp b/toolkit/xre/nsSigHandlers.cpp index 146a586..10b7fb6 100644 --- a/toolkit/xre/nsSigHandlers.cpp +++ b/toolkit/xre/nsSigHandlers.cpp @@ -43,7 +43,9 @@ # endif # ifdef MOZ_WAYLAND -# include "wayland-proxy.h" +# ifndef XP_HAIKU +# include "wayland-proxy.h" +# endif /* !XP_HAIKU */ # endif // Note: some tests manipulate this value. @@ -180,7 +182,7 @@ static bool IsCrashyGtkMessage(const nsACString& aMessage) { static void HandleGLibMessage(GLogLevelFlags aLogLevel, const nsDependentCString& aMessage) { if (MOZ_UNLIKELY(IsCrashyGtkMessage(aMessage))) { -# ifdef MOZ_WAYLAND +# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU) MOZ_CRASH_UNSAFE_PRINTF( "(%s) %s Proxy: %s", mozilla::widget::GetDesktopEnvironmentIdentifier().get(), diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp index 1b346ce..fb52f64 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp @@ -88,6 +88,10 @@ #ifdef XP_IOS # include "UIKitDirProvider.h" #endif +#ifdef XP_HAIKU +# include +# include +#endif #if defined(XP_MACOSX) # define APP_REGISTRY_NAME "Application Registry" @@ -425,7 +429,7 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent, rv = GetUserDataDirectoryHome(getter_AddRefs(file), /* aLocal */ false, /* aForceLegacy */ true); NS_ENSURE_SUCCESS(rv, rv); -# if defined(XP_MACOSX) +# if defined(XP_MACOSX) || defined(XP_HAIKU) rv = file->AppendNative("Mozilla"_ns); # else // defined(XP_MACOSX) rv = file->AppendNative(".mozilla"_ns); @@ -1169,6 +1173,12 @@ nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile, NS_ENSURE_SUCCESS(rv, rv); MOZ_TRY(NS_NewLocalFile(path, getter_AddRefs(localDir))); +#elif defined(XP_HAIKU) + nsresult rv; + BPath settingsDir; + status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &settingsDir); + if (status != B_OK) return NS_ERROR_FAILURE; + rv = NS_NewNativeLocalFile(nsDependentCString(settingsDir.Path()), getter_AddRefs(localDir)); #elif defined(XP_UNIX) const char* homeDir = PR_GetEnv("HOME"); if (!homeDir || !*homeDir) return NS_ERROR_FAILURE; @@ -1289,7 +1299,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) { nsresult rv; -#if defined(XP_MACOSX) || defined(XP_WIN) +#if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_HAIKU) static const char* const sXR = "Mozilla"; rv = aFile->AppendNative(nsDependentCString(sXR)); @@ -1583,7 +1593,7 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) { } NS_ENSURE_SUCCESS(rv, rv); -#elif defined(XP_WIN) +#elif defined(XP_WIN) || defined(XP_HAIKU) if (!profile.IsEmpty()) { rv = AppendProfileString(aFile, profile.get()); } else { diff --git a/tools/profiler/core/ProfilerUtils.cpp b/tools/profiler/core/ProfilerUtils.cpp index 4c53061..76d3561 100644 --- a/tools/profiler/core/ProfilerUtils.cpp +++ b/tools/profiler/core/ProfilerUtils.cpp @@ -88,6 +88,15 @@ ProfilerThreadId profiler_current_thread_id() { return ProfilerThreadId::FromNativeId(id); } +// ------------------------------------------------------- Haiku +# elif defined(XP_HAIKU) + +# include + +ProfilerThreadId profiler_current_thread_id() { + return ProfilerThreadId::FromNativeId(find_thread(NULL)); +} + // ------------------------------------------------------- Others # else diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build index a0659b9..c1551ef 100644 --- a/widget/gtk/moz.build +++ b/widget/gtk/moz.build @@ -27,7 +27,9 @@ if CONFIG["COMPILE_ENVIRONMENT"]: DIRS += ["mozgtk"] if CONFIG["MOZ_WAYLAND"]: - DIRS += ["wayland", "mozwayland", "../../third_party/wayland-proxy"] + DIRS += ["wayland", "mozwayland"] + if CONFIG["OS_ARCH"] != "Haiku": + DIRS += ["../../third_party/wayland-proxy"] if CONFIG["MOZ_ENABLE_VAAPI"]: DIRS += ["vaapitest"] diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp index ea4fce1..2547556 100644 --- a/widget/gtk/nsWaylandDisplay.cpp +++ b/widget/gtk/nsWaylandDisplay.cpp @@ -21,7 +21,9 @@ #include "nsGtkUtils.h" #include "nsLayoutUtils.h" #include "nsWindow.h" -#include "wayland-proxy.h" +#ifndef XP_HAIKU +# include "wayland-proxy.h" +#endif /* !XP_HAIKU */ #undef LOG #undef LOG_VERBOSE @@ -272,6 +274,7 @@ static const struct moz_wl_pointer_listener pointer_listener = { }; void nsWaylandDisplay::SetPointer(wl_pointer* aPointer) { +#ifndef XP_HAIKU // Don't even try on such old interface if (wl_proxy_get_version((struct wl_proxy*)aPointer) < WL_POINTER_RELEASE_SINCE_VERSION) { @@ -296,6 +299,7 @@ void nsWaylandDisplay::SetPointer(wl_pointer* aPointer) { zwp_pointer_gesture_hold_v1_add_listener(mPointerGestureHold, &gesture_hold_listener, this); } +#endif } void nsWaylandDisplay::RemovePointer() { @@ -877,6 +881,7 @@ void nsWaylandDisplay::WaitForAsyncRoundtrips() { } } +#ifndef XP_HAIKU // Separate crash functions for different Wayland protocol error patterns. // These functions are marked MOZ_NEVER_INLINE to ensure distinct crash // signatures for different error types, making them easier to track and fix. @@ -967,13 +972,14 @@ MOZ_NEVER_INLINE static void WlLogHandler_MarshallingError(const char* error) { GetDesktopEnvironmentIdentifier().get(), error, WaylandProxy::GetState()); } +#endif static void WlLogHandler(const char* format, va_list args) { char error[1000]; VsprintfLiteral(error, format, args); gfxCriticalNote << "(" << GetDesktopEnvironmentIdentifier().get() << ") Wayland protocol error: " << error; - +#ifndef XP_HAIKU // See Bug 1826583 and Bug 1844653 for reference. // "warning: queue %p destroyed while proxies still attached" and variants // like "zwp_linux_dmabuf_feedback_v1@%d still attached" are exceptions on @@ -1045,15 +1051,18 @@ static void WlLogHandler(const char* format, va_list args) { MOZ_CRASH_UNSAFE_PRINTF("(%s) %s Proxy: %s", GetDesktopEnvironmentIdentifier().get(), error, WaylandProxy::GetState()); +#endif } void WlCompositorCrashHandler() { +#ifndef XP_HAIKU gfxCriticalNote << "Wayland protocol error: Compositor (" << GetDesktopEnvironmentIdentifier().get() << ") crashed, proxy: " << WaylandProxy::GetState(); MOZ_CRASH_UNSAFE_PRINTF("Compositor crashed (%s) proxy: %s", GetDesktopEnvironmentIdentifier().get(), WaylandProxy::GetState()); +#endif } nsWaylandDisplay::nsWaylandDisplay(wl_display* aDisplay) diff --git a/xpcom/base/nsSystemInfo.cpp b/xpcom/base/nsSystemInfo.cpp index 731f169..8a5e2b9 100644 --- a/xpcom/base/nsSystemInfo.cpp +++ b/xpcom/base/nsSystemInfo.cpp @@ -85,6 +85,10 @@ # include "mozilla/SandboxInfo.h" #endif +#ifdef XP_HAIKU +# include +#endif + // Slot for NS_InitXPCOM to pass information to nsSystemInfo::Init. // Only set to nonzero (potentially) if XP_UNIX. On such systems, the // system call to discover the appropriate value is not thread-safe, @@ -1557,7 +1561,15 @@ nsresult nsSystemInfo::Init() { SetInt32Property(u"pagesize"_ns, PR_GetPageSize()); SetInt32Property(u"pageshift"_ns, PR_GetPageShift()); SetInt32Property(u"memmapalign"_ns, PR_GetMemMapAlignment()); +#ifdef XP_HAIKU + { // workaround + system_info info; + get_system_info(&info); + SetUint64Property(u"memsize"_ns, info.max_pages * B_PAGE_SIZE); + } +#else SetUint64Property(u"memsize"_ns, PR_GetPhysicalMemorySize()); +#endif SetUint32Property(u"umask"_ns, nsSystemInfo::gUserUmask); #ifdef HAVE_64BIT_BUILD diff --git a/xpcom/build/BinaryPath.h b/xpcom/build/BinaryPath.h index 1718caa..64de0b2 100644 --- a/xpcom/build/BinaryPath.h +++ b/xpcom/build/BinaryPath.h @@ -24,6 +24,10 @@ #if defined(__OpenBSD__) # include #endif +#if defined(XP_HAIKU) +# include +# include +#endif #include "mozilla/UniquePtr.h" #include "mozilla/UniquePtrExtensions.h" @@ -273,6 +277,21 @@ class BinaryPath { return NS_ERROR_FAILURE; } +#elif defined(XP_HAIKU) + static nsresult Get(char aResult[MAXPATHLEN]) { + image_info info; + int32 cookie = 0; + + while (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) >= B_OK) { + if (info.type == B_APP_IMAGE) { + strlcpy(aResult, info.name, MAXPATHLEN - 1); + return NS_OK; + } + } + + return NS_ERROR_FAILURE; + } + #else # error Oops, you need platform-specific code here #endif diff --git a/xpcom/reflect/xptcall/md/unix/moz.build b/xpcom/reflect/xptcall/md/unix/moz.build index 6c47f0b..ef375d4 100644 --- a/xpcom/reflect/xptcall/md/unix/moz.build +++ b/xpcom/reflect/xptcall/md/unix/moz.build @@ -28,6 +28,7 @@ if CONFIG["OS_ARCH"] in ( "Bitrig", "DragonFly", "FreeBSD", + "Haiku", "NetBSD", "OpenBSD", "SunOS", diff --git a/xpcom/threads/nsProcessCommon.cpp b/xpcom/threads/nsProcessCommon.cpp index b4d9998..ccbc6b8 100644 --- a/xpcom/threads/nsProcessCommon.cpp +++ b/xpcom/threads/nsProcessCommon.cpp @@ -41,7 +41,11 @@ # include "base/process_util.h" # endif # include -# include +# ifdef XP_HAIKU +# include +# else +# include +# endif # endif # include # include -- 2.52.0