มีอะไรใหม่ใน WebGPU (Chrome 135)

François Beaufort
François Beaufort

เผยแพร่เมื่อวันที่ 26 มีนาคม 2025

อนุญาตให้สร้างเลย์เอาต์ไปป์ไลน์ที่มีเลย์เอาต์กลุ่มการเชื่อมโยง Null

ก่อนหน้านี้ การสร้างเลย์เอาต์กลุ่มการเชื่อมโยงที่ว่างเปล่าจำเป็นต้องเพิ่มกลุ่มการเชื่อมโยงที่มีการเชื่อมโยงเป็น 0 ซึ่งไม่สะดวก ซึ่งไม่จําเป็นอีกต่อไปเนื่องจากตอนนี้ระบบอนุญาตให้ใช้เลย์เอาต์กลุ่มการเชื่อมโยง Null และละเว้นเมื่อสร้างเลย์เอาต์ไปป์ไลน์ ซึ่งจะช่วยให้การพัฒนาง่ายขึ้น

เช่น คุณอาจต้องการสร้างไปป์ไลน์ที่ใช้เฉพาะเลย์เอาต์กลุ่มการเชื่อมโยง 0 และ 2 คุณสามารถกําหนดเลย์เอาต์กลุ่มการเชื่อมโยง 1 ให้กับข้อมูลเศษและเลย์เอาต์กลุ่มการเชื่อมโยง 2 ให้กับข้อมูลเวิร์กเท็กซ์ จากนั้นจึงแสดงผลโดยไม่มีโปรแกรมเปลี่ยนรูปแบบเศษ ดูปัญหา 377836524

const bgl0 = myDevice.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = myDevice.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = myDevice.createBindGroupLayout({ entries: myVertexEntries });

// Create a pipeline layout that will be used to render without a fragment shader.
const myPipelineLayout = myDevice.createPipelineLayout({
  bindGroupLayouts: [bgl0, null, bgl2],
});

อนุญาตให้วิวพอร์ตขยายเกินขอบเขตเป้าหมายการแสดงผล

เราผ่อนปรนข้อกำหนดในการตรวจสอบวิวพอร์ตเพื่อให้วิวพอร์ตอยู่นอกขอบเขตเป้าหมายการแสดงผลได้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการวาดองค์ประกอบ 2 มิติ เช่น UI ที่อาจขยายออกไปนอกวิวพอร์ตปัจจุบัน ดูปัญหา 390162929

const passEncoder = myCommandEncoder.beginRenderPass({
  colorAttachments: [
    {
      view: myColorTexture.createView(),
      loadOp: "clear",
      storeOp: "store",
    },
  ],
});

// Set a viewport that extends past the render target's bounds by 8 pixels
// in all directions.
passEncoder.setViewport(
  /*x=*/ -8,
  /*y=*/ -8,
  /*width=*/ myColorTexture.width + 16,
  /*height=*/ myColorTexture.height + 16,
  /*minDepth=*/ 0,
  /*maxDepth=*/ 1,
);

// Draw geometry and complete the render pass as usual.

เข้าถึงโหมดความเข้ากันได้แบบทดลองใน Android ได้ง่ายขึ้น

ตอนนี้ Flag chrome://flags/#enable-unsafe-webgpu เพียงอย่างเดียวจะเปิดใช้ความสามารถทั้งหมดที่จําเป็นสําหรับโหมดความเข้ากันได้ของ WebGPU เวอร์ชันทดลองบน Android ซึ่งจะช่วยให้คุณขอ GPUAdapter ในโหมดความเข้ากันได้ด้วยตัวเลือก featureLevel: "compatibility" และเข้าถึงแบ็กเอนด์ OpenGL ES ในอุปกรณ์ที่ไม่รองรับ Vulkan ได้ ดูตัวอย่างต่อไปนี้และปัญหา dawn:389876644

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
หน้ารายงาน WebGPU แสดง GPUAdapter ในโหมดความเข้ากันได้บนอุปกรณ์ Android
ข้อมูลอะแดปเตอร์โหมดความเข้ากันได้ใน webgpureport.org

