mesa/src/intel/vulkan
Francisco Jerez 6a810b0ba8 intel: Improve N-way pixel hashing computation to handle pixel pipes with asymmetric processing power.
This reworks the intel_compute_pixel_hash_table_nway() pixel pipe
hashing table computation helper to handle cases where some pixel
pipes have processing power different from the others, this is helpful
for Gfx12.7+ platforms where there are pixel pipes with 1 DSS as well
as pixel pipes with 2 DSSes, which currently can lead to a serious
performance bottleneck in the pixel pipes with lower processing power.

In order to avoid such a load imbalance the
intel_compute_pixel_hash_table_nway() function will now take two pixel
pipe bitsets instead of one: Pixel pipes enabled on both bitsets will
appear with twice the frequency on the table as pixel pipes which only
appear on one bitset.  See the comments below for more details on the
algorithm used to construct a pixel hashing table with the desired
properties.

With this change rendering performance improves by about 25% on a
fused MTL platform -- The list of specific configs this is expected to
show an improvement on is not included here since the list is rather
long and some of the configs may still be embargoed or may never be
productized, but in order to find out whether your Gfx12.7+ device
could be affected by this you can check the output of the
intel_dev_info tool from the Mesa tree and see if there are multiple
"pixel pipe" entries with different DSS count.  That isn't expected to
occur on any DG2 configuration, only on MTL+ platforms, so this change
should have no effect at all on DG2 (it's easy to convince oneself
that it won't since for DG2 mask1 should equal mask2 so mask2 will be
set to zero at the beginning of intel_compute_pixel_hash_table_nway()
and the new swzx[] permutation will be set to the identity).

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26266>
2023-11-20 23:48:34 +00:00
..
grl meson: Remove unnecessary inc_compiler mentions 2023-09-22 14:52:50 +00:00
i915 anv/trtt: properly handle the lifetime of TR-TT batch BOs 2023-11-17 17:58:29 +00:00
layers anv: handle missing astc for gfx125 in CreateImageView 2023-05-12 06:59:34 +00:00
shaders anv/xehp+: Enable TBIMR in generated draw calls. 2023-10-27 14:50:42 -07:00
tests anv: fail pool allocation when over the maximal size 2023-10-30 14:47:18 +00:00
xe intel: Sync xe_drm.h 2023-11-20 17:57:34 +00:00
anv_allocator.c anv: handle protected memory allocation 2023-11-14 05:55:54 +00:00
anv_android.c anv: Add missing ANV_BO_ALLOC_EXTERNAL flags when calling anv_device_import_bo() 2023-11-08 01:20:42 +00:00
anv_android.h anv: Use the new vk_device_memory base struct 2023-03-31 14:57:03 +00:00
anv_android_stubs.c anv,hasvk: android ahb is not always exportable 2023-05-11 22:18:03 +00:00
anv_astc_emu.c anv: add gen9 astc workaround 2023-10-25 00:06:04 +00:00
anv_batch_chain.c anv/trtt: properly handle the lifetime of TR-TT batch BOs 2023-11-17 17:58:29 +00:00
anv_blorp.c anv: Flush data cache while clearing depth using HIZ_CCS_WT 2023-11-14 08:30:59 +00:00
anv_bo_sync.c anv: Add a tracepoint for the fallback implicit sync wait path. 2023-01-12 20:21:03 +00:00
anv_cmd_buffer.c anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
anv_descriptor_set.c anv: Remove anv_bo flags that can be inferred from alloc_flags 2023-11-08 01:20:42 +00:00
anv_device.c anv: enable sparse by default on i915.ko 2023-11-17 17:58:29 +00:00
anv_formats.c anv: advertise emulated formats 2023-10-14 02:36:40 +00:00
anv_gem.c anv: Calculate mmap mode based on alloc_flags 2023-11-08 01:20:42 +00:00
anv_gem_stubs.c anv/trtt: add struct anv_trtt_batch_bo and pass it around 2023-11-17 17:58:29 +00:00
anv_genX.h anv/sparse: allow sparse resouces to use TR-TT as its backend 2023-11-17 17:58:28 +00:00
anv_image.c anv/drirc: add option to disable FCV optimization 2023-11-15 18:16:56 +00:00
anv_internal_kernels.c intel/compiler: Remove unused parameter from brw_nir_analyze_ubo_ranges() 2023-11-08 18:10:31 +00:00
anv_internal_kernels.h anv: fixup 32bit build of internal shaders 2023-10-25 11:47:40 +00:00
anv_kmd_backend.c anv: Add gem VM bind and unbind to backend 2023-03-11 17:56:01 +00:00
anv_kmd_backend.h anv/trtt: add struct anv_trtt_batch_bo and pass it around 2023-11-17 17:58:29 +00:00
anv_measure.c anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
anv_measure.h anv: add a custom AcquireNextImage2KHR func 2022-02-17 22:15:23 +00:00
anv_mesh_perprim_wa.c treewide: Merge num_mesh_vertices_per_primitive and u_vertices_per_prim into mesa_vertices_per_prim 2023-10-26 09:35:04 +00:00
anv_nir.h anv/hasvk: track robustness per pipeline stage 2023-08-09 09:00:12 +03:00
anv_nir_apply_pipeline_layout.c anv: Bring back the non optimized version of build_load_render_surface_state_address() 2023-11-13 18:11:39 +00:00
anv_nir_compute_push_layout.c intel/compiler: Remove unused parameter from brw_nir_analyze_ubo_ranges() 2023-11-08 18:10:31 +00:00
anv_nir_lower_load_patch_vertices_in.c treewide: Use nir_shader_intrinsic_pass sometimes 2023-08-24 15:48:02 +00:00
anv_nir_lower_multiview.c treewide: Use nir_before/after_impl for more elaborate cases 2023-08-30 19:30:58 +00:00
anv_nir_lower_resource_intel.c treewide: Use nir_shader_intrinsic_pass sometimes 2023-08-24 15:48:02 +00:00
anv_nir_lower_ubo_loads.c treewide: Use nir_shader_intrinsic_pass sometimes 2023-08-24 15:48:02 +00:00
anv_nir_push_descriptor_analysis.c nir: Drop nir_dest 2023-08-14 21:22:53 +00:00
anv_perf.c anv/iris: report counter symbols with debug option 2023-03-08 12:45:43 +00:00
anv_pipeline.c anv: fix source_hash propagation with libraries 2023-11-17 10:17:51 +00:00
anv_pipeline_cache.c anv: make shader cache content deterministic 2023-11-02 02:53:41 +00:00
anv_private.h anv/trtt: properly handle the lifetime of TR-TT batch BOs 2023-11-17 17:58:29 +00:00
anv_queue.c anv: Execute an empty batch to sync main and companion RCS batch 2023-09-07 06:39:06 +00:00
anv_sparse.c anv/sparse: don't support YCBCR 2x1 compressed formats 2023-11-17 17:58:29 +00:00
anv_util.c anv: fix missing naming for dirty bit 2023-11-17 10:17:51 +00:00
anv_utrace.c anv: dynamically allocate utrace batch buffers 2023-11-07 17:48:11 +00:00
anv_va.c anv: setup the TR-TT vma heap 2023-11-04 02:06:53 +00:00
anv_video.c anv/video: use correct enum value for max level IDC 2023-09-06 05:10:33 +00:00
anv_wsi.c anvil,hasvk: Replace intel_clflush_range with intel_flush_range 2023-09-06 01:39:53 +00:00
genX_acceleration_structure.c intel/ds: track acceleration RT commands 2023-10-06 11:10:12 +00:00
genX_blorp_exec.c anv/blorp: move helper function about BTI changes to blorp 2023-11-17 10:17:51 +00:00
genX_cmd_buffer.c anv/trtt: use 'queue' from anv_sparse_submission in the backend 2023-11-17 17:58:28 +00:00
genX_cmd_draw_generated_indirect.h anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
genX_cmd_draw_helpers.h anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
genX_gfx_state.c anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
genX_gpu_memcpy.c anv: WA 16014538804 for DG2, MTL A0 2023-11-08 11:00:55 +00:00
genX_init_state.c intel: Improve N-way pixel hashing computation to handle pixel pipes with asymmetric processing power. 2023-11-20 23:48:34 +00:00
genX_pipeline.c anv: get rid of the duplicate pipeline fields in command buffer state 2023-11-17 10:17:51 +00:00
genX_query.c anv: Write timestamp using MI_FLUSH_DW on blitter 2023-11-13 23:43:27 +00:00
genX_simple_shader.c anv: fix CC_VIEWPORT pointer dirty after blorp/simple-shaders 2023-11-17 10:17:51 +00:00
genX_video.c anv: Calculate mmap mode based on alloc_flags 2023-11-08 01:20:42 +00:00
meson.build anv: fail pool allocation when over the maximal size 2023-10-30 14:47:18 +00:00