pkgsrc-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
pkg/60579: www/firefox: WebGL does not work on NetBSD
>Number: 60579
>Category: pkg
>Synopsis: www/firefox: WebGL does not work on NetBSD
>Confidential: no
>Severity: serious
>Priority: medium
>Responsible: pkg-manager
>State: open
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Thu Aug 13 18:55:00 +0000 2026
>Originator: Izumi Tsutsui
>Release: NetBSD 11.0
>Organization:
>Environment:
System: NetBSD mirage 11.0 NetBSD 11.0 (GENERIC) #0: Thu Jul 30 15:23:12 UTC 2026 mkrepro%mkrepro.NetBSD.org@localhost:/usr/src/sys/arch/i386/compile/GENERIC i386
Architecture: i386
Machine: i386
>Description:
WebGL is currently disabled by default in pkgsrc Firefox on NetBSD.
If WebGL is enabled by setting "webgl.disabled" to false in about:config
and a WebGL page is opened, about:support shows the following messages
in the Assert entries of the graphics failure log:
MethodDispatcher<7> not found. Please file a bug!
MethodDispatcher<26> not found. Please file a bug!
The method IDs are assigned in dom/canvas/WebGLMethodDispatcher.h and
it uses __COUNTER__ for the IDs. On the other hand, preprocessor output
on NetBSD shows that the generated IDs start at 1, rather than 0 that
the firefox may expect.
This may be caused by some NetBSD system-provided header file uses
__COUNTER__ in __CTASSERT() etc. (see <sys/cdefs.h>)
>How-To-Repeat:
Build and install pkgsrc www/firefox 153.0.1 on NetBSD.
Set
```
webgl.disabled = false
```
in about:config, restart Firefox, and open a WebGL page, for example:
https://weather.yahoo.co.jp/weather/zoomradar/
Then check the graphics section in about:support.
>Fix:
The attached patch makes the method IDs start at 0 regardless of the
previous value of __COUNTER__, and removes the pkgsrc preference that
disables WebGL on NetBSD.
With this change, the above messages disappear and WebGL pages work on
both NetBSD/i386 11.0 and NetBSD/amd64 11.0.
https://github.com/tsutsui/pkgsrc/commit/41d8a7ac0ab43db8b4f9694233b1466f5b208703
---
diff --git a/www/firefox/Makefile b/www/firefox/Makefile
index 0bd5dd30329b..4adae82246ee 100644
--- a/www/firefox/Makefile
+++ b/www/firefox/Makefile
@@ -6,6 +6,7 @@ MOZ_BRANCH_MINOR= .1
DISTNAME= firefox-${FIREFOX_VER}.source
PKGNAME= ${DISTNAME:S/.source//:S/b/beta/:S/esr//}
+PKGREVISION= 1
CATEGORIES= www
MASTER_SITES+= ${MASTER_SITE_MOZILLA:=firefox/releases/${FIREFOX_VER}/source/}
MASTER_SITES+= ${MASTER_SITE_MOZILLA_ALL:=firefox/releases/${FIREFOX_VER}/source/}
diff --git a/www/firefox/distinfo b/www/firefox/distinfo
index b686f0135705..aad5de53b532 100644
--- a/www/firefox/distinfo
+++ b/www/firefox/distinfo
@@ -6,13 +6,14 @@ Size (firefox-153.0.1.source.tar.xz) = 803443372 bytes
BLAKE2s (nodejs-output-153.0.tgz) = 55a9ae8d1b743f57148a3b763bce2bc9afe2bd902f5b5d6a07a3e597c569aca1
SHA512 (nodejs-output-153.0.tgz) = 2513c4c47c9bb619a1702a36b8ec316a6c48d6b641656abf86ff33c5ae9e146721947b26a3a1af8295a005daeffb0c77e5f82f36ca9a717decc6850b3518c275
Size (nodejs-output-153.0.tgz) = 247910 bytes
-SHA1 (patch-browser_app_profile_firefox.js) = 44c1fe360411e5946824aa4c814eaf5929e3648d
+SHA1 (patch-browser_app_profile_firefox.js) = 3e63f89e7a9ded4a3041232754db0c5f3d9d3d32
SHA1 (patch-build_gn__processor.py) = 078f773104bf4c1b30584564aefe365db6ba6daf
SHA1 (patch-build_moz.configure_init.configure) = 65deb3c233df0aab81eb1fca05d708e5a4ed169a
SHA1 (patch-build_moz.configure_rust.configure) = 25ddfacd29cebbc6db005dbe61a2a7446d480678
SHA1 (patch-config_gcc-stl-wrapper.template.h) = f2d19349e2e93c0f82db0a76124103e6ae6bba9d
SHA1 (patch-config_makefiles_rust.mk) = 25eb2d4c99ace2b215917490f28ceb90ab90145f
SHA1 (patch-dom_base_nsAttrName.h) = ac7ba441a3b27df2855cf2673eea36b1cb44ad49
+SHA1 (patch-dom_canvas_WebGLMethodDispatcher.h) = 77780babe30c9ee052c55e92801907d8befa9bde
SHA1 (patch-dom_media_mediacapabilities_MediaCapabilitiesValidation.cpp) = 2f471067387bb63d530ba1299f0542d3b3a785b6
SHA1 (patch-dom_media_webrtc_libwebrtc__overrides_moz.build) = a2ff7cf1e6aaf888ee78581d89c7e658f46c3fcd
SHA1 (patch-dom_webtransport_api_WebTransportDatagramDuplexStream.cpp) = b93b4c6367bd2fb3d1868ab7d97ca56c100be414
diff --git a/www/firefox/patches/patch-browser_app_profile_firefox.js b/www/firefox/patches/patch-browser_app_profile_firefox.js
index 655f5b7c7650..8f76963dd131 100644
--- a/www/firefox/patches/patch-browser_app_profile_firefox.js
+++ b/www/firefox/patches/patch-browser_app_profile_firefox.js
@@ -3,9 +3,9 @@ $NetBSD: patch-browser_app_profile_firefox.js,v 1.25 2026/07/16 13:11:48 ryoon E
This patch modifies default Firefox settings - see the comments above
each one.
---- browser/app/profile/firefox.js.orig 2025-10-03 13:17:55.000000000 +0000
+--- browser/app/profile/firefox.js.orig 2026-07-27 13:36:24.000000000 +0000
+++ browser/app/profile/firefox.js
-@@ -2842,6 +2842,39 @@ pref("app.normandy.onsync_skew_sec", 600
+@@ -2907,6 +2907,36 @@ pref("app.normandy.onsync_skew_sec", 600
pref("toolkit.coverage.enabled", false);
pref("toolkit.coverage.endpoint.base", "https://coverage.mozilla.org");
@@ -30,9 +30,6 @@ each one.
+pref("midi.prompt.testing", true);
+pref("media.navigator.permission.disabled", true);
+
-+// Avoid runtime error from WebGL for NetBSD systems. webgl.out-of-process was removed.
-+pref("webgl.disabled", true);
-+
+// Avoid unfunctional video and audio codecs
+pref("media.allow-audio-non-utility", true);
+
diff --git a/www/firefox/patches/patch-dom_canvas_WebGLMethodDispatcher.h b/www/firefox/patches/patch-dom_canvas_WebGLMethodDispatcher.h
new file mode 100644
index 000000000000..9bc3b9928d31
--- /dev/null
+++ b/www/firefox/patches/patch-dom_canvas_WebGLMethodDispatcher.h
@@ -0,0 +1,25 @@
+$NetBSD$
+
+- Work around broken WebGL method dispatch on NetBSD.
+
+--- dom/canvas/WebGLMethodDispatcher.h.orig 2026-07-27 13:13:11.000000000 +0000
++++ dom/canvas/WebGLMethodDispatcher.h
+@@ -31,7 +31,18 @@ class WebGLMethodDispatcher
+
+ // Defines each method the WebGLMethodDispatcher handles. The COUNTER value
+ // is used as a cross-process ID for each of the methods.
++#ifdef __NetBSD__
++// XXX: NetBSD system headers use __COUNTER__ in __CTASSERT(), so
++// __COUNTER__ may already have been incremented when this header is
++// included. Normalize the method IDs so that they start at zero.
++constexpr size_t kWebGLMethodDispatcherCounterBase = __COUNTER__ + 1;
++
++#define DEFINE_ASYNC(_METHOD) \
++ DEFINE_METHOD_DISPATCHER( \
++ __COUNTER__ - kWebGLMethodDispatcherCounterBase, _METHOD, 0)
++#else
+ #define DEFINE_ASYNC(_METHOD) DEFINE_METHOD_DISPATCHER(__COUNTER__, _METHOD, 0)
++#endif
+
+ DEFINE_ASYNC(HostWebGLContext::CreateBuffer)
+ DEFINE_ASYNC(HostWebGLContext::CreateFramebuffer)
---
Izumi Tsutsui
Home |
Main Index |
Thread Index |
Old Index