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"
. 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...
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 zeigen, 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 der GPUAdapter-Methode „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 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-Artikel zu webgpu-headers.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Hier werden nur einige der wichtigsten Vorteile behandelt. 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 131
- Entfernungen in WGSL zuschneiden
- GPUCanvasContext getConfiguration()
- Punkt- und Linienprimitive dürfen keine Tiefenverzerrung haben.
- Integrierte Funktionen für inklusive Stichprobenerhebungen für Untergruppen
- Experimentelle Unterstützung für indirekte Multi-Draw-Anweisungen
- Shader-Modul-Kompilierungsoption „strict math“
- GPUAdapter requestAdapterInfo() entfernen
- Dawn-Updates
Chrome 130
- Zusammenführen von zwei Quellen
- Verbesserte Shader-Kompilierungszeiten unter Metal
- Einstellung der GPUAdapter-Methode „requestAdapterInfo()“
- Dawn-Updates
Chrome 129
- HDR-Unterstützung mit Canvas-Tone-Mapping-Modus
- Erweiterte Unterstützung von Untergruppen
- Dawn-Updates
Chrome 128
- Mit Untergruppen experimentieren
- Einstellung der Tiefenverzerrung für Linien und Punkte eingestellt
- Nicht erfasste Fehlerwarnung in den Entwicklertools bei preventDefault ausblenden
- WGSL-interpolierte Stichprobenerhebung
- Dawn-Updates
Chrome 127
- Experimentelle Unterstützung von OpenGL ES unter Android
- Attribut „info“ von „GPUAdapter“
- Verbesserungen der WebAssembly-Interoperabilität
- Verbesserte Fehlermeldungen beim Befehls-Encoder
- Dawn-Updates
Chrome 126
- Limit für maxTextureArrayLayers erhöhen
- 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 dem 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 Arbeitsspeicher-Heaps
- Dawn-Updates
Chrome 120
- Unterstützung von 16-Bit-Gleitkommawerten in WGSL
- Grenzen überschreiten
- Änderungen am Status der Tiefenschablonen
- Aktualisierte Informationen zu Adaptern
- Quantisierung von Zeitstempelabfragen
- 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 Lese-/Schreib- und schreibgeschützte Speichertextur
- Dawn-Updates
Chrome 117
- Vertex-Buffer zurücksetzen
- Bindungsgruppe aufheben
- Fehler bei der asynchronen Pipelineerstellung stummschalten, wenn Gerät verloren geht
- Änderungen beim Erstellen von SPIR-V-Shadermodulen
- Entwicklererfahrung verbessern
- Pipelines mit automatisch generiertem Layout im Cache speichern
- Dawn-Updates
Chrome 116
- WebCodecs-Integration
- Verlorenes Gerät, das von GPUAdapter
requestDevice()
zurückgegeben wurde - Videowiedergabe bei Aufruf von
importExternalTexture()
flüssig halten - 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
- Entwicklerfreundlichkeit verbessern
- Dawn-Updates
Chrome 114
- JavaScript optimieren
- Bei nicht konfiguriertem Canvas wird bei getCurrentTexture() ein InvalidStateError geworfen
- WGSL-Updates
- Dawn-Updates