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 <b...@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;
  };


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to