WebGPU의 새로운 기능 (Chrome 153~154)

François Beaufort
François Beaufort

게시일: 2026년 9월 15일

WGSL buffer_view 확장 프로그램

WGSL 언어 확장 프로그램 buffer_view을 사용하면 균일한 스토리지 또는 작업 그룹 변수의 데이터를 여러 다른 유형으로 해석할 수 있습니다. 이는 기존의 유형 펀 사용부터 변수를 여러 논리 변수로 파티셔닝하는 것까지 다양한 유틸리티를 제공합니다.

안전성과 구현 단순성을 위해 재해석된 유형은 다음 내장 함수를 사용해서만 액세스할 수 있습니다.

  • bufferView<T>()는 특정 바이트 오프셋의 메모리를 T 유형의 포인터로 해석합니다.
  • bufferArrayView<T>()는 명시적 요소 개수를 사용하여 경계가 지정된 배열 포인터를 만듭니다.
  • bufferLength()는 버퍼의 바이트 크기를 반환합니다.

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

requires buffer_view;

//  +-------------------+-----------------------------+----------------------------+
//  | Byte 0 .. 3       | Byte 4 .. (4 + N - 1)       | Byte (4 + N) .. End        |
//  +-------------------+-----------------------------+----------------------------+
//  | indices_size (u32)| indices (array<u32, count>) | vertices (array<f32>)      |
//  +-------------------+-----------------------------+----------------------------+
@group(0) @binding(0) var<storage> indices_and_vertices : buffer;

fn unpack_and_process_geometry() {
  let indices_size = *bufferView<u32>(&indices_and_vertices, 0);

  let indices = bufferArrayView<array<u32>>(&indices_and_vertices, 4, indices_size);
  let vertices = bufferView<array<f32>>(&indices_and_vertices, indices_size + 4);
  ...
}

자세한 내용은 버퍼 뷰 제안서를 참고하고 와이어프레임 WebGPU 샘플을 사용해 보세요.

WGSL swizzle_assignment 확장 프로그램

가장 많이 요청된 커뮤니티 기능 중 하나에 대한 응답으로 WGSL 확장 프로그램 swizzle_assignment을 사용하면 벡터 스위즐에 직접 쓸 수 있으므로 단일 문에서 여러 구성요소를 업데이트할 수 있습니다. 상용구를 대폭 줄이고 셰이더 가독성을 개선하는 동시에 WGSL을 다른 셰이딩 언어와 일치시킵니다.

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

if (!navigator.gpu.wgslLanguageFeatures.has("swizzle_assignment")) {
  throw new Error(`WGSL swizzle assignment is not available`);
}

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

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

  @vertex
  fn main(@builtin(vertex_index) vertex_index: u32) -> @builtin(position) vec4f {
    var position = vec4f(0.0, 0.0, 0.0, 1.0);
    position.xy = vec2f(10.0, 20.0); // Swizzle assignment

    return position;
  }`,
});

WGSL 확장 프로그램 업데이트

texture-formats-tier1 언어 확장 프로그램은 WGSL 코드에서 지원되지만 이전에는 JavaScript에서 navigator.gpu.wgslLanguageFeatures (texture_formats_tier1)에 올바르게 매핑되지 않았습니다. 이 매핑 문제는 현재 해결되었습니다. Chromium CL 8159562를 참고하세요.

이제 WGSL에서 subgroup_size_control이 사용 설정되면 subgroups 언어 확장 프로그램이 자동으로 사용 설정됩니다. dawn:545285663 문제를 참고하세요.

Dawn 업데이트

새로운 wgpu::FeatureName::BufferMapWriteExtendedUsages 실험적 기능을 사용하면 wgpu::BufferUsage::MapWritewgpu::BufferUsage::MapRead을 제외한 다른 wgpu::BufferUsage와 결합하여 GPU에서도 사용할 수 있는 매핑 가능한 버퍼에 직접 쓸 수 있는 버퍼를 만들어 스테이징 버퍼와 Vulkan 및 D3D12 백엔드의 추가 복사본을 없앨 수 있습니다. 자세한 내용은 버퍼 맵 쓰기 확장 사용dawn:386255678 문제를 참고하세요.

이제 새 webgpu_upstream_cpp_headers를 사용하여 Dawn의 맛에 묶이는 대신 webgpu.h 구현 위에 webgpu_cpp.h 바인딩을 사용할 수 있습니다. webgpu-headers 문제 #596을 참고하세요.

이제 Dawn에는 macOS 13.0 이상이 필요합니다. Dawn CL 334415를 참고하세요.

여기에서는 몇 가지 주요 사항만 다룹니다. 자세한 내용은 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

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

Chrome 153~154

Chrome 151~152

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