이중 소스 혼합
두 개의 프래그먼트 셰이더 출력을 단일 프레임버퍼로 결합하는 것을 이중 소스 혼합이라고 합니다. 이 기법은 Porter-Duff 블렌딩 모드를 기반으로 하는 애플리케이션과 같이 복잡한 블렌딩 작업이 필요한 애플리케이션에 특히 유용합니다. 후속 렌더링 패스를 단일 렌더링 패스로 대체하면 이중 소스 혼합으로 성능과 유연성을 향상할 수 있습니다.
새로운 "dual-source-blending"
WebGPU 기능을 사용하면 @location(0)
에서 WGSL @blend_src
속성을 사용하여 혼합 소스 색인과 다음 혼합 계수인 "src1"
, "one-minus-src1"
, "src1-alpha"
, "one-minus-src1-alpha"
를 나타낼 수 있습니다. 다음 스니펫, chromestatus 항목, 문제 341973423을 참고하세요.
const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("dual-source-blending")) {
throw new Error("Dual source blending support is not available");
}
// Explicitly request dual source blending support.
const device = await adapter.requestDevice({
requiredFeatures: ["dual-source-blending"],
});
const code = `
enable dual_source_blending;
struct FragOut {
@location(0) @blend_src(0) color : vec4f,
@location(0) @blend_src(1) blend : vec4f,
}
@fragment fn main() -> FragOut {
var output : FragOut;
output.color = vec4f(1.0, 1.0, 1.0, 1.0);
output.blend = vec4f(0.5, 0.5, 0.5, 0.5);
return output;
}
`;
const shaderModule = device.createShaderModule({ code });
// Create a render pipeline with this shader module
// and run the shader on the GPU...
Metal의 셰이더 컴파일 시간 개선
Chrome팀은 메탈 백엔드로 WebGPU를 지원하는 기기를 위한 중간 표현 (IR)을 도입하여 WebGPU 셰이더 언어 컴파일러인 Tint를 개선하고 있습니다. Tint의 추상 문법 트리 (AST)와 Metal 백엔드 작성기 사이에 위치한 이 IR은 컴파일러를 더 효율적이고 유지보수 가능하게 만들어 궁극적으로 개발자와 사용자 모두에게 도움이 됩니다. 초기 테스트에 따르면 새 버전의 Tint는 Unity의 WGSL 셰이더를 MSL로 변환할 때 최대 10배 더 빠릅니다.
이러한 개선사항은 이미 Android 및 ChromeOS에서 액세스할 수 있으며 Metal 백엔드로 WebGPU를 지원하는 macOS 기기로 점진적으로 확장되고 있습니다. 문제 42251016을 참고하세요.
GPUAdapter requestAdapterInfo() 지원 중단
개발자가 이미 GPUAdapter info
속성을 사용하여 GPUAdapterInfo를 동기식으로 가져올 수 있으므로 GPUAdapter requestAdapterInfo()
비동기 메서드는 중복됩니다. 따라서 비표준 GPUAdapter requestAdapterInfo()
메서드는 이제 지원 중단되었습니다. 지원 중단 인텐트를 참고하세요.
Dawn 업데이트
webgpu.h C API는 확장자 구조체에 관한 몇 가지 이름 지정 규칙을 정의했습니다. 다음 이름 변경사항 및 문제 42241174를 참고하세요.
광고 확장 WGPURenderPassDescriptor 개
|
|
WGPURenderPassDescriptorMaxDrawCount ->
|
WGPURenderPassMaxDrawCount
|
광고 확장 WGPUShaderModuleDescriptor 개
|
|
WGPUShaderModuleSPIRVDescriptor ->
|
WGPUShaderSourceSPIRV
|
WGPUShaderModuleWGSLDescriptor ->
|
WGPUShaderSourceWGSL
|
광고 확장 WGPUSurfaceDescriptor 개
|
|
WGPUSurfaceDescriptorFromMetalLayer ->
|
WGPUSurfaceSourceMetalLayer
|
WGPUSurfaceDescriptorFromWindowsHWND ->
|
WGPUSurfaceSourceWindowsHWND
|
WGPUSurfaceDescriptorFromXlibWindow ->
|
WGPUSurfaceSourceXlibWindow
|
WGPUSurfaceDescriptorFromWaylandSurface ->
|
WGPUSurfaceSourceWaylandSurface
|
WGPUSurfaceDescriptorFromAndroidNativeWindow ->
|
WGPUSurfaceSourceAndroidNativeWindow
|
WGPUSurfaceDescriptorFromXcbWindow ->
|
WGPUSurfaceSourceXCBWindow
|
WGPUSurfaceDescriptorFromCanvasHTMLSelector ->
|
WGPUSurfaceSourceCanvasHTMLSelector_Emscripten
|
WGPUDepthStencilState
의 depthWriteEnabled
속성 유형이 불리언에서 WGPUOptionalBool
로 전환되어 JavaScript API와 마찬가지로 가능한 세 가지 상태 (true, false, undefined)를 더 잘 반영합니다. 자세한 내용은 다음 코드 스니펫과 webgpu-headers PR을 참고하세요.
wgpu::DepthStencilState depthStencilState = {};
depthStencilState.depthWriteEnabled = wgpu::OptionalBool::True; // Undefined by default
여기에는 주요 내용 중 일부만 다룹니다. 전체 커밋 목록을 확인하세요.
WebGPU의 새로운 기능
WebGPU의 새로운 기능 시리즈에서 다룬 모든 항목의 목록입니다.
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 업데이트