WebGPU의 새로운 기능 (Chrome 142)

François Beaufort
François Beaufort

게시일: 2025년 10월 22일

텍스처 형식 지원 기능 확장

새로운 'texture-formats-tier1' GPU 기능을 사용하면 개발자가 WebGPU의 낮은 기능에 맞게 다시 작성하지 않고도 기존 콘텐츠를 웹으로 포팅할 수 있습니다. 렌더링 첨부 파일, 혼합 가능, 멀티샘플링 기능, "read-only" 또는 "write-only" 저장소 텍스처 액세스를 지원하는 새로운 "r16unorm", "r16snorm", "rg16unorm", "rg16snorm", "rgba16unorm", "rgba16snorm" 텍스처 형식을 지원합니다. 렌더링 첨부 파일, 혼합 가능, 멀티샘플링 및 해결 기능이 있는 기존 "r8snorm", "rg8snorm", "rgba8snorm" 텍스처 형식도 허용합니다. "read-only" 또는 "write-only" 저장소 텍스처 액세스를 사용하면 더 많은 텍스처 형식을 사용할 수도 있습니다.

새로운 'texture-formats-tier2' GPU 기능을 사용하면 특정 형식의 "read-write" 저장소 텍스처 액세스가 가능해지며, 이는 Unreal Engine을 웹으로 포팅하는 등의 프로젝트에 중요합니다. 기기 생성 시 "texture-formats-tier2"를 사용 설정하면 "texture-formats-tier1"이 자동으로 사용 설정됩니다.

다음 스니펫과 chromestatus 항목을 참고하세요.

const adapter = await navigator.gpu.requestAdapter();

const requiredFeatures = [];
if (adapter.features.has("texture-format-tier1")) {
  requiredFeatures.push("texture-format-tier1");
}
if (adapter.features.has("texture-format-tier2")) {
  requiredFeatures.push("texture-format-tier2");
}
const device = await adapter.requestDevice({ requiredFeatures });

// Later on, when dealing with "r8unorm" texture formats for example...
if (device.features.has("texture-format-tier2")) {
  // Use "read-write" storage texture access...
} else if (device.features.has("texture-format-tier1")) {
  // Use "read-only" or "write-only" storage texture access...
} else {
  // Fallback: Use another texture format...
}

작업을 진행해 주신 Intel 관계자 여러분께 진심으로 감사드립니다.

WGSL의 기본 요소 색인

primitive_index는 프래그먼트 셰이더에서 처리 중인 현재 기본 요소 (예: 점, 선, 삼각형)를 고유하게 식별하는 내장 WGSL 값입니다. 0에서 시작하여 각 기본 요소가 처리된 후 1씩 증가하고 그려진 각 인스턴스 사이에서 0으로 재설정됩니다.

"primitive-index" 기능을 GPUAdapter에서 사용할 수 있는 경우 이 기능이 있는 GPUDevice를 요청하여 WGSL에서 기본 인덱스 지원을 받고 enable primitive_index;를 사용하여 WGSL 코드에서 이 확장 프로그램을 명시적으로 사용 설정합니다. 사용 설정되면 프래그먼트 셰이더에서 primitive_index 내장 정수 값을 사용하여 기본 요소별 데이터에 액세스하거나 렌더링되는 각 개별 기하학적 모양에 따라 달라지는 로직을 실행합니다.

다음 코드 스니펫은 두 번째 기본 요소를 빨간색으로, 다른 모든 기본 요소를 파란색으로 렌더링하는 프래그먼트 셰이더를 보여줍니다.

const adapter = await navigator.gpu.requestAdapter();
if (!adapter.features.has("primitive-index")) {
  throw new Error("Primitive index support is not available");
}
// Explicitly request primitive index support.
const device = await adapter.requestDevice({
  requiredFeatures: ["primitive-index"],
});

const fragmentShaderModule = device.createShaderModule({ code: `
  enable primitive_index;

  @fragment
  fn main(@builtin(primitive_index) i : u32) -> @location(0) vec4f {
    if (i == 1) {
      return vec4f(1, 0, 0, 1);
    }
    return vec4f(0, 1, 0, 1);
  }`,
});
// Send the appropriate commands to the GPU...

기본 요소 선택 샘플을 확인하여 자세히 알아보고 chromestatus 항목을 참고하세요.

3D 주전자 모델 삼각형은 기본 색인 값을 기반으로 색상이 지정됩니다.
'원시 색인' 모드의 원시 선택 샘플

Dawn 업데이트

빌드할 모놀리식 라이브러리 유형을 처리하는 데 사용되는 DAWN_BUILD_MONOLITHIC_LIBRARY CMake 변수의 기본값이 OFF에서 STATIC로 변경되어 기본적으로 libwebgpu* 파일이 생성됩니다.

이제 Dawn은 wgpu::Surface을 구성할 때 wgpu::PresentMode::Undefined 기본값을 올바르게 처리합니다. 문제 441410668을 참고하세요.

여기에서는 주요 사항 중 일부만 다룹니다. 전체 커밋 목록을 확인하세요.

WebGPU의 새로운 기능

WebGPU의 새로운 기능 시리즈에서 다룬 모든 내용의 목록입니다.

Chrome 142

Chrome 141

Chrome 140

Chrome 139

Chrome 138

Chrome 137

Chrome 136

Chrome 135

Chrome 134

Chrome 133

Chrome 132

Chrome 131

Chrome 130

Chrome 129

Chrome 128

Chrome 127

Chrome 126

Chrome 125

Chrome 124

Chrome 123

Chrome 122

Chrome 121

Chrome 120

Chrome 119

Chrome 118

Chrome 117

Chrome 116

Chrome 115

Chrome 114

Chrome 113