rusticl/kernel: get rid of Arcs in KernelDevStateVariant
We only used Arcs as we wanted to deal with either getting a reference or having an owned temporary. But we can also just use a local variable for temporary storage. Signed-off-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: @LingMan <18294-LingMan@users.noreply.gitlab.freedesktop.org> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24062>
This commit is contained in:
@@ -267,15 +267,15 @@ pub struct CSOWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl CSOWrapper {
|
impl CSOWrapper {
|
||||||
pub fn new(dev: &'static Device, nir: &NirShader) -> Arc<Self> {
|
pub fn new(dev: &'static Device, nir: &NirShader) -> Self {
|
||||||
let cso_ptr = dev
|
let cso_ptr = dev
|
||||||
.helper_ctx()
|
.helper_ctx()
|
||||||
.create_compute_state(nir, nir.shared_size());
|
.create_compute_state(nir, nir.shared_size());
|
||||||
|
|
||||||
Arc::new(Self {
|
Self {
|
||||||
cso_ptr: cso_ptr,
|
cso_ptr: cso_ptr,
|
||||||
dev: dev,
|
dev: dev,
|
||||||
})
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_cso_info(&self) -> pipe_compute_state_object_info {
|
pub fn get_cso_info(&self) -> pipe_compute_state_object_info {
|
||||||
@@ -290,8 +290,8 @@ impl Drop for CSOWrapper {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub enum KernelDevStateVariant {
|
pub enum KernelDevStateVariant {
|
||||||
Cso(Arc<CSOWrapper>),
|
Cso(CSOWrapper),
|
||||||
Nir(Arc<NirShader>),
|
Nir(NirShader),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub struct Kernel {
|
pub struct Kernel {
|
||||||
@@ -1054,9 +1054,13 @@ impl Kernel {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let temp_cso;
|
||||||
let cso = match &nir_kernel_build.nir_or_cso {
|
let cso = match &nir_kernel_build.nir_or_cso {
|
||||||
KernelDevStateVariant::Cso(cso) => cso.clone(),
|
KernelDevStateVariant::Cso(cso) => cso,
|
||||||
KernelDevStateVariant::Nir(nir) => CSOWrapper::new(q.device, nir),
|
KernelDevStateVariant::Nir(nir) => {
|
||||||
|
temp_cso = CSOWrapper::new(q.device, nir);
|
||||||
|
&temp_cso
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
ctx.bind_compute_state(cso.cso_ptr);
|
ctx.bind_compute_state(cso.cso_ptr);
|
||||||
|
@@ -93,7 +93,7 @@ impl NirKernelBuild {
|
|||||||
let printf_info = nir.take_printf_info();
|
let printf_info = nir.take_printf_info();
|
||||||
|
|
||||||
let nir_or_cso = if !dev.shareable_shaders() {
|
let nir_or_cso = if !dev.shareable_shaders() {
|
||||||
KernelDevStateVariant::Nir(Arc::new(nir))
|
KernelDevStateVariant::Nir(nir)
|
||||||
} else {
|
} else {
|
||||||
KernelDevStateVariant::Cso(cso)
|
KernelDevStateVariant::Cso(cso)
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user