WebGPU의 새로운 기능 (Chrome 144)

François Beaufort
François Beaufort

게시일: 2026년 1월 7일

WGSL subgroup_id 확장 프로그램

WGSL 언어 확장 프로그램 subgroup_id를 사용하면 subgroups 확장 프로그램이 사용 설정된 경우 작업 그룹에서 다음 새로운 내장 값을 사용할 수 있습니다.

  • subgroup_id: 현재 작업 그룹 내에서 호출의 하위 그룹 ID를 제공합니다.
  • num_subgroups: 워크그룹에 있는 하위 그룹의 수를 보고합니다.

이전에는 하위 그룹 호출 ID를 사용하여 메모리를 색인화하려면 메모리 액세스가 중복되지 않도록 하위 그룹 ID를 재구성해야 했습니다 (일반적으로 원자적 작업을 통해). 이제 subgroup_id을 사용하여 방정식의 나머지 절반을 채울 수 있습니다. 이 기능은 아직 D3D 백엔드에서 사용할 수 없으므로 여기에서 에뮬레이션됩니다. local_invocation_index와 동등한 subgroup_invocation_id + subgroup_size * subgroup_id을 만들어도 안전합니다. 하위 그룹이 완전하지 않은 경우도 있을 수 있습니다.

이 언어 확장 프로그램은 navigator.gpu.wgslLanguageFeatures를 사용하여 기능 감지할 수 있습니다. WGSL 셰이더 코드 상단에 requires-directive를 사용하여 requires subgroup_id;와의 비호환성 가능성을 알리는 것이 좋습니다. 다음 예시와 배송 의도를 참고하세요.

if (!navigator.gpu.wgslLanguageFeatures.has("subgroup_id")) {
  throw new Error(`WGSL subgroup_id and num_subgroups built-in values are not available`);
}

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("subgroups")) {
  throw new Error("Subgroups support is not available");
}
const device = await adapter.requestDevice({ requiredFeatures: ["subgroups"] });

const shaderModule = device.createShaderModule({ code: `
  enable subgroups;
  requires subgroup_id;

  @compute @workgroup_size(64, 1, 1)
  fn main(@builtin(subgroup_id) subgroup_id : u32,
          @builtin(num_subgroups) num_subgroups : u32) {
    // TODO: Use subgroup_id and num_subgroups values.
  }`,
});

WGSL uniform_buffer_standard_layout 확장 프로그램

WGSL 언어 확장 프로그램 uniform_buffer_standard_layout를 사용하면 균일한 버퍼가 저장소 버퍼와 동일한 메모리 레이아웃 제약 조건을 사용할 수 있으므로 두 종류의 버퍼에서 데이터 구조를 더 쉽게 공유할 수 있습니다. 즉, 균일한 버퍼는 더 이상 배열 요소에 16바이트 정렬이 필요하지 않으며 중첩된 구조 오프셋을 16바이트의 배수로 패딩하지 않아도 됩니다.

이 언어 확장 프로그램은 navigator.gpu.wgslLanguageFeatures를 사용하여 기능 감지할 수 있습니다. WGSL 셰이더 코드 상단에 requires-directive를 사용하여 requires uniform_buffer_standard_layout;와의 비호환성 가능성을 알리는 것이 좋습니다. 다음 예시와 배송 의도를 참고하세요.

if (!navigator.gpu.wgslLanguageFeatures.has("uniform_buffer_standard_layout")) {
  throw new Error(`WGSL uniform buffer standard layout is not available`);
}

const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();

const shaderModule = device.createShaderModule({ code: `
  requires uniform_buffer_standard_layout;

  struct S {
      x: f32
  }
  struct Uniforms {
      a: S,
      b: f32
      // b is at offset 4. Without standard layout, alignment rules would
      // force b to be at offset 16 (or a multiple of 16), and you would have
      // to add extra fields or use an @align attribute.
  }

  @group(0) @binding(0) var<uniform> u: Uniforms;

  @fragment fn fs_main() -> @location(0) vec4<f32> {
      return vec4<f32>(u.a.x);
  }`,
});

Linux의 WebGPU

Chrome팀은 Intel 12세대 이상 GPU 지원을 시작으로 Linux용 WebGPU를 신중하게 출시하고 있으며, 더 많은 기기 (AMD, NVIDIA)로 확장할 계획입니다. 이 구현에서는 WebGPU가 Vulkan을 사용하고 나머지 Chromium은 OpenGL에 유지되는 아키텍처를 사용하여 기존의 잘 알려진 양호한 코드 경로를 실행합니다. 문제 442791440을 참고하세요.

더 빠른 writeBuffer 및 writeTexture

writeBuffer()writeTexture()가 Chrome에서 최적화되어 전송되는 데이터의 크기에 따라 이전 버전보다 최대 2배 더 나은 성능을 제공합니다. 이 변경사항은 Dawn Wire 구현의 모든 사용자에게도 영향을 미칩니다. 문제 441900745를 참고하세요.

Dawn 업데이트

Android GPU팀은 Jetpack을 사용하여 사용할 수 있는 Android용 WebGPU의 Kotlin 바인딩 첫 번째 알파 버전을 게시했습니다. androidx.webgpu 패키지를 통해 Android 개발자는 Kotlin을 사용하여 최신 GPU API에 액세스할 수 있으며 OpenGL의 기존 문제나 Vulkan의 복잡성을 우회할 수 있습니다. 이는 생태계에 흥미로운 발전입니다.

여기에서는 몇 가지 주요 사항만 다룹니다. 전체 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 내용의 목록입니다.

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