Pencampuran sumber ganda
Menggabungkan dua output shader fragmen ke dalam satu framebuffer disebut gabungan sumber ganda. Teknik ini sangat berguna untuk aplikasi yang memerlukan operasi pencampuran kompleks, seperti yang didasarkan pada mode penggabungan Porter-Duff. Dengan mengganti penerusan render berikutnya dengan satu penerusan 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 menengah (IR) untuk perangkat yang mendukung WebGPU dengan backend Metal. IR ini, yang diposisikan di antara pohon sintaksis abstrak (AST) Tint dan penulis backend Metal, akan membuat compiler menjadi lebih efisien dan mudah 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 GPUAdapter requestAdapterInfo()
Metode asinkron requestAdapterInfo()
GPUAdapter redundan karena developer sudah bisa mendapatkan GPUAdapterInfo secara sinkron menggunakan atribut info
GPUAdapter. Oleh karena itu, metode requestAdapterInfo()
GPUAdapter non-standar kini tidak digunakan lagi. Lihat maksud penghentian penggunaan.
Update fajar
Webgpu.h C API telah menentukan beberapa konvensi penamaan untuk struct ekstensi. Lihat perubahan nama dan masalah 42241174 berikut.
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
Artikel ini hanya mencakup 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
- Pencampuran sumber ganda
- Peningkatan waktu kompilasi shader di Metal
- Penghentian penggunaan GPUAdapter requestAdapterInfo()
- Pembaruan Dawn
Chrome 129
Chrome 128
- Bereksperimen dengan subgrup
- Menghentikan penggunaan setelan bias kedalaman untuk garis dan titik
- Menyembunyikan peringatan DevTools error yang tidak tertangkap jika preventDefault
- Pengambilan sampel interpolasi WGSL terlebih dahulu dan
- Info terbaru fajar
Chrome 127
- Dukungan eksperimental untuk OpenGL ES di Android
- Atribut info GPUAdapter
- Peningkatan interop WebAssembly
- Memperbaiki error encoder perintah
- Info terbaru fajar
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
- Info terbaru fajar
Chrome 123
- Dukungan fungsi bawaan DP4a dalam WGSL
- Parameter pointer yang tidak dibatasi dalam WGSL
- sugar sintaksis untuk dereferensi komposit dalam WGSL
- Status hanya baca terpisah untuk aspek stencil 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 render
- Titik entri default ke modul shader
- Mendukung display-p3 sebagai ruang warna GPUExternalTexture
- Info heap memori
- Info terbaru fajar
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 bersih-bersih
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
- Info terbaru fajar
Chrome 117
- Membatalkan penetapan buffer verteks
- Membatalkan penetapan bind group
- Menonaktifkan 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
- Info terbaru fajar
Chrome 116
- Integrasi WebCodecs
- Perangkat yang hilang ditampilkan oleh GPUAdapter
requestDevice()
- Menjaga pemutaran video tetap lancar jika
importExternalTexture()
dipanggil - Kepatuhan spesifikasi
- Meningkatkan pengalaman developer
- Info terbaru fajar
Chrome 115
- Ekstensi bahasa WGSL yang didukung
- Dukungan eksperimental untuk Direct3D 11
- Mendapatkan GPU diskret secara default menggunakan daya AC
- Meningkatkan pengalaman developer
- Info terbaru fajar
Chrome 114
- Optimize JavaScript
- getCurrentTexture() pada kanvas yang tidak dikonfigurasi menampilkan InvalidStateError
- Update WGSL
- Pembaruan Dawn