WGSLLanguageFeatures
å©ç¨å¯è½æ§ã¯éå®ç
ãã®æ©è½ã¯ãã¼ã¹ã©ã¤ã³ã§ã¯ããã¾ãããæãåºã使ç¨ããã¦ãããã©ã¦ã¶ã¼ã®ä¸é¨ã§åä½ãã¾ããã
Want more browser support for this feature? Tell us why.
å®å ¨ãªã³ã³ããã¹ãç¨: ãã®æ©è½ã¯ä¸é¨ã¾ãã¯ãã¹ã¦ã®å¯¾å¿ãã¦ãããã©ã¦ã¶ã¼ã«ããã¦ãå®å ¨ãªã³ã³ããã¹ã (HTTPS) ã§ã®ã¿å©ç¨ã§ãã¾ãã
ã¡ã¢: ãã®æ©è½ã¯ã¦ã§ãã¯ã¼ã«ã¼å ã§å©ç¨å¯è½ã§ãã
WGSLLanguageFeatures 㯠WebGPU API ã®ã¤ã³ã¿ã¼ãã§ã¤ã¹ã§ããã® WebGPU ã®å®è£
ã対å¿ãã¦ãã WGSL è¨èªã®æ¡å¼µãå ±åãã Set 風ãªãã¸ã§ã¯ãã§ãã
WGSLLanguageFeatures ãªãã¸ã§ã¯ã㯠GPU.wgslLanguageFeatures ããããã£çµç±ã§åç
§ãã¾ãã
ã¡ã¢: ãã® API ã«å¯¾å¿ãã¦ãããã¹ã¦ã®ãã©ã¦ã¶ã¼ã® WebGPU ã§ãã¹ã¦ã® WGSL è¨èªã®æ¡å¼µã使ããããã§ã¯ããã¾ããã使ããã¨ã«ããæ¡å¼µããã¹ã¦å¾¹åºçã«ãã¹ããããã¨ãæ¨å¥¨ãã¾ãã
å©ç¨å¯è½ãªæ©è½
以ä¸ã® WGSL è¨èªæ¡å¼µã¯ãWGSL 仿§æ¸ã® WGSL è¨èªæ¡å¼µ(è±èª)ã§å®ç¾©ããã¦ãã¾ããå©ç¨ã§ããæ©è½ã®æ£ç¢ºãªä¸è¦§ã¯ãå®è£ ãç©ç端æ«ã«ãã£ã¦ç°ãªããæéçµéã«ä¼´ã夿´ãããã¾ãããçæãã ããã
packed_4x8_integer_dot_product-
DP4aï¼4 è¦ç´ ã®å ç©ããã³ç´¯ç©ï¼GPU å½ä»¤ããWGSL ã³ã¼ããã使ç¨ãããã¨ãã§ããããã«ãªãã¾ããããã㯠8 ãããæ´æ°ã®å ç©ãå¹ççã«å®è¡ãããã¨ã§è¨ç®ãé«éåããã¡ã¢ãªã¼ããããã¯ã¼ã¯å¸¯åå¹ ãç¯ç´ããã¨ã¨ãã«ãåçã®
f32ãã¼ã¸ã§ã³ã¨æ¯è¼ãã¦ããã©ã¼ãã³ã¹ãæ¹åãã¾ãããããã¯ãAI ãã¬ã¼ã ã¯ã¼ã¯å ã®æ©æ¢°å¦ç¿ã¢ãã«ã«ãããæ¨è«å¦çã§ãã使ç¨ããã¦ãã¾ããç¹ã«ã
packed_4x8_integer_dot_productãå©ç¨ã§ããå ´åãWGSL ã³ã¼ãã§ã¯æ¬¡ã®ããã«ä½¿ç¨ãããã¨ãã§ãã¾ãã- 32 ãããæ´æ°ã¹ã«ã©ã¼ã« 8 ãããæ´æ°ã® 4 è¦ç´ ãã¯ãã«ãããã¯ãããã®ã§ãå
ç©æ¼ç®å½ä»¤ã®å
¥åã¨ãã¦ä½¿ç¨ããã¾ãï¼
dot4U8Packed()ããã³dot4I8Packed()çµã¿è¾¼ã¿é¢æ°ãéãã¦ï¼ã - 8 ãããæ´æ°ã® 4 è¦ç´ ãã¯ãã«ãããã¯ããéã®ãããã¯ããã³å±éã®å½ä»¤ï¼
pack4xI8()ãpack4xI8Clamp()ãªã©ã®çµã¿è¾¼ã¿é¢æ°ãéãã¦ï¼ã
- 32 ãããæ´æ°ã¹ã«ã©ã¼ã« 8 ãããæ´æ°ã® 4 è¦ç´ ãã¯ãã«ãããã¯ãããã®ã§ãå
ç©æ¼ç®å½ä»¤ã®å
¥åã¨ãã¦ä½¿ç¨ããã¾ãï¼
pointer_composite_access-
ããã«ãããWGSL ã·ã§ã¼ãã¼ã³ã¼ãã§ã¯ããã¼ã¿ãç´æ¥ä½æ¥ããå ´åã§ãããã®ãã¤ã³ã¿ã¼ã使¥ããå ´åã§ããåãããã (
.) æ§æã使ç¨ãã¦ãè¤éãªãã¼ã¿åã®è¦ç´ ã«ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ããpointer_composite_accessãå©ç¨å¯è½ãªã®ã¯æ¬¡ã®å ´åã§ããfooããã¤ã³ã¿ã¼ã®å ´åãfoo.barã¨ããè¨è¿°ã¯ã(*foo).barãæ¸ãããã便å©ãªæ¹æ³ã¨ãã¦å©ç¨ã§ãã¾ããé常ããã¤ã³ã¿ã¼ã鿥åç §å¯è½ãªãåç §ãã«å¤æããã«ã¯ã¢ã¹ã¿ãªã¹ã¯ (*) ãå¿ è¦ã§ãããããã§ãã¤ã³ã¿ã¼ã¨åç §ã¯ã»ã¼äºææ§ãããã¾ããfooããã¤ã³ã¿ã¼ã§ãªãå ´åãããã (.) æ¼ç®åã¯ããµã ã使ãããã¨ãããã¡ã³ãã¼ã«ç´æ¥ã¢ã¯ã»ã¹ãããã®ã¨ãã¦åä½ãã¾ãã- ãã
paãé åã®éå§ã¢ãã¬ã¹ãæ ¼ç´ããããã«ä½¿ç¨ããããã¤ã³ã¿ã¼ã§ãããªãã°ãpa[i]ã«ãã£ã¦ããã®é åã®içªç®ã®è¦ç´ ãæ ¼ç´ããã¦ããã¡ã¢ãªã¼ä½ç½®ã«ç´æ¥ã¢ã¯ã»ã¹ãããã¨ãã§ãã¾ãã
詳細ãä¾ã«ã¤ãã¦ã¯ãWGSL ã«ãããè¤åä½ã®åç §è§£é¤ã®ããã®ç³è¡£æ§æ(è±èª)ãåç §ãã¦ãã ããã
readonly_and_readwrite_storage_textures-
å©ç¨ã§ããå ´åããã¤ã³ãã°ã«ã¼ãã¬ã¤ã¢ã¦ãå ã§ã¹ãã¬ã¼ã¸ãã¯ã¹ãã£ã®ãã¤ã³ãã°ã«ã¼ãé ç®ãæå®ããéã
"read-only"ããã³"read-write"storageTexture.accessã®å¤ãè¨å®ãããã¨ãã§ãã¾ãããããã«ãããWGSL ã³ã¼ãã§ããããã¹ãã¬ã¼ã¸ãã¯ã¹ãã£ã®èªã¿åããããã³èªã¿åã/æ¸ãè¾¼ã¿ãå¯è½ã«ãªãã¾ãã subgroup_id-
å©ç¨å¯è½ãªå ´åãWGSL
subgroup_idããã³num_subgroupsçµã¿è¾¼ã¿å¤ãæ¼ç®ã·ã§ã¼ãã¼ã§ä½¿ç¨å¯è½ã§ãããããã¯ãã¡ã¢ãªã¼ã¸ã®ã¢ã¯ã»ã¹ãéè¤ããªãããã¡ã¢ãªã¼ãã¤ã³ããã¯ã¹åãããã¨ã§ããµãã°ã«ã¼ãéã§ã®ä½æ¥ã¹ã±ã¸ã¥ã¼ãªã³ã°ã®ããã»ã¹ãæ¹åãã¾ãã詳細ã«ã¤ãã¦ã¯ãWGSL subgroup_id æ¡å¼µæ©è½ãã覧ãã ãããã¡ã¢: WGSL ã®
subgroup_idæ©è½ãæå¹ã«ããã«ã¯ãsubgroupsæ¡å¼µæ©è½ãGPUDeviceã§æå¹ã«ããå¿ è¦ãããã¾ãï¼GPUSupportedFeaturesãåç §ãã¦ãã ããï¼ã subgroup_uniformity-
å©ç¨å¯è½ãªå ´åããµãã°ã«ã¼ãããã³ã¯ã¯ããã®çµã¿è¾¼ã¿é¢æ°ã«å¯¾ããå䏿§åæã®ç¯å²ããã¯ã¼ã¯ã°ã«ã¼ãã¬ãã«ãããµãã°ã«ã¼ãã¬ãã«ã«å¤æ´ãã¾ãããã®æ©è½ã«ãããããå¤ãã®å ´åã§ãµãã°ã«ã¼ãã®æ©è½ãåä¸ã§ããã¨èããããããã«ãªããéçºè ã®å©ä¾¿æ§ãæ¹åããå䏿§ãã§ãã¯ãå®å ¨ã«ç¡å¹ã«ããå¿ è¦æ§ã縮å°ããã¾ããå®ç¨çãªæå³ã¨ãã¦ã¯ã
subgroup_idãªã©ã®çµã¿è¾¼ã¿å¤ãå«ããããå¤ãã®å¤ããµãã°ã«ã¼ã䏿§ã§ããã¨èãã¦ã¿ãããã«ãªãã¾ãã詳細ã«ã¤ãã¦ã¯ã[WGSL subgroup_uniformity æ¡å¼µæ©è½](https://developer.chrome.com/blog/new-in-webgpu 145#wgsl_subgroup_uniformity_extension)ãã覧ãã ããã texture_and_sampler_let-
å©ç¨å¯è½ãªå ´åãWGSL ã·ã§ã¼ãã¼ã
let宣è¨ã«ãã¯ã¹ãã£ãªãã¸ã§ã¯ãããµã³ãã©ã¼ãªãã¸ã§ã¯ããæ ¼ç´ãããã¨ãã§ããããã«ãã¾ãã uniform_buffer_standard_layout-
å©ç¨å¯è½ãªå ´åãã¦ããã©ã¼ã ãããã¡ã¼ã¯ã¹ãã¬ã¼ã¸ãããã¡ã¼ã¨åãã¡ã¢ãªã¼ã¬ã¤ã¢ã¦ãã®å¶ç´ã使ç¨ãã¾ããããã«ããã両æ¹ã®ãããã¡ã¼éã§ãã¼ã¿æ§é ãå ±æãããããªãã¾ããã¤ã¾ããã¦ããã©ã¼ã ãããã¡ã¼ã§ã¯ãé åè¦ç´ ã 16 ãã¤ãå¢çã«æããããä¸ã®æ§é ä½ã®ãªãã»ããã 16 ãã¤ãã®åæ°ã«ããã£ã³ã°ãããããå¿ è¦ããªããªãã¾ãã
詳細ã«ã¤ãã¦ã¯ãWGSL uniform_buffer_standard_layout æ¡å¼µæ©è½ãåç §ãã¦ãã ããã
unrestricted_pointer_parameters-
WGSL 颿°ã¸ã®ãã¤ã³ã¿ã¼ã®å¼æ°æ¸¡ãã«é¢ããå¶éãç·©åãã¾ãã対å¿ãã¦ããã°ã以ä¸ããããã¨ãã§ããããã«ãªãã¾ãã
-
ã¦ã¼ã¶ã¼å®ç¾©é¢æ°ã«æ¸¡ããã¹ãã¬ã¼ã¸ãã¦ããã©ã¼ã ãããã³ã¯ã¼ã¯ã°ã«ã¼ãã®ç©ºéã¸ã®å¼æ°ãã¤ã³ã¿ã¼ã
-
ã¦ã¼ã¶ã¼å®ç¾©é¢æ°ã«æ¸¡ãæ§é ä½ã®ã¡ã³ãã¼ãé åè¦ç´ ã®ãã¤ã³ã¿ã¼ã
詳細ã«ã¤ãã¦ã¯ã颿°ã®å¼æ°ã¨ãã¦ã®ãã¤ã³ã¿ã¼(è±èª)ãåç §ãã¦ãã ããã
-
ã¤ã³ã¹ã¿ã³ã¹ããããã£
以ä¸ã®ããããã£ã¯ããã¹ã¦ã®èªã¿åãå°ç¨ã® Set 風ãªãã¸ã§ã¯ãã§ä½¿ç¨å¯è½ã§ãã
size-
éåã«å«ã¾ããå¤ã®æ°ãè¿ãã¾ãã
ã¤ã³ã¹ã¿ã³ã¹ã¡ã½ãã
以ä¸ã®ã¡ã½ããã¯ããã¹ã¦ã®èªã¿åãå°ç¨ã® Set 風ãªãã¸ã§ã¯ãã§ä½¿ç¨å¯è½ã§ãã
has()-
æå®ã®å¤ã®è¦ç´ ãéåã«å«ã¾ãããå¦ãã表ãè«çå¤ãè¿ãã¾ãã
values()-
éåå ã®åè¦ç´ ã® å¤ ãæ¿å ¥ããé ã«åºåããæ°ããã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ããè¿ãã¾ãã
keys()-
values()ã®å¥åã§ãã entries()-
éåå ã®åè¦ç´ ã«å¯¾å¿ãã é å
[value, value]ãæ¿å ¥ããé ã«å«ã¾ããæ°ããã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ããè¿ãã¾ãã forEach()-
éåå ã®åè¦ç´ ã«ã¤ãã¦æ¿å ¥ããé ã«æå®ã®ã³ã¼ã«ããã¯é¢æ°ã 1 度ãã¤å¼ã³åºãã¾ãã
ä¾
>æ¡å¼µæ©è½ãå©ç¨å¯è½ãã©ããããã§ãã¯
if (
navigator.gpu.wgslLanguageFeatures.has(
"readonly_and_readwrite_storage_textures",
)
) {
console.log("èªã¿åãå°ç¨ããã³èªã¿æ¸ãç¨ã®ã¹ãã¬ã¼ã¸ãã¯ã¹ãã£ãå©ç¨å¯è½ã§ãã");
}
éåã®ãµã¤ãºãè¿ãããã®å¤ãå復å¦çãã
const wgslFeatures = navigator.gpu.wgslLanguageFeatures;
// éåã®ãµã¤ãºãè¿ã
console.log(wgslFeatures.size);
// values() ãç¨ãã¦éåã®ãã¹ã¦ã®å¤ãèµ°æ»ãã
const valueIterator = wgslFeatures.values();
for (const value of valueIterator) {
console.log(value);
}
// â¦
仿§æ¸
| 仿§æ¸ |
|---|
| WebGPU > # gpuwgsllanguagefeatures > |