Penggabungan sumber ganda
Menggabungkan dua output shader fragmen ke dalam satu framebuffer disebut gabungan sumber ganda. Teknik ini sangat berguna untuk aplikasi yang memerlukan operasi penggabungan yang kompleks, seperti yang didasarkan pada mode gabungan Porter-Duff. Dengan mengganti pass render berikutnya dengan satu pass render, penggabungan sumber ganda dapat meningkatkan performa dan fleksibilitas.
Fitur WebGPU "dual-source-blending"
yang baru memungkinkan Anda menggunakan atribut @blend_src
WGSL di @location(0)
untuk menunjukkan indeks sumber gabungan dan faktor gabungan berikut: "src1"
, "one-minus-src1"
, "src1-alpha"
, dan "one-minus-src1-alpha"
. Lihat cuplikan berikut, entri chromestatus, dan masalah 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...
Peningkatan waktu kompilasi shader di Metal
Tim Chrome meningkatkan Tint, compiler bahasa shader WebGPU, dengan memperkenalkan representasi perantara (IR) untuk perangkat yang mendukung WebGPU dengan backend Metal. IR ini, yang diposisikan di antara abstract syntax tree (AST) Tint dan penulis backend Metal, akan membuat compiler lebih efisien dan dapat dikelola, yang pada akhirnya menguntungkan developer dan pengguna. Pengujian awal menunjukkan bahwa Tint versi baru hingga 10 kali lebih cepat saat menerjemahkan shader WGSL Unity ke MSL.
Peningkatan ini, yang sudah dapat diakses di Android dan ChromeOS, secara bertahap diperluas ke perangkat macOS yang mendukung WebGPU dengan backend Metal. Lihat masalah 42251016.
Penghentian penggunaan requestAdapterInfo() GPUAdapter
Metode asinkron requestAdapterInfo()
GPUAdapter tidak diperlukan karena developer sudah dapat mendapatkan GPUAdapterInfo secara sinkron menggunakan atribut info
GPUAdapter. Oleh karena itu, metode requestAdapterInfo()
GPUAdapter non-standar kini tidak digunakan lagi. Lihat niat untuk menghentikan penggunaan.
Update fajar
Webgpu.h C API telah menentukan beberapa konvensi penamaan untuk struct ekstensi. Lihat perubahan nama berikut dan masalah 42241174.
WGPURenderPassDescriptor ekstensi
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
WGPUShaderModuleDescriptor ekstensi
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
WGPUSurfaceDescriptor ekstensi
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
Jenis atribut depthWriteEnabled
WGPUDepthStencilState
beralih dari boolean ke WGPUOptionalBool
untuk lebih mencerminkan tiga kemungkinan statusnya (true, false, dan undefined) seperti di JavaScript API. Untuk mempelajari lebih lanjut, lihat cuplikan kode berikut dan PR webgpu-headers.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
Bagian ini hanya membahas beberapa sorotan utama. Lihat daftar commit yang lengkap.
Yang Baru di WebGPU
Daftar semua hal yang telah dibahas dalam seri What's New in WebGPU.
Chrome 130
- Penggabungan sumber ganda
- Peningkatan waktu kompilasi shader di Metal
- Penghentian GPUAdapter requestAdapterInfo()
- Info terbaru fajar
Chrome 129
Chrome 128
- Bereksperimen dengan subgrup
- Menghentikan penggunaan setelan bias kedalaman untuk garis dan titik
- Menyembunyikan peringatan error DevTools yang tidak direkam jika preventDefault
- WGSL melakukan interpolasi sampling terlebih dahulu dan
- Info terbaru fajar
Chrome 127
- Dukungan eksperimental untuk OpenGL ES di Android
- Atribut info GPUAdapter
- Peningkatan interop WebAssembly
- Error encoder perintah yang ditingkatkan
- Pembaruan Dawn
Chrome 126
- Meningkatkan batas maxTextureArrayLayers
- Pengoptimalan upload buffering untuk backend Vulkan
- Peningkatan waktu kompilasi shader
- Buffer perintah yang dikirimkan harus unik
- Pembaruan Dawn
Chrome 125
Chrome 124
- Tekstur penyimpanan hanya baca dan baca-tulis
- Dukungan pekerja layanan dan pekerja bersama
- Atribut informasi adaptor baru
- Perbaikan bug
- Pembaruan Dawn
Chrome 123
- Dukungan fungsi bawaan DP4a di WGSL
- Parameter pointer yang tidak dibatasi di WGSL
- Sintaksis yang lebih mudah untuk mendereferensikan komposit di WGSL
- Memisahkan status hanya baca untuk aspek stensil dan kedalaman
- Pembaruan Dawn
Chrome 122
- Memperluas jangkauan dengan mode kompatibilitas (fitur dalam pengembangan)
- Meningkatkan batas maxVertexAttributes
- Info terbaru fajar
Chrome 121
- Mendukung WebGPU di Android
- Menggunakan DXC, bukan FXC, untuk kompilasi shader di Windows
- Kueri stempel waktu dalam penerusan komputasi dan rendering
- Titik entri default ke modul shader
- Mendukung display-p3 sebagai ruang warna GPUExternalTexture
- Info heap memori
- Pembaruan Dawn
Chrome 120
- Dukungan untuk nilai floating point 16-bit di WGSL
- Mendorong batas
- Perubahan pada status kedalaman-stensil
- Pembaruan informasi adaptor
- Kuantisasi kueri stempel waktu
- Fitur pembersihan musim semi
Chrome 119
- Tekstur float 32-bit yang dapat difilter
- Format verteks unorm10-10-10-2
- Format tekstur rgb10a2uint
- Info terbaru fajar
Chrome 118
- Dukungan HTMLImageElement dan ImageData di
copyExternalImageToTexture()
- Dukungan eksperimental untuk tekstur penyimpanan hanya baca dan baca
- Pembaruan Dawn
Chrome 117
- Membatalkan penetapan buffer verteks
- Membatalkan penetapan bind group
- Menyembunyikan error dari pembuatan pipeline asinkron saat perangkat hilang
- Pembaruan pembuatan modul shader SPIR-V
- Meningkatkan pengalaman developer
- Menyimpan cache pipeline dengan tata letak yang dibuat secara otomatis
- Pembaruan Dawn
Chrome 116
- Integrasi WebCodecs
- Perangkat yang hilang ditampilkan oleh
requestDevice()
GPUAdapter - Membuat pemutaran video tetap lancar jika
importExternalTexture()
dipanggil - Kepatuhan spesifikasi
- Meningkatkan pengalaman developer
- Pembaruan Dawn
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU diskret secara default menggunakan daya AC
- Meningkatkan pengalaman developer
- Pembaruan Dawn
Chrome 114
- Optimize JavaScript
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi akan menampilkan InvalidStateError
- Update WGSL
- Pembaruan Dawn