Skip to content

impr: Unify bufferShorthand and bufferUsage#2665

Open
aleksanderkatan wants to merge 29 commits into
mainfrom
impr-unify-shorthand-and-as
Open

impr: Unify bufferShorthand and bufferUsage#2665
aleksanderkatan wants to merge 29 commits into
mainfrom
impr-unify-shorthand-and-as

Conversation

@aleksanderkatan

@aleksanderkatan aleksanderkatan commented Jun 30, 2026

Copy link
Copy Markdown
Contributor

bufferUsage.ts functionality was moved.

  • TgpuFixedBufferUsage was merged into TgpuBufferShorthand,
  • TgpuLaidOutBufferImpl was moved to another file,
  • remaining types were deprecated.

I also moved isUsableAs* guards to types.ts.

Buffer usages were not usable in bind group layouts, and so are shorthands (ATM), so there is no issue there.

buffer.$usage(...).as(...) now returns a bufferShorthand. I think we should rename BufferShorthand, for example to FixedBuffer (in another PR so that this one is easier to review), what do you think?

@github-actions

github-actions Bot commented Jun 30, 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@5a99177ed072c8ea9ce17e6e7df9a2af99457939
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/cli@5a99177ed072c8ea9ce17e6e7df9a2af99457939
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/noise@5a99177ed072c8ea9ce17e6e7df9a2af99457939
https://pkg.pr.new/software-mansion/TypeGPU/@typegpu/react@5a99177ed072c8ea9ce17e6e7df9a2af99457939
https://pkg.pr.new/software-mansion/TypeGPU/unplugin-typegpu@5a99177ed072c8ea9ce17e6e7df9a2af99457939

benchmark
view benchmark

commit
view commit

@github-actions

github-actions Bot commented Jun 30, 2026

Copy link
Copy Markdown

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

