anv/pipeline: use unsigned long long constant to check enable vertex inputs
authorJuan A. Suarez Romero <jasuarez@igalia.com>
Thu, 13 Jul 2017 14:33:57 +0000 (14:33 +0000)
committerJuan A. Suarez Romero <jasuarez@igalia.com>
Fri, 14 Jul 2017 08:09:18 +0000 (08:09 +0000)
When initializing the ANV pipeline, one of the tasks is checking which
vertex inputs are enabled. This is done by checking if the enabled bits
in inputs_read.

But the mask to use is computed doing `(1 << (VERT_ATTRIB_GENERIC0 +
desc->location))`. The problem here is that if location is 15 or
greater, the sum is 32 or greater. But C is handling 1 as a 32-bit
integer, which means the displaced bit is out of range and thus the full
value is 0.

Thus, use 1ull, which is an unsigned long long value.

This fixes:
dEQP-VK.pipeline.vertex_input.max_attributes.16_attributes.binding_one_to_one.interleaved

v2: use 1ull instead of BITFIELD64_BIT() (Matt Turner)

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
Signed-off-by: Juan A. Suarez Romero <jasuarez@igalia.com>
Cc: mesa-stable@lists.freedesktop.org
src/intel/vulkan/anv_pipeline.c

index 5494a6ee75ec3bfdd16b29fd8b07e6cbf716462c..edbe2e7a7acf00c29e65d4eba409c028df8d366f 100644 (file)
@@ -1330,7 +1330,7 @@ anv_pipeline_init(struct anv_pipeline *pipeline,
       const VkVertexInputAttributeDescription *desc =
          &vi_info->pVertexAttributeDescriptions[i];
 
-      if (inputs_read & (1 << (VERT_ATTRIB_GENERIC0 + desc->location)))
+      if (inputs_read & BITFIELD64_BIT(VERT_ATTRIB_GENERIC0 + desc->location))
          pipeline->vb_used |= 1 << desc->binding;
    }