WebGPU의 새로운 기능 (Chrome 124)

François Beaufort
François Beaufort

읽기 전용 및 읽기-쓰기 저장소 텍스처

저장소 텍스처 결합 유형을 사용하면 셰이더가 TEXTURE_BINDING 사용을 추가하지 않고도 저장소 텍스처에서 읽고 특정 형식에 혼합 읽기 및 쓰기를 실행할 수 있습니다. "readonly_and_readwrite_storage_textures" WGSL 언어 확장 프로그램navigator.gpu.wgslLanguageFeatures에 있는 경우 이제 바인드 그룹 레이아웃을 만들 때 GPUStorageTexture 액세스를 "read-write" 또는 "read-only"로 설정할 수 있습니다. 이전에는 "write-only"로 제한되었습니다.

그러면 WGSL 셰이더 코드에서 저장소 텍스처에 read_writeread 액세스 한정자를 사용할 수 있고, textureLoad()textureStore() 내장 함수가 적절하게 동작하며, 새 textureBarrier() 내장 함수를 사용하여 작업 그룹의 텍스처 메모리 액세스를 동기화할 수 있습니다.

WGSL 셰이더 코드 상단에서 requires readonly_and_readwrite_storage_textures;의 비이식 가능성을 알리려면 requires-directive를 사용하는 것이 좋습니다. 다음 예와 issue dawn:1972를 참고하세요.

if (!navigator.gpu.wgslLanguageFeatures.has("readonly_and_readwrite_storage_textures")) {
  throw new Error("Read-only and read-write storage textures are not available");
}

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

const bindGroupLayout = device.createBindGroupLayout({
  entries: [{
    binding: 0,
    visibility: GPUShaderStage.COMPUTE,
    storageTexture: {
      access: "read-write", // <-- New!
      format: "r32uint",
    },
  }],
});

const shaderModule = device.createShaderModule({ code: `
  requires readonly_and_readwrite_storage_textures;

  @group(0) @binding(0) var tex : texture_storage_2d<r32uint, read_write>;

  @compute @workgroup_size(1, 1)
  fn main(@builtin(local_invocation_id) local_id: vec3u) {
    var data = textureLoad(tex, vec2i(local_id.xy));
    data.x *= 2;
    textureStore(tex, vec2i(local_id.xy), data);
  }`
});

// You can now create a compute pipeline with this shader module and
// send the appropriate commands to the GPU.

서비스 워커 및 공유 워커 지원

Chrome의 WebGPU는 웹 워커 지원을 한 단계 업그레이드하여 이제 서비스 워커공유 워커를 모두 지원합니다. 서비스 워커를 사용하여 백그라운드 작업과 오프라인 기능을 개선하고 공유 작업자를 사용하여 스크립트 간에 리소스를 효율적으로 공유할 수 있습니다. issue chromium:41494731을 참고하세요.

확장 프로그램 서비스 워커에서 WebGPU를 사용하는 방법을 알아보려면 Chrome 확장 프로그램 샘플WebLLM Chrome 확장 프로그램을 확인하세요.

WebLLM Chrome 확장 프로그램의 스크린샷
WebLLM Chrome 확장 프로그램

새 어댑터 정보 속성

사용자가 chrome://flags/#enable-webgpu-developer-features에서 'WebGPU 개발자 기능' 플래그를 사용 설정한 경우 이제 requestAdapterInfo()를 호출할 때 비표준 d3dShaderModelvkDriverVersion 어댑터 정보 속성을 사용할 수 있습니다. 지원되는 경우:

  • d3dShaderModel는 지원되는 최대 D3D 셰이더 모델 번호입니다. 예를 들어 값 62는 현재 드라이버가 HLSL SM 6.2를 지원함을 나타냅니다. 문서issue dawn:1254를 참고하세요.

  • vkDriverVersion는 공급업체에서 지정한 Vulkan 드라이버의 버전 번호입니다. 문서chromium:327457605 문제를 참고하세요.

어댑터 정보에 vkDriverVersion이 표시된 https://webgpureport.org의 스크린샷
https://webgpureport.org에 표시된 어댑터 정보 vkDriverVersion

버그 수정

layout: "auto"를 사용하여 일치하는 바인드 그룹이 있는 두 개의 파이프라인을 만든 다음 첫 번째 파이프라인으로 바인드 그룹을 만들고 두 번째 파이프라인에서 이를 사용하면 이제 GPUValidationError가 발생합니다. 이를 허용하는 것은 구현 버그였으며 이제 적절한 테스트로 수정되었습니다. issue dawn:2402를 참고하세요.

Dawn 업데이트

Dawn API에서 wgpuDeviceSetUncapturedErrorCallback로 설정된 캡처되지 않은 오류 콜백이 이제 GPU 기기가 손실된 후 호출되지 않습니다. 이 수정사항은 Dawn을 JavaScript API 사양 및 Blink 구현과 일치시킵니다. issue dawn:2459를 참고하세요.

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

WebGPU의 새로운 기능

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

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