WebGPU의 새로운 기능 (Chrome 135)

François Beaufort
François Beaufort

게시일: 2025년 3월 26일

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],
});

뷰포트가 렌더링 타겟 경계를 넘어 확장되도록 허용

뷰포트가 렌더링 타겟 경계를 벗어날 수 있도록 뷰포트 유효성 검사 요구사항이 완화되었습니다. 이는 현재 표시 영역 외부로 확장될 수 있는 UI와 같은 2D 요소를 그릴 때 특히 유용합니다. 문제 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 플래그만으로 Android의 실험용 WebGPU 호환성 모드에 필요한 모든 기능을 사용 설정할 수 있습니다. 이를 통해 featureLevel: "compatibility" 옵션을 사용하여 호환성 모드에서 GPUAdapter를 요청하고 Vulkan을 지원하지 않는 기기에서 OpenGL ES 백엔드에 액세스할 수도 있습니다. 다음 예와 문제 dawn:389876644를 참고하세요.

// Request a GPUAdapter in compatibility mode.
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
WebGPU 보고서 페이지에 Android 기기의 호환성 모드에 있는 GPUAdapter가 표시됩니다.
webgpureport.org의 호환성 모드 어댑터 정보

maxInterStageShaderComponents 제한 삭제

이전에 공지된 바와 같이 maxInterStageShaderComponents 한도는 다음과 같은 여러 요인으로 인해 삭제되었습니다.

  • maxInterStageShaderVariables 중복: 이 한도는 이미 셰이더 단계 간에 전달되는 데이터의 양을 제어하는 유사한 목적으로 사용됩니다.
  • 경미한 불일치: 두 한도의 계산 방법에는 약간의 차이가 있지만 이러한 차이는 미미하며 maxInterStageShaderVariables 한도 내에서 효과적으로 관리할 수 있습니다.
  • 간소화: maxInterStageShaderComponents를 삭제하면 셰이더 인터페이스가 간소화되고 개발자의 복잡성이 줄어듭니다. 미묘한 차이가 있는 두 가지 한도를 별도로 관리하는 대신 더 적절한 이름을 지정하고 포괄적인 maxInterStageShaderVariables에 집중할 수 있습니다.

삭제 인텐트문제 364338810을 참고하세요.

Dawn 업데이트

더 이상 필터링 샘플러를 사용하여 깊이 텍스처를 샘플링할 수 없습니다. 참고로 깊이 텍스처는 필터링되지 않거나 비교 샘플러와 함께만 사용할 수 있습니다. 문제 379788112를 참고하세요.

WGPURequiredLimitsWGPUSupportedLimits 구조가 WGPULimits로 평면화되었습니다. 문제 374263404를 참고하세요.

다음 구조체의 이름이 변경되었습니다. 문제 42240793을 참고하세요.

  • WGPUImageCopyBuffer는 이제 WGPUTexelCopyBufferInfo입니다.
  • WGPUImageCopyTexture는 이제 WGPUTexelCopyTextureInfo입니다.
  • WGPUTextureDataLayout는 이제 WGPUTexelCopyBufferLayout입니다.

subgroupMinSizesubgroupMaxSize 멤버가 WGPUAdapterInfo 구조체에 추가되었습니다. webgpu-headers PR을 참고하세요.

이제 DAWN_TRACE_FILE_BASE 환경 변수를 사용하여 프로그램을 실행할 때 Metal에서 Dawn API 사용을 추적할 수 있습니다. 이 환경 변수는 나중에 XCode의 Metal 디버거에 로드할 수 있는 .gputrace 파일을 저장합니다. 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