게시일: 2025년 1월 8일
텍스처 뷰 사용량
GPU 텍스처 뷰는 현재 소스 GPU 텍스처에서 모든 사용 플래그를 상속합니다. 일부 보기 형식은 특정 용도와 호환되지 않으므로 문제가 될 수 있습니다. 이 문제를 해결하려면 선택적 usage
구성원으로 createView()
를 호출하면 선택한 뷰 형식과 호환되는 소스 텍스처의 사용 플래그 하위 집합을 명시적으로 지정할 수 있습니다.
이 변경사항을 통해 사전 유효성 검사를 실행하고 뷰가 사용되는 방식을 더 세부적으로 제어할 수 있습니다. 또한 사용 플래그가 뷰 생성의 일반적인 매개변수인 다른 그래픽 API와도 일치하여 최적화 기회를 제공합니다.
다음 스니펫, chromestatus 항목, 문제 363903526을 참고하세요.
const texture = myDevice.createTexture({
size: [4, 4],
format: "rgba8unorm",
usage:
GPUTextureUsage.RENDER_ATTACHMENT |
GPUTextureUsage.TEXTURE_BINDING |
GPUTextureUsage.STORAGE_BINDING,
viewFormats: ["rgba8unorm-srgb"],
});
const view = texture.createView({
format: 'rgba8unorm-srgb',
usage: GPUTextureUsage.RENDER_ATTACHMENT, // Restrict allowed usage.
});
32비트 부동 소수점 텍스처 블렌딩
32비트 부동 소수점 텍스처는 HDR 렌더링이 다양한 색상 값을 보존하고 색상 밴딩 아티팩트를 방지하는 데 필수적입니다. 과학 시각화의 예를 들 수 있습니다.
새로운 "float32-blendable"
GPU 기능을 사용하면 "r32float"
, "rg32float"
, "rgba32float"
형식의 GPU 텍스처를 혼합할 수 있습니다. 이제 이 기능이 있는 GPU 기기를 요청할 때 float32 형식의 애착이 있는 블렌딩을 사용하는 렌더링 파이프라인을 만들 수 있습니다.
다음 스니펫, chromestatus 항목, 문제 369649348을 참고하세요.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("float32-blendable")) {
throw new Error("32-bit float textures blending support is not available");
}
// Explicitly request 32-bit float textures blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["float32-blendable"],
});
// ... Creation of shader modules is omitted for readability.
// Create a render pipeline that uses blending for the rgba32float format.
device.createRenderPipeline({
vertex: { module: myVertexShaderModule },
fragment: {
module: myFragmentShaderModule,
targets: [
{
format: "rgba32float",
blend: { color: {}, alpha: {} },
},
],
},
layout: "auto",
});
// Create the GPU texture with rgba32float format and
// send the appropriate commands to the GPU...
GPUDevice adapterInfo
속성
GPU 아키텍처를 기반으로 해결 방법을 최적화하거나 구현해야 할 수 있으므로 사용자 제공 GPUDevice
객체를 사용하는 라이브러리는 실제 GPU에 대한 정보에 액세스하는 것이 중요합니다. GPUAdapter
객체를 통해 이 정보에 액세스할 수는 있지만 GPUDevice
만으로는 이 정보를 가져오는 직접적인 방법이 없습니다. 이 경우 사용자가 GPUDevice
와 함께 추가 정보를 제공해야 할 수 있으므로 불편할 수 있습니다.
이 문제를 해결하기 위해 이제 GPUAdapterInfo
이 GPUDevice
adapterInfo
속성을 통해 노출됩니다. 이는 기존 GPUAdapter
info
속성과 유사합니다.
다음 스니펫, chromestatus 항목, 문제 376600838을 참고하세요.
function optimizeForGpuDevice(device) {
if (device.adapterInfo.vendor === "amd") {
// Use AMD-specific optimizations.
} else if (device.adapterInfo.architecture.includes("turing")) {
// Optimize for NVIDIA Turing architecture.
}
}
잘못된 형식으로 캔버스 컨텍스트를 구성하면 JavaScript 오류가 발생함
이전에는 GPU 캔버스 컨텍스트의 configure()
메서드에서 잘못된 텍스처 형식을 사용하면 GPU 유효성 검사 오류가 발생했습니다. JavaScript TypeError
를 발생시키도록 변경되었습니다. 이렇게 하면 GPU 캔버스 컨텍스트가 잘못 구성되어 있더라도 getCurrentTexture()
가 유효한 GPU 텍스처를 반환하는 시나리오를 방지할 수 있습니다. 자세한 내용은 문제 372837859를 참고하세요.
텍스처에 대한 필터링 샘플러 제한사항
이전에는 필터링 샘플과 함께 "sint"
, "uint"
, 'depth"
' 형식 텍스처를 사용할 수 있었습니다. 이제 필터링 샘플러와 함께 "sint"
또는 "uint"
형식 텍스처를 사용하는 것이 올바르게 허용되지 않습니다. 필터링 샘플러와 함께 depth"
텍스처를 사용하면 현재 경고가 표시되지만 향후는 허용되지 않습니다. 문제 376497143을 참고하세요.
이러한 제한사항은 필터링되지 않는 샘플러와 함께 깊이 텍스처를 사용하려면 바인딩 그룹 레이아웃을 수동으로 만들어야 함을 의미합니다. '자동' 생성된 바인딩 그룹 레이아웃이 아직 이 조합을 지원하지 않기 때문입니다. 사양 문제 4952에는 향후 이 제한사항을 해결하기 위해 고려 중인 제안서가 포함되어 있습니다.
하위 그룹 실험 확장
처음에는 Chrome 131에서 종료되도록 설정된 하위 그룹 실험이 Chrome 133으로 연장되어 2025년 4월 16일에 종료됩니다. 첫 번째 출처 무료 체험판은 성능에 중점을 두었지만 중요한 이식성 보호 조치가 없었습니다. 이제 이러한 보호 조치가 추가되어 기존 코드에 오류가 발생할 수 있습니다.
개발자 환경 개선
이제 Windows에서 requestAdapter()
와 함께 powerPreference
옵션을 사용하면 DevTools에 경고가 표시됩니다. Chrome에서 두 개의 서로 다른 GPU를 사용하고 그 결과를 합성하는 방법을 알게 되면 이 경고가 삭제됩니다. 문제 369219127을 참고하세요.
이제 너무 큰 GPU 버퍼를 만들 때 오류 메시지에 GPU 버퍼의 크기가 표시됩니다. 문제 374167798을 참고하세요.
16비트 정규화된 텍스처 형식의 실험적 지원
16비트 부호화 정규화 텍스처 형식과 부호화되지 않은 정규화 텍스처 형식은 표준화에 관해 논의되는 동안 "chromium-experimental-snorm16-texture-formats"
및 "chromium-experimental-unorm16-texture-formats"
GPU 기능 뒤에서 각각 실험적으로 사용할 수 있습니다.
이러한 기능은 COPY_SRC
, COPY_DST
, TEXTURE_BINDING
, RENDER_ATTACHMENT
사용, 멀티샘플링, 해결 기능이 있는 16비트 정규화된 텍스처 형식을 지원합니다. 추가 형식은 "r16unorm"
, "rg16unorm"
, "rgba16unorm"
, "r16snorm"
, "rg16snorm"
, "rgba16snorm"
입니다.
이러한 실험용 기능이 표준화될 때까지 chrome://flags/#enable-unsafe-webgpu
에서 '안전하지 않은 WebGPU 지원' 플래그를 사용 설정하여 Chrome에서 사용할 수 있도록 합니다.
다음 스니펫과 문제 374790898을 참고하세요.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("chromium-experimental-snorm16-texture-formats")) {
throw new Error("16-bit signed normalized formats support is not available");
}
// Explicitly request 16-bit signed normalized formats support.
const device = await adapter.requestDevice({
requiredFeatures: ["chromium-experimental-snorm16-texture-formats"],
});
// Create a texture with the rgba16snorm format which consists of four
// components, each of which is a 16-bit, normalized, signed integer value.
const texture = device.createTexture({
size: [4, 4],
format: "rgba16snorm",
usage: GPUTextureUsage.RENDER_ATTACHMENT | GPUTextureUsage.TEXTURE_BINDING,
});
// Send the appropriate commands to the GPU...
Dawn 업데이트
wgpu::Adapter
및 wgpu::Device
의 EnumerateFeatures(FeatureName * features)
메서드를 지원 중단하고 GetFeatures(SupportedFeatures * features)
를 사용하도록 했습니다. 문제 368672123을 참고하세요.
webgpu.h C API는 모든 char const *
를 UTF-8 인코딩된 문자열에 대한 뷰를 정의하는 WGPUStringView
구조로 변경했습니다. 길이와 결합된 문자열 데이터의 포인터 역할을 합니다. 이렇게 하면 문자열을 복사하지 않고도 문자열의 일부를 사용할 수 있습니다. 문제 42241188을 참고하세요.
여기에는 주요 내용 중 일부만 다룹니다. 전체 커밋 목록을 확인하세요.
WebGPU의 새로운 기능
WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.
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 업데이트