j2k-cuda-runtime 0.7.2

CUDA codec engine and Driver API runtime for j2k device adapters
Documentation
// SPDX-License-Identifier: MIT OR Apache-2.0

use crate::{
    allocation::HostPhaseBudget,
    build_flags::CUDA_IDWT_TRACE_ENV_VAR,
    bytes::{f32_slice_as_bytes_mut, i32_slice_as_bytes_mut},
    error::CudaError,
    memory::{CudaDeviceBuffer, CudaPooledDeviceBuffer},
};

use super::CudaContext;

pub(crate) fn cuda_idwt_trace_enabled() -> bool {
    std::env::var_os(CUDA_IDWT_TRACE_ENV_VAR).is_some()
}

impl CudaContext {
    pub(crate) fn download_i32_band(
        buffer: &CudaDeviceBuffer,
        count: usize,
        host_budget: &mut HostPhaseBudget,
    ) -> Result<Vec<i32>, CudaError> {
        let mut out = host_budget.try_vec_filled(count, 0i32)?;
        if count != 0 {
            buffer.copy_to_host(i32_slice_as_bytes_mut(&mut out))?;
        }
        Ok(out)
    }

    pub(crate) fn download_f32_band(
        buffer: &CudaDeviceBuffer,
        count: usize,
        host_budget: &mut HostPhaseBudget,
    ) -> Result<Vec<f32>, CudaError> {
        let mut out = host_budget.try_vec_filled(count, 0f32)?;
        if count != 0 {
            buffer.copy_to_host(f32_slice_as_bytes_mut(&mut out))?;
        }
        Ok(out)
    }

    pub(crate) fn download_pooled_f32_band(
        buffer: &CudaPooledDeviceBuffer,
        count: usize,
        host_budget: &mut HostPhaseBudget,
    ) -> Result<Vec<f32>, CudaError> {
        let mut out = host_budget.try_vec_filled(count, 0f32)?;
        if count != 0 {
            buffer.copy_to_host(f32_slice_as_bytes_mut(&mut out))?;
        }
        Ok(out)
    }
}