캔버스 톤 매핑 모드를 사용한 HDR 지원
웹 개발자는 HDR 콘텐츠를 제공할 수 있는 옵션이 제한되어 있으며 주로 <img>
및 <video>
요소를 사용합니다. 하지만 <canvas>
요소는 SDR로 제한됩니다. 캔버스 내에서 동적 HDR 콘텐츠를 생성하려면 콘텐츠를 HDR 이미지로 인코딩한 후 표시해야 합니다 (예는 이 데모 참고).
이제 WebGPU 캔버스 구성의 새로운 GPUCanvasToneMappingMode
매개변수를 사용하면 WebGPU가 흰색 (#FFFFFF
)보다 밝은 색상을 그릴 수 있습니다. 이는 다음 모드를 통해 이루어집니다.
"standard"
: 기본 동작은 콘텐츠를 화면의 SDR 범위로 제한합니다. 이 모드는 화면의 색상 공간에 있는 모든 색상 값을[0, 1]
간격으로 클램핑하여 달성됩니다."extended"
: 화면의 전체 HDR 범위를 잠금 해제합니다. 이 모드는 화면의[0, 1]
범위에서"standard"
와 일치합니다. 클램핑 또는 프로젝션은 화면의 확장된 동적 범위에 적용되지만[0, 1]
에는 적용되지 않습니다.
다음 코드 스니펫은 하이 다이내믹 레인지의 캔버스를 구성하는 방법을 보여줍니다.
const adapter = await navigator.gpu.requestAdapter();
const device = await adapter.requestDevice();
const canvas = document.querySelector("canvas");
const context = canvas.getContext("webgpu");
context.configure({
device,
format: "rgba16float",
toneMapping: { mode: "extended" },
});
파티클 (HDR) 샘플과 WebGPU HDR 예를 확인하여 WebGPU로 HDR을 살펴보고 chromestatus 항목을 참고하세요.

