pavel-zosim: code × art → automate ● SYS.ONLINE / UTC+3

Shader Memory Layout

See how typed data fits into a shader buffer. Inspect offsets and padding, then compare a different field order.

Storage contract

Logical buffer contents, not physical VRAM allocation or register usage. The selected profile controls layout; a pasted cbuffer wrapper does not change it. Native 16-bit mode corresponds to DXC -enable-16bit-types.

Field 01
Order / remove
Field 02
Order / remove
Field 03
Order / remove

DXC legacy cbuffer · 24 B data + 24 B padding = 48 B layout span. Changes update automatically.

[ LAYOUT BUDGET ]
MetricOne block / elementRepeated data budget
Useful data24 B24 B
Padding24 B24 B
Layout span / stride48 B48 B
[ BYTE MAP / 16 BYTES PER DISPLAY ROW · 50% DATA ]
+0+1+2+3+4+5+6+7+8+9+10+11+12+13+14+15Row 0: 4 of 16 bytes contain data · 25% · sparse. Padding may be required by layout rules.0Byte 0: gain · float · component 4 B at 0 · row 25% data (sparse)1Byte 1: gain · float · component 4 B at 0 · row 25% data (sparse)1Byte 2: gain · float · component 4 B at 0 · row 25% data (sparse)1Byte 3: gain · float · component 4 B at 0 · row 25% data (sparse)1Byte 4: padding · row 25% data (sparse)·Byte 5: padding · row 25% data (sparse)·Byte 6: padding · row 25% data (sparse)·Byte 7: padding · row 25% data (sparse)·Byte 8: padding · row 25% data (sparse)·Byte 9: padding · row 25% data (sparse)·Byte 10: padding · row 25% data (sparse)·Byte 11: padding · row 25% data (sparse)·Byte 12: padding · row 25% data (sparse)·Byte 13: padding · row 25% data (sparse)·Byte 14: padding · row 25% data (sparse)·Byte 15: padding · row 25% data (sparse)·Row 16: 16 of 16 bytes contain data · 100% · dense. Padding may be required by layout rules.16Byte 16: tint.x · float4 · component 4 B at 16 · row 100% data (dense)2Byte 17: tint.x · float4 · component 4 B at 16 · row 100% data (dense)2Byte 18: tint.x · float4 · component 4 B at 16 · row 100% data (dense)2Byte 19: tint.x · float4 · component 4 B at 16 · row 100% data (dense)2Byte 20: tint.y · float4 · component 4 B at 20 · row 100% data (dense)2Byte 21: tint.y · float4 · component 4 B at 20 · row 100% data (dense)2Byte 22: tint.y · float4 · component 4 B at 20 · row 100% data (dense)2Byte 23: tint.y · float4 · component 4 B at 20 · row 100% data (dense)2Byte 24: tint.z · float4 · component 4 B at 24 · row 100% data (dense)2Byte 25: tint.z · float4 · component 4 B at 24 · row 100% data (dense)2Byte 26: tint.z · float4 · component 4 B at 24 · row 100% data (dense)2Byte 27: tint.z · float4 · component 4 B at 24 · row 100% data (dense)2Byte 28: tint.w · float4 · component 4 B at 28 · row 100% data (dense)2Byte 29: tint.w · float4 · component 4 B at 28 · row 100% data (dense)2Byte 30: tint.w · float4 · component 4 B at 28 · row 100% data (dense)2Byte 31: tint.w · float4 · component 4 B at 28 · row 100% data (dense)2Row 32: 4 of 16 bytes contain data · 25% · sparse. Padding may be required by layout rules.32Byte 32: bias · float · component 4 B at 32 · row 25% data (sparse)3Byte 33: bias · float · component 4 B at 32 · row 25% data (sparse)3Byte 34: bias · float · component 4 B at 32 · row 25% data (sparse)3Byte 35: bias · float · component 4 B at 32 · row 25% data (sparse)3Byte 36: padding · row 25% data (sparse)·Byte 37: padding · row 25% data (sparse)·Byte 38: padding · row 25% data (sparse)·Byte 39: padding · row 25% data (sparse)·Byte 40: padding · row 25% data (sparse)·Byte 41: padding · row 25% data (sparse)·Byte 42: padding · row 25% data (sparse)·Byte 43: padding · row 25% data (sparse)·Byte 44: padding · row 25% data (sparse)·Byte 45: padding · row 25% data (sparse)·Byte 46: padding · row 25% data (sparse)·Byte 47: padding · row 25% data (sparse)·Dense ≥75%Mixed 50–<75%Sparse <50%

Color = data per row: green ≥75%, yellow 50–<75%, red <50%. Hatching = padding; numbers = field IDs. Density alone does not establish possible savings. Partial structured rows count only actual bytes. Hover or click a byte to inspect it.

50% data · 24 B of 48 B · 24 B padding in the displayed layout. Field order has not been checked. Use Suggest field order to test whether the span can shrink.

Rows 1–3 of 3 · 1 / 1

Byte 0 · gain · float · 4-byte component at offset 0. Field gain.

[ FIELD OFFSETS / BYTES ]
FieldTypeOffsetData / extentAlign / stride
float04 / 44

Fits at the next aligned offset

float41616 / 164

value would cross a 16-byte row · 12 B before field.

float324 / 44

Fits at the next aligned offset

Suggest field order searches top-level permutations for up to eight fields; larger records use a bounded heuristic. It preserves types, array lengths and nested structure order. A smaller layout does not guarantee a faster shader. Update every CPU/GPU consumer when changing layout.

Selected declarations
cbuffer LayoutData
{
    float gain;
    float4 tint;
    float bias;
};