Zusammenführen von Daten aus zwei Quellen
Die Kombination von zwei Fragmentshader-Ausgaben in einem einzigen Framebuffer wird als Dual-Source-Blending bezeichnet. Diese Technik ist besonders nützlich für Anwendungen, die komplexe Überblendungsvorgänge erfordern, z. B. solche, die auf Porter-Duff-Überblendungsmodi basieren. Durch das Ersetzen nachfolgender Renderingpässe durch einen einzigen Renderingpass kann die Leistung und Flexibilität durch die Dual-Source-Mischung verbessert werden.
Mit der neuen "dual-source-blending"
-WebGPU-Funktion können Sie das WGSL-Attribut @blend_src
an @location(0)
verwenden, um den Index der Mischquelle und die folgenden Mischungsfaktoren anzugeben: "src1"
, "one-minus-src1"
, "src1-alpha"
und "one-minus-src1-alpha"
. Sehen Sie sich das folgende Snippet, den chromestatus-Eintrag und die Ausgabe 341973423 an.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["dual-source-blending"],
});
const code = `
enable dual_source_blending;
struct FragOut {
@location(0) @blend_src(0) color : vec4f,
@location(0) @blend_src(1) blend : vec4f,
}
@fragment fn main() -> FragOut {
var output : FragOut;
output.color = vec4f(1.0, 1.0, 1.0, 1.0);
output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
return output;
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...
Verbesserte Shader-Kompilierungszeiten unter Metal
Das Chrome-Team verbessert Tint, den WebGPU-Shadersprachen-Compiler, durch die Einführung einer Zwischendarstellung (IR) für Geräte, die WebGPU mit dem Metal-Backend unterstützen. Diese IR, die zwischen dem abstrakten Syntaxbaum (AST) von Tint und dem Metal-Backend-Writer positioniert ist, macht den Compiler effizienter und wartbarer. Das kommt letztendlich sowohl Entwicklern als auch Nutzern zugute. Erste Tests haben gezeigt, dass die neue Version von Tint bei der Übersetzung der WGSL-Shader von Unity in MSL bis zu zehnmal schneller ist.
Diese Verbesserungen, die bereits unter Android und ChromeOS verfügbar sind, werden nach und nach auf macOS-Geräte ausgeweitet, die WebGPU mit Metal-Backend unterstützen. Siehe Problem 42251016.
Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
Die asynchrone Methode des GPUAdapter-requestAdapterInfo()
ist redundant, da Entwickler GPUAdapterInfo bereits synchron mit dem Attribut info
des GPUAdapters abrufen können. Daher wird die nicht standardmäßige GPUAdapter-Methode requestAdapterInfo()
jetzt eingestellt. Weitere Informationen finden Sie unter Ankündigung der Einstellung.
Dawn-Updates
Die C-API webgpu.h definiert einige Namenskonventionen für Erweiterungsstrukturen. Weitere Informationen finden Sie in den folgenden Namensänderungen und im Problem 42241174.
WGPURenderPassDescriptor Erweiterungen
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
WGPUShaderModuleDescriptor Erweiterungen
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
WGPUSurfaceDescriptor Erweiterungen
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
Der depthWriteEnabled
-Attributtyp von WGPUDepthStencilState
wird von „boolean“ zu „WGPUOptionalBool
“ geändert, um die drei möglichen Status (wahr, falsch und undefiniert) wie in der JavaScript API besser widerzuspiegeln. Weitere Informationen finden Sie im folgenden Code-Snippet und im PR für webgpu-headers.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Dies sind nur einige der wichtigsten Highlights. Vollständige Liste der Commits
Das ist neu bei WebGPU
Eine Liste aller behandelten Themen der Reihe What's New in WebGPU.
Chrome 130
- Dual-Source-Mischung
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung von GPUAdapter requestAdapterInfo()
- Dawn-Updates
Chrome 129
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL interpoliert zuerst die Stichprobe und
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung für OpenGL ES auf Android-Geräten
- Attribut „info“ von „GPUAdapter“
- Verbesserungen bei der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Verbesserte Shader-Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Dawn-Updates
Chrome 125
Chrome 124
- Lese- und Lese-/Schreibspeichertextur
- Unterstützung für Dienst- und freigegebene Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Dawn-Updates
Chrome 123
- Unterstützung der integrierten DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- Syntax-Optimierung für die Dereferenzierung von Kompositen in WGSL
- Separater schreibgeschützter Status für Stencil- und Tiefenansichten
- Dawn-Updates
Chrome 122
- Reichweite mit Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- Limit für maxVertexAttributes erhöhen
- Dawn-Updates
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Compute- und Rendering-Passes
- Standardeinstiegspunkte in Shadermodule
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Speicherheaps
- Dawn-Updates
Chrome 120
- Unterstützung von 16‑Bit-Gleitkommawerten in WGSL
- Gehe an die Grenzen
- Änderungen am Status der Tiefenschablonen
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Gleitkommatextur
- unorm10-10-10-2 Vertexformat
- rgb10a2uint-Texturformat
- Dawn-Updates
Chrome 118
- Unterstützung von HTMLImageElement und ImageData in
copyExternalImageToTexture()
- Experimentelle Unterstützung für nicht schreibgeschützte und schreibgeschützte Speichertexturen
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der Erstellung einer asynchronen Pipeline bei verlorenem Gerät ignorieren
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Updates zur Morgendämmerung
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - Einhaltung der Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Updates zur Morgendämmerung
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 114
- JavaScript-Code optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- Wichtige Informationen von WGSL
- Dawn-Updates