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

François Beaufort
François Beaufort

เผยแพร่: 26 มีนาคม 2025

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

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

เช่น คุณอาจต้องการสร้างไปป์ไลน์ที่ใช้เฉพาะเลย์เอาต์กลุ่มการเชื่อมโยง 0 และ 2 คุณสามารถกำหนดเลย์เอาต์กลุ่มการเชื่อมโยง 1 ให้กับข้อมูล Fragment และเลย์เอาต์กลุ่มการเชื่อมโยง 2 ให้กับข้อมูล Vertex จากนั้นจึงแสดงผลโดยไม่มี Fragment Shader ดูปัญหา 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],
});

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

เราได้ผ่อนปรนข้อกำหนดสำหรับการตรวจสอบวิวพอร์ตเพื่อให้วิวพอร์ตอยู่นอกขอบเขตเป้าหมายการแสดงผลได้ ซึ่งมีประโยชน์อย่างยิ่งสำหรับการวาดองค์ประกอบ 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 ได้ง่ายขึ้น

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

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

ข้อมูลอัปเดตเกี่ยวกับ Dawn

คุณไม่สามารถใช้ตัวอย่างการกรองเพื่อสุ่มตัวอย่างเท็กซ์เจอร์ความลึกได้อีกต่อไป โปรดทราบว่าคุณจะใช้เท็กซ์เจอร์ความลึกได้เฉพาะกับตัวอย่างที่ไม่กรองหรือตัวอย่างการเปรียบเทียบ ดูปัญหา 379788112

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

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

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

เพิ่มสมาชิก subgroupMinSize และ subgroupMaxSize ลงในโครงสร้าง WGPUAdapterInfo แล้ว ดูคำขอส่งการเปลี่ยนแปลง webgpu-headers

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

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

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

รายการทุกอย่างที่ครอบคลุมในซีรีส์มีอะไรใหม่ใน 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