นำขีดจำกัด maxInterStageShaderComponents ออก

ตามที่ได้ประกาศไปก่อนหน้านี้ เราจะนำขีดจำกัด maxInterStageShaderComponents ออกเนื่องจากปัจจัยหลายประการดังนี้

  • การทำงานซ้ำกับ maxInterStageShaderVariables: ข้อจำกัดนี้มีประโยชน์คล้ายกันอยู่แล้ว ซึ่งก็คือการควบคุมปริมาณข้อมูลที่ส่งผ่านระหว่างระยะของโปรแกรมเปลี่ยนรูปแบบ
  • ความคลาดเคลื่อนเล็กน้อย: แม้ว่าวิธีคํานวณขีดจํากัด 2 รายการจะแตกต่างกันเล็กน้อย แต่ความคลาดเคลื่อนเหล่านี้ก็เล็กน้อยและจัดการได้อย่างมีประสิทธิภาพภายในขีดจํากัด maxInterStageShaderVariables
  • ลดความซับซ้อน: การนํา maxInterStageShaderComponents ออกจะช่วยปรับปรุงอินเทอร์เฟซ Shader และลดความซับซ้อนสําหรับนักพัฒนาแอป ผู้ใช้สามารถมุ่งเน้นที่ maxInterStageShaderVariables ที่มีชื่อเหมาะสมและครอบคลุมมากขึ้นแทนที่จะต้องจัดการขีดจํากัด 2 รายการแยกกันซึ่งมีความแตกต่างเล็กน้อย

โปรดดูความตั้งใจที่จะนำออกและปัญหา 364338810

การอัปเดต Dawn

คุณใช้เครื่องมือสุ่มตัวอย่างการกรองเพื่อสุ่มตัวอย่างพื้นผิวความลึกไม่ได้อีกต่อไป โปรดทราบว่าพื้นผิวความลึกใช้ได้กับเครื่องสุ่มตัวอย่างแบบไม่กรองหรือแบบเปรียบเทียบเท่านั้น ดูปัญหา 379788112

โครงสร้าง WGPURequiredLimits และ WGPUSupportedLimits ได้รวมเป็น WGPULimits แล้ว ดูปัญหา 374263404

เราได้เปลี่ยนชื่อโครงสร้างต่อไปนี้ ดูปัญหา 42240793

  • WGPUImageCopyBuffer เปลี่ยนชื่อเป็น WGPUTexelCopyBufferInfo
  • WGPUImageCopyTexture เปลี่ยนชื่อเป็น WGPUTexelCopyTextureInfo
  • WGPUTextureDataLayout เปลี่ยนชื่อเป็น WGPUTexelCopyBufferLayout

เพิ่มสมาชิก subgroupMinSize และ subgroupMaxSize ไปยังโครงสร้าง WGPUAdapterInfo แล้ว ดู webgpu-headers PR

ตอนนี้คุณสามารถติดตามการใช้งาน Dawn API ใน Metal ได้แล้วเมื่อเรียกใช้โปรแกรมด้วยตัวแปรสภาพแวดล้อม DAWN_TRACE_FILE_BASE ซึ่งจะบันทึกไฟล์ .gputrace ที่โหลดลงในโปรแกรมแก้ไขข้อบกพร่อง Metal ของ XCode ได้ในภายหลัง ดูเอกสารประกอบของ Debugging Dawn

ข้อมูลนี้เป็นเพียงไฮไลต์สำคัญบางส่วนเท่านั้น ดูรายการคอมมิตทั้งหมด

มีอะไรใหม่ใน WebGPU

รายการทุกอย่างที่ครอบคลุมในชุดมีอะไรใหม่ใน WebGPU

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