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:
@@ -2037,15 +2037,15 @@ intel_device_info_wa_stepping(struct intel_device_info *devinfo)
|
||||
uint32_t
|
||||
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) {
|
||||
k_bytes = intel_device_info_get_max_preferred_slm_size(devinfo);
|
||||
bytes = intel_device_info_get_max_preferred_slm_size(devinfo);
|
||||
} else {
|
||||
k_bytes = 64;
|
||||
bytes = 64 * 1024;
|
||||
}
|
||||
|
||||
return k_bytes * 1024;
|
||||
return bytes;
|
||||
}
|
||||
|
||||
uint32_t
|
||||
|
Reference in New Issue
Block a user