확장된 하위 그룹 지원
하위 그룹 실험이 발표된 후 하위 그룹 내장 함수를 이제 컴퓨트 셰이더와 프래그먼트 셰이더 모두에서 사용할 수 있습니다. 더 이상 컴퓨팅 셰이더로만 제한되지 않습니다. 문제 354738715를 참고하세요.
subgroup_size
내장 값은 현재 프래그먼트 셰이더에서 버그가 있습니다. 지금은 피하세요.
또한 다음 하위 그룹 내장 함수가 추가되었습니다.
subgroupAdd(value)
: 하위 그룹에서 활성 호출value
의 합계를 반환합니다.subgroupExclusiveAdd(value)
: 하위 그룹에서 활성 호출value
의 독점 스캔 합계를 반환합니다.subgroupMul(value)
: 하위 그룹에서 활성 호출value
의 곱을 반환합니다.subgroupExclusiveMul(value)
: 하위 그룹에서 활성 호출value
의 독점 스캔 곱셈을 반환합니다.subgroupAnd(value)
: 하위 그룹에서 활성 호출value
의 모든 바이너리 AND를 반환합니다.subgroupOr(value)
: 하위 그룹에서 활성 호출value
의 모든 바이너리 OR을 반환합니다.subgroupXor(value)
: 하위 그룹의 모든 활성 호출value
의 바이너리 XOR을 반환합니다.subgroupMin(value)
: 하위 그룹에서 활성 상태인 모든 호출value
의 최소값을 반환합니다.subgroupMax(value)
: 하위 그룹에서 활성 호출value
의 최대값을 반환합니다.subgroupAll(value)
: 하위 그룹의 모든 활성 호출에 대해value
이 true인 경우 true를 반환합니다.subgroupAny(value)
: 하위 그룹의 활성 호출에 대해value
이 true이면 true를 반환합니다.subgroupElect()
: 이 호출이 하위 그룹의 활성 호출 중 가장 낮은subgroup_invocation_id
을 갖는 경우 true를 반환합니다.subgroupBroadcastFirst(value)
: 하위 그룹에서subgroup_invocation_id
이 가장 낮은 활성 호출에서value
을 다른 모든 활성 호출에 브로드캐스트합니다.subgroupShuffle(value, id)
:subgroup_invocation_id
이id
와 일치하는 활성 호출에서value
을 반환합니다.subgroupShuffleXor(value, mask)
:subgroup_invocation_id
이subgroup_invocation_id ^ mask
와 일치하는 활성 호출에서value
을 반환합니다.mask
은 동적으로 균일해야 합니다.subgroupShuffleUp(value, delta)
:subgroup_invocation_id
이subgroup_invocation_id - delta
와 일치하는 활성 호출에서value
을 반환합니다.subgroupShuffleDown(value, delta)
:subgroup_invocation_id
이subgroup_invocation_id + delta
와 일치하는 활성 호출에서value
을 반환합니다.quadBroadcast(value, id)
: ID가id
인 쿼드 호출에서value
을 브로드캐스트합니다.id
은 상수 표현식이어야 합니다.quadSwapX(value)
: X 방향의 쿼드에서 호출 간에value
을 바꿉니다.quadSwapY(value)
: Y 방향의 쿼드에서 호출 간에value
을 스왑합니다.quadSwapDiagonal(value)
: 쿼드에서 대각선으로 호출 간에value
을 바꿉니다.
새벽 업데이트
이제 wgpu::PrimitiveState
구조체에 깊이 클립 제어 설정이 직접 포함되어 별도의 wgpu::PrimitiveDepthClipControl
구조체가 필요하지 않습니다. 자세한 내용은 다음 코드 스니펫과 webgpu-headers PR을 참고하세요.
// Before
wgpu::PrimitiveState primitive = {};
wgpu::PrimitiveDepthClipControl depthClipControl;
depthClipControl.unclippedDepth = true;
primitive.nextInChain = &depthClipControl;
// Now
wgpu::PrimitiveState primitive = {};
primitive.unclippedDepth = true;
여기에서는 몇 가지 주요 사항만 다룹니다. 전체 커밋 목록을 확인하세요.
WebGPU의 새로운 기능
WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.
Chrome 140
- 기기 요청이 어댑터를 사용함
- 텍스처 뷰가 사용되는 경우 텍스처를 사용하는 약어
- WGSL textureSampleLevel이 1D 텍스처 지원
- bgra8unorm 읽기 전용 저장소 텍스처 사용 지원 중단
- GPUAdapter isFallbackAdapter 속성 삭제
- 새벽 업데이트
Chrome 139
Chrome 138
- 버퍼를 바인딩 리소스로 사용하는 약식
- 생성 시 매핑된 버퍼의 크기 요구사항 변경
- 최근 GPU의 아키텍처 보고서
- GPUAdapter isFallbackAdapter 속성 지원 중단
- 새벽 업데이트
Chrome 137
- externalTexture 바인딩에 텍스처 뷰 사용
- 오프셋과 크기를 지정하지 않고 버퍼 복사
- 원자에 대한 포인터를 사용하는 WGSL workgroupUniformLoad
- GPUAdapterInfo powerPreference 속성
- GPURequestAdapterOptions compatibilityMode 속성 삭제
- 새벽 업데이트
Chrome 136
Chrome 135
- null 바인드 그룹 레이아웃으로 파이프라인 레이아웃 생성 허용
- 뷰포트가 렌더링 타겟 경계를 지나 확장되도록 허용
- Android에서 실험용 호환성 모드에 더 쉽게 액세스
- maxInterStageShaderComponents 한도 삭제
- 새벽 업데이트
Chrome 134
Chrome 133
- 추가 unorm8x4-bgra 및 1컴포넌트 꼭짓점 형식
- 정의되지 않은 값으로 알 수 없는 한도를 요청하도록 허용
- WGSL 정렬 규칙 변경사항
- discard를 사용한 WGSL 성능 향상
- 외부 텍스처에 VideoFrame displaySize 사용
- copyExternalImageToTexture를 사용하여 기본이 아닌 방향의 이미지 처리
- 개발자 환경 개선
- featureLevel로 호환성 모드 사용 설정
- 실험용 하위 그룹 기능 정리
- maxInterStageShaderComponents 한도 지원 중단
- 새벽 업데이트
Chrome 132
- 텍스처 뷰 사용량
- 32비트 부동 소수점 텍스처 혼합
- GPUDevice adapterInfo 속성
- 잘못된 형식으로 캔버스 컨텍스트를 구성하면 JavaScript 오류가 발생함
- 텍스처의 샘플러 제한 필터링
- 확장된 하위 그룹 실험
- 개발자 환경 개선
- 16비트 정규화된 텍스처 형식 실험적 지원
- 새벽 업데이트
Chrome 131
- WGSL에서 거리 클리핑
- GPUCanvasContext getConfiguration()
- 점 및 선 기본 요소에는 깊이 바이어스가 없어야 합니다
- 하위 그룹의 포괄적 검색 기본 제공 함수
- multi-draw indirect 실험적 지원
- 셰이더 모듈 컴파일 옵션 strict math
- GPUAdapter requestAdapterInfo() 삭제
- 새벽 업데이트
Chrome 130
Chrome 129
Chrome 128
- 하위 그룹 실험
- 선과 점의 깊이 편향 설정 지원 중단
- preventDefault인 경우 포착되지 않은 오류 DevTools 경고 숨기기
- WGSL 보간 샘플링이 먼저 실행되고 다음 중 하나가 실행됩니다.
- 새벽 업데이트
Chrome 127
Chrome 126
Chrome 125
Chrome 124
Chrome 123
Chrome 122
Chrome 121
- Android에서 WebGPU 지원
- Windows에서 셰이더 컴파일에 FXC 대신 DXC 사용
- 컴퓨팅 및 렌더링 패스의 타임스탬프 쿼리
- 셰이더 모듈의 기본 진입점
- GPUExternalTexture 색상 공간으로 display-p3 지원
- 메모리 힙 정보
- 새벽 업데이트
Chrome 120
Chrome 119
Chrome 118
Chrome 117
- 꼭짓점 버퍼 설정 해제
- 바인드 그룹 설정 해제
- 기기가 손실된 경우 비동기 파이프라인 생성에서 오류 무시
- SPIR-V 셰이더 모듈 생성 업데이트
- 개발자 환경 개선
- 자동으로 생성된 레이아웃으로 파이프라인 캐싱
- 새벽 업데이트
Chrome 116
- WebCodecs 통합
- GPUAdapter
requestDevice()
에서 반환된 손실된 기기 importExternalTexture()
이 호출되는 경우 동영상 재생을 원활하게 유지- 사양 준수
- 개발자 환경 개선
- 새벽 업데이트