En la sección 6.4 Buffers constantes del libro Practical Rendering & Computation con Direct3D 11 (páginas 325, 326) se menciona:
Por defecto, el compilador HLSL intentará alinear constantes de modo que no abarquen múltiples registros float4. [...] El embalaje para un búfer constante HLSL también se puede especificar manualmente a través de la palabra clave packoffset.
Supongo que se aplicará una regla similar al equivalente de OpenGL, Uniform Buffer Objects, ya que se asignan a la misma característica de hardware.
Sin embargo, ¿qué pasa con los uniformes de vainilla? ¿Cuáles son las reglas que se aplican al declarar uniformes?
uniform vec2 xy; // Can we expect the compiler to pack xy
uniform vec2 zw; // into a same four component register?
uniform vec2 rg;
uniform float foo; // Will this prevent from packing rg and ba?
uniform vec2 ba;   // If so, will foo eat up a full four components register?
Si el compilador puede hacer tales optimizaciones, ¿qué tan buenas son? ¿Podemos decirle explícitamente al compilador que empaque o no, y cuándo deberíamos?
fuente

s_buffer_load_dwordinstrucciones: esas están leyendo los uniformes de entrada, y el último número en hexadecimal es el desplazamiento para leer. Se muestra en el primer casoxyen el desplazamiento 0 yzwen el desplazamiento 16. En el segundo caso, tienexyen el desplazamiento 0,zen el desplazamiento 16 yzwen el desplazamiento 32. Parece que todos los uniformes están individualmente alineados con 16 bytes y no embalados juntos o reordenados.