เผยแพร่เมื่อวันที่ 8 มกราคม 2025
การใช้มุมมองพื้นผิว
ปัจจุบันมุมมองพื้นผิว GPU จะรับค่าแฟล็กการใช้งานทั้งหมดมาจากพื้นผิว GPU ต้นทาง ซึ่งอาจทำให้เกิดปัญหาได้เนื่องจากรูปแบบมุมมองบางรูปแบบใช้ร่วมกับการใช้งานบางอย่างไม่ได้ วิธีแก้ปัญหานี้คือ การเรียกใช้ createView()
ด้วยสมาชิก usage
(ไม่บังคับ) ช่วยให้คุณระบุชุดย่อยของ Flag การใช้งานของพื้นผิวต้นทางที่เข้ากันได้กับรูปแบบมุมมองที่เลือกได้อย่างชัดเจน
การเปลี่ยนแปลงนี้ช่วยให้สามารถตรวจสอบล่วงหน้าและควบคุมวิธีใช้มุมมองได้อย่างละเอียดยิ่งขึ้น นอกจากนี้ ยังสอดคล้องกับ API กราฟิกอื่นๆ ที่ Flag การใช้งานเป็นพารามิเตอร์ทั่วไปในการสร้างมุมมอง ซึ่งเปิดโอกาสให้เพิ่มประสิทธิภาพ
ดูข้อมูลโค้ดต่อไปนี้ รายการ chromestatus และปัญหา 363903526
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
การผสมพื้นผิวแบบจำนวนลอยตัว 32 บิต
พื้นผิวแบบจุดลอยตัว 32 บิตเป็นสิ่งจำเป็นสำหรับการเรนเดอร์ HDR เพื่อรักษาค่าสีที่หลากหลายและป้องกันข้อบกพร่องของแถบสี เช่น ในการแสดงภาพทางวิทยาศาสตร์
ฟีเจอร์ "float32-blendable"
GPU ใหม่ช่วยให้สามารถผสมผสานพื้นผิว GPU ที่มีรูปแบบ "r32float"
, "rg32float"
และ "rgba32float"
ได้ ตอนนี้คุณสร้างไปป์ไลน์การเรนเดอร์ที่ใช้การผสมผสานกับไฟล์แนบรูปแบบ float32 ได้แล้วเมื่อขออุปกรณ์ GPU ที่มีฟีเจอร์นี้
ดูข้อมูลโค้ดต่อไปนี้ รายการ chromestatus และปัญหา 369649348
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
แอตทริบิวต์ GPUDevice adapterInfo
ไลบรารีที่ใช้ออบเจ็กต์ GPUDevice
ที่ได้จากผู้ใช้เพื่อเข้าถึงข้อมูลเกี่ยวกับ GPU จริงนั้นมีความสำคัญ เนื่องจากอาจต้องเพิ่มประสิทธิภาพหรือใช้วิธีแก้ปัญหาชั่วคราวตามสถาปัตยกรรม GPU แม้ว่าจะเข้าถึงข้อมูลนี้ผ่านออบเจ็กต์ GPUAdapter
ได้ แต่ไม่มีวิธีรับข้อมูลจาก GPUDevice
เพียงอย่างเดียว ซึ่งอาจไม่สะดวกเนื่องจากอาจกำหนดให้ผู้ใช้ต้องระบุข้อมูลเพิ่มเติมควบคู่ไปกับ GPUDevice
ในการแก้ไขปัญหานี้ ตอนนี้ GPUAdapterInfo
จะแสดงผ่านแอตทริบิวต์ GPUDevice
adapterInfo
ซึ่งคล้ายกับแอตทริบิวต์ GPUAdapter
info
ที่มีอยู่
ดูข้อมูลโค้ดต่อไปนี้ รายการ chromestatus และปัญหา 376600838
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
การกําหนดค่าบริบท Canvas ด้วยรูปแบบที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด JavaScript
ก่อนหน้านี้ การใช้รูปแบบพื้นผิวที่ไม่ถูกต้องกับเมธอด configure()
ของบริบทแคนวาส GPU จะทำให้เกิดข้อผิดพลาดในการตรวจสอบ GPU การดำเนินการนี้เปลี่ยนเป็นการโยน JavaScript TypeError
วิธีนี้จะช่วยป้องกันไม่ให้มีกรณีที่ getCurrentTexture()
แสดงผลพื้นผิว GPU ที่ถูกต้องแม้ว่าบริบทของผืนผ้าใบ GPU จะได้รับการกําหนดค่าไม่ถูกต้องก็ตาม ดูข้อมูลเพิ่มเติมได้ในปัญหา 372837859
การกรองข้อจำกัดของตัวสุ่มตัวอย่างในพื้นผิว
ก่อนหน้านี้อนุญาตให้ใช้พื้นผิวรูปแบบ "sint"
, "uint"
และ "depth"
" ที่มีตัวอย่างการกรอง ตอนนี้ไม่อนุญาตให้ใช้พื้นผิวรูปแบบ "sint"
หรือ "uint"
กับเครื่องสุ่มตัวอย่างการกรองอย่างถูกต้องแล้ว โปรดทราบว่าขณะนี้ระบบจะแสดงคำเตือนหากคุณใช้พื้นผิว "depth"
" ที่มีเครื่องมือสุ่มตัวอย่างการกรอง เนื่องจากระบบจะไม่อนุญาตให้ใช้ในอนาคต ดูปัญหา 376497143
ข้อจำกัดเหล่านี้หมายความว่าการใช้พื้นผิวความลึกกับเครื่องสุ่มตัวอย่างที่ไม่กรองจะต้องสร้างเลย์เอาต์กลุ่มการเชื่อมโยงด้วยตนเอง เนื่องจากเลย์เอาต์กลุ่มการเชื่อมโยงที่สร้างขึ้นโดย "อัตโนมัติ" ยังไม่รองรับการผสมผสานนี้ ปัญหาเกี่ยวกับข้อกำหนด 4952 มีข้อเสนอที่อยู่ระหว่างการพิจารณาเพื่อจัดการข้อจำกัดนี้ในอนาคต
การทดสอบกลุ่มย่อยแบบขยายเวลา
การทดสอบกลุ่มย่อยซึ่งเดิมกำหนดให้สิ้นสุดใน Chrome 131 ได้ขยายเวลาไปจนถึง Chrome 133 ซึ่งจะสิ้นสุดในวันที่ 16 เมษายน 2025 แม้ว่าการทดลองใช้แหล่งที่มาครั้งแรกจะมุ่งเน้นที่ประสิทธิภาพ แต่ไม่มีมาตรการป้องกันความสามารถในการย้ายข้อมูลที่สำคัญ ระบบจะเพิ่มมาตรการป้องกันเหล่านี้ ซึ่งอาจทำให้เกิดข้อผิดพลาดในโค้ดที่มีอยู่
ปรับปรุงประสบการณ์การใช้งานสำหรับนักพัฒนาแอป
ตอนนี้คำเตือนจะปรากฏใน DevTools เมื่อใช้ตัวเลือก powerPreference
กับ requestAdapter()
ใน Windows ระบบจะนำคำเตือนนี้ออกเมื่อ Chrome ทราบวิธีใช้ GPU 2 ตัวที่แตกต่างกันและคอมโพสผลลัพธ์ระหว่าง GPU 2 ตัว ดูปัญหา 369219127
ตอนนี้ขนาดของบัฟเฟอร์ GPU จะแสดงอยู่ในข้อความแสดงข้อผิดพลาดเมื่อสร้างบัฟเฟอร์ GPU ที่มีขนาดใหญ่เกินไป ดูปัญหา 374167798
การรองรับรูปแบบพื้นผิวแบบ 16 บิตที่ปรับให้เป็นมาตรฐาน (เวอร์ชันทดลอง)
ขณะนี้รูปแบบพื้นผิวแบบ 16 บิตที่ปรับให้เป็นค่าปกติแบบมีเครื่องหมายและแบบไม่มีเครื่องหมายพร้อมให้ใช้งานแบบทดลองแล้วในฟีเจอร์ GPU ของ "chromium-experimental-snorm16-texture-formats"
และ "chromium-experimental-unorm16-texture-formats"
ตามลำดับ ขณะที่เรากำลังหารือเกี่ยวกับการทำให้เป็นมาตรฐาน
ฟีเจอร์เหล่านี้เพิ่มการรองรับรูปแบบพื้นผิวแบบ 16 บิตที่ปรับให้เป็นมาตรฐานด้วยการใช้งาน COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
, การหลายตัวอย่าง และความสามารถในการแก้ไข รูปแบบเพิ่มเติมคือ "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
และ "rgba16snorm"
ในระหว่างนี้ โปรดเปิดใช้ Flag "การสนับสนุน WebGPU ที่ไม่เป็นอันตราย" ที่ chrome://flags/#enable-unsafe-webgpu
เพื่อให้ฟีเจอร์ทดลองเหล่านี้พร้อมใช้งานใน Chrome
ดูข้อมูลโค้ดต่อไปนี้และปัญหา 374790898
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
การอัปเดต Dawn
เลิกใช้เมธอด EnumerateFeatures(FeatureName * features)
จาก wgpu::Adapter
และ wgpu::Device
แล้วเพื่อเปลี่ยนไปใช้ GetFeatures(SupportedFeatures * features)
ดูปัญหา 368672123
webgpu.h C API ได้เปลี่ยน char const *
ทั้งหมดเป็นโครงสร้าง WGPUStringView
ที่กำหนดมุมมองเป็นสตริงที่เข้ารหัส UTF-8 โดยทำหน้าที่เป็นพอยน์เตอร์ไปยังข้อมูลสตริงควบคู่ไปกับความยาว ซึ่งจะช่วยให้คุณทำงานกับสตริงบางส่วนได้โดยไม่ต้องคัดลอก ดูปัญหา 42241188
ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด
มีอะไรใหม่ใน WebGPU
รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU
Chrome 132
- การใช้งานมุมมองพื้นผิว
- การผสมพื้นผิวแบบจำนวนลอยตัว 32 บิต
- แอตทริบิวต์ adapterInfo ของ GPUDevice
- การกําหนดค่าบริบท Canvas ด้วยรูปแบบที่ไม่ถูกต้องจะทำให้เกิดข้อผิดพลาด JavaScript
- การกรองข้อจำกัดของตัวสุ่มตัวอย่างในพื้นผิว
- การทดสอบกลุ่มย่อยแบบขยาย
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- การรองรับรูปแบบพื้นผิวแบบ 16 บิตที่ปรับให้เป็นมาตรฐานแบบทดลอง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 131
- ตัดระยะทางใน WGSL
- GPUCanvasContext getConfiguration()
- องค์ประกอบพื้นฐานของจุดและเส้นต้องไม่มีอคติด้านความลึก
- ฟังก์ชันการสแกนแบบรวมในตัวสำหรับกลุ่มย่อย
- การรองรับการดึงข้อมูลแบบหลายดรอว์ในขั้นทดลอง
- ตัวเลือกการคอมไพล์โมดูล Shader เป็นแบบคณิตศาสตร์แบบเข้มงวด
- นํา GPUAdapter requestAdapterInfo() ออก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 130
- การผสมผสานแหล่งที่มาแบบคู่
- การปรับปรุงเวลาคอมไพล์ Shader ใน Metal
- การเลิกใช้งาน requestAdapterInfo() ของ GPUAdapter
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 129
- การรองรับ HDR ด้วยโหมดการปรับโทนสีของ Canvas
- การรองรับกลุ่มย่อยที่เพิ่มขึ้น
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 128
- การทดสอบกลุ่มย่อย
- เลิกใช้งานการตั้งค่าความเอียงของภาพสำหรับเส้นและจุด
- ซ่อนคำเตือนข้อผิดพลาดของเครื่องมือสำหรับนักพัฒนาเว็บที่ตรวจไม่พบหาก preventDefault
- WGSL จะปัดเศษการสุ่มตัวอย่างก่อน แล้วทำอย่างใดอย่างหนึ่งต่อไปนี้
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 127
- การรองรับ OpenGL ES ใน Android แบบทดลอง
- แอตทริบิวต์ข้อมูล GPUAdapter
- การปรับปรุงความสามารถในการทำงานร่วมกันของ WebAssembly
- ปรับปรุงข้อผิดพลาดเกี่ยวกับโปรแกรมเข้ารหัสคำสั่ง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 126
- เพิ่มขีดจํากัด maxTextureArrayLayers
- การเพิ่มประสิทธิภาพการอัปโหลดบัฟเฟอร์สําหรับแบ็กเอนด์ Vulkan
- การปรับปรุงเวลาคอมไพล์ Shader
- บัฟเฟอร์คำสั่งที่ส่งต้องไม่ซ้ำกัน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 125
Chrome 124
- พื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและแบบอ่านและเขียน
- การรองรับ Service Worker และ Shared Worker
- แอตทริบิวต์ข้อมูลอะแดปเตอร์ใหม่
- แก้ไขข้อบกพร่อง
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 123
- การรองรับฟังก์ชันในตัวของ DP4a ใน WGSL
- พารามิเตอร์พอยน์เตอร์ที่ไม่มีข้อจำกัดใน WGSL
- Syntax sugar สำหรับการนำค่าคอมโพสิทออกใน WGSL
- แยกสถานะอ่านอย่างเดียวสำหรับแสตนซิลและมิติความลึก
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 122
- ขยายการเข้าถึงด้วยโหมดความเข้ากันได้ (ฟีเจอร์ที่อยู่ระหว่างการพัฒนา)
- เพิ่มขีดจํากัด maxVertexAttributes
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 121
- รองรับ WebGPU ใน Android
- ใช้ DXC แทน FXC สำหรับการคอมไพล์ shader ใน Windows
- การค้นหาการประทับเวลาในการคำนวณและผ่านการแสดงผล
- จุดแรกเข้าเริ่มต้นไปยังโมดูล Shader
- รองรับ display-p3 เป็นพื้นที่สี GPUExternalTexture
- ข้อมูลกองหน่วยความจำ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 120
- การรองรับค่าทศนิยม 16 บิตใน WGSL
- ก้าวข้ามขีดจำกัด
- การเปลี่ยนแปลงสถานะความลึกของสเตนซิล
- การอัปเดตข้อมูลอะแดปเตอร์
- การแปลงค่าการค้นหาการประทับเวลา
- ฟีเจอร์ทำความสะอาดช่วงฤดูใบไม้ผลิ
Chrome 119
- พื้นผิวแบบจำนวนลอยตัว 32 บิตที่กรองได้
- รูปแบบเวิร์กเท็กซ์ unorm10-10-10-2
- รูปแบบพื้นผิว rgb10a2uint
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 118
- การรองรับ HTMLImageElement และ ImageData ใน
copyExternalImageToTexture()
- การรองรับแบบทดลองสำหรับพื้นผิวพื้นที่เก็บข้อมูลแบบอ่านอย่างเดียวและอ่าน/เขียน
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 117
- ยกเลิกการตั้งค่าบัฟเฟอร์เวิร์กเทกซ์
- ยกเลิกการตั้งค่ากลุ่มการเชื่อมโยง
- ซ่อนข้อผิดพลาดจากการสร้างไปป์ไลน์แบบแอซิงค์เมื่ออุปกรณ์สูญหาย
- การอัปเดตการสร้างโมดูล Shader ของ SPIR-V
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- การแคชไปป์ไลน์ที่มีเลย์เอาต์ที่สร้างขึ้นโดยอัตโนมัติ
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 116
- การผสานรวม WebCodecs
- อุปกรณ์ที่สูญหายที่ GPUAdapter
requestDevice()
แสดง - เล่นวิดีโอได้อย่างราบรื่นหากมีการเรียกใช้
importExternalTexture()
- การปฏิบัติตามข้อกำหนด
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 115
- ส่วนขยายภาษา WGSL ที่รองรับ
- การรองรับ Direct3D 11 แบบทดลอง
- ใช้ GPU แบบแยกต่างหากโดยค่าเริ่มต้นเมื่อใช้แหล่งจ่ายไฟ AC
- การปรับปรุงประสบการณ์การใช้งานของนักพัฒนาแอป
- ข้อมูลอัปเดตเกี่ยวกับ Dawn
Chrome 114
- เพิ่มประสิทธิภาพ JavaScript
- getCurrentTexture() ใน Canvas ที่ไม่ได้กําหนดค่าจะแสดงข้อผิดพลาด InvalidStateError
- ข้อมูลอัปเดตเกี่ยวกับ WGSL
- ข้อมูลอัปเดตเกี่ยวกับ Dawn