D833 - A texture binds its mip chain, base level to last

Status: decided Date: 2026-10-14

A sampled texture's BindTexture carries every level from the descriptor's BASE_LEVEL to its LAST_LEVEL, finest first. Each level's texels are packed at its own extent: each side is the level above's halved, and never less than one. The pipeline reads each level where its layout places it in the chain (chain_level), as it already reads the base level. The Vulkan backend uploads every level into one image, one copy region a level. The sampler then reaches every level its mip filter and LOD range allow.

A chain whose levels cannot all be placed binds its base level alone, as before. So does a block format, a cube or a volume, whose chains are not modelled.

Why: a texture bound as its base level samples that level at every distance. A minified texture then reads fine texels where the guest built coarse ones, and gl1-probe's mipmap-levels, which draws an 8x8 chain over 4x4 pixels, read level 0's red for level 1's green. The levels' places are already modelled for colour targets and textures alike (SurfaceLayout::level_offset, the mip tail), so reading them is the same arithmetic per level.

Rejected: