Dual-Source-Mischung
Die Kombination von zwei Fragment-Shader-Ausgaben in einem einzelnen Framebuffer wird als Dual Source Blending bezeichnet. Diese Technik ist besonders nützlich für Anwendungen, die komplexe Mischvorgänge erfordern, z. B. solche, die auf Porter-Duff-Mischmodi basieren. Durch das Ersetzen nachfolgender Renderingdurchläufe durch einen einzigen Renderingdurchgang kann das Zusammenführen mit zwei Quellen die Leistung und Flexibilität verbessern.
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"
. Weitere Informationen finden Sie im folgenden Snippet, im chromestatus-Eintrag und in Problem 341973423.
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...
Metal-Optimierung bei der Zusammenstellung von Shader-Inhalten
Das Chrome-Team verbessert den WebGPU-Shader-Compiler Tint und führt eine Zwischendarstellung (Intermediate Repräsentation) für Geräte ein, die WebGPU mit Metal-Back-End 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 bis zu zehnmal schneller ist, wenn die WGSL-Shader von Unity in MSL übersetzt werden.
Diese Verbesserungen, die bereits auf Android- und ChromeOS-Geräten verfügbar sind, werden nach und nach auf macOS-Geräte ausgeweitet, die WebGPU mit dem Metal-Backend unterstützen. Siehe Problem 42251016.
Einstellung von GPUAdapter requestAdapterInfo()
Die asynchrone Methode „GPUAdapter requestAdapterInfo()
“ ist redundant, da Entwickler GPUAdapterInfo bereits synchron über das Attribut „GPUAdapter info
“ abrufen können. Daher wird die nicht standardmäßige GPUAdapter-Methode requestAdapterInfo()
jetzt eingestellt. Weitere Informationen
Dawn-Updates
Die C-API webgpu.h definiert einige Namenskonventionen für Erweiterungsstrukturen. Beachten Sie die folgenden Namensänderungen und 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-Artikel zu 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 Themen, die in der Reihe Was ist neu in WebGPU behandelt wurden.
Chrome 130
- Dual-Source-Mischung
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung von GPUAdapter requestAdapterInfo()
- Updates zur Morgendämmerung
Chrome 129
Chrome 128
- Tests mit Untergruppen
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Entwicklertools-Warnung für nicht erfassten Fehler ausblenden, wenn „preventDefault“ festgelegt ist
- WGSL-interpolierte Stichproben
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- GPUAdapter-Infoattribut
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehler des Befehls-Encoders
- Dawn-Updates
Chrome 126
- Limit für „maxTextureArrayLayers“ erhöht
- Optimierung des Pufferuploads für das Vulkan-Backend
- Schnellere Kompilierungszeiten
- Eingereichte Befehlspuffere müssen eindeutig sein.
- Updates zur Morgendämmerung
Chrome 125
Chrome 124
- Schreibgeschützte Speichertexturen
- Unterstützung für Service Worker und Shared Worker
- Neue Attribute für Adapterinformationen
- Diverse Fehlerkorrekturen
- Updates zur Morgendämmerung
Chrome 123
- Unterstützung für integrierte DP4a-Funktionen in WGSL
- Uneingeschränkte Zeigerparameter in WGSL
- „Zucker“-Syntax für die Dereferenzierung von zusammengesetzten Daten in WGSL
- Separater schreibgeschützter Status für Schablonen- und Tiefenaspekte
- Dawn-Updates
Chrome 122
- Reichweite mit dem Kompatibilitätsmodus erhöhen (Funktion in Entwicklung)
- maxVertexAttributes-Limit erhöhen
- Updates zur Morgendämmerung
Chrome 121
- Unterstützung von WebGPU auf Android-Geräten
- DXC anstelle von FXC für die Shaderkompilierung unter Windows verwenden
- Zeitstempelabfragen in Rechen- und Renderingdurchläufen
- Standardeinstiegspunkte für Shader-Module
- Unterstützung von display-p3 als GPUExternalTexture-Farbraum
- Informationen zu Arbeitsspeicher-Heaps
- Updates zur Morgendämmerung
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Gehe an die Grenzen
- Änderungen am Tiefen-/Schatten-Status
- Aktualisierung der Adapterinformationen
- Zeitstempelquantisierung von Abfragen
- Funktionen für den Frühjahrsputz
Chrome 119
- Filterbare 32-Bit-Float-Texturen
- unorm10-10-10-2-Vertex-Format
- 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-Zwischenspeicher aufheben
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung stummschalten, wenn Gerät verloren geht
- Aktualisierungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklerfreundlichkeit verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- Integration von WebCodecs
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe ruckelfrei, wenn
importExternalTexture()
aufgerufen wird - Konformität mit Spezifikationen
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 115
- Unterstützte WGSL-Spracherweiterungen
- Experimentelle Unterstützung für Direct3D 11
- Unterstützung für diskrete GPU standardmäßig bei Wechselstromversorgung
- Entwicklererfahrung verbessern
- Dawn-Updates
Chrome 114
- JavaScript-Code optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Dawn-Updates