rusticl/program: rework build_nirs so it only touches devices we care about

Cc: mesa-stable
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/33892>
This commit is contained in:
Karol Herbst
2025-03-05 02:00:17 +01:00
committed by Marge Bot
parent 241279ac2c
commit 57a7e86aa9
@@ -106,7 +106,7 @@ impl ProgramBuild {
self.dev_build(dev).spirv.as_ref().unwrap().args(kernel)
}
fn build_nirs(&mut self, is_src: bool) {
fn build_nirs(&mut self, devs: &[&'static Device], is_src: bool) {
for kernel_name in &self.kernels.clone() {
let kernel_args: HashSet<_> = self
.devs_with_build()
@@ -118,7 +118,7 @@ impl ProgramBuild {
let mut kernel_info_set = HashSet::new();
// TODO: we could run this in parallel?
for dev in self.devs_with_build() {
for dev in devs {
let build_result = convert_spirv_to_nir(self, kernel_name, &args, dev);
kernel_info_set.insert(build_result.kernel_info);
@@ -426,7 +426,7 @@ impl Program {
kernels: kernels.into_iter().collect(),
kernel_info: HashMap::new(),
};
build.build_nirs(false);
build.build_nirs(&devs, false);
Ok(Arc::new(Self {
base: CLObjectBase::new(RusticlTypes::Program),
@@ -552,7 +552,7 @@ impl Program {
.any(|b| b.kernels.values().any(|b| Arc::strong_count(b) > 1))
}
pub fn build(&self, devs: &[&Device], options: &str) -> bool {
pub fn build(&self, devs: &[&'static Device], options: &str) -> bool {
let lib = options.contains("-create-library");
let mut info = self.build_info();
@@ -588,7 +588,7 @@ impl Program {
d.status = CL_BUILD_SUCCESS as cl_build_status;
let mut kernels = spirv.kernels();
info.kernels.append(&mut kernels);
info.build_nirs(self.is_src());
info.build_nirs(devs, self.is_src());
} else {
d.status = CL_BUILD_ERROR;
d.bin_type = CL_PROGRAM_BINARY_TYPE_NONE;
@@ -742,7 +742,7 @@ impl Program {
};
// Pre build nir kernels
build.build_nirs(false);
build.build_nirs(devs, false);
Arc::new(Self {
base: CLObjectBase::new(RusticlTypes::Program),