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==
// @name Better xCloud
// @namespace https://github.com/redphx
// @version 6.4.0-beta
// @version 6.4.0-beta-2
// @description Improve Xbox Cloud Gaming (xCloud) experience
// @author redphx
// @license MIT
@ -28,6 +28,7 @@ var DEFAULT_FLAGS = {
CheckForUpdate: !0,
EnableXcloudLogging: !1,
SafariWorkaround: !0,
EnableWebGPURenderer: !1,
ForceNativeMkbTitles: [],
FeatureGates: null,
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();
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,
@ -2190,7 +2191,7 @@ class WebGPUPlayer extends BaseCanvasPlayer {
paramsBuffer;
vertexBuffer;
static async prepare() {
if (!navigator.gpu) {
if (!BX_FLAGS.EnableWebGPURenderer || !navigator.gpu) {
BxEventBus.Script.emit("webgpu.ready", {});
return;
}
@ -2422,7 +2423,7 @@ class StreamSettingsStorage extends BaseSettingsStorage {
},
ready: (setting) => {
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";
if (this.cleanUpCanvasPlayer(), type === "default") this.$video.classList.remove(videoClass);
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);
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 { StreamPlayerType } from "@/enums/pref-values";
import { BxEventBus } from "@/utils/bx-event-bus";
import { BX_FLAGS } from "@/utils/bx-flags";
export class WebGPUPlayer extends BaseCanvasPlayer {
static device: GPUDevice;
@ -15,7 +16,7 @@ export class WebGPUPlayer extends BaseCanvasPlayer {
vertexBuffer!: GPUBuffer | null;
static async prepare(): Promise<void> {
if (!navigator.gpu) {
if (!BX_FLAGS.EnableWebGPURenderer || !navigator.gpu) {
BxEventBus.Script.emit('webgpu.ready', {});
return;
}

View File

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

View File

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

View File

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

View File

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