copyExternalImageToTexture()의 HTMLImageElement 및 ImageData 지원
GPUQueue
의 copyExternalImageToTexture()
메서드를 사용하면 소스 이미지, 동영상 또는 캔버스에서 가져온 스냅샷을 지정된 GPUTexture
에 복사할 수 있습니다. 이제 HTMLImageElement
및 ImageData
객체를 소스로 전달할 수 있습니다. 다음 예시와 chromium:1471372 문제를 참고하세요.
// Fetch and decode image.
const source = document.createElement("img");
source.src = "my-image.png";
await source.decode();
// Create destination texture.
const size = [source.width, source.height];
const texture = myDevice.createTexture({
size,
format: "rgba8unorm",
usage:
GPUTextureUsage.COPY_DST |
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING,
});
// Copies a snapshot taken from the source image into a texture.
myDevice.queue.copyExternalImageToTexture({ source }, { texture }, size);
읽기-쓰기 및 읽기 전용 저장소 텍스처 실험적 지원
스토리지 텍스처 바인딩 유형을 사용하면 샘플링 없이 텍스처를 읽고 셰이더의 임의 위치에 저장할 수 있습니다. 이제 "chromium-experimental-read-write-storage-texture"
기능을 GPUAdapter
에서 사용할 수 있는 경우 이 기능으로 GPUDevice
를 요청하고 바인드 그룹 레이아웃을 만들 때 GPUStorageTexture
액세스를 "read-write"
또는 "read-only"
로 설정할 수 있습니다. 이전에는 "write-only"
로 제한되었습니다.
이를 활용하려면 WGSL 코드에서 enable chromium_experimental_read_write_storage_texture
을 사용하여 이 확장 프로그램을 명시적으로 사용 설정해야 합니다. 사용 설정하면 저장소 텍스처에 read_write
및 read
액세스 한정자를 사용할 수 있고, textureLoad()
및 textureStore()
내장 함수가 그에 따라 작동하며, 워크그룹에서 텍스처 메모리 액세스를 동기화하는 데 사용할 수 있는 새로운 textureBarrier()
내장 함수가 제공됩니다. 다음 예시와 issue dawn:1972를 참고하세요.
이 기능은 아직 실험 단계이며 변경될 수 있습니다. 표준화되는 동안 --enable-dawn-features=allow_unsafe_apis
플래그를 사용하여 Chrome을 실행하여 사용할 수 있도록 합니다.
const feature = "chromium-experimental-read-write-storage-texture";
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has(feature)) {
throw new Error("Read-write storage texture support is not available");
}
// Explicitly request read-write storage texture support.
const device = await adapter.requestDevice({
requiredFeatures: [feature],
});
const bindGroupLayout = device.createBindGroupLayout({
entries: [{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
storageTexture: {
access: "read-write", // <-- New!
format: "r32uint",
},
}],
});
const shaderModule = device.createShaderModule({ code: `
enable chromium_experimental_read_write_storage_texture;
@group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;
@compute @workgroup_size(1, 1)
fn main(@builtin(local_invocation_id) local_id: vec3u) {
var data = textureLoad(tex, vec2i(local_id.xy));
data.x *= 2;
textureStore(tex, vec2i(local_id.xy), data);
}`,
});
// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.
새벽 업데이트
webgpu.h C API에서 일관성을 위해 다음 필드의 이름이 변경되었습니다. requiredFeaturesCount
이 requiredFeatureCount
로, pipelineStatisticsCount
이 pipelineStatisticCount
로, colorFormatsCount
이 colorFormatCount
로 변경되었습니다. 문제 dawn:146040을 참고하세요.
새로운 DawnInfo
프로그램 (vulkaninfo와 유사)을 사용하면 전환, 어댑터, 어댑터 기능, 어댑터 제한을 나열할 수 있습니다. dawn samples
을 빌드할 때 사용할 수 있습니다. 아래는 간결성을 위해 크게 잘린 출력입니다. change dawn:149020을 참고하세요.
./out/Debug/DawnInfo
Toggles
=======
Name: allow_unsafe_apis
Suppresses validation errors on API entry points or parameter combinations
that aren't considered secure yet.
http://crbug.com/1138528
[…]
Adapter
=======
VendorID: 0x106B
Vendor: apple
Architecture: common-3
DeviceID: 0x0000
Name: Apple M1 Pro
Driver description: Metal driver on macOS Version 13.5.1 (Build 22G90)
Adapter Type: discrete GPU
Backend Type: Metal
Power: <undefined>
Features
========
* depth_clip_control
Disable depth clipping of primitives to the clip volume
https://bugs.chromium.org/p/dawn/issues/detail?id=1178
[…]
Adapter Limits
==============
maxTextureDimension1D: 16,384
maxTextureDimension2D: 16,384
[…]
여기에서는 몇 가지 주요 사항만 다룹니다. 전체 커밋 목록을 확인하세요.
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()
이 호출되는 경우 동영상 재생을 원활하게 유지- 사양 준수
- 개발자 환경 개선
- 새벽 업데이트