[Mesa-dev] [PATCH] radeonsi: correct si_vgt_param_key on big endian machines

Bas Vermeulen bas at daedalean.ai
Tue Mar 20 15:16:46 UTC 2018


I'm able to call clinfo without things crashing. Without this fix, clinfo
results in a signal 11 because key.index is byte swapped. With it,
I get the information I would expect. I'm working to test the OpenCL
currently.

I'll update the patch to use PIPE_ARCH_LITTLE_ENDIAN instead of my own #if.

Bas Vermeulen

On Tue, Mar 20, 2018 at 3:33 PM, Nicolai Hähnle <nicolai.haehnle at amd.com>
wrote:

> Nice, did you actually get it to work entirely on a big endian machine?
>
> Bit fields aren't super portable, but this looks good enough. However, I
> think we should use the PIPE_ARCH_LITTLE_ENDIAN define from u_endian.h
>
> Cheers,
> Nicolai
>
>
> On 20.03.2018 15:21, Bas Vermeulen wrote:
>
>> Using mesa OpenCL failed on a big endian PowerPC machine because
>> si_vgt_param_key is using bitfields and a 32 bit int for an
>> index into an array.
>>
>> Fix si_vgt_param_key to work correctly on both little endian
>> and big endian machines.
>>
>> Signed-off-by: Bas Vermeulen <bas at daedalean.ai>
>> ---
>>   src/gallium/drivers/radeonsi/si_pipe.h | 13 +++++++++++++
>>   1 file changed, 13 insertions(+)
>>
>> diff --git a/src/gallium/drivers/radeonsi/si_pipe.h
>> b/src/gallium/drivers/radeonsi/si_pipe.h
>> index 2053dcb9fc..32dbdf6e2c 100644
>> --- a/src/gallium/drivers/radeonsi/si_pipe.h
>> +++ b/src/gallium/drivers/radeonsi/si_pipe.h
>> @@ -385,6 +385,7 @@ struct si_shader_ctx_state {
>>    */
>>   union si_vgt_param_key {
>>         struct {
>> +#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
>>                 unsigned prim:4;
>>                 unsigned uses_instancing:1;
>>                 unsigned multi_instances_smaller_than_primgroup:1;
>> @@ -395,6 +396,18 @@ union si_vgt_param_key {
>>                 unsigned tess_uses_prim_id:1;
>>                 unsigned uses_gs:1;
>>                 unsigned _pad:32 - SI_NUM_VGT_PARAM_KEY_BITS;
>> +#else /* __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ */
>> +               unsigned _pad:32 - SI_NUM_VGT_PARAM_KEY_BITS;
>> +               unsigned uses_gs:1;
>> +               unsigned tess_uses_prim_id:1;
>> +               unsigned uses_tess:1;
>> +               unsigned line_stipple_enabled:1;
>> +               unsigned count_from_stream_output:1;
>> +               unsigned primitive_restart:1;
>> +               unsigned multi_instances_smaller_than_primgroup:1;
>> +               unsigned uses_instancing:1;
>> +               unsigned prim:4;
>> +#endif
>>         } u;
>>         uint32_t index;
>>   };
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20180320/4d0dc22d/attachment.html>


More information about the mesa-dev mailing list