GPUDevice
æéå¯ç¨
æ¤ç¹æ§ä¸å±äºåºçº¿ï¼å 为å®å°æªå¨ä¸»æµæµè§å¨ä¸å¾å°æ¯æã
Want more browser support for this feature? Tell us why.
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
WebGPU API ç GPUDevice æ¥å£è¡¨ç¤ºä¸ä¸ªé»è¾ GPU 设å¤ãè¿æ¯è®¿é®å¤§é¨å WebGPU åè½çä¸»è¦æ¥å£ã
ä½¿ç¨ GPUAdapter.requestDevice() æ¹æ³è¯·æ± GPUDevice 对象ã
å®ä¾å±æ§
ä»å
¶ç¶æ¥å£ EventTarget ç»§æ¿å±æ§ã
featuresåªè¯»-
GPUSupportedFeatures对象ï¼å ¶æè¿°äºç±è®¾å¤æ¯æçé¢å¤åè½ã label-
å符串ï¼å ¶æä¾äºç¨äºæ è¯å¯¹è±¡çæ ç¾ï¼ä¾å¦å¨
GPUErrorä¿¡æ¯ææ§å¶å°è¦åä¸ã limitsåªè¯»-
GPUSupportedLimits对象ï¼å ¶æè¿°äºç±è®¾å¤æ¯æçéå¶ã loståªè¯»-
å å«ä¸ä¸ª
Promiseï¼è¯¥ promise å¨è®¾å¤çæ´ä¸ªçå½å¨æå ä¸ç´ä¿çå¾ å®ç¶æï¼å½å¤±å»è®¾å¤æ¶ï¼ä¼å ç°ä¸ºGPUDeviceLostInfoã queueåªè¯»-
è¿å设å¤ä¸»è¦ç
GPUQueueã
å®ä¾æ¹æ³
ä»å
¶ç¶æ¥å£ EventTarget ç»§æ¿æ¹æ³ã
createBindGroup()-
åºäº
GPUBindGroupLayoutå建ä¸ä¸ªGPUBindGroupï¼è¯¥ç»å®ä¹äºä¸ç»è¦ç»å®å¨ä¸èµ·çèµæºï¼ä»¥åå¦ä½å¨çè²é¶æ®µä½¿ç¨è¿äºèµæºã createBindGroupLayout()-
å建ä¸ä¸ª
GPUBindGroupLayoutï¼å ¶å®ä¹äºç¸å ³ GPU èµæºçç»æåç®çï¼ä¾å¦å°å¨ç®¡çº¿ä¸ä½¿ç¨çç¼å²åºï¼å¹¶å¨å建GPUBindGroupæ¶ç¨ä½æ¨¡çã createBuffer()-
å建ä¸ä¸ª
GPUBufferï¼å¨å ¶ä¸åå¨ç¨äº GPU è¿ç®çåå§æ°æ®ã createCommandEncoder()-
å建ä¸ä¸ª
GPUCommandEncoderï¼ç¨äºå°è¦åç» GPU çæä»¤ç¼ç ã createComputePipeline()-
å建ä¸ä¸ª
GPUComputePipelineï¼å¯ä»¥æ§å¶è®¡ç®çè²é¶æ®µï¼å¹¶ç¨äºGPUComputePassEncoderã createComputePipelineAsync()-
è¿åä¸ä¸ª
Promiseï¼ä¼å ç°ä¸ä¸ªGPUComputePipelineï¼ä¸æ¦ç®¡çº¿å¯ä»¥å¨æ²¡æä»»ä½åæ»çæ åµä¸ä½¿ç¨ï¼å ¶å¯ä»¥æ§å¶è®¡ç®çè²é¶æ®µï¼å¹¶ç¨äºGPUComputePassEncoderã createPipelineLayout()-
å建ä¸ä¸ª
GPUPipelineLayoutï¼å ¶å®ä¹äºç®¡çº¿ä½¿ç¨çGPUBindGroupLayoutã卿令ç¼ç æé´ï¼ä¸ç®¡çº¿ä¸èµ·ä½¿ç¨çGPUBindGroupå¿ é¡»å ·æå ¼å®¹çGPUBindGroupLayoutã createQuerySet()-
å建ä¸ä¸ª
GPUQuerySetï¼å ¶å¯ä»¥ç¨äºå½å¶ééä¸çæ¥è¯¢ç»æï¼ä¾å¦ä¾å¦é®æ¡ææ¶é´æ³æ¥è¯¢ã createRenderBundleEncoder()-
å建ä¸ä¸ª
GPURenderBundleEncoderï¼å ¶å¯ç¨äºé¢å å½å¶æä»¤ç bundleãå¯ä»¥æ ¹æ®éè¦å¤æ¬¡ï¼éè¿executeBundles()æ¹æ³å¨GPURenderPassEncoderä¸éå¤ä½¿ç¨ã createRenderPipeline()-
å建ä¸ä¸ª
GPURenderPipelineï¼å ¶å¯ä»¥æ§å¶é¡¶ç¹æçå çè²å¨é¶æ®µï¼å¹¶ç¨äºGPURenderPassEncoderæGPURenderBundleEncoderã createRenderPipelineAsync()-
è¿åä¸ä¸ª
Promiseï¼ä¼å ç°ä¸ä¸ªGPURenderPipelineï¼ä¸æ¦ç®¡çº¿å¯ä»¥å¨æ²¡æä»»ä½åæ»çæ åµä¸ä½¿ç¨ï¼å ¶å¯ä»¥æ§å¶é¡¶ç¹æçå çè²å¨é¶æ®µï¼å¹¶ç¨äºGPURenderPassEncoderæGPURenderBundleEncoderã createSampler()-
å建ä¸ä¸ª
GPUSamplerï¼å ¶æ§å¶çè²å¨å¦ä½è½¬æ¢å¹¶è¿æ»¤çº¹çèµæºæ°æ®ã createShaderModule()-
å建ä¸ä¸ª
GPUShaderModuleï¼å ¶ç¨ WGSL æºç å符串å建ã createTexture()-
å建ä¸ä¸ª
GPUTextureï¼å¨å ¶ä¸åå¨ç¨äº GPU 渲ææä½ççº¹çæ°æ®ã destroy()-
éæ¯è®¾å¤ï¼é²æ¢å¯¹å®è¿è¡è¿ä¸æ¥æä½ã
importExternalTexture()-
å°
HTMLVideoElementä½ä¸ºè¾å ¥ï¼å¹¶è¿åä¸ä¸ªGPUExternalTextureå è£ å¨å¯¹è±¡ï¼å ¶ä¸å å«å¯ç¨äº GPU 渲ææä½çè§é¢å¿«ç §ã popErrorScope()-
ä»é误èå´å æ ä¸å¼¹åºä¸ä¸ªç°æç GPU é误ä½ç¨åï¼å¹¶è¿åä¸ä¸ª Promiseï¼ä¼å ç°ä¸ºä¸ä¸ªå¯¹è±¡ï¼
GPUInternalErrorãGPUOutOfMemoryErroræGPUValidationErrorï¼ï¼æè¿°ä½ç¨å䏿è·ç第ä¸ä¸ªé误ï¼å¦ææ²¡æåçé误ï¼å为nullã pushErrorScope()-
å°æ°ç GPU é误ä½ç¨åæ¨å ¥å°è®¾å¤çé误ä½ç¨åæ ä¸ï¼å è®¸ä½ æè·ç¹å®ç±»åçé误ã
äºä»¶
uncapturederror-
å½æåº GPU é误ä½ç¨åæªè§å¯å°çé误æ¶è§¦åï¼ä»¥æä¾æ¥åæå¤éè¯¯çæ¹å¼ãå·²ç¥çé误æ åµåºä½¿ç¨
pushErrorScope()åpopErrorScope()å¤çã
示ä¾
async function init() {
if (!navigator.gpu) {
throw Error("WebGPU not supported.");
}
const adapter = await navigator.gpu.requestAdapter();
if (!adapter) {
throw Error("Couldn't request WebGPU adapter.");
}
const device = await adapter.requestDevice();
const shaderModule = device.createShaderModule({
code: shaders,
});
//...
}
æå
³ GPUDevice 使ç¨çæ´å¤ç¤ºä¾ï¼è¯·åé
ä¸é¢ååºçæ¯ä¸ªæå页é¢å以ä¸çæ¼ç¤ºç½ç«ï¼
è§è
| è§è |
|---|
| WebGPU > # gpudevice > |