<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, May 26, 2016 at 8:46 PM, Francisco Jerez <span dir="ltr"><<a href="mailto:currojerez@riseup.net" target="_blank">currojerez@riseup.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Even though my plan was to send the remaining changes for SIMD32 as a<br>
single last series, I'm feeling too sleep-deprived to finish cleaning<br>
up the rest of the series today so I'll send them in another series<br>
tomorrow.<br>
<br>
The patches I've left out for part 4 are not strictly necessary for<br>
correctness but they address some shader-db regressions caused by my<br>
previous changes so they are strongly recommended.  Still this series<br>
should be sufficient to get SIMD32 compute shaders to the same level<br>
of conformance as in SIMD8 or SIMD16 mode, which I've tested running<br>
Piglit/dEQP/CTS with the INTEL_DEBUG=do32 option introduced in patch<br>
23 to force the back-end to generate 32-wide code regardless of the<br>
workgroup size.<br>
<br>
I've set up the following git branch with series 1-3:<br>
<br>
<a href="https://cgit.freedesktop.org/~currojerez/mesa/log/?h=i965-simd32-cs" rel="noreferrer" target="_blank">https://cgit.freedesktop.org/~currojerez/mesa/log/?h=i965-simd32-cs</a><br>
<br>
Patches 1-4 of this series fix flag register dataflow analysis for<br>
SIMD32 mode, patches 5-11 include fixes for some common FS IR<br>
infrastructure and NIR translation code, patches 12-18 fix bugs in<br>
several optimization and lowering passes that cause (at least) SIMD32<br>
programs to be misoptimized in some cases, patches 19-20 get the<br>
register allocator working in SIMD32 mode, and patches 21-24 make some<br>
finishing changes to the back-end infrastructure to get SIMD32<br>
compilation hooked up for compute shaders and expose the desktop<br>
ARB_compute_shader extension on all Gen7+ hardware that couldn't<br>
support it currently due to the SIMD16 workgroup size limit.<br></blockquote><div><br></div><div>Over-all, this looks fantastic.  I made a few cosmetic comments which you are free to ignore or do later.  1-21 and 24 are<br><br></div><div>Reviewed-by: Jason Ekstrand <<a href="mailto:jason@jlekstrand.net">jason@jlekstrand.net</a>><br><br></div><div>I'd like to see 22 reworked (details on that patch) and I don't think we need 23 if we do the reworks suggested for 22.<br></div><div>--Jason<br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
[PATCH 01/24] i965/fs: Define methods to calculate the flag subset read or written by an fs_inst.<br>
[PATCH 02/24] i965/fs: Track flag register liveness with byte granularity.<br>
[PATCH 03/24] i965/fs: Keep track of flag dependencies with byte granularity during scheduling.<br>
[PATCH 04/24] i965/fs: Clean up remaining uses of fs_inst::reads_flag and ::writes_flag.<br>
[PATCH 05/24] i965/fs: Fix horiz_offset() to handle ARF and HW GRF register files.<br>
[PATCH 06/24] i965/fs: Fix half() to handle more exotic register files.<br>
[PATCH 07/24] i965/fs: Emit fixed-width null register regardless of the dispatch width.<br>
[PATCH 08/24] i965/fs: Return 32 bit mask from fs_builder::sample_mask().<br>
[PATCH 09/24] i965/fs: Emit fixed width memory fence opcode regardless of the dispatch width.<br>
[PATCH 10/24] i965/fs: Don't emit duplicated SSBO GET_BUFFER_SIZE instruction unnecessarily.<br>
[PATCH 11/24] i965/fs: Use SIMD8 SSBO GET_BUFFER_SIZE message regardless of the dispatch width.<br>
[PATCH 12/24] i965/fs: Skip remove_duplicate_mrf_writes() during SIMD32 runs.<br>
[PATCH 13/24] i965/fs: Reset reg_offset of the original destination to zero in compute_to_mrf().<br>
[PATCH 14/24] i965/fs: Add (sub)reg_offset asserts to brw_reg_from_fs_reg.<br>
[PATCH 15/24] i965/fs: Estimate number of registers written correctly in opt_register_renaming.<br>
[PATCH 16/24] i965/fs: Fix cmod propagation not to propagate non-identity cmod into CMP(N).<br>
[PATCH 17/24] i965/fs: Fix multiple ACP interference during copy propagation.<br>
[PATCH 18/24] i965/fs: Don't mutate multi-component arguments in sampler payload set-up.<br>
[PATCH 19/24] i965/fs: Remove pre-Gen7 register allocation class micro-optimization.<br>
[PATCH 20/24] i965/fs: Implement SIMD32 register allocation support.<br>
[PATCH 21/24] i965/fs: Extend back-end interface for limiting the shader dispatch width.<br>
[PATCH 22/24] i965/fs: Build 32-wide compute shader when needed.<br>
[PATCH 23/24] i965: Add do32 debug option.<br>
[PATCH 24/24] i965: Update compute workgroup size limit calculation for SIMD32.<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="https://lists.freedesktop.org/mailman/listinfo/mesa-dev" rel="noreferrer" target="_blank">https://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</blockquote></div><br></div></div>