<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>