موارد جدید در WebGPU (Chrome 130)

فرانسوا بوفور
François Beaufort

ترکیب منبع دوگانه

ترکیب دو خروجی shader fragment در یک فریم بافر واحد ترکیب منبع دوگانه نامیده می شود. این تکنیک به ویژه برای برنامه هایی مفید است که به عملیات ترکیب پیچیده نیاز دارند، مانند مواردی که بر اساس حالت های ترکیبی Porter-Duff هستند. با جایگزینی پاس‌های رندر بعدی با یک پاس رندر، ترکیب دو منبع می‌تواند عملکرد و انعطاف‌پذیری را افزایش دهد.

ویژگی جدید WebGPU "dual-source-blending" به شما امکان می دهد از ویژگی WGSL @blend_src در @location(0) برای نشان دادن شاخص منبع ترکیبی و عوامل ترکیبی زیر استفاده کنید: "src1" ، "one-minus-src1" ، "src1-alpha" و "one-minus-src1-alpha" . قطعه زیر، ورودی chromestatus و شماره 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...

بهبود زمان کامپایل شیدر در فلز

تیم Chrome در حال بهبود Tint، کامپایلر زبان سایه زن WebGPU، با معرفی یک نمایش متوسط ​​(IR) برای دستگاه هایی است که از WebGPU با پشتوانه فلزی پشتیبانی می کنند. این IR که بین درخت نحو انتزاعی Tint (AST) و نویسنده باطن فلزی قرار گرفته است، کامپایلر را کارآمدتر و قابل نگهداری تر می کند و در نهایت هم به توسعه دهندگان و هم برای کاربران سود می رساند. آزمایشات اولیه نشان می دهد که نسخه جدید Tint هنگام ترجمه سایه زن های WGSL Unity به MSL تا 10 برابر سریعتر است.

یک فلوچارت فرآیند تبدیل کد سایه زن WGSL به دستورالعمل های GPU سطح پایین را نشان می دهد.
رندر ایجاد خط لوله در macOS.

این پیشرفت‌ها که قبلاً در Android و ChromeOS قابل دسترسی هستند، به تدریج به دستگاه‌های macOS که از WebGPU با باطن فلزی پشتیبانی می‌کنند، گسترش می‌یابند. شماره 42251016 را ببینید.

منسوخ شدن GPUAdapter requestAdapterInfo()

روش ناهمزمان requestAdapterInfo() اضافی است زیرا توسعه دهندگان می توانند GPUAdapterInfo را به صورت همزمان با استفاده از ویژگی GPUAdapter info دریافت کنند. از این رو، روش غیر استاندارد GPUAdapter requestAdapterInfo() اکنون منسوخ شده است. رجوع به نیت منسوخ شود .

کنسول DevTools یک هشدار انحلال برای requestAdapterInfo() نمایش می دهد.
هشدار ویژگی منسوخ شده برای requestAdapterInfo() در Chrome DevTools.

به روز رسانی سحر

webgpu.h C API برخی از قراردادهای نامگذاری را برای ساختارهای افزونه تعریف کرده است. تغییرات نام و شماره 42241174 زیر را مشاهده کنید.

پسوندهای WGPURenderPassDescriptor
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
پسوندهای WGPUShaderModuleDescriptor
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
پسوندهای WGPUSurfaceDescriptor
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

نوع ویژگی depthWriteEnabled WGPUDepthStencilState از boolean به WGPUOptionalBool تغییر می‌کند تا سه حالت ممکن (درست، نادرست و تعریف نشده) را مانند API جاوا اسکریپت بهتر منعکس کند. برای کسب اطلاعات بیشتر، قطعه کد زیر و webgpu-headers PR را ببینید.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 131

کروم 130

کروم 129

کروم 128

کروم 127

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113

،

فرانسوا بوفور
François Beaufort

ترکیب منبع دوگانه

ترکیب دو خروجی shader fragment در یک فریم بافر واحد ترکیب منبع دوگانه نامیده می شود. این تکنیک به ویژه برای برنامه هایی مفید است که به عملیات ترکیب پیچیده نیاز دارند، مانند مواردی که بر اساس حالت های ترکیبی Porter-Duff هستند. با جایگزینی پاس‌های رندر بعدی با یک پاس رندر، ترکیب دو منبع می‌تواند عملکرد و انعطاف‌پذیری را افزایش دهد.

