Skip to content

feat: Support TRANSIENT_ATTACHMENT for Textures and add an escape hatch#2692

Open
reczkok wants to merge 8 commits into
mainfrom
feat/transient-textures
Open

feat: Support TRANSIENT_ATTACHMENT for Textures and add an escape hatch#2692
reczkok wants to merge 8 commits into
mainfrom
feat/transient-textures

Conversation

@reczkok

@reczkok reczkok commented Jul 5, 2026

Copy link
Copy Markdown
Contributor

This PR also adds setFlags for textures, it's not addFlags like for the buffers because i believe for the escape hatch we should give full control (for example addFlags would've not been enough for users wanting to use TRANSIENT_ATTACHMENT before we officially support it since it is exclusive with the default copy flags, I believe buffers should also expose such a method in the future)

@reczkok reczkok changed the title feat: Support TRANSIENT_ATTACHMENT for Textures feat: Support TRANSIENT_ATTACHMENT for Textures Jul 5, 2026
@reczkok reczkok marked this pull request as ready for review July 5, 2026 19:13
Copilot AI review requested due to automatic review settings July 5, 2026 19:13
@github-actions

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

benchmark
view benchmark

commit
view commit

@github-actions

github-actions Bot commented Jul 5, 2026

Copy link
Copy Markdown

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

🟢 Decreased ➖ Unchanged 🔴 Increased (max 0.20%) ❔ Unknown
0 299 21 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.92 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 Jul 5, 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.91, 1.85, 4.25, 6.10, 6.59, 9.58, 20.85, 21.27]
  line [0.87, 1.71, 3.79, 6.21, 7.05, 9.96, 21.13, 24.71]
  line [0.83, 1.78, 3.73, 5.69, 6.55, 10.46, 20.71, 23.26]
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.26, 0.49, 0.63, 0.85, 1.08, 1.15, 1.35, 1.51]
  line [0.25, 0.46, 0.61, 0.72, 1.08, 1.07, 1.29, 1.47]
  line [0.27, 0.49, 0.64, 0.76, 1.07, 1.13, 1.34, 1.46]
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.92, 1.98, 3.66, 5.86, 11.64, 24.45, 51.43, 106.59]
  line [0.80, 1.98, 3.43, 5.92, 11.93, 24.65, 51.65, 105.50]
  line [0.99, 2.03, 3.56, 5.89, 11.66, 24.59, 51.95, 104.82]
Loading

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.

Pull request overview

Adds support for creating “transient” (memoryless) textures by exposing a new $usage('transient') option and mapping it to WebGPU’s GPUTextureUsage.TRANSIENT_ATTACHMENT usage bit.

Changes:

  • Added a new 'transient' usage literal to the texture usage extension/type system.
  • Updated TgpuTextureImpl.$usage() to apply GPUTextureUsage.TRANSIENT_ATTACHMENT | GPUTextureUsage.RENDER_ATTACHMENT when 'transient' is requested.
  • Added a test asserting transient textures are created with the exact intended WebGPU usage bits.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
