Chrome

WebGPU 최신 정보 (Chrome 149-150)

원문: What's New in WebGPU (Chrome 149-150)
— Chrome Developers 원문은 CC-BY-4.0
라이선스로 제공되며, 이 글은 한국어로 번역한 2차 저작물입니다.
Immediates, 즉 push constants 또는 root constants는 소량의 빈번하게 변경되는 데이터를 셰이더에 직접 전달할 수 있도록 합니다. 이 과정은 GPU 버퍼 생성 및 bind group 관리에 따른 오버헤드를 우회합니다.
매번 draw call마다 변경되는 데이터, 예를 들어 고유 객체 ID나 수백 개 객체의 3D 변환 행렬 등에 대한 uniform buffer 바인딩을 업데이트하는 것은 CPU 오버헤드를 발생시킵니다. 메모리에 데이터를 쓰고 GPU 조회를 관리하는 작업을 피하기 위해 원시 값을 pass encoder에 직접 주입하십시오.
Immediates는 작고 매우 동적인 변수에 대한 빠른 경로를 제공합니다. 대규모 데이터 배열, 복잡한 조명 구조 또는 거대한 행렬의 경우에는 uniform buffer 또는 storage buffer를 사용하십시오.
WGSL 셰이더에서
<immediate>
주소 공간을 사용하면 pass encoder에 직접 전달될 수 있는 immediate 데이터를 정의할 수 있습니다. bind group을 바인딩하지 않고 이 데이터를 제공하려면 draw call 전에 JavaScript에서
setImmediates()
를 호출하십시오. 지원 여부를 확인하려면
navigator.gpu.wgslLanguageFeatures
를 통해
immediate_address_space
WGSL 언어 확장을 feature-detect하십시오. 다음 예시와 shipping 의향
을 참조하십시오.
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)...

// layout: 'auto'를 사용하면 WebGPU가 WGSL 모듈에서 파이프라인 레이아웃에 필요한 `immediateSize`를 자동으로 추론합니다.
const pipeline = device.createRenderPipeline({
  layout: 'auto',
  vertex: { module },
  fragment: { module, targets: [{ format }] },
});
myRenderPassEncoder.setPipeline(pipeline);

// immediate 데이터를 GPU로 보내고 draw call을 발행합니다.
myRenderPassEncoder.setImmediates(/*rangeOffset=*/0, new Float32Array([255, 0, 0, 255]));
myRenderPassEncoder.draw(3);
myRenderPassEncoder.end();

이 기능에 대한 자세한 내용은 WebGPUFundamentals Immediates
를 참조하십시오.
Microsoft 팀의 기여에 감사드립니다!

Transient Attachment에 대한 엄격한 유효성 검사

WebGPU는 최근
TRANSIENT_ATTACHMENT
GPUTextureUsage 플래그를 도입하여, 개발자가 depth-stencil 버퍼나 multisampled 타겟과 같은 임시 렌더링 첨부 파일을 생성할 수 있도록 했습니다. 이러한 첨부 파일은 메인 VRAM을 할당하지 않고도 고속의 온칩 타일 메모리에 유지됩니다.
최근 업데이트(#6248
#6267
)는 이러한 메모리 효율적인 텍스처 첨부 파일의 오용을 방지하기 위해 유효성 검사 규칙을 개선했습니다.
  • 플랫폼 제한으로 인해, transient 텍스처를 생성할 때
    viewFormats
    는 빈 배열이어야 합니다. transient 텍스처는 렌더링에만 사용되므로 대체 view 형식은 필요하지 않습니다.
  • 텍스처 뷰를 생성하는 것은 사용 플래그를 좁히지 않습니다. transient 텍스처에
    createView()
    를 호출할 때, 뷰는 사용 플래그를 변경할 수 없습니다.
  • Transient attachment는 렌더 패스 내에서
    resolveTarget
    으로 사용할 수 없습니다.

Dawn 업데이트

이것은 주요 내용 중 일부일 뿐입니다. 모든 변경 사항 목록은 커밋 목록
에서 확인할 수 있습니다.
What's New in 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