This patch series adds support to ISL for Yf and Ys tiling on gen9+. It really didn't end up being as bad as I thought it would be. Most of the work was in massaging things to handle 4D logical tile sizes so that we can properly handle the more complex tiles. There was also a bit of bother around getting BLORP and ANV to properly be able to view a compressed Yf texture as uncompressed. Other than that, most of it is actually fairly straightforward.
One glaring omission from this series is actually enabling Ys tiling. I believe all the calculations are in place and correct for Ys. However, enabling Ys and running it through Jenkins led several failures and GPU hangs which I believe to be a result of not properly aligning the memory objects to 64KB which is required for Ys. Beyond that, there are some cases with 1D surfaces where you cannot use Ys because the alignments are just too high and we have no code yet for detecting those and choosing Yf instead. Finally, it is not at all clear what sort of a heuristic we would want to use for enabling Ys as I don't think it's really going to buy us all that much in most cases. The other obvious omission in this series is miptails. For that, there currently is no code. I intend to implement it but I figured I had enough patches that it was worth sending it out as is. Miptails will come either as a follow-on series or as added patches in some future version of this series. Why do we care about Yf and Ys tiling? There are a couple of reasons. For one, I think it will yield slightly better performance for 3D textures and for small miplevels (once we get miptails). I have no numbers to back that up yet but my intuitive understanding of tiling leads me to think that Yf and Ys will provide better cache locality in these cases. The second reason is that it's needed for sparse texturing. Sparse allows the client to bind individual pages to the image and not actually have memory bound to the whole thing. This requires both page-aligned slices and miptails, both of which we only get with Yf and Ys. For sparse multisampled images, Ys makes everything easier because it puts all the samples in the same 64KB tile which is helpful because sparse binding has no concept of arrayed multisampling. Happy Reviewing! Nanley, I put you in the Cc but I don't expect you to spend another month doing nothing but Jason patch review. :-) I wanted you to be aware but was hoping that Topi would take this one. Cc: Nanley Chery <nanley.g.ch...@intel.com> Cc: Topi Pohjolainen <topi.pohjolai...@intel.com> Cc: Chad Versace <chadvers...@chromium.org> Jason Ekstrand (21): intel/isl: Add a isl_surf_get_image_offset_B_tile_el helper intel/blorp: Use isl_surf_get_image_offset_B_tile_el in ccs_ambiguate intel/isl: Make the offset helpers four dimensional intel/isl: Make tile logical extents four dimensional intel/isl: Use a 4D physical total extent for size calculations intel/isl: Expose isl_tiling_get_info intel/isl: Take a dim and sample count in isl_tiling_get_info intel/isl: Implement correct tile size calculations for Ys/Yf intel/isl: Use the tile size for computing standard Y alignments intel/isl: Use ISL_DIM_LAYOUT_GEN9_1D for Yf/Ys intel/isl: Use the depth field of phys_level0_sa for GEN4_2D 3D surfaces intel/isl: Fill out the correct phys_total_extent for Ys/Yf intel/isl: Support Yf/Ys in isl_surf_get_image_offset_sa intel/isl: Pull the uncompressed surface view code from anv intel/blorp: Use isl_surf_get_uncompressed_surf intel/isl: Support Ys and Yf in isl_surf_get_uncompressed_surf intel/isl: Don't compute image tiling data for Yf/Ys tiling intel/isl: Support Yf/Ys tiling in surf_fill_state intel/isl: Support Yf/Ys tiling in emit_depth_stencil_hiz i965: Explicitly disable Yf and Ys tiling intel/isl: Enable Yf tiling src/intel/Makefile.isl.am | 9 +- src/intel/blorp/blorp_blit.c | 71 ++- src/intel/blorp/blorp_clear.c | 8 +- src/intel/isl/isl.c | 481 +++++++++++++++++---- src/intel/isl/isl.h | 103 ++++- src/intel/isl/isl_emit_depth_stencil.c | 21 +- src/intel/isl/isl_gen7.c | 1 - src/intel/isl/isl_gen9.c | 85 +--- src/intel/isl/isl_storage_image.c | 17 +- src/intel/isl/isl_surface_state.c | 19 +- src/intel/isl/meson.build | 11 + .../isl/tests/isl_surf_get_image_offset_test.c | 4 +- src/intel/isl/tests/isl_tile_std_y_test.c | 160 +++++++ src/intel/vulkan/anv_image.c | 34 +- src/mesa/drivers/dri/i965/intel_blit.c | 12 +- src/mesa/drivers/dri/i965/intel_mipmap_tree.c | 12 +- 16 files changed, 778 insertions(+), 270 deletions(-) create mode 100644 src/intel/isl/tests/isl_tile_std_y_test.c -- 2.5.0.400.gff86faf _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev