spirv/i965/anv: Relax push constant offset assertions being 32-bit aligned
authorJose Maria Casanova Crespo <jmcasanova@igalia.com>
Tue, 20 Feb 2018 09:28:41 +0000 (10:28 +0100)
committerJason Ekstrand <jason.ekstrand@intel.com>
Thu, 1 Mar 2018 05:37:40 +0000 (21:37 -0800)
commit02266f9ba1990eac655ae98b5febf298cc2d33d8
tree37e91dba3afa67234b139ff561c58077d56cc68d
parent23ffb7c2d17f0268b209782a46e6cb838bd63585
spirv/i965/anv: Relax push constant offset assertions being 32-bit aligned

The introduction of 16-bit types with VK_KHR_16bit_storages implies that
push constant offsets could be multiple of 2-bytes. Some assertions are
updated so offsets should be just multiple of size of the base type but
in some cases we can not assume it as doubles aren't aligned to 8 bytes
in some cases.

For 16-bit types, the push constant offset takes into account the
internal offset in the 32-bit uniform bucket adding 2-bytes when we access
not 32-bit aligned elements. In all 32-bit aligned cases it just becomes 0.

v2: Assert offsets to be aligned to the dest type size. (Jason Ekstrand)

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/compiler/spirv/vtn_variables.c
src/intel/compiler/brw_fs_nir.cpp
src/intel/vulkan/anv_nir_lower_push_constants.c