게시일: 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
- 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 실험적 지원
- 셰이더 모듈 컴파일 옵션 엄격한 수학
- 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 업데이트