intel/dev: Add function to get the number of EUs per subslice

This value will be needed to compute preferred SLM size.
User will be added in the next patch.

Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/28910>
This commit is contained in:
José Roberto de Souza
2024-04-19 14:10:11 -07:00
committed by Marge Bot
parent df3ce7add2
commit c4478ab4e3
2 changed files with 32 additions and 0 deletions

View File

@@ -1338,6 +1338,37 @@ intel_device_info_update_l3_banks(struct intel_device_info *devinfo)
}
}
/* Returns the number of EUs of the first subslice enabled */
uint32_t
intel_device_info_get_eu_count_first_subslice(const struct intel_device_info *devinfo)
{
uint32_t first_subslice, first_slice, offset, i;
uint32_t eu_count = 0;
first_slice = ffs(devinfo->slice_masks);
first_slice--;
offset = first_slice * devinfo->subslice_slice_stride;
for (i = 0; i < DIV_ROUND_UP(devinfo->max_subslices_per_slice, 8); i++) {
first_subslice = ffs(devinfo->subslice_masks[offset + i]);
if (first_subslice == 0)
continue;
break;
}
assert(first_subslice > 0);
first_subslice--;
offset = first_slice * devinfo->eu_slice_stride +
first_subslice * devinfo->eu_subslice_stride;
for (i = 0; i < DIV_ROUND_UP(devinfo->max_eus_per_subslice, 8); i++)
eu_count += __builtin_popcount(devinfo->eu_masks[offset + i]);
assert(eu_count > 0);
return eu_count;
}
/* Generate mask from the device data. */
static void
fill_masks(struct intel_device_info *devinfo)

View File

@@ -195,6 +195,7 @@ void intel_device_info_topology_reset_masks(struct intel_device_info *devinfo);
void intel_device_info_topology_update_counts(struct intel_device_info *devinfo);
void intel_device_info_update_pixel_pipes(struct intel_device_info *devinfo, uint8_t *subslice_masks);
void intel_device_info_update_l3_banks(struct intel_device_info *devinfo);
uint32_t intel_device_info_get_eu_count_first_subslice(const struct intel_device_info *devinfo);
void intel_device_info_update_cs_workgroup_threads(struct intel_device_info *devinfo);
bool intel_device_info_compute_system_memory(struct intel_device_info *devinfo, bool update);
void intel_device_info_update_after_hwconfig(struct intel_device_info *devinfo);