Skip to content

fix: External traversal for raw WGSL implemented functions#2648

Draft
aleksanderkatan wants to merge 8 commits into
fix/forbid-multiple-usesfrom
fix/external-traversal-for-raw-wgsl-implemented-functions
Draft

fix: External traversal for raw WGSL implemented functions#2648
aleksanderkatan wants to merge 8 commits into
fix/forbid-multiple-usesfrom
fix/external-traversal-for-raw-wgsl-implemented-functions

Conversation

@aleksanderkatan

@aleksanderkatan aleksanderkatan commented Jun 24, 2026

Copy link
Copy Markdown
Contributor

Before: given an external, if resolvable then replace occurrences with resolved, otherwise look which keys appear in the code with a prop following them, and call recursively with external.prop.

Now: given externals, look for prop chains starting with external keys, then follow them until either a resolvable appears, or the chain ends.

Other changes:

  • I removed the warn when an unused external is found. I think that it may occur that a given set of externals is applied to all functions to avoid having to list them separately or to allow for user provided raw WGSL implementations, and it was unsilencable. Tell me if you think it's worth adding it back (it will be tricky, we will have to traverse externals for that).
  • Resolved wgsl is now ordered differently. Before, externals were added in order they were provided, now there is only one regex match call, and the order matches the order of appearance.

@aleksanderkatan aleksanderkatan linked an issue Jun 24, 2026 that may be closed by this pull request
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

pkg.pr.new

packages
Ready to be installed by your favorite package manager ⬇️

https://pkg.pr.new/software-mansion/TypeGPU/typegpu@38a06439424b7b37cbc1d1f8b3b8d88008464498
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/cli@38a06439424b7b37cbc1d1f8b3b8d88008464498
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/noise@38a06439424b7b37cbc1d1f8b3b8d88008464498
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/react@38a06439424b7b37cbc1d1f8b3b8d88008464498
https://pkg.pr.new/software-mansion/TypeGPU/unplugin-typegpu@38a06439424b7b37cbc1d1f8b3b8d88008464498

benchmark
view benchmark

commit
view commit

@aleksanderkatan aleksanderkatan changed the base branch from main to fix/forbid-multiple-uses June 24, 2026 09:48
@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

Bundle size comparison (import * as ... in PR vs import * as ... in target):

🟢 Decreased ➖ Unchanged 🔴 Increased ❔ Unknown
23 297 0 0

import { ... } in PR vs import * as ... in PR (is the library tree-Shakeable?):

