게시일: 2025년 1월 29일
추가 unorm8x4-bgra 및 1개 구성요소 정점 형식
"unorm8x4-bgra"
정점 형식과 다음과 같은 1개 구성요소 정점 형식("uint8"
, "sint8"
, "unorm8"
, "snorm8"
, "uint16"
, "sint16"
, "unorm16"
, "snorm16"
, "float16"
)이 추가되었습니다.
"unorm8x4-bgra"
정점 형식을 사용하면 동일한 셰이더를 유지하면서 BGRA로 인코딩된 정점 색상을 로드하는 것이 약간 더 편리합니다. 또한 1개 구성요소 정점 형식을 사용하면 이전에 8비트 및 16비트 데이터 유형에 필요한 것의 2배 이상이 필요했던 경우 필요한 데이터만 요청할 수 있습니다. chromestatus 항목 및 문제 376924407을 참고하세요.
정의되지 않은 값으로 알 수 없는 제한을 요청할 수 있도록 허용
WebGPU API가 발전함에 따라 취약하지 않도록 하려면 이제 GPU 기기를 요청할 때 undefined
값으로 알 수 없는 한도를 요청할 수 있습니다. 이는 다음과 같은 애플리케이션 코드에서 유용합니다. 예를 들어 someLimit
가 더 이상 존재하지 않는 경우 adapter.limits.someLimit
가 undefined
일 수 있습니다. 사양 PR 4781을 참고하세요.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice({
requiredLimits: { someLimit: adapter.limits.someLimit }, // someLimit can be undefined
});
WGSL 정렬 규칙 변경사항
이제 모든 구조체에서 @align(n)
가 RequiredAlignOf
를 나눠야 하므로 구조체 멤버에 너무 작은 정렬 값을 제공할 수 없습니다. 이 중단사항은 WGSL 언어의 사용을 간소화하고 Firefox 및 Safari와의 호환성을 개선합니다. Tint, Naga, WebKit 컴파일러 간의 차이점을 보여주는 샘플 코드는 사양 PR에서 확인할 수 있습니다.
삭제를 통한 WGSL 성능 향상
복잡한 화면 공간 반사 (SSR) 효과를 렌더링할 때 성능이 크게 저하되는 것으로 관찰되어 디스크리드 문 구현은 가능한 경우 도우미 호출로 다운그레이드하기 위해 플랫폼에서 제공하는 시맨틱을 사용합니다. 이렇게 하면 삭제를 사용하는 셰이더의 성능이 개선됩니다. 문제 372714384를 참고하세요.
외부 텍스처에 VideoFrame displaySize 사용
WebGPU 사양에 따라 VideoFrame을 가져올 때 displayWidth
및 displayHeight
크기를 GPUExternalTexture의 표시 크기로 사용해야 합니다. 하지만 표시 크기가 잘못 사용되어 GPUExternalTexture에서 textureLoad()
를 사용하려고 하면 문제가 발생했습니다. 이제 이 문제가 해결되었습니다. 문제 377574981을 참고하세요.
copyExternalImageToTexture를 사용하여 기본이 아닌 방향의 이미지 처리
copyExternalImageToTexture()
GPUQueue 메서드는 이미지 또는 캔버스의 콘텐츠를 텍스처로 복사하는 데 사용됩니다. 이제 기본이 아닌 방향의 이미지를 올바르게 처리합니다. 이전에는 소스가 imageOrientation
"from-image"
가 있는 ImageBitmap이거나 기본이 아닌 방향의 이미지인 경우 이 문제가 발생하지 않았습니다. 문제 384858956을 참고하세요.
개발자 환경 개선
adapter.limits
에 높은 값이 표시되면 놀랄 수 있지만 GPU 기기를 요청할 때 더 높은 한도를 명시적으로 요청해야 한다는 사실을 모르는 경우가 있습니다. 이렇게 하지 않으면 나중에 예상치 못하게 한도가 초과될 수 있습니다.
이를 돕기 위해 requestDevice()
를 호출할 때 requiredLimits
에 한도가 지정되지 않은 경우 더 높은 한도를 명시적으로 요청하라는 힌트가 포함된 오류 메시지가 확장되었습니다. 문제 42240683을 참고하세요.
다음 예는 크기가 기본 최대 버퍼 크기 기기 제한을 초과하는 GPU 버퍼를 만들 때 DevTools 콘솔에 로깅된 개선된 오류 메시지를 보여줍니다.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
// Create a GPU buffer with a size exceeding the default max buffer size device limit.
const size = device.limits.maxBufferSize + 1;
const buffer = device.createBuffer({ size, usage: GPUBufferUsage.MAP_READ });
device.queue.submit([]);
⚠️ Buffer size (268435457) exceeds the max buffer size limit (268435456). This adapter supports a higher maxBufferSize of 4294967296, which can be specified in requiredLimits when calling requestDevice(). Limits differ by hardware, so always check the adapter limits prior to requesting a higher limit. - While calling [Device].CreateBuffer([BufferDescriptor]).
featureLevel을 사용하여 호환성 모드 사용 설정
이제 표준화된 featureLevel
옵션을 "compatibility"
로 설정하여 실험 호환성 모드에서 GPU 어댑터를 요청할 수 있습니다. "core"
(기본값) 및 "compatibility"
문자열만 허용되는 값입니다. 다음 예시와 사양 PR 4897을 참고하세요.
// Request a GPU adapter in compatibility mode
const adapter = await navigator.gpu.requestAdapter({ featureLevel: "compatibility" });
if (adapter?.featureLevel === "compatibility") {
// Any devices created from this adapter will support only compatibility mode.
}
featureLevel
옵션은 비표준화된 compatibilityMode
옵션을 대체하고 비표준화된 featureLevel
속성은 isCompatibilityMode
속성을 대체합니다.
아직 실험 단계이므로 지금은 chrome://flags/#enable-unsafe-webgpu
에서 '안전하지 않은 WebGPU 지원' 플래그를 사용 설정하여 Chrome을 실행해야 합니다. webgpureport.org에서 사용해 보세요.
실험용 하위 그룹 기능 정리
지원 중단된 "chromium-experimental-subgroups"
및 "chromium-experimental-subgroup-uniform-control-flow"
실험용 하위 그룹 기능이 삭제되었습니다. 문제 377868468을 참고하세요.
이제 하위 그룹을 실험할 때 "subgroups"
실험용 기능만 있으면 됩니다. "subgroups-f16"
실험용 기능은 지원 중단되었으며 곧 삭제됩니다. 애플리케이션이 "shader-f16"
및 "subgroups"
기능을 모두 요청하는 경우 하위 그룹과 함께 f16 값을 사용할 수 있습니다. 문제 380244620을 참고하세요.
maxInterStageShaderComponents 한도 지원 중단
maxInterStageShaderComponents
한도는 다음과 같은 여러 요인으로 인해 지원 중단되었습니다.
maxInterStageShaderVariables
중복: 이 한도는 이미 셰이더 단계 간에 전달되는 데이터의 양을 제어하는 유사한 목적으로 사용됩니다.- 경미한 불일치: 두 한도의 계산 방법에는 약간의 차이가 있지만 이러한 차이는 미미하며
maxInterStageShaderVariables
한도 내에서 효과적으로 관리할 수 있습니다. - 간소화:
maxInterStageShaderComponents
를 삭제하면 셰이더 인터페이스가 간소화되고 개발자의 복잡성이 줄어듭니다. 미묘한 차이가 있는 두 가지 한도를 별도로 관리하는 대신 더 적절한 이름을 지정하고 포괄적인maxInterStageShaderVariables
에 집중할 수 있습니다.
Chrome 135에서 완전히 삭제하는 것이 목표입니다. 지원 중단 인텐트 및 문제 364338810을 참고하세요.
Dawn 업데이트
wgpu::Device::GetAdapterInfo(adapterInfo)
를 사용하면 wgpu::Device
에서 직접 어댑터 정보를 가져올 수 있습니다. 문제 376600838을 참고하세요.
계산 상태를 정점 및 프래그먼트 상태와 일치시키기 위해 WGPUProgrammableStageDescriptor
구조체의 이름을 WGPUComputeState
로 바꿨습니다. 문제 379059434를 참고하세요.
wgpu::VertexStepMode::VertexBufferNotUsed
enum 값이 삭제되었습니다. 사용되지 않는 정점 버퍼 레이아웃은 이제 {.stepMode=wgpu::VertexStepMode::Undefined, .attributeCount=0}
로 표현할 수 있습니다. 문제 383147017을 참고하세요.
여기에는 주요 내용 중 일부만 다룹니다. 전체 커밋 목록을 확인하세요.
WebGPU의 새로운 기능
WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.
Chrome 133
- 추가 unorm8x4-bgra 및 1개 구성요소 정점 형식
- 정의되지 않은 값으로 알 수 없는 한도를 요청할 수 있도록 허용
- WGSL 정렬 규칙 변경사항
- 삭제로 WGSL 성능 향상
- 외부 텍스처에 VideoFrame displaySize 사용하기
- copyExternalImageToTexture를 사용하여 기본이 아닌 방향의 이미지 처리
- 개발자 환경 개선
- featureLevel을 사용하여 호환성 모드 사용 설정
- 실험용 하위 그룹 기능 정리
- maxInterStageShaderComponents 한도 지원 중단
- Dawn 업데이트
Chrome 132
- 텍스처 뷰 사용
- 32비트 부동 소수점 텍스처 혼합
- GPUDevice adapterInfo 속성
- 잘못된 형식으로 캔버스 컨텍스트를 구성하면 JavaScript 오류가 발생함
- 텍스처에 대한 샘플러 필터링 제한사항
- 확장된 하위 그룹 실험
- 개발자 환경 개선
- 16비트 정규화된 텍스처 형식의 실험적 지원
- Dawn 업데이트
Chrome 131
- WGSL에서 거리 클립하기
- GPUCanvasContext getConfiguration()
- 점 및 선 원시에는 깊이 편향이 없어야 합니다.
- 하위 그룹을 위한 포용 스캔 기본 제공 함수
- 다중 그리기 간접 실험적 지원
- 셰이더 모듈 컴파일 옵션 엄격한 수학
- GPUAdapter requestAdapterInfo() 삭제
- Dawn 업데이트
Chrome 130
Chrome 129
Chrome 128
- 하위 그룹 실험
- 선 및 점에 대한 깊이 편향 설정 지원 중단
- preventDefault인 경우 포착되지 않은 오류 DevTools 경고 숨기기
- WGSL은 먼저 샘플링을 보간하고 다음 중 하나를 실행합니다.
- 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 사용하기
- 컴퓨팅 및 렌더링 패스의 타임스탬프 쿼리
- 셰이더 모듈의 기본 진입점
- display-p3를 GPUExternalTexture 색상 공간으로 지원
- 메모리 힙 정보
- Dawn 업데이트
Chrome 120
Chrome 119
Chrome 118
copyExternalImageToTexture()
에서 HTMLImageElement 및 ImageData 지원- 읽기 쓰기 저장소 텍스처 및 읽기 전용 저장소 텍스처에 대한 실험적 지원
- Dawn 업데이트
Chrome 117
- 꼭짓점 버퍼 설정 해제
- 바인드 그룹 설정 해제
- 기기 손실 시 비동기 파이프라인 생성 오류를 음소거합니다.
- SPIR-V 셰이더 모듈 생성 업데이트
- 개발자 환경 개선
- 자동 생성된 레이아웃으로 파이프라인 캐싱
- Dawn 업데이트
Chrome 116
- WebCodecs 통합
- GPUAdapter
requestDevice()
에서 반환된 분실 기기 importExternalTexture()
가 호출될 때 동영상 재생을 원활하게 유지- 사양 준수
- 개발자 환경 개선
- Dawn 업데이트