Hide WebGPU renderer behind EnableWebGPURenderer flag

This commit is contained in:
redphx 2025-02-04 19:29:43 +07:00
parent 7894dea5ff
commit 664e865b82
7 changed files with 24 additions and 18 deletions

View File

@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name Better xCloud // @name Better xCloud
// @namespace https://github.com/redphx // @namespace https://github.com/redphx
// @version 6.4.0-beta // @version 6.4.0-beta-2
// @description Improve Xbox Cloud Gaming (xCloud) experience // @description Improve Xbox Cloud Gaming (xCloud) experience
// @author redphx // @author redphx
// @license MIT // @license MIT
@ -28,6 +28,7 @@ var DEFAULT_FLAGS = {
CheckForUpdate: !0, CheckForUpdate: !0,
EnableXcloudLogging: !1, EnableXcloudLogging: !1,
SafariWorkaround: !0, SafariWorkaround: !0,
EnableWebGPURenderer: !1,
ForceNativeMkbTitles: [], ForceNativeMkbTitles: [],
FeatureGates: null, FeatureGates: null,
DeviceInfo: { DeviceInfo: {
@ -190,7 +191,7 @@ class UserAgent {
}); });
} }
} }
var SCRIPT_VERSION = "6.4.0-beta", SCRIPT_VARIANT = "full", AppInterface = window.AppInterface; var SCRIPT_VERSION = "6.4.0-beta-2", SCRIPT_VARIANT = "full", AppInterface = window.AppInterface;
UserAgent.init(); UserAgent.init();
var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, STATES = { var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, STATES = {
supportedRegion: !0, supportedRegion: !0,
@ -2190,7 +2191,7 @@ class WebGPUPlayer extends BaseCanvasPlayer {
paramsBuffer; paramsBuffer;
vertexBuffer; vertexBuffer;
static async prepare() { static async prepare() {
if (!navigator.gpu) { if (!BX_FLAGS.EnableWebGPURenderer || !navigator.gpu) {
BxEventBus.Script.emit("webgpu.ready", {}); BxEventBus.Script.emit("webgpu.ready", {});
return; return;
} }
@ -2422,7 +2423,7 @@ class StreamSettingsStorage extends BaseSettingsStorage {
}, },
ready: (setting) => { ready: (setting) => {
BxEventBus.Script.on("webgpu.ready", () => { BxEventBus.Script.on("webgpu.ready", () => {
if (!navigator.gpu || !WebGPUPlayer.device) delete setting.options["webgpu"]; if (!WebGPUPlayer.device) delete setting.options["webgpu"];
}); });
} }
}, },
@ -9628,7 +9629,7 @@ class StreamPlayerManager {
let videoClass = BX_FLAGS.DeviceInfo.deviceType === "android-tv" ? "bx-pixel" : "bx-gone"; let videoClass = BX_FLAGS.DeviceInfo.deviceType === "android-tv" ? "bx-pixel" : "bx-gone";
if (this.cleanUpCanvasPlayer(), type === "default") this.$video.classList.remove(videoClass); if (this.cleanUpCanvasPlayer(), type === "default") this.$video.classList.remove(videoClass);
else { else {
if (type === "webgpu") this.canvasPlayer = new WebGPUPlayer(this.$video); if (BX_FLAGS.EnableWebGPURenderer && type === "webgpu") this.canvasPlayer = new WebGPUPlayer(this.$video);
else this.canvasPlayer = new WebGL2Player(this.$video); else this.canvasPlayer = new WebGL2Player(this.$video);
this.canvasPlayer.init(), this.videoPlayer.clearFilters(), this.$video.classList.add(videoClass); this.canvasPlayer.init(), this.videoPlayer.clearFilters(), this.$video.classList.add(videoClass);
} }

File diff suppressed because one or more lines are too long

View File

@ -2,6 +2,7 @@ import wgslClarityBoost from "./shaders/clarity-boost.wgsl" with { type: "text"
import { BaseCanvasPlayer } from "../base-canvas-player"; import { BaseCanvasPlayer } from "../base-canvas-player";
import { StreamPlayerType } from "@/enums/pref-values"; import { StreamPlayerType } from "@/enums/pref-values";
import { BxEventBus } from "@/utils/bx-event-bus"; import { BxEventBus } from "@/utils/bx-event-bus";
import { BX_FLAGS } from "@/utils/bx-flags";
export class WebGPUPlayer extends BaseCanvasPlayer { export class WebGPUPlayer extends BaseCanvasPlayer {
static device: GPUDevice; static device: GPUDevice;
@ -15,7 +16,7 @@ export class WebGPUPlayer extends BaseCanvasPlayer {
vertexBuffer!: GPUBuffer | null; vertexBuffer!: GPUBuffer | null;
static async prepare(): Promise<void> { static async prepare(): Promise<void> {
if (!navigator.gpu) { if (!BX_FLAGS.EnableWebGPURenderer || !navigator.gpu) {
BxEventBus.Script.emit('webgpu.ready', {}); BxEventBus.Script.emit('webgpu.ready', {});
return; return;
} }

View File

@ -128,7 +128,7 @@ export class StreamPlayerManager {
this.$video.classList.remove(videoClass); this.$video.classList.remove(videoClass);
} else { } else {
// Switch from Video -> Canvas // Switch from Video -> Canvas
if (type === StreamPlayerType.WEBGPU) { if (BX_FLAGS.EnableWebGPURenderer && type === StreamPlayerType.WEBGPU) {
this.canvasPlayer = new WebGPUPlayer(this.$video); this.canvasPlayer = new WebGPUPlayer(this.$video);
} else { } else {
this.canvasPlayer = new WebGL2Player(this.$video); this.canvasPlayer = new WebGL2Player(this.$video);

View File

@ -178,6 +178,8 @@ type BxFlags = {
EnableXcloudLogging: boolean; EnableXcloudLogging: boolean;
SafariWorkaround: boolean; SafariWorkaround: boolean;
EnableWebGPURenderer: boolean;
ForceNativeMkbTitles: string[]; ForceNativeMkbTitles: string[];
FeatureGates: { [key: string]: boolean } | null, FeatureGates: { [key: string]: boolean } | null,

View File

@ -8,6 +8,8 @@ const DEFAULT_FLAGS: BxFlags = {
EnableXcloudLogging: false, EnableXcloudLogging: false,
SafariWorkaround: true, SafariWorkaround: true,
EnableWebGPURenderer: false,
ForceNativeMkbTitles: [], ForceNativeMkbTitles: [],
FeatureGates: null, FeatureGates: null,

View File

@ -14,6 +14,7 @@ import { ControllerCustomizationDefaultPresetId } from "../local-db/controller-c
import { ControllerShortcutDefaultId } from "../local-db/controller-shortcuts-table"; import { ControllerShortcutDefaultId } from "../local-db/controller-shortcuts-table";
import { BxEventBus } from "../bx-event-bus"; import { BxEventBus } from "../bx-event-bus";
import { WebGPUPlayer } from "@/modules/player/webgpu/webgpu-player"; import { WebGPUPlayer } from "@/modules/player/webgpu/webgpu-player";
import { BX_FLAGS } from "../bx-flags";
export class StreamSettingsStorage extends BaseSettingsStorage<StreamPref> { export class StreamSettingsStorage extends BaseSettingsStorage<StreamPref> {
@ -160,12 +161,11 @@ export class StreamSettingsStorage extends BaseSettingsStorage<StreamPref> {
}, },
ready: (setting: any) => { ready: (setting: any) => {
BxEventBus.Script.on('webgpu.ready', () => { BxEventBus.Script.on('webgpu.ready', () => {
if (!navigator.gpu || !WebGPUPlayer.device) { if (!WebGPUPlayer.device) {
// Remove WebGPU option on unsupported browsers // Remove WebGPU option on unsupported browsers
delete setting.options[StreamPlayerType.WEBGPU]; delete setting.options[StreamPlayerType.WEBGPU];
}
} }
); });
}, },
}, },
[StreamPref.VIDEO_PROCESSING]: { [StreamPref.VIDEO_PROCESSING]: {