}
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
.helper_ctx()
.create_compute_state(nir, nir.shared_size());
- Arc::new(Self {
+ Self {
cso_ptr: cso_ptr,
dev: dev,
- })
+ }
}
pub fn get_cso_info(&self) -> pipe_compute_state_object_info {
}
pub enum KernelDevStateVariant {
- Cso(Arc<CSOWrapper>),
- Nir(Arc<NirShader>),
+ Cso(CSOWrapper),
+ Nir(NirShader),
}
pub struct Kernel {
);
}
+ let temp_cso;
let cso = match &nir_kernel_build.nir_or_cso {
- KernelDevStateVariant::Cso(cso) => cso.clone(),
- KernelDevStateVariant::Nir(nir) => CSOWrapper::new(q.device, nir),
+ KernelDevStateVariant::Cso(cso) => cso,
+ KernelDevStateVariant::Nir(nir) => {
+ temp_cso = CSOWrapper::new(q.device, nir);
+ &temp_cso
+ }
};
ctx.bind_compute_state(cso.cso_ptr);
let printf_info = nir.take_printf_info();
let nir_or_cso = if !dev.shareable_shaders() {
- KernelDevStateVariant::Nir(Arc::new(nir))
+ KernelDevStateVariant::Nir(nir)
} else {
KernelDevStateVariant::Cso(cso)
};