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

François Beaufort
François Beaufort

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Chrome 149-150

Chrome 147-148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

Chrome 142

Chrome 141

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