<div dir="ltr">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, <div>I get the information I would expect. I'm working to test the OpenCL currently.</div><div><br></div><div>I'll update the patch to use PIPE_ARCH_LITTLE_ENDIAN instead of my own #if.</div><div><br></div><div>Bas Vermeulen</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 20, 2018 at 3:33 PM, Nicolai Hähnle <span dir="ltr"><<a href="mailto:nicolai.haehnle@amd.com" target="_blank">nicolai.haehnle@amd.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Nice, did you actually get it to work entirely on a big endian machine?<br>
<br>
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<br>
<br>
Cheers,<br>
Nicolai<div class="HOEnZb"><div class="h5"><br>
<br>
On 20.03.2018 15:21, Bas Vermeulen wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Using mesa OpenCL failed on a big endian PowerPC machine because<br>
si_vgt_param_key is using bitfields and a 32 bit int for an<br>
index into an array.<br>
<br>
Fix si_vgt_param_key to work correctly on both little endian<br>
and big endian machines.<br>
<br>
Signed-off-by: Bas Vermeulen <<a href="mailto:bas@daedalean.ai" target="_blank">bas@daedalean.ai</a>><br>
---<br>
  src/gallium/drivers/radeonsi/s<wbr>i_pipe.h | 13 +++++++++++++<br>
  1 file changed, 13 insertions(+)<br>
<br>
diff --git a/src/gallium/drivers/radeonsi<wbr>/si_pipe.h b/src/gallium/drivers/radeonsi<wbr>/si_pipe.h<br>
index 2053dcb9fc..32dbdf6e2c 100644<br>
--- a/src/gallium/drivers/radeonsi<wbr>/si_pipe.h<br>
+++ b/src/gallium/drivers/radeonsi<wbr>/si_pipe.h<br>
@@ -385,6 +385,7 @@ struct si_shader_ctx_state {<br>
   */<br>
  union si_vgt_param_key {<br>
        struct {<br>
+#if (__BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)<br>
                unsigned prim:4;<br>
                unsigned uses_instancing:1;<br>
                unsigned multi_instances_smaller_than_p<wbr>rimgroup:1;<br>
@@ -395,6 +396,18 @@ union si_vgt_param_key {<br>
                unsigned tess_uses_prim_id:1;<br>
                unsigned uses_gs:1;<br>
                unsigned _pad:32 - SI_NUM_VGT_PARAM_KEY_BITS;<br>
+#else /* __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ */<br>
+               unsigned _pad:32 - SI_NUM_VGT_PARAM_KEY_BITS;<br>
+               unsigned uses_gs:1;<br>
+               unsigned tess_uses_prim_id:1;<br>
+               unsigned uses_tess:1;<br>
+               unsigned line_stipple_enabled:1;<br>
+               unsigned count_from_stream_output:1;<br>
+               unsigned primitive_restart:1;<br>
+               unsigned multi_instances_smaller_than_p<wbr>rimgroup:1;<br>
+               unsigned uses_instancing:1;<br>
+               unsigned prim:4;<br>
+#endif<br>
        } u;<br>
        uint32_t index;<br>
  };<br>
<br>
</blockquote>
<br>
</div></div></blockquote></div><br></div>