ویژگی جدید WebGPU "dual-source-blending" به شما امکان می دهد از ویژگی WGSL @blend_src در @location(0) برای نشان دادن شاخص منبع ترکیبی و عوامل ترکیبی زیر استفاده کنید: "src1" ، "one-minus-src1" ، "src1-alpha" و "one-minus-src1-alpha" . قطعه زیر، ورودی chromestatus و شماره 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...

بهبود زمان کامپایل شیدر در فلز

تیم Chrome در حال بهبود Tint، کامپایلر زبان سایه زن WebGPU، با معرفی یک نمایش متوسط ​​(IR) برای دستگاه هایی است که از WebGPU با پشتوانه فلزی پشتیبانی می کنند. این IR که بین درخت نحو انتزاعی Tint (AST) و نویسنده باطن فلزی قرار گرفته است، کامپایلر را کارآمدتر و قابل نگهداری تر می کند و در نهایت هم به توسعه دهندگان و هم برای کاربران سود می رساند. آزمایشات اولیه نشان می دهد که نسخه جدید Tint هنگام ترجمه سایه زن های WGSL Unity به MSL تا 10 برابر سریعتر است.

یک فلوچارت فرآیند تبدیل کد سایه زن WGSL به دستورالعمل های GPU سطح پایین را نشان می دهد.
رندر ایجاد خط لوله در macOS.

این پیشرفت‌ها که قبلاً در Android و ChromeOS قابل دسترسی هستند، به تدریج به دستگاه‌های macOS که از WebGPU با باطن فلزی پشتیبانی می‌کنند، گسترش می‌یابند. شماره 42251016 را ببینید.

منسوخ شدن GPUAdapter requestAdapterInfo()

روش ناهمزمان requestAdapterInfo() اضافی است زیرا توسعه دهندگان می توانند GPUAdapterInfo را به صورت همزمان با استفاده از ویژگی GPUAdapter info دریافت کنند. از این رو، روش غیر استاندارد GPUAdapter requestAdapterInfo() اکنون منسوخ شده است. رجوع به نیت منسوخ شود .

کنسول DevTools یک هشدار انحلال برای requestAdapterInfo() نمایش می دهد.
هشدار ویژگی منسوخ شده برای requestAdapterInfo() در Chrome DevTools.

به روز رسانی سحر

webgpu.h C API برخی از قراردادهای نامگذاری را برای ساختارهای افزونه تعریف کرده است. تغییرات نام و شماره 42241174 زیر را مشاهده کنید.

پسوندهای WGPURenderPassDescriptor
WGPURenderPassDescriptorMaxDrawCount -> WGPURenderPassMaxDrawCount
پسوندهای WGPUShaderModuleDescriptor
WGPUShaderModuleSPIRVDescriptor -> WGPUShaderSourceSPIRV
WGPUShaderModuleWGSLDescriptor -> WGPUShaderSourceWGSL
پسوندهای WGPUSurfaceDescriptor
WGPUSurfaceDescriptorFromMetalLayer -> WGPUSurfaceSourceMetalLayer
WGPUSurfaceDescriptorFromWindowsHWND -> WGPUSurfaceSourceWindowsHWND
WGPUSurfaceDescriptorFromXlibWindow -> WGPUSurfaceSourceXlibWindow
WGPUSurfaceDescriptorFromWaylandSurface -> WGPUSurfaceSourceWaylandSurface
WGPUSurfaceDescriptorFromAndroidNativeWindow -> WGPUSurfaceSourceAndroidNativeWindow
WGPUSurfaceDescriptorFromXcbWindow -> WGPUSurfaceSourceXCBWindow
WGPUSurfaceDescriptorFromCanvasHTMLSelector -> WGPUSurfaceSourceCanvasHTMLSelector_Emscripten

نوع ویژگی depthWriteEnabled WGPUDepthStencilState از boolean به WGPUOptionalBool تغییر می‌کند تا سه حالت ممکن (درست، نادرست و تعریف نشده) را مانند API جاوا اسکریپت بهتر منعکس کند. برای کسب اطلاعات بیشتر، قطعه کد زیر و webgpu-headers PR را ببینید.

wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default

این تنها برخی از نکات کلیدی را پوشش می دهد. فهرست جامع تعهدات را بررسی کنید.

چه چیزی در WebGPU جدید است

فهرستی از همه چیزهایی که در سری What's New in WebGPU پوشش داده شده است.

کروم 131

کروم 130

کروم 129

کروم 128

کروم 127

کروم 126

کروم 125

کروم 124

کروم 123

کروم 122

کروم 121

کروم 120

کروم 119

کروم 118

کروم 117

کروم 116

کروم 115

کروم 114

کروم 113