WebGPU의 새로운 기능 (Chrome 149~150)

François Beaufort
François Beaufort

게시일: 2026년 6월 17일

즉시

푸시 상수 또는 루트 상수라고도 하는 즉시 값은 자주 변경되는 소량의 데이터를 셰이더에 직접 전달할 수 있도록 지원합니다. 이 프로세스는 GPU 버퍼를 생성하고 바인드 그룹을 관리하는 오버헤드를 우회합니다.

매번 그리기 호출이 변경되는 데이터(예: 수백 개의 객체의 고유 객체 ID 또는 3D 변환 매트릭스)의 균일한 버퍼 바인딩을 업데이트하면 CPU 오버헤드가 발생합니다. 메모리에 데이터를 쓰고 GPU 조회를 관리하지 않도록 패스 인코더에 원시 값을 직접 삽입합니다.

이동식은 매우 동적인 작은 변수에 빠른 경로를 제공합니다. 대규모 데이터 배열, 복잡한 조명 구조 또는 대규모 행렬에는 균일한 버퍼 또는 스토리지 버퍼를 사용하세요.

WGSL 셰이더에서 <immediate> 주소 공간을 사용하면 패스 인코더에 직접 전달할 수 있는 즉각적인 데이터를 정의할 수 있습니다. 그룹을 바인딩하지 않고 이 데이터를 제공하려면 그리기 호출 전에 JavaScript에서 setImmediates()를 호출하세요. 지원 여부를 확인하려면 navigator.gpu.wgslLanguageFeatures를 통해 immediate_address_space WGSL 언어 확장 프로그램을 기능 감지하세요. 다음 예시와 출시 의도를 참고하세요.

if (!navigator.gpu.wgslLanguageFeatures.has('immediate_address_space')) {
   throw new Error(`WGSL immediate address space is not available`);
}

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

const module = device.createShaderModule({ code: `
  requires immediate_address_space;

  var<immediate> color: vec4f;

  @vertex fn vertexMain(@builtin(vertex_index) i : u32) -> @builtin(position) vec4f {
    const pos = array(vec2f(0, 1), vec2f(-1, -1), vec2f(1, -1));
    return vec4f(pos[i], 0, 1);
  }

  @fragment fn fragmentMain() -> @location(0) vec4f {
    return color;
  }`,
});

// Create render pass encoder (omitted)...

// By using layout: 'auto', WebGPU will automatically infer the `immediateSize`
// required by the pipeline layout from the WGSL module.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// Send immediate data to the GPU, then issue a draw call
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

이 기능에 대해 자세히 알아보려면 WebGPUFundamentals Immediates를 참고하세요.

기여해 주신 Microsoft 팀에 감사드립니다.

트랜싯 첨부파일에 대한 더 엄격한 유효성 검사

WebGPU는 TRANSIENT_ATTACHMENT GPUTextureUsage 플래그를 최근에 도입하여 개발자가 깊이 스텐실 버퍼나 멀티샘플링된 타겟과 같은 임시 렌더링 첨부 파일을 만들 수 있습니다. 이러한 첨부파일은 기본 VRAM을 할당하지 않고도 빠른 온칩 타일 메모리에 유지됩니다.

최근 업데이트 (#6248#6267)에서는 이러한 메모리 효율적인 텍스처 첨부파일의 오용을 방지하기 위해 검증 규칙을 개선합니다.

  • 플랫폼 제한으로 인해 트랜전트 텍스처를 만들 때 viewFormats는 빈 배열이어야 합니다. 트랜전트 텍스처는 렌더링 전용이므로 대체 뷰 형식이 필요하지 않습니다.
  • 텍스처 뷰를 만들어도 사용 플래그가 좁혀지지 않습니다. 일시적인 텍스처에서 createView()를 호출하면 뷰가 사용을 변경할 수 없습니다.
  • 트랜지언트 첨부파일은 렌더링 패스 내에서 resolveTarget로 사용할 수 없습니다.

Dawn 업데이트

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

WebGPU의 새로운 기능

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

Chrome 149~150

Chrome 147~148

Chrome 146

Chrome 145

Chrome 144

Chrome 143

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