🟢 Decreased (max -0.13%) ➖ Unchanged 🔴 Increased ❔ Unknown
21 299 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.65 kB ($${\color{red}+12128.5\%}$$)
d_sampler.ts 87.66 kB ($${\color{red}+11997.0\%}$$)
d_isPtr.ts 87.65 kB ($${\color{red}+11835.9\%}$$)
d_comparisonSampler.ts 87.67 kB ($${\color{red}+11821.6\%}$$)
d_isSizeAttrib.ts 87.66 kB ($${\color{red}+11805.2\%}$$)
d_isWgslArray.ts 87.66 kB ($${\color{red}+11805.0\%}$$)
d_isAlignAttrib.ts 87.66 kB ($${\color{red}+11789.5\%}$$)
d_isWgslStruct.ts 87.66 kB ($${\color{red}+11789.4\%}$$)
d_isAtomic.ts 87.66 kB ($${\color{red}+11788.9\%}$$)
d_isBuiltinAttrib.ts 87.66 kB ($${\color{red}+11758.4\%}$$)
d_isLocationAttrib.ts 87.67 kB ($${\color{red}+11742.9\%}$$)
d_isDecorated.ts 87.66 kB ($${\color{red}+11742.2\%}$$)
d_isInterpolateAttrib.ts 87.67 kB ($${\color{red}+11696.6\%}$$)
d_atomic.ts 87.66 kB ($${\color{red}+11422.3\%}$$)
d_ptrHandle.ts 87.66 kB ($${\color{red}+10447.8\%}$$)
d_ptrUniform.ts 87.66 kB ($${\color{red}+10435.6\%}$$)
d_ptrStorage.ts 87.66 kB ($${\color{red}+10386.3\%}$$)
d_ptrPrivate.ts 87.66 kB ($${\color{red}+10361.9\%}$$)
d_ptrFn.ts 87.65 kB ($${\color{red}+10349.1\%}$$)
d_ptrWorkgroup.ts 87.66 kB ($${\color{red}+10337.8\%}$$)
d_textureExternal.ts 87.66 kB ($${\color{red}+10182.7\%}$$)
d_textureStorage1d.ts 87.67 kB ($${\color{red}+8556.6\%}$$)
d_textureStorage2d.ts 87.67 kB ($${\color{red}+8556.6\%}$$)
d_textureStorage3d.ts 87.67 kB ($${\color{red}+8556.6\%}$$)
d_textureStorage2dArray.ts 87.67 kB ($${\color{red}+8409.4\%}$$)
d_isDisarray.ts 87.66 kB ($${\color{red}+7780.9\%}$$)
d_isUnstruct.ts 87.66 kB ($${\color{red}+7780.9\%}$$)
d_isLooseDecorated.ts 87.67 kB ($${\color{red}+7733.2\%}$$)
d_isLooseData.ts 87.66 kB ($${\color{red}+7468.6\%}$$)
d_isWgslData.ts 87.66 kB ($${\color{red}+6588.7\%}$$)
d_unstruct.ts 87.66 kB ($${\color{red}+5563.2\%}$$)
d_isData.ts 87.66 kB ($${\color{red}+4749.2\%}$$)
d_deepEqual.ts 87.66 kB ($${\color{red}+3898.3\%}$$)
d_struct.ts 87.66 kB ($${\color{red}+2331.8\%}$$)
d_ref.ts 87.65 kB ($${\color{red}+1730.6\%}$$)
std_discard.ts 105.47 kB ($${\color{red}+637.5\%}$$)
std_isBeingTranspiled.ts 105.48 kB ($${\color{red}+626.9\%}$$)
std_copy.ts 105.47 kB ($${\color{red}+625.2\%}$$)
std_arrayLength.ts 105.48 kB ($${\color{red}+625.0\%}$$)
std_getTargetShaderLanguage.ts 105.49 kB ($${\color{red}+623.7\%}$$)
std_extensionEnabled.ts 105.48 kB ($${\color{red}+621.1\%}$$)
std_range.ts 105.47 kB ($${\color{red}+608.1\%}$$)
std_dpdx.ts 105.47 kB ($${\color{red}+591.1\%}$$)
std_fwidthCoarse.ts 105.48 kB ($${\color{red}+590.9\%}$$)
std_dpdxCoarse.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_dpdyCoarse.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_fwidthFine.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_dpdxFine.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_dpdyFine.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_fwidth.ts 105.47 kB ($${\color{red}+590.8\%}$$)
std_dpdy.ts 105.47 kB ($${\color{red}+590.8\%}$$)
d_bool.ts 87.65 kB ($${\color{red}+573.3\%}$$)
d_f16.ts 87.65 kB ($${\color{red}+573.3\%}$$)
d_f32.ts 87.65 kB ($${\color{red}+573.3\%}$$)
d_i32.ts 87.65 kB ($${\color{red}+573.3\%}$$)
d_u32.ts 87.65 kB ($${\color{red}+573.3\%}$$)
d_u16.ts 87.65 kB ($${\color{red}+572.1\%}$$)
std_atomicLoad.ts 105.47 kB ($${\color{red}+556.7\%}$$)
std_textureBarrier.ts 105.48 kB ($${\color{red}+556.4\%}$$)
std_atomicStore.ts 105.48 kB ($${\color{red}+556.4\%}$$)
std_workgroupBarrier.ts 105.48 kB ($${\color{red}+556.2\%}$$)
std_storageBarrier.ts 105.48 kB ($${\color{red}+556.2\%}$$)
std_atomicAdd.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicAnd.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicMax.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicMin.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicSub.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicXor.ts 105.47 kB ($${\color{red}+556.2\%}$$)
std_atomicOr.ts 105.47 kB ($${\color{red}+556.2\%}$$)
d_textureDepth2d.ts 87.66 kB ($${\color{red}+551.2\%}$$)
d_textureDepthCube.ts 87.67 kB ($${\color{red}+550.9\%}$$)
d_texture1d.ts 87.66 kB ($${\color{red}+550.6\%}$$)
d_texture2d.ts 87.66 kB ($${\color{red}+550.6\%}$$)
d_texture3d.ts 87.66 kB ($${\color{red}+550.6\%}$$)
d_textureDepth2dArray.ts 87.67 kB ($${\color{red}+550.4\%}$$)
d_textureCube.ts 87.66 kB ($${\color{red}+550.4\%}$$)
d_textureDepthCubeArray.ts 87.67 kB ($${\color{red}+550.1\%}$$)
d_textureDepthMultisampled2d.ts 87.67 kB ($${\color{red}+550.1\%}$$)
d_texture2dArray.ts 87.66 kB ($${\color{red}+549.8\%}$$)
d_textureCubeArray.ts 87.67 kB ($${\color{red}+549.6\%}$$)
d_textureMultisampled2d.ts 87.67 kB ($${\color{red}+549.5\%}$$)
d_disarrayOf.ts 87.66 kB ($${\color{red}+482.0\%}$$)
d_vec2b.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec2f.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec2h.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec2i.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec2u.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec3b.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec3f.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec3h.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec3i.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec3u.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec4b.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec4f.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec4h.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec4i.ts 87.65 kB ($${\color{red}+350.7\%}$$)
d_vec4u.ts 87.65 kB ($${\color{red}+350.7\%}$$)
std_subgroupAdd.ts 105.48 kB ($${\color{red}+332.5\%}$$)
std_subgroupBroadcastFirst.ts 105.49 kB ($${\color{red}+332.4\%}$$)
std_subgroupExclusiveAdd.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupExclusiveMul.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupInclusiveAdd.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupInclusiveMul.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupShuffleDown.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupShuffleXor.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupBroadcast.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupShuffleUp.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupShuffle.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupBallot.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupElect.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupAll.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupAnd.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupAny.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupMax.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupMin.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupMul.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupXor.ts 105.48 kB ($${\color{red}+332.4\%}$$)
std_subgroupOr.ts 105.47 kB ($${\color{red}+332.4\%}$$)
d_formatToWGSLType.ts 87.67 kB ($${\color{red}+318.6\%}$$)
d_uint8.ts 87.65 kB ($${\color{red}+318.5\%}$$)
d_unorm10_10_10_2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm8x4_bgra.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float16x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float16x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float32x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float32x3.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float32x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm16x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm16x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm16x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm16x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint16x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint16x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint32x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint32x3.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint32x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm8x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm8x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint16x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint16x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint32x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint32x3.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint32x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm8x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm8x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float16.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_float32.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint8x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint8x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm16.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint8x2.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint8x4.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm16.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint16.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint32.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_snorm8.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint16.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_uint32.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_unorm8.ts 87.66 kB ($${\color{red}+318.4\%}$$)
d_sint8.ts 87.65 kB ($${\color{red}+318.4\%}$$)
d_packedFormats.ts 87.66 kB ($${\color{red}+318.1\%}$$)
d_isPackedData.ts 87.66 kB ($${\color{red}+317.2\%}$$)
std_textureDimensions.ts 105.48 kB ($${\color{red}+305.7\%}$$)
std_textureGather.ts 105.48 kB ($${\color{red}+305.7\%}$$)
std_textureSampleBaseClampToEdge.ts 105.49 kB ($${\color{red}+305.7\%}$$)
std_textureSampleCompareLevel.ts 105.49 kB ($${\color{red}+305.7\%}$$)
std_textureSampleCompare.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureSampleLevel.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureSampleBias.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureSampleGrad.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureSample.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureStore.ts 105.48 kB ($${\color{red}+305.6\%}$$)
std_textureLoad.ts 105.48 kB ($${\color{red}+305.6\%}$$)
d_alignmentOf.ts 87.66 kB ($${\color{red}+300.4\%}$$)
std_translation4.ts 105.48 kB ($${\color{red}+288.3\%}$$)
std_rotationX4.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_rotationY4.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_rotationZ4.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_identity2.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_identity3.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_identity4.ts 105.47 kB ($${\color{red}+288.3\%}$$)
std_scaling4.ts 105.47 kB ($${\color{red}+288.3\%}$$)
d_isBuiltin.ts 87.66 kB ($${\color{red}+256.1\%}$$)
d_sizeOf.ts 87.66 kB ($${\color{red}+255.4\%}$$)
d_isContiguous.ts 87.66 kB ($${\color{red}+255.3\%}$$)
d_getLongestContiguousPrefix.ts 87.67 kB ($${\color{red}+255.2\%}$$)
d_arrayOf.ts 87.66 kB ($${\color{red}+234.4\%}$$)
d_size.ts 87.65 kB ($${\color{red}+232.6\%}$$)
d_align.ts 87.65 kB ($${\color{red}+232.6\%}$$)
d_location.ts 87.66 kB ($${\color{red}+232.6\%}$$)
d_interpolate.ts 87.66 kB ($${\color{red}+232.5\%}$$)
d_invariant.ts 87.66 kB ($${\color{red}+227.9\%}$$)
d_mat4x4f.ts 87.66 kB ($${\color{red}+222.7\%}$$)
d_mat2x2f.ts 87.66 kB ($${\color{red}+222.7\%}$$)
d_mat3x3f.ts 87.66 kB ($${\color{red}+222.7\%}$$)
d_matToArray.ts 87.66 kB ($${\color{red}+221.2\%}$$)
d_builtin.ts 87.66 kB ($${\color{red}+205.7\%}$$)
std_unpack2x16float.ts 105.48 kB ($${\color{red}+192.2\%}$$)
std_unpack4x8unorm.ts 105.48 kB ($${\color{red}+192.2\%}$$)
std_pack2x16float.ts 105.48 kB ($${\color{red}+192.2\%}$$)
std_pack4x8unorm.ts 105.48 kB ($${\color{red}+192.2\%}$$)
std_bitcastU32toF32.ts 105.48 kB ($${\color{red}+137.6\%}$$)
std_bitcastU32toI32.ts 105.48 kB ($${\color{red}+137.6\%}$$)
std_neg.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_bitShiftRight.ts 105.48 kB ($${\color{red}+116.8\%}$$)
std_bitShiftLeft.ts 105.48 kB ($${\color{red}+116.8\%}$$)
std_add.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_div.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_mod.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_mul.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_sub.ts 105.47 kB ($${\color{red}+116.8\%}$$)
std_translate4.ts 105.47 kB ($${\color{red}+113.1\%}$$)
std_rotateX4.ts 105.47 kB ($${\color{red}+113.1\%}$$)
std_scale4.ts 105.47 kB ($${\color{red}+113.1\%}$$)
std_rotateY4.ts 105.47 kB ($${\color{red}+113.1\%}$$)
std_rotateZ4.ts 105.47 kB ($${\color{red}+113.1\%}$$)
d_memoryLayoutOf.ts 87.66 kB ($${\color{red}+108.8\%}$$)
std_and.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_or.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_select.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_allEq.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_all.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_not.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_eq.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_lt.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_ne.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_isCloseTo.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_any.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_ge.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_gt.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_le.ts 105.47 kB ($${\color{red}+101.9\%}$$)
std_dot4U8Packed.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_length.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_countTrailingZeros.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_distance.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_dot.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_countLeadingZeros.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_firstTrailingBit.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_firstLeadingBit.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_fract.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_frexp.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_modf.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_quantizeToF16.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_mix.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_countOneBits.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_dot4I8Packed.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_determinant.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_extractBits.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_faceForward.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_inverseSqrt.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_reverseBits.ts 105.48 kB ($${\color{red}+57.0\%}$$)
std_insertBits.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_smoothstep.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_normalize.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_transpose.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_saturate.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_degrees.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_radians.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_reflect.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_refract.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_acosh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_asinh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_atan2.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_atanh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_clamp.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_cross.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_floor.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_ldexp.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_round.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_trunc.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_acos.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_asin.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_atan.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_ceil.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_cosh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_exp2.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_log2.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_sign.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_sinh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_sqrt.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_step.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_tanh.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_abs.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_cos.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_exp.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_fma.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_log.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_max.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_min.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_pow.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_sin.ts 105.47 kB ($${\color{red}+57.0\%}$$)
std_tan.ts 105.47 kB ($${\color{red}+57.0\%}$$)
common_fullScreenTriangle.ts 57.18 kB ($${\color{red}+41.5\%}$$)
common_writeSoA.ts 57.17 kB ($${\color{red}+38.6\%}$$)
STATIC_allImports.ts 289.06 kB ($${\color{green}-1.7\%}$$)
STATIC_d.ts 87.65 kB ($${\color{green}-2.6\%}$$)
STATIC_std.ts 105.46 kB ($${\color{green}-2.6\%}$$)

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 30, 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.97, 1.99, 4.26, 6.97, 7.77, 12.03, 23.53, 23.08]
  line [0.91, 2.02, 4.23, 6.79, 7.91, 10.31, 21.70, 24.41]
  line [0.95, 1.96, 4.37, 6.41, 7.56, 11.58, 22.50, 24.33]
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.31, 0.55, 0.72, 0.87, 1.22, 1.19, 1.53, 1.62]
  line [0.35, 0.58, 0.74, 0.83, 1.15, 1.27, 1.49, 1.62]
  line [0.32, 0.52, 0.71, 0.86, 1.14, 1.22, 1.49, 1.62]
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.78, 1.99, 3.85, 6.45, 12.92, 27.03, 56.67, 116.13]
  line [0.81, 2.13, 4.04, 6.40, 12.49, 26.29, 58.32, 116.84]
  line [0.81, 2.11, 3.96, 6.46, 12.26, 26.35, 56.57, 116.30]
