[Mesa-dev] [Mesa-stable] [PATCH] anv/pipeline: use BITFIELD64_BIT() to check enable vertex inputs

Emil Velikov emil.l.velikov at gmail.com
Fri Jul 14 09:52:12 UTC 2017


On 13 July 2017 at 17:43, Matt Turner <mattst88 at gmail.com> wrote:
> On Thu, Jul 13, 2017 at 7:48 AM, Juan A. Suarez Romero
> <jasuarez at igalia.com> wrote:
>> 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.
>>
>> Rather, use BITFIELD64_BIT() to compute the mask.
>>
>> This fixes:
>> dEQP-VK.pipeline.vertex_input.max_attributes.16_attributes.binding_one_to_one.interleaved
>>
>> Signed-off-by: Juan A. Suarez Romero <jasuarez at igalia.com>
>> Cc: mesa-stable at lists.freedesktop.org
>> ---
>>  src/intel/vulkan/anv_pipeline.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/intel/vulkan/anv_pipeline.c b/src/intel/vulkan/anv_pipeline.c
>> index 5494a6e..edbe2e7 100644
>> --- a/src/intel/vulkan/anv_pipeline.c
>> +++ b/src/intel/vulkan/anv_pipeline.c
>> @@ -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))
>
> The BITFIELD64_BIT macro exists just for MSVC support (See commit
> 5fc5820cbc0faf57a48154466b4792294841a690)
>
> Since this code will never be compiled with MSVC, it's safe to use
> 1ull. I'm not really sure how mtypes.h is being indirectly included.
>
> Reviewed-by: Matt Turner <mattst88 at gmail.com>

Fwiw MSVC has been using ull (llu actually) for the last year - since
c8fe3b9dca73e3b91979d92ba4136b302001b3bb.
I haven't seen any reports, so one could be able to kill off
BITFIELD64_BIT all together?

-Emil


More information about the mesa-dev mailing list