This is mostly a re-send of a patch series I've had floating around in one form or a while for quite some time. It's basically the same except that the original version was missing a work-around for Sandy Bridge. For a while, I wasn't really pushing to get it merged because I couldn't demonstrate any actual performance benifit from pushing arrays. However, with the Vulkan API, the concept of push constants is directly exposed to the user and we really need to be able to indirect on them. This series makes the FS backend 100% ready for indirect push constants; vec4 will take a little more work.
It's worth noting that we've been carying these patches around in our Vulkan driver for probably 3 or 4 months now and it's working great. For those that prefer to review on a branch: https://cgit.freedesktop.org/~jekstrand/mesa/log/?h=review/i965-uniforms I think Kristian has mostly reviewed these patches. However, he never sent any R-Bs to the list. I'd also like Ken or Matt to look at it from a design perspective. Jason Ekstrand (15): i965/fs: Add support for doing MOV_INDIRECT on uniforms i965/fs: Don't force MASK_DISABLE on INDIRECT_MOV instructions i965/fs: Fix regs_read() for MOV_INDIRECT with a non-zero subnr i965/fs: Add support for MOV_INDIRECT on pre-Broadwell hardware nir: Add another index to load_uniform to specify the range read i965/fs: Use MOV_INDIRECT for all indirect uniform loads i965/fs: Get rid of reladdr i965/fs: Stop relying on param_size in assign_constant_locations i965/fs: Get rid of the param_size array i965/vec4: Inline get_pull_constant_offset i965/vec4: Use MOV_INDIRECT instead of reladdr for indirect push constants i965/fs: Use UD type for offsets in VARYING_PULL_CONSTANT_LOAD i965/vec4: Get rid of the uniform_size array i965/fs: Rename demote_pull_constants to lower_constant_loads i965/fs: Push small uniform arrays src/compiler/nir/nir.h | 7 + src/compiler/nir/nir_intrinsics.h | 6 +- src/compiler/nir/nir_lower_io.c | 5 + src/compiler/nir/nir_print.c | 1 + src/mesa/drivers/dri/i965/brw_fs.cpp | 189 +++++++++++++--------- src/mesa/drivers/dri/i965/brw_fs.h | 4 +- src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 68 ++++++-- src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 63 +++++--- src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 3 - src/mesa/drivers/dri/i965/brw_ir_fs.h | 5 +- src/mesa/drivers/dri/i965/brw_vec4.cpp | 10 +- src/mesa/drivers/dri/i965/brw_vec4.h | 7 +- src/mesa/drivers/dri/i965/brw_vec4_nir.cpp | 19 +-- src/mesa/drivers/dri/i965/brw_vec4_tcs.cpp | 2 - src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp | 130 ++++++--------- src/mesa/drivers/dri/i965/brw_vec4_vs_visitor.cpp | 1 - 16 files changed, 292 insertions(+), 228 deletions(-) -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev