게시일: 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::MapWrite을 wgpu::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
- WGSL subgroup_id 확장 프로그램
- WGSL uniform_buffer_standard_layout 확장 프로그램
- Linux의 WebGPU
- writeBuffer 및 writeTexture 속도 향상
- Dawn 업데이트
Chrome 143
Chrome 142
Chrome 141
Chrome 140
- 기기 요청이 어댑터를 사용함
- 텍스처 뷰가 사용되는 경우 텍스처를 사용하는 약식 표현
- WGSL textureSampleLevel이 1D 텍스처 지원
- bgra8unorm 읽기 전용 스토리지 텍스처 사용 지원 중단
- GPUAdapter isFallbackAdapter 속성 삭제
- Dawn 업데이트
Chrome 139
Chrome 138
- 버퍼를 바인딩 리소스로 사용하는 약식 표현
- 생성 시 매핑된 버퍼의 크기 요구사항 변경
- 최신 GPU의 아키텍처 보고
- GPUAdapter isFallbackAdapter 속성 지원 중단
- Dawn 업데이트
Chrome 137
- externalTexture 바인딩에 텍스처 뷰 사용
- 오프셋과 크기를 지정하지 않고 버퍼 복사
- 원자에 대한 포인터를 사용하는 WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 속성
- GPURequestAdapterOptions compatibilityMode 속성 삭제
- Dawn 업데이트
Chrome 136
Chrome 135
- null 바인드 그룹 레이아웃으로 파이프라인 레이아웃 만들기 허용
- 표시 영역이 렌더링 타겟 경계를 지나 확장되도록 허용
- Android에서 실험용 호환성 모드에 더 쉽게 액세스
- maxInterStageShaderComponents 한도 삭제
- Dawn 업데이트
Chrome 134
Chrome 133
- unorm8x4-bgra 및 1컴포넌트 정점 형식 추가
- 정의되지 않은 값으로 알 수 없는 한도를 요청하도록 허용
- WGSL 정렬 규칙 변경사항
- discard를 사용한 WGSL 성능 향상
- 외부 텍스처에 VideoFrame displaySize 사용
- copyExternalImageToTexture를 사용하여 기본이 아닌 방향의 이미지 처리
- 개발자 환경 개선
- featureLevel로 호환성 모드 사용 설정
- 실험적 하위 그룹 기능 정리
- maxInterStageShaderComponents 한도 지원 중단
- Dawn 업데이트
Chrome 132
- 텍스처 뷰 사용
- 32비트 부동 소수점 텍스처 혼합
- GPUDevice adapterInfo 속성
- 잘못된 형식으로 캔버스 컨텍스트를 구성하면 JavaScript 오류가 발생함
- 텍스처에 대한 필터링 샘플러 제한
- 확장된 하위 그룹 실험
- 개발자 환경 개선
- 16비트 정규화된 텍스처 형식에 대한 실험적 지원
- Dawn 업데이트
Chrome 131
- WGSL에서의 클립 거리
- GPUCanvasContext getConfiguration()
- 점 및 선 기본 요소에는 깊이 바이어스가 없어야 함
- 하위 그룹에 대한 포괄적 스캔 기본 제공 함수
- multi-draw indirect 실험적 지원
- 셰이더 모듈 컴파일 옵션 strict math
- GPUAdapter requestAdapterInfo() 삭제
- Dawn 업데이트
Chrome 130
Chrome 129
Chrome 128
- 하위 그룹 실험
- 선과 점의 깊이 바이어스 설정 지원 중단
- preventDefault인 경우 uncaptured error DevTools 경고 숨기기
- WGSL 보간 샘플링 first 및 either
- Dawn 업데이트
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
- WGSL의 DP4a 내장 함수 지원
- WGSL의 무제한 포인터 파라미터
- WGSL의 컴포지트를 역참조하기 위한 문법 슈가
- 스텐실 및 깊이 측면의 읽기 전용 상태 분리
- Dawn 업데이트
Chrome 122
Chrome 121
- Android에서 WebGPU 지원
- Windows에서 셰이더 컴파일에 FXC 대신 DXC 사용
- 컴퓨팅 및 렌더링 패스에서 타임스탬프 쿼리
- 셰이더 모듈의 기본 진입점
- GPUExternalTexture 색상 공간으로 display-p3 지원
- 메모리 힙 정보
- Dawn 업데이트
Chrome 120
Chrome 119
Chrome 118
copyExternalImageToTexture()의 HTMLImageElement 및 ImageData 지원- 읽기-쓰기 및 읽기 전용 스토리지 텍스처 실험적 지원
- Dawn 업데이트
Chrome 117
- 정점 버퍼 설정 해제
- 바인드 그룹 설정 해제
- 기기가 손실된 경우 비동기 파이프라인 생성에서 오류 무시
- SPIR-V 셰이더 모듈 생성 업데이트
- 개발자 환경 개선
- 자동으로 생성된 레이아웃으로 파이프라인 캐싱
- Dawn 업데이트
Chrome 116
- WebCodecs 통합
- GPUAdapter에서 반환된 손실된 기기
requestDevice() importExternalTexture()가 호출되는 경우 동영상 재생을 원활하게 유지- 사양 준수
- 개발자 환경 개선
- Dawn 업데이트