[Mesa-dev] [PATCH 6/7] spirv/i965/anv: Relax push constant offset assertions being 32-bit aligned
Jason Ekstrand
jason at jlekstrand.net
Fri Feb 23 21:36:53 UTC 2018
Assuming the CTS is still happy with it after those changes,
Reviewed-by: Jason Ekstrand <jason at jlekstrand.net>
On Fri, Feb 23, 2018 at 1:16 PM, Chema Casanova <jmcasanova at igalia.com>
wrote:
> On 23/02/18 20:09, Jason Ekstrand wrote:
> > On Fri, Feb 23, 2018 at 1:26 AM, Jose Maria Casanova Crespo
> > <jmcasanova at igalia.com <mailto:jmcasanova at igalia.com>> wrote:
> >
> > 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
> > relaxed so offsets can be multiple of 4-bytes or multiple of size of
> the
> > base type.
> >
> > 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.
> > ---
> > src/compiler/spirv/vtn_variables.c | 1 -
> > src/intel/compiler/brw_fs_nir.cpp | 16
> +++++++++++-----
> > src/intel/vulkan/anv_nir_lower_push_constants.c | 2 --
> > 3 files changed, 11 insertions(+), 8 deletions(-)
> >
> > diff --git a/src/compiler/spirv/vtn_variables.c
> > b/src/compiler/spirv/vtn_variables.c
> > index 81658afbd9..87236d0abd 100644
> > --- a/src/compiler/spirv/vtn_variables.c
> > +++ b/src/compiler/spirv/vtn_variables.c
> > @@ -760,7 +760,6 @@ _vtn_load_store_tail(struct vtn_builder *b,
> > nir_intrinsic_op op, bool load,
> > }
> >
> > if (op == nir_intrinsic_load_push_constant) {
> > - vtn_assert(access_offset % 4 == 0);
> >
> > nir_intrinsic_set_base(instr, access_offset);
> > nir_intrinsic_set_range(instr, access_size);
> > diff --git a/src/intel/compiler/brw_fs_nir.cpp
> > b/src/intel/compiler/brw_fs_nir.cpp
> > index abf9098252..27611a21d0 100644
> > --- a/src/intel/compiler/brw_fs_nir.cpp
> > +++ b/src/intel/compiler/brw_fs_nir.cpp
> > @@ -3887,16 +3887,22 @@ fs_visitor::nir_emit_intrinsic(const
> > fs_builder &bld, nir_intrinsic_instr *instr
> > break;
> >
> > case nir_intrinsic_load_uniform: {
> > - /* Offsets are in bytes but they should always be multiples
> > of 4 */
> > - assert(instr->const_index[0] % 4 == 0);
> > + /* Offsets are in bytes but they should always be multiple of
> 4
> > + * or multiple of the size of the destination type. 2 for
> 16-bits
> > + * types.
> >
> > + */
> > + assert(instr->const_index[0] % 4 == 0 ||
> > + instr->const_index[0] % type_sz(dest.type) == 0);
> >
> >
> > Doubles are required to be 8-byte aligned so we can just have the dest
> > type size check.
>
> Changed locally.
>
> >
> >
> > fs_reg src(UNIFORM, instr->const_index[0] / 4, dest.type);
> >
> > nir_const_value *const_offset =
> > nir_src_as_const_value(instr->src[0]);
> > if (const_offset) {
> > - /* Offsets are in bytes but they should always be
> > multiples of 4 */
> > - assert(const_offset->u32[0] % 4 == 0);
> > - src.offset = const_offset->u32[0];
> > + assert(const_offset->u32[0] % 4 == 0 ||
> > + const_offset->u32[0] % type_sz(dest.type) == 0);
> >
> >
> > Same here.
>
> Changed locally.
>
> > + /* For 16-bit types we add the module of the const_index[0]
> > + * offset to access to not 32-bit aligned element */
> > + src.offset = const_offset->u32[0] + instr->const_index[0]
> % 4;
> >
> > for (unsigned j = 0; j < instr->num_components; j++) {
> > bld.MOV(offset(dest, bld, j), offset(src, bld, j));
> > diff --git a/src/intel/vulkan/anv_nir_lower_push_constants.c
> > b/src/intel/vulkan/anv_nir_lower_push_constants.c
> > index b66552825b..ad60d0c824 100644
> > --- a/src/intel/vulkan/anv_nir_lower_push_constants.c
> > +++ b/src/intel/vulkan/anv_nir_lower_push_constants.c
> > @@ -41,8 +41,6 @@ anv_nir_lower_push_constants(nir_shader *shader)
> > if (intrin->intrinsic != nir_intrinsic_load_push_
> constant)
> > continue;
> >
> > - assert(intrin->const_index[0] % 4 == 0);
> > -
> > /* We just turn them into uniform loads */
> > intrin->intrinsic = nir_intrinsic_load_uniform;
> > }
> > --
> > 2.14.3
> >
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180223/f34210d3/attachment.html>
More information about the mesa-dev
mailing list