1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
use crate::api::{icd::CLResult, types::CLVec};
use mesa_rust_gen::*;
use rusticl_opencl_gen::*;
use std::mem;
pub fn cl_mem_type_to_texture_target(mem_type: cl_mem_object_type) -> pipe_texture_target {
match mem_type {
CL_MEM_OBJECT_IMAGE1D => pipe_texture_target::PIPE_TEXTURE_1D,
CL_MEM_OBJECT_IMAGE2D => pipe_texture_target::PIPE_TEXTURE_2D,
CL_MEM_OBJECT_IMAGE3D => pipe_texture_target::PIPE_TEXTURE_3D,
CL_MEM_OBJECT_IMAGE1D_ARRAY => pipe_texture_target::PIPE_TEXTURE_1D_ARRAY,
CL_MEM_OBJECT_IMAGE2D_ARRAY => pipe_texture_target::PIPE_TEXTURE_2D_ARRAY,
CL_MEM_OBJECT_IMAGE1D_BUFFER => pipe_texture_target::PIPE_TEXTURE_1D,
_ => pipe_texture_target::PIPE_TEXTURE_2D,
}
}
pub fn create_pipe_box(
base: CLVec<usize>,
region: CLVec<usize>,
mem_type: cl_mem_object_type,
) -> CLResult<pipe_box> {
let x = base[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
let mut y = base[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
let mut z = base[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
let width = region[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
let mut height = region[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
let mut depth = region[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
if matches!(
mem_type,
CL_MEM_OBJECT_BUFFER
| CL_MEM_OBJECT_IMAGE1D
| CL_MEM_OBJECT_IMAGE1D_ARRAY
| CL_MEM_OBJECT_IMAGE1D_BUFFER
| CL_MEM_OBJECT_IMAGE2D
) {
debug_assert!(depth == 1);
depth = 1;
}
if matches!(
mem_type,
CL_MEM_OBJECT_BUFFER | CL_MEM_OBJECT_IMAGE1D | CL_MEM_OBJECT_IMAGE1D_BUFFER
) {
debug_assert!(height == 1);
height = 1;
}
if mem_type == CL_MEM_OBJECT_IMAGE1D_ARRAY {
mem::swap(&mut height, &mut depth);
mem::swap(&mut y, &mut z);
}
Ok(pipe_box {
x: x,
y: y,
z: z,
width: width,
height: height,
depth: depth,
})
}
|