Loading

@aleksanderkatan aleksanderkatan added the breaking change The completion of this task will not be backwards compatible label Jun 30, 2026
@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

Two regressions slipped into the buffer-usage/shorthand unification: the standalone uniform() constructor loses its generic type parameter, and the deprecated isBufferUsage() predicate is now permanently false because no runtime object reports resourceType === \'buffer-usage\'.

Reviewed changes — unified TgpuBufferShorthand with the old fixed buffer-usage implementation, deprecated the TgpuBufferUsage types, moved TgpuLaidOutBufferImpl to a new file, and updated buffer.as(...) + tests/examples to use the new TgpuMutable/TgpuReadonly/TgpuUniform names.

  • Merged TgpuFixedBufferUsage into TgpuBufferShorthand in packages/typegpu/src/core/buffer/bufferShorthand.ts; buffer.as(...) now returns a shorthand instance directly.
  • Deprecated TgpuBufferUsage types in packages/typegpu/src/core/buffer/bufferUsage.ts, keeping TgpuBufferUniform/TgpuBufferReadonly/TgpuBufferMutable as aliases with a TODO to remove in #2666.
  • Moved TgpuLaidOutBufferImpl to packages/typegpu/src/core/buffer/laidOutBuffer.ts and changed its resourceType to \'laid-out-buffer\'.
  • Updated tests/examples from TgpuBufferMutable/TgpuBufferReadonly to TgpuMutable/TgpuReadonly.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Comment thread packages/typegpu/src/core/buffer/bufferShorthand.ts Outdated
Comment thread packages/typegpu/src/types.ts Outdated
@aleksanderkatan

Copy link
Copy Markdown
Contributor Author

@pullfrog review

@aleksanderkatan aleksanderkatan marked this pull request as ready for review July 2, 2026 10:55
Copilot AI review requested due to automatic review settings July 2, 2026 10:55

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@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.

✅ No new issues found.

Reviewed changes — the unification of bufferShorthand and bufferUsage: TgpuFixedBufferUsage is merged into TgpuBufferShorthandImpl, constructors moved, old TgpuBuffer* types deprecated and left in bufferUsage.ts, TgpuLaidOutBufferImpl extracted into its own file, and the isUsableAs* runtime guards centralized in types.ts.

  • Merges TgpuFixedBufferUsage into TgpuBufferShorthandImpl in packages/typegpu/src/core/buffer/bufferShorthand.ts.
  • Moves mutable, readonly, uniform constructors from bufferUsage.ts to bufferShorthand.ts, so buffer.as(...) now returns shorthand types (TgpuMutable, TgpuReadonly, TgpuUniform).
  • Deprecates TgpuBufferUniform, TgpuBufferReadonly, TgpuBufferMutable while keeping them in bufferUsage.ts for backward compatibility.
  • Moves TgpuLaidOutBufferImpl to packages/typegpu/src/core/buffer/laidOutBuffer.ts and centralizes isUsableAs* guards in packages/typegpu/src/types.ts.
  • Moves tests from bufferUsage.test.ts into bufferShorthands.test.ts and updates the fluid-double-buffering docs example to the new type names.

Pullfrog  | View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

declare readonly [$repr]: Infer<TData>;

readonly [$internal]: { readonly dataType: TData };
readonly resourceType = 'laid-out-buffer' as const;

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.

ℹ️ The resourceType token changed from 'buffer-usage' to 'laid-out-buffer'. That's consistent with the file split and no internal code branches on it, but it's a public-facing breaking change worth calling out in the changelog/notes since any user code inspecting resourceType will observe the difference.

@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

This PR introduces a type regression: the new TgpuMutable/TgpuReadonly/TgpuUniform shorthand types are no longer assignable to ResolvableObject, so tgpu.resolve([buffer.as('mutable')]) no longer type-checks. The deprecated TgpuBuffer* aliases also describe runtime values that no longer exist. Both should be fixed before merging.

Reviewed changes — unify bufferShorthand and bufferUsage by moving the usage implementation into TgpuBufferShorthandImpl, relocating TgpuLaidOutBufferImpl, deprecating the old TgpuBuffer* interfaces, and moving isUsableAs* guards to types.ts.

  • Move usage behavior into TgpuBufferShorthandImplbuffer.$usage(...).as(...) now returns a TgpuBufferShorthand (e.g. TgpuMutable) instead of a separate TgpuBufferUsage.
  • Relocate TgpuLaidOutBufferImpl to packages/typegpu/src/core/buffer/laidOutBuffer.ts.
  • Deprecate old buffer-usage interfacesTgpuBufferUniform, TgpuBufferReadonly, TgpuBufferMutable are kept as deprecated aliases.
  • Move type guardsisBuffer, isUsableAs*, isGPUBuffer are centralized in types.ts.
  • Update tests and one example — usage tests moved into bufferShorthands.test.ts and fluid-double-buffering updated to TgpuReadonly/TgpuMutable.

ℹ️ Stale tutorial code still uses deprecated TgpuBuffer* types

The triangle-to-boids tutorial source and code snippets still import and use TgpuBufferReadonly and TgpuBufferMutable. Since the PR already migrated fluid-double-buffering to TgpuReadonly/TgpuMutable, the tutorial should be updated for consistency.

  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/index.mdx:1007-1008
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step7-typegpu.ts:8-9,51-52
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step8-typegpu.ts:8-9,50-51
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step9-typegpu.ts:13-14,76-77

Note: 1 inline comment(s) dropped because they did not anchor to lines inside the PR diff:

  • packages/typegpu/src/core/buffer/bufferShorthand.ts:27 (RIGHT) — line 27 (RIGHT) is not inside a diff hunk

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

/**
* @deprecated use TgpuUniform instead.
*/
export interface TgpuBufferUniform<TData extends BaseData> extends TgpuBufferUsage<

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.

⚠️ The deprecated TgpuBufferUniform/Readonly/Mutable interfaces describe values that no longer exist at runtime. They declare resourceType: 'buffer-usage', a .usage property, and [$internal]: { dataType }, but buffer.as(...)/root.create*(...) now return TgpuBufferShorthandImpl objects with resourceType set to the usage name, no .usage, and [$internal] = true.

Technical details
# Deprecated buffer-usage aliases are structurally inconsistent

## Affected sites
- `packages/typegpu/src/core/buffer/bufferUsage.ts:12-30``TgpuBufferUsage` interface describes a non-existent runtime shape.
- `packages/typegpu/src/core/buffer/bufferUsage.ts:35-66` — deprecated aliases extend the inconsistent interface.
- `packages/typegpu/src/indexNamedExports.ts:75-79` — aliases are still publicly exported.

## Required outcome
Either the deprecated aliases must be type-compatible with the values actually returned by the API, or they must be removed entirely.

