spirv: Ignore ArrayStride in OpPtrAccessChain for Workgroup
authorCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Mon, 1 Jul 2019 23:06:13 +0000 (16:06 -0700)
committerCaio Marcelo de Oliveira Filho <caio.oliveira@intel.com>
Tue, 2 Jul 2019 19:15:01 +0000 (12:15 -0700)
commit050eb6389a8867e6173644fbb6b2d13ad0db454b
tree812b7b89e0b6dc46040c82bd535820aebef8ebfb
parent95a7fd0f1091dcd265fba12d34b78038d808be36
spirv: Ignore ArrayStride in OpPtrAccessChain for Workgroup

From OpPtrAccessChain description in the SPIR-V spec (1.4 rev 1):

    For objects in the Uniform, StorageBuffer, or PushConstant storage
    classes, the element’s address or location is calculated using a
    stride, which will be the Base-type’s Array Stride when the Base
    type is decorated with ArrayStride. For all other objects, the
    implementation will calculate the element’s address or location.

For non-CL shaders the driver should layout the Workgroup storage
class, so override any explicitly set ArrayStride in the shader.  This
currently fixes only the lower_workgroup_access_to_offsets case, which
is used by anv.

Reviewed-by: Juan A. Suarez <jasuarez@igalia.com>
src/compiler/spirv/spirv_to_nir.c