intel: fix compute SLM sizes on Xe2 and newer

Before the patch, intel_device_info_get_max_preferred_slm_size()
returns values in kilobytes, but then
intel_device_info_get_max_slm_size() is multiplying it by 1024.
As a result, LNL is reporting maxComputeSharedMemorySize to be
134217728, which is 128mb.

Fix this by making intel_device_info_get_max_slm_size() not multiply
it by 1024.

This should fix at least the following dEQP tests:
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.1
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.128
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.16
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.2
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.4
    dEQP-VK.compute.pipeline.zero_initialize_workgroup_memory.max_workgroup_memory.64

Some tests were failing with:
    deqp-vk: ../../src/intel/common/intel_compute_slm.c:24: slm_encode_lookup: Assertion `kbytes <= table[table_len - 1].size_in_kb' failed.
while other tests were triggering the OOM.

v2:
 - Make everybody return sizes in bytes (José).
v3:
 - Rename variable to bytes (José, Jordan).

Fixes: fd368f5521 ("anv: Set maxComputeSharedMemorySize value for Xe2 platforms")
Reviewed-by: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/30541>
This commit is contained in:
Paulo Zanoni
2024-08-06 13:25:20 -07:00
committed by Marge Bot
parent a0f1a708c4
commit 0e38b794e2

View File

@@ -2037,15 +2037,15 @@ intel_device_info_wa_stepping(struct intel_device_info *devinfo)
uint32_t uint32_t
intel_device_info_get_max_slm_size(const struct intel_device_info *devinfo) intel_device_info_get_max_slm_size(const struct intel_device_info *devinfo)
{ {
uint32_t k_bytes = 0; uint32_t bytes = 0;
if (devinfo->verx10 >= 200) { if (devinfo->verx10 >= 200) {
k_bytes = intel_device_info_get_max_preferred_slm_size(devinfo); bytes = intel_device_info_get_max_preferred_slm_size(devinfo);
} else { } else {
k_bytes = 64; bytes = 64 * 1024;
} }
return k_bytes * 1024; return bytes;
} }
uint32_t uint32_t