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