Click to reveal the results table (297 entries).
Test tsdown
d_Void.ts 87.36 kB ($${\color{red}+12087.6\%}$$)
d_sampler.ts 87.36 kB ($${\color{red}+11956.6\%}$$)
d_isPtr.ts 87.36 kB ($${\color{red}+11796.0\%}$$)
d_comparisonSampler.ts 87.37 kB ($${\color{red}+11781.8\%}$$)
d_isSizeAttrib.ts 87.37 kB ($${\color{red}+11765.4\%}$$)
d_isWgslArray.ts 87.37 kB ($${\color{red}+11765.3\%}$$)
d_isAlignAttrib.ts 87.37 kB ($${\color{red}+11749.8\%}$$)
d_isWgslStruct.ts 87.37 kB ($${\color{red}+11749.7\%}$$)
d_isAtomic.ts 87.36 kB ($${\color{red}+11749.1\%}$$)
d_isBuiltinAttrib.ts 87.37 kB ($${\color{red}+11718.8\%}$$)
d_isLocationAttrib.ts 87.37 kB ($${\color{red}+11703.3\%}$$)
d_isDecorated.ts 87.37 kB ($${\color{red}+11702.6\%}$$)
d_isInterpolateAttrib.ts 87.38 kB ($${\color{red}+11657.2\%}$$)
d_atomic.ts 87.36 kB ($${\color{red}+11383.8\%}$$)
d_ptrHandle.ts 87.37 kB ($${\color{red}+10412.6\%}$$)
d_ptrUniform.ts 87.37 kB ($${\color{red}+10400.4\%}$$)
d_ptrStorage.ts 87.37 kB ($${\color{red}+10351.3\%}$$)
d_ptrPrivate.ts 87.37 kB ($${\color{red}+10326.9\%}$$)
d_ptrFn.ts 87.36 kB ($${\color{red}+10314.2\%}$$)
d_ptrWorkgroup.ts 87.37 kB ($${\color{red}+10302.9\%}$$)
d_textureExternal.ts 87.37 kB ($${\color{red}+10148.3\%}$$)
d_textureStorage1d.ts 87.37 kB ($${\color{red}+8527.7\%}$$)
d_textureStorage2d.ts 87.37 kB ($${\color{red}+8527.7\%}$$)
d_textureStorage3d.ts 87.37 kB ($${\color{red}+8527.7\%}$$)
d_textureStorage2dArray.ts 87.38 kB ($${\color{red}+8380.9\%}$$)
d_isDisarray.ts 87.37 kB ($${\color{red}+7754.5\%}$$)
d_isUnstruct.ts 87.37 kB ($${\color{red}+7754.5\%}$$)
d_isLooseDecorated.ts 87.37 kB ($${\color{red}+7707.1\%}$$)
d_isLooseData.ts 87.37 kB ($${\color{red}+7443.3\%}$$)
d_isWgslData.ts 87.37 kB ($${\color{red}+6566.4\%}$$)
d_unstruct.ts 87.36 kB ($${\color{red}+5544.2\%}$$)
d_isData.ts 87.36 kB ($${\color{red}+4733.0\%}$$)
d_deepEqual.ts 87.37 kB ($${\color{red}+3884.9\%}$$)
d_struct.ts 87.36 kB ($${\color{red}+2323.7\%}$$)
d_ref.ts 87.36 kB ($${\color{red}+1724.5\%}$$)
std_discard.ts 103.09 kB ($${\color{red}+626.6\%}$$)
std_copy.ts 103.09 kB ($${\color{red}+614.4\%}$$)
std_arrayLength.ts 103.10 kB ($${\color{red}+614.2\%}$$)
std_isBeingTranspiled.ts 103.10 kB ($${\color{red}+612.7\%}$$)
std_getTargetShaderLanguage.ts 103.11 kB ($${\color{red}+609.5\%}$$)
std_extensionEnabled.ts 103.10 kB ($${\color{red}+607.0\%}$$)
std_range.ts 103.09 kB ($${\color{red}+594.2\%}$$)
std_dpdx.ts 103.09 kB ($${\color{red}+585.8\%}$$)
std_fwidthCoarse.ts 103.10 kB ($${\color{red}+585.6\%}$$)
std_dpdxCoarse.ts 103.10 kB ($${\color{red}+585.6\%}$$)
std_dpdyCoarse.ts 103.10 kB ($${\color{red}+585.6\%}$$)
std_fwidthFine.ts 103.10 kB ($${\color{red}+585.6\%}$$)
std_dpdxFine.ts 103.09 kB ($${\color{red}+585.6\%}$$)
std_dpdyFine.ts 103.09 kB ($${\color{red}+585.6\%}$$)
std_fwidth.ts 103.09 kB ($${\color{red}+585.6\%}$$)
std_dpdy.ts 103.09 kB ($${\color{red}+585.6\%}$$)
d_bool.ts 87.36 kB ($${\color{red}+573.3\%}$$)
d_f16.ts 87.36 kB ($${\color{red}+573.3\%}$$)
d_f32.ts 87.36 kB ($${\color{red}+573.3\%}$$)
d_i32.ts 87.36 kB ($${\color{red}+573.3\%}$$)
d_u32.ts 87.36 kB ($${\color{red}+573.3\%}$$)
d_u16.ts 87.36 kB ($${\color{red}+572.1\%}$$)
std_atomicLoad.ts 103.10 kB ($${\color{red}+553.0\%}$$)
std_textureBarrier.ts 103.10 kB ($${\color{red}+552.8\%}$$)
std_atomicStore.ts 103.10 kB ($${\color{red}+552.8\%}$$)
std_workgroupBarrier.ts 103.10 kB ($${\color{red}+552.5\%}$$)
std_storageBarrier.ts 103.10 kB ($${\color{red}+552.5\%}$$)
std_atomicAdd.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicAnd.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicMax.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicMin.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicSub.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicXor.ts 103.09 kB ($${\color{red}+552.5\%}$$)
std_atomicOr.ts 103.09 kB ($${\color{red}+552.5\%}$$)
d_textureDepth2d.ts 87.37 kB ($${\color{red}+551.1\%}$$)
d_textureDepthCube.ts 87.37 kB ($${\color{red}+550.9\%}$$)
d_texture1d.ts 87.37 kB ($${\color{red}+550.6\%}$$)
d_texture2d.ts 87.37 kB ($${\color{red}+550.6\%}$$)
d_texture3d.ts 87.37 kB ($${\color{red}+550.6\%}$$)
d_textureDepth2dArray.ts 87.38 kB ($${\color{red}+550.3\%}$$)
d_textureCube.ts 87.37 kB ($${\color{red}+550.3\%}$$)
d_textureDepthCubeArray.ts 87.38 kB ($${\color{red}+550.1\%}$$)
d_textureDepthMultisampled2d.ts 87.38 kB ($${\color{red}+550.0\%}$$)
d_texture2dArray.ts 87.37 kB ($${\color{red}+549.8\%}$$)
d_textureCubeArray.ts 87.37 kB ($${\color{red}+549.5\%}$$)
d_textureMultisampled2d.ts 87.38 kB ($${\color{red}+549.4\%}$$)
d_disarrayOf.ts 87.37 kB ($${\color{red}+481.7\%}$$)
d_vec2b.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec2f.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec2h.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec2i.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec2u.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec3b.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec3f.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec3h.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec3i.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec3u.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec4b.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec4f.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec4h.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec4i.ts 87.36 kB ($${\color{red}+350.2\%}$$)
d_vec4u.ts 87.36 kB ($${\color{red}+350.2\%}$$)
std_subgroupAdd.ts 103.10 kB ($${\color{red}+329.9\%}$$)
std_subgroupBroadcastFirst.ts 103.11 kB ($${\color{red}+329.8\%}$$)
std_subgroupExclusiveAdd.ts 103.11 kB ($${\color{red}+329.8\%}$$)
std_subgroupExclusiveMul.ts 103.11 kB ($${\color{red}+329.8\%}$$)
std_subgroupInclusiveAdd.ts 103.11 kB ($${\color{red}+329.8\%}$$)
std_subgroupInclusiveMul.ts 103.11 kB ($${\color{red}+329.8\%}$$)
std_subgroupShuffleDown.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupShuffleXor.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupBroadcast.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupShuffleUp.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupShuffle.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupBallot.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupElect.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupAll.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupAnd.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupAny.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupMax.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupMin.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupMul.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupXor.ts 103.10 kB ($${\color{red}+329.8\%}$$)
std_subgroupOr.ts 103.10 kB ($${\color{red}+329.8\%}$$)
d_formatToWGSLType.ts 87.37 kB ($${\color{red}+318.1\%}$$)
d_uint8.ts 87.36 kB ($${\color{red}+318.0\%}$$)
d_unorm10_10_10_2.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_unorm8x4_bgra.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_float16x2.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_float16x4.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_float32x2.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_float32x3.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_float32x4.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_snorm16x2.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_snorm16x4.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_unorm16x2.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_unorm16x4.ts 87.37 kB ($${\color{red}+317.9\%}$$)
d_sint16x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint16x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint32x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint32x3.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint32x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_snorm8x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_snorm8x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint16x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint16x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint32x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint32x3.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint32x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_unorm8x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_unorm8x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_float16.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_float32.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint8x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint8x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_snorm16.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint8x2.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint8x4.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_unorm16.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint16.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint32.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_snorm8.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint16.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_uint32.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_unorm8.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_sint8.ts 87.36 kB ($${\color{red}+317.9\%}$$)
d_packedFormats.ts 87.37 kB ($${\color{red}+317.5\%}$$)
d_isPackedData.ts 87.37 kB ($${\color{red}+316.7\%}$$)
std_textureDimensions.ts 103.10 kB ($${\color{red}+300.6\%}$$)
std_textureGather.ts 103.10 kB ($${\color{red}+300.6\%}$$)
std_textureSampleBaseClampToEdge.ts 103.11 kB ($${\color{red}+300.5\%}$$)
std_textureSampleCompareLevel.ts 103.11 kB ($${\color{red}+300.5\%}$$)
std_textureSampleCompare.ts 103.11 kB ($${\color{red}+300.5\%}$$)
std_textureSampleLevel.ts 103.10 kB ($${\color{red}+300.5\%}$$)
std_textureSampleBias.ts 103.10 kB ($${\color{red}+300.5\%}$$)
std_textureSampleGrad.ts 103.10 kB ($${\color{red}+300.5\%}$$)
std_textureSample.ts 103.10 kB ($${\color{red}+300.5\%}$$)
std_textureStore.ts 103.10 kB ($${\color{red}+300.5\%}$$)
std_textureLoad.ts 103.10 kB ($${\color{red}+300.5\%}$$)
d_alignmentOf.ts 87.37 kB ($${\color{red}+299.8\%}$$)
std_translation4.ts 103.10 kB ($${\color{red}+282.0\%}$$)
std_rotationX4.ts 103.10 kB ($${\color{red}+282.0\%}$$)
std_rotationY4.ts 103.10 kB ($${\color{red}+282.0\%}$$)
std_rotationZ4.ts 103.10 kB ($${\color{red}+282.0\%}$$)
std_identity2.ts 103.09 kB ($${\color{red}+282.0\%}$$)
std_identity3.ts 103.09 kB ($${\color{red}+282.0\%}$$)
std_identity4.ts 103.09 kB ($${\color{red}+282.0\%}$$)
std_scaling4.ts 103.09 kB ($${\color{red}+282.0\%}$$)
d_isBuiltin.ts 87.37 kB ($${\color{red}+255.5\%}$$)
d_sizeOf.ts 87.36 kB ($${\color{red}+254.8\%}$$)
d_isContiguous.ts 87.37 kB ($${\color{red}+254.7\%}$$)
d_getLongestContiguousPrefix.ts 87.38 kB ($${\color{red}+254.6\%}$$)
d_arrayOf.ts 87.36 kB ($${\color{red}+233.8\%}$$)
d_size.ts 87.36 kB ($${\color{red}+232.0\%}$$)
d_align.ts 87.36 kB ($${\color{red}+232.0\%}$$)
d_location.ts 87.36 kB ($${\color{red}+232.0\%}$$)
d_interpolate.ts 87.37 kB ($${\color{red}+232.0\%}$$)
d_invariant.ts 87.37 kB ($${\color{red}+227.4\%}$$)
d_mat4x4f.ts 87.36 kB ($${\color{red}+223.7\%}$$)
d_mat2x2f.ts 87.36 kB ($${\color{red}+223.7\%}$$)
d_mat3x3f.ts 87.36 kB ($${\color{red}+223.7\%}$$)
d_matToArray.ts 87.37 kB ($${\color{red}+222.1\%}$$)
d_builtin.ts 87.36 kB ($${\color{red}+205.1\%}$$)
std_unpack2x16float.ts 103.10 kB ($${\color{red}+186.8\%}$$)
std_unpack4x8unorm.ts 103.10 kB ($${\color{red}+186.8\%}$$)
std_pack2x16float.ts 103.10 kB ($${\color{red}+186.8\%}$$)
std_pack4x8unorm.ts 103.10 kB ($${\color{red}+186.8\%}$$)
std_bitcastU32toF32.ts 103.10 kB ($${\color{red}+133.3\%}$$)
std_bitcastU32toI32.ts 103.10 kB ($${\color{red}+133.3\%}$$)
std_neg.ts 103.09 kB ($${\color{red}+113.2\%}$$)
std_bitShiftRight.ts 103.10 kB ($${\color{red}+113.2\%}$$)
std_bitShiftLeft.ts 103.10 kB ($${\color{red}+113.2\%}$$)
std_add.ts 103.09 kB ($${\color{red}+113.1\%}$$)
std_div.ts 103.09 kB ($${\color{red}+113.1\%}$$)
std_mod.ts 103.09 kB ($${\color{red}+113.1\%}$$)
std_mul.ts 103.09 kB ($${\color{red}+113.1\%}$$)
std_sub.ts 103.09 kB ($${\color{red}+113.1\%}$$)
std_translate4.ts 103.10 kB ($${\color{red}+109.9\%}$$)
std_rotateX4.ts 103.09 kB ($${\color{red}+109.9\%}$$)
std_scale4.ts 103.09 kB ($${\color{red}+109.9\%}$$)
std_rotateY4.ts 103.09 kB ($${\color{red}+109.8\%}$$)
std_rotateZ4.ts 103.09 kB ($${\color{red}+109.8\%}$$)
d_memoryLayoutOf.ts 87.37 kB ($${\color{red}+108.3\%}$$)
std_and.ts 103.09 kB ($${\color{red}+99.3\%}$$)
std_or.ts 103.09 kB ($${\color{red}+99.3\%}$$)
std_select.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_allEq.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_all.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_not.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_eq.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_lt.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_ne.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_isCloseTo.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_any.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_ge.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_gt.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_le.ts 103.09 kB ($${\color{red}+99.2\%}$$)
std_dot4U8Packed.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_length.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_countTrailingZeros.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_distance.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_dot.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_countLeadingZeros.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_firstTrailingBit.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_firstLeadingBit.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_fract.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_frexp.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_modf.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_quantizeToF16.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_mix.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_countOneBits.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_dot4I8Packed.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_determinant.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_extractBits.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_faceForward.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_inverseSqrt.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_reverseBits.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_insertBits.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_smoothstep.ts 103.10 kB ($${\color{red}+56.2\%}$$)
std_normalize.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_transpose.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_saturate.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_degrees.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_radians.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_reflect.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_refract.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_acosh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_asinh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_atan2.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_atanh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_clamp.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_cross.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_floor.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_ldexp.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_round.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_trunc.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_acos.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_asin.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_atan.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_ceil.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_cosh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_exp2.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_log2.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_sign.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_sinh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_sqrt.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_step.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_tanh.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_abs.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_cos.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_exp.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_fma.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_log.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_max.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_min.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_pow.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_sin.ts 103.09 kB ($${\color{red}+56.2\%}$$)
std_tan.ts 103.09 kB ($${\color{red}+56.2\%}$$)
common_fullScreenTriangle.ts 57.12 kB ($${\color{red}+41.6\%}$$)
common_writeSoA.ts 57.11 kB ($${\color{red}+38.6\%}$$)
STATIC_allImports.ts 287.07 kB ($${\color{green}-1.7\%}$$)
STATIC_d.ts 87.36 kB ($${\color{green}-2.6\%}$$)
STATIC_std.ts 103.08 kB ($${\color{green}-2.7\%}$$)

If you wish to run a comparison for other, slower bundlers, run the 'Tree-shake test' from the GitHub Actions menu.

@github-actions

github-actions Bot commented Jun 24, 2026

Copy link
Copy Markdown

Resolution Time Benchmark

---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Random Branching (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.67, 1.36, 2.67, 4.19, 4.89, 8.01, 14.83, 18.30]
  line [0.62, 1.31, 3.12, 4.10, 4.93, 8.09, 15.01, 15.23]
  line [0.67, 1.31, 2.82, 4.05, 5.00, 7.41, 13.60, 15.40]
Loading
---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Linear Recursion (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.21, 0.40, 0.50, 0.62, 0.80, 0.86, 1.03, 1.10]
  line [0.22, 0.35, 0.50, 0.57, 0.80, 0.80, 1.01, 1.08]
  line [0.24, 0.41, 0.52, 0.64, 0.86, 0.83, 1.01, 1.11]
Loading
---
config:
  themeVariables:
    xyChart:
      plotColorPalette: "#E63946, #3B82F6, #059669"
---
xychart
  title "Full Tree (🔴 PR | 🔵 main | 🟢 release)"
  x-axis "max depth" [1, 2, 3, 4, 5, 6, 7, 8]
  y-axis "time (ms)"
  line [0.70, 1.40, 2.81, 4.58, 8.46, 17.84, 37.80, 76.04]
  line [0.66, 1.51, 2.95, 4.28, 8.61, 17.96, 37.77, 76.96]
  line [0.65, 1.44, 2.93, 4.41, 8.28, 17.16, 36.54, 73.99]
Loading

@aleksanderkatan

Copy link
Copy Markdown
Contributor Author

@pullfrog review

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Important

The new in externalMap check on packages/typegpu/src/core/resolve/externals.ts:98 walks the prototype chain, so WGSL identifiers like toString, constructor, or valueOf are incorrectly treated as missing externals and trigger spurious warnings. See the inline comment for the one-line fix.

Reviewed changes — a rewrite of replaceExternalsInWgsl that resolves external property chains in a single regex pass instead of recursing per external key.

  • Single-pass external resolutionreplaceExternalsInWgsl now finds all bounded identifier chains, walks them until a resolvable value is found, and caches resolved values.
  • Removed unused-external warning — the call to warn when an external key isn't used has been removed.
  • Test and snapshot updatesdeclare.test.ts, resolve.test.ts, and several console-log snapshots were updated for the new resolution ordering.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using openrouter/moonshotai/kimi-k2.7-code (free via Pullfrog for OSS) | 𝕏

Comment thread packages/typegpu/src/core/resolve/externals.ts Outdated
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

fix: External traversal for raw wgsl implemented functions

1 participant