According to the GL_KHR_vulkan_glsl spec, layout(push_constant) always implies std430 packing. However, it seems the nvidia implementation (VK_NV_glsl_shader) disagrees:
layout(push_constant, std430)
results in error C3009: layout qualifier 'std430', incompatible with 'uniform blocks'
, but it happily accepts layout(push_constant, std140)
.
Trial and error has always confirmed that my rendering bugs go away the moment I pack the push constants with std140 instead of std430.