## Suggested approach
Redefine the deprecated types as direct aliases:
```ts
/** @deprecated use TgpuReadonly instead. */
export type TgpuBufferReadonly<TData extends BaseData> = TgpuReadonly<TData>;
```
If the follow-up (#2666) removes this file anyway, deleting them now is also acceptable given the breaking-change label.

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I agree with Froggy here. I think we can both deprecate this type while still supporting existing code that supports it by just letting TgpuBufferUniform be an alias for TgpuUniform and so on.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

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

done

@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

This PR introduces a type regression: the new TgpuMutable/TgpuReadonly/TgpuUniform shorthand types are no longer assignable to ResolvableObject, so tgpu.resolve([buffer.as('mutable')]) no longer type-checks. The deprecated TgpuBuffer* aliases also describe runtime values that no longer exist. Both should be fixed before merging.

Reviewed changes — unify bufferShorthand and bufferUsage by moving the usage implementation into TgpuBufferShorthandImpl, relocating TgpuLaidOutBufferImpl, deprecating the old TgpuBuffer* interfaces, and moving isUsableAs* guards to types.ts.

  • Move usage behavior into TgpuBufferShorthandImplbuffer.$usage(...).as(...) now returns a TgpuBufferShorthand (e.g. TgpuMutable) instead of a separate TgpuBufferUsage.
  • Relocate TgpuLaidOutBufferImpl to packages/typegpu/src/core/buffer/laidOutBuffer.ts.
  • Deprecate old buffer-usage interfacesTgpuBufferUniform, TgpuBufferReadonly, TgpuBufferMutable are kept as deprecated aliases.
  • Move type guardsisBuffer, isUsableAs*, isGPUBuffer are centralized in types.ts.
  • Update tests and one example — usage tests moved into bufferShorthands.test.ts and fluid-double-buffering updated to TgpuReadonly/TgpuMutable.

ℹ️ Stale tutorial code still uses deprecated TgpuBuffer* types

The triangle-to-boids tutorial source and code snippets still import and use TgpuBufferReadonly and TgpuBufferMutable. Since the PR already migrated fluid-double-buffering to TgpuReadonly/TgpuMutable, the tutorial should be updated for consistency.

  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/index.mdx:1007-1008
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step7-typegpu.ts:8-9,51-52
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step8-typegpu.ts:8-9,50-51
  • apps/typegpu-docs/src/content/docs/tutorials/triangle-to-boids/code/step9-typegpu.ts:13-14,76-77

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Comment thread packages/typegpu/src/core/buffer/bufferShorthand.ts
Comment thread packages/typegpu/src/core/buffer/bufferUsage.ts Outdated

@cieplypolar cieplypolar left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

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

I left some comments to address before merging.

Comment thread packages/typegpu/src/core/buffer/bufferShorthand.ts
Comment thread packages/typegpu/src/core/buffer/bufferShorthand.ts
Comment thread packages/typegpu/tests/bufferShorthands.test.ts Outdated

@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 commits fix the shorthand resolvability regression raised in the prior review, but the outstanding concern that deprecated TgpuBuffer* aliases no longer match runtime values remains unaddressed.

Reviewed changes — the two commits since the prior review fixed the shorthand resolvability regression and tightened test assertions.

  • Made shorthand types resolvable by adding TgpuBufferShorthand<BaseData> to ResolvableObject in packages/typegpu/src/types.ts.
  • Added resolve coverage for buffer.as('mutable'), buffer.as('readonly'), and buffer.as('uniform') in packages/typegpu/tests/bufferShorthands.test.ts.
  • Replaced generic toThrow() assertions with inline snapshots of the expected error messages.

⚠️ Deprecated TgpuBuffer* aliases still don't match runtime values

The deprecated interfaces in packages/typegpu/src/core/buffer/bufferUsage.ts describe a resourceType: 'buffer-usage' runtime shape with a .usage property, but buffer.as(...) and root.create*(...) now return TgpuBufferShorthandImpl values whose resourceType is 'mutable', 'readonly', or 'uniform'. They therefore cannot be safely used as the deprecated types. This concern was raised in the prior Pullfrog review and has not changed with the new commits.

Technical details
# Deprecated `TgpuBuffer*` aliases are structurally inconsistent

## Affected sites
- `packages/typegpu/src/core/buffer/bufferUsage.ts:12-30``TgpuBufferUsage` interface describes a non-existent runtime shape.
- `packages/typegpu/src/core/buffer/bufferUsage.ts:35-66` — deprecated aliases extend the inconsistent interface.
- `packages/typegpu/src/indexNamedExports.ts:75-79` — aliases are still publicly exported.

## Required outcome
Either the deprecated aliases must be type-compatible with the values actually returned by the API, or they must be removed entirely.

## Open questions for the human
- Given the breaking-change label and the planned removal of this file in #2666, is keeping the aliases as migration guidance an acceptable trade-off?
- Should the follow-up issue explicitly delete these interfaces rather than maintaining them as structural dead-ends?

Pullfrog  | Fix it ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

@iwoplaza

iwoplaza commented Jul 2, 2026

Copy link
Copy Markdown
Collaborator

buffer.$usage(...).as(...) now returns a bufferShorthand. I think we should rename BufferShorthand, for example to FixedBuffer (in another PR so that this one is easier to review), what do you think?

@aleksanderkatan I agree. From what I understand, after .bound is no longer a thing, LaidOut* is no longer a public facing API, thus there is no need for a distinction between a "LaidOut" and a "Fixed" buffer usage. Maybe we can just call it a BufferUsage? Then the root.createUniform API and equivalents for other usages would be shorthands for creating buffer usages.

@aleksanderkatan

Copy link
Copy Markdown
Contributor Author

Maybe we can just call it a BufferUsage? Then the root.createUniform API and equivalents for other usages would be shorthands for creating buffer usages.

I don't really get the type name BufferUsage. The first thing I think about is the argument type for the $usage(...) method ('readonly', 'mutable', 'uniform'), and the second would be the value returned from this method, and yet BufferUsage is something different from both of those, and I think that's confusing.

@iwoplaza

iwoplaza commented Jul 6, 2026

Copy link
Copy Markdown
Collaborator

I don't really get the type name BufferUsage. The first thing I think about is the argument type for the $usage(...) method ('readonly', 'mutable', 'uniform'), and the second would be the value returned from this method, and yet BufferUsage is something different from both of those, and I think that's confusing.

@aleksanderkatan I can see that. Would BufferBinding be a better name? As in type TgpuBufferBinding = TgpuUniform | ..., isBufferShorthand -> isBufferBinding

@aleksanderkatan

aleksanderkatan commented Jul 7, 2026

Copy link
Copy Markdown
Contributor Author

BufferBinding is alright. What do you think, @reczkok @cieplypolar ?

Edit: #2693

@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.

ℹ️ No critical issues — one minor import-consolidation nit inline.

Reviewed changes — this run checked the merge from origin/main and the small adaptations it required.

  • Integrated upstream side-effect detection by passing possibleSideEffects: false to snip(...) for TgpuBufferShorthandImpl.$gpuValueOf and TgpuLaidOutBufferImpl.$gpuValueOf.
  • Updated tgpuBindGroupLayout.ts imports after the removal of deprecated pipeline/texture layout APIs, moving isBuffer, isUsableAsStorage, and isUsableAsUniform to ./types.ts and importing TgpuLaidOutBufferImpl from its new file.

Pullfrog  | Fix all ➔Fix 👍s ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Comment thread packages/typegpu/src/tgpuBindGroupLayout.ts Outdated

@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.

ℹ️ No new issues in this commit.

Reviewed changes — the latest commit cleaned up the deprecated TgpuBuffer* aliases.

  • Replaced deprecated TgpuBuffer* interfaces in packages/typegpu/src/core/buffer/bufferUsage.ts with direct type aliases to TgpuMutable/TgpuReadonly/TgpuUniform, so they now match the runtime values returned by the API.

Note: the import-consolidation nit from the previous incremental review and the informational resourceType breaking-change note remain open; they do not block this cleanup.

Pullfrog  | Fix it ➔View workflow run | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

aleksanderkatan and others added 2 commits July 7, 2026 11:49
Co-authored-by: pullfrog[bot] <226033991+pullfrog[bot]@users.noreply.github.com>
@pullfrog

pullfrog Bot commented Jul 7, 2026

Copy link
Copy Markdown
Contributor

Run failed. View the logs →

Pullfrog  | Rerun failed job ➔View workflow run | via Pullfrog | Using Kimi K2 (free via Pullfrog for OSS) | 𝕏

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

breaking change The completion of this task will not be backwards compatible

Projects

None yet

Development

Successfully merging this pull request may close these issues.

impr: Unify TgpuMutable and TgpuBufferMutable (and the Readonly versions)

4 participants