Yang Baru di WebGPU (ChromeIAP130)

François Beaufort
François Beaufort

Penggabungan sumber ganda

Menggabungkan dua output shader fragmen ke dalam satu framebuffer disebut dual source blending. Teknik ini sangat berguna untuk aplikasi yang memerlukan operasi perpaduan yang kompleks, seperti yang didasarkan pada mode perpaduan Porter-Duff. Dengan mengganti render pass berikutnya dengan satu render pass, penggabungan sumber ganda dapat meningkatkan performa dan fleksibilitas.

Fitur WebGPU "dual-source-blending" yang baru memungkinkan Anda menggunakan atribut WGSL @blend_src di @location(0) untuk menunjukkan indeks sumber blending dan faktor blending 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 kualitas Tint, compiler bahasa shader WebGPU, dengan memperkenalkan representasi perantara (IR) untuk perangkat yang mendukung WebGPU dengan backend Metal. IR ini, yang diposisikan di antara AST (abstract syntax tree) Tint dan penulis backend Metal, akan membuat compiler lebih efisien dan mudah dikelola, yang pada akhirnya akan menguntungkan developer dan pengguna. Pengujian awal menunjukkan bahwa Tint versi baru hingga 10 kali lebih cepat saat menerjemahkan shader WGSL Unity ke MSL.

Diagram alur menunjukkan proses mengonversi kode shader WGSL menjadi petunjuk GPU tingkat rendah.
Pembuatan pipeline render di macOS.

Peningkatan ini, yang sudah dapat diakses di Android dan ChromeOS, diperluas secara bertahap ke perangkat macOS yang mendukung WebGPU dengan backend Metal. Lihat masalah 42251016.

Penghentian penggunaan GPUAdapter requestAdapterInfo()

Metode asinkron requestAdapterInfo() GPUAdapter tidak diperlukan karena developer sudah bisa mendapatkan GPUAdapterInfo secara sinkron menggunakan atribut info GPUAdapter. Oleh karena itu, metode GPUAdapter requestAdapterInfo() non-standar kini tidak digunakan lagi. Lihat niat untuk menghentikan penggunaan.

Konsol DevTools menampilkan peringatan penghentian penggunaan untuk requestAdapterInfo().
Peringatan fitur yang tidak digunakan lagi untuk requestAdapterInfo() di Chrome DevTools.

Update Dawn

C API webgpu.h 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 (benar, salah, dan tidak ditentukan) 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

Hal ini hanya mencakup beberapa sorotan utama. Lihat daftar commit yang lengkap.

Yang Baru di WebGPU

Daftar semua hal yang telah dibahas dalam seri Yang Baru di WebGPU.

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113