packages/typegpu/tests/texture.test.ts Adds a regression test asserting transient textures are created with `TRANSIENT_ATTACHMENT
packages/typegpu/src/core/texture/usageExtension.ts Extends AllowedUsages and the literal-to-flag map to include 'transient'.
packages/typegpu/src/core/texture/texture.ts Implements 'transient' handling in $usage() by manipulating GPUTextureUsage flags and usableAsRender.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread packages/typegpu/src/core/texture/texture.ts Outdated
@reczkok reczkok changed the title feat: Support TRANSIENT_ATTACHMENT for Textures feat: Support TRANSIENT_ATTACHMENT for Textures and add an escape hatch Jul 5, 2026

@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

transient can currently be combined with incompatible texture usages that produce an invalid WebGPU descriptor.

Reviewed changes — Added support for the WebGPU TRANSIENT_ATTACHMENT texture usage through a new transient usage literal.

  • packages/typegpu/src/core/texture/texture.ts — Extended $usage to accept 'transient' and set the required TRANSIENT_ATTACHMENT | RENDER_ATTACHMENT bits while clearing copy flags.
  • packages/typegpu/src/core/texture/usageExtension.ts — Mapped transient to RenderFlag and added it to AllowedUsages.
  • packages/typegpu/tests/texture.test.ts — Added a test verifying the exact WebGPU usage bits and resulting type.

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

Comment thread packages/typegpu/src/core/texture/texture.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 $setFlags escape hatch overwrites #flags without updating the runtime usableAs* booleans, leaving internal state inconsistent.

Reviewed changes (since 38e05a4) — Added a $setFlags(flags) method that lets callers overwrite a texture's WebGPU usage flags directly.

  • packages/typegpu/src/core/texture/texture.ts — Added $setFlags to the TgpuTexture interface and to TgpuTextureImpl.
  • packages/typegpu/tests/texture.test.ts — Added a test verifying $setFlags passes the exact flags through to createTexture.

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

Comment thread packages/typegpu/src/core/texture/texture.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 transient-conflict validation added in this commit looks correct, but the outstanding $setFlags runtime-state concern from the prior review still needs to be addressed before merging.

Reviewed changes (since f466301) — Added runtime validation and tests to prevent transient from being combined with sampled or storage.

  • packages/typegpu/src/core/texture/texture.ts — Now throws when transient is combined with sampled/storage and assigns the exact TRANSIENT_ATTACHMENT | RENDER_ATTACHMENT bits.
  • packages/typegpu/tests/texture.test.ts — Added a test covering the runtime rejection of transient + sampled.

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

Comment thread packages/typegpu/tests/texture.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 $overrideFlags escape hatch creates a false positive in the $usage('transient') conflict guard.

Reviewed changes — Renamed the raw-flags escape hatch to $overrideFlags, documented it, and updated its runtime-boolean behavior.

  • Renamed $setFlags to $overrideFlags in packages/typegpu/src/core/texture/texture.ts and updated the test accordingly.
  • Updated $overrideFlags return type and side effects — it now sets usableAsSampled, usableAsStorage, and usableAsRender to true and returns this & SampledFlag & StorageFlag & RenderFlag.
  • Added documentation for $overrideFlags in apps/typegpu-docs/src/content/docs/apis/textures.mdx with a caution note explaining that it replaces inferred flags and marks the texture as usable through all typed APIs.

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

Comment thread packages/typegpu/src/core/texture/texture.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.

test

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

Comment thread packages/typegpu/src/core/texture/texture.ts Outdated
Comment thread packages/typegpu/src/core/texture/texture.ts Outdated
Comment thread packages/typegpu/src/core/texture/texture.ts Outdated
Comment thread packages/typegpu/src/core/texture/texture.ts Outdated

if (hasTransient) {
this.#flags = GPUTextureUsage.TRANSIENT_ATTACHMENT | GPUTextureUsage.RENDER_ATTACHMENT;
}

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 think you're doing this already above on line 289

this.#flags |= hasTransient
  ? GPUTextureUsage.TRANSIENT_ATTACHMENT | GPUTextureUsage.RENDER_ATTACHMENT
  : 0;

@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 — Refined $overrideFlags typing and the transient-conflict guard in .$usage().

  • Changed $overrideFlags return type in packages/typegpu/src/core/texture/texture.ts from UnionToIntersection<LiteralToExtensionMap['sampled' | 'storage' | 'render']> to the equivalent StorageFlag & SampledFlag & RenderFlag intersection.
  • Simplified the transient-conflict guard so it checks actual GPU usage bits in #flags instead of usableAs* booleans, and restores the previous flags before throwing.
  • Updated type imports to pull StorageFlag, SampledFlag, and RenderFlag directly from their source modules.

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

@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 — Refactored the $usage() flag logic in packages/typegpu/src/core/texture/texture.ts for readability without changing behavior.

  • Reordered packages/typegpu/src/core/texture/texture.ts so that $usage() computes bindingFlags, transientFlags, and nextFlags before checking the transient-vs-sampled/storage conflict, throwing before mutating #flags rather than assigning then restoring.
  • The conflict guard now derives hasTransientUsage and hasSampledOrStorageUsage from the same precomputed flags, making the mutually-exclusive transient rule easier to follow.
  • Texture unit tests continue to pass (38 passed).

Pullfrog  | View workflow run | 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

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants