• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use crate::api::{icd::CLResult, types::CLVec};
2 
3 use mesa_rust_gen::*;
4 use rusticl_opencl_gen::*;
5 
6 use std::mem;
7 
8 use super::gl::is_cube_map_face;
9 
cl_mem_type_to_texture_target(mem_type: cl_mem_object_type) -> pipe_texture_target10 pub fn cl_mem_type_to_texture_target(mem_type: cl_mem_object_type) -> pipe_texture_target {
11     match mem_type {
12         CL_MEM_OBJECT_BUFFER => pipe_texture_target::PIPE_BUFFER,
13         CL_MEM_OBJECT_IMAGE1D => pipe_texture_target::PIPE_TEXTURE_1D,
14         CL_MEM_OBJECT_IMAGE2D => pipe_texture_target::PIPE_TEXTURE_2D,
15         CL_MEM_OBJECT_IMAGE3D => pipe_texture_target::PIPE_TEXTURE_3D,
16         CL_MEM_OBJECT_IMAGE1D_ARRAY => pipe_texture_target::PIPE_TEXTURE_1D_ARRAY,
17         CL_MEM_OBJECT_IMAGE2D_ARRAY => pipe_texture_target::PIPE_TEXTURE_2D_ARRAY,
18         CL_MEM_OBJECT_IMAGE1D_BUFFER => pipe_texture_target::PIPE_BUFFER,
19         _ => pipe_texture_target::PIPE_TEXTURE_2D,
20     }
21 }
22 
cl_mem_type_to_texture_target_gl( mem_type: cl_mem_object_type, target: cl_GLenum, ) -> pipe_texture_target23 pub fn cl_mem_type_to_texture_target_gl(
24     mem_type: cl_mem_object_type,
25     target: cl_GLenum,
26 ) -> pipe_texture_target {
27     if is_cube_map_face(target) {
28         debug_assert_eq!(mem_type, CL_MEM_OBJECT_IMAGE2D);
29         pipe_texture_target::PIPE_TEXTURE_CUBE
30     } else {
31         cl_mem_type_to_texture_target(mem_type)
32     }
33 }
34 
create_pipe_box( base: CLVec<usize>, region: CLVec<usize>, mem_type: cl_mem_object_type, ) -> CLResult<pipe_box>35 pub fn create_pipe_box(
36     base: CLVec<usize>,
37     region: CLVec<usize>,
38     mem_type: cl_mem_object_type,
39 ) -> CLResult<pipe_box> {
40     let x = base[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
41     let mut y = base[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
42     let mut z = base[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
43     let width = region[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
44     let mut height = region[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
45     let mut depth = region[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?;
46 
47     if matches!(
48         mem_type,
49         CL_MEM_OBJECT_BUFFER
50             | CL_MEM_OBJECT_IMAGE1D
51             | CL_MEM_OBJECT_IMAGE1D_ARRAY
52             | CL_MEM_OBJECT_IMAGE1D_BUFFER
53             | CL_MEM_OBJECT_IMAGE2D
54     ) {
55         debug_assert!(depth == 1);
56         depth = 1;
57     }
58 
59     if matches!(
60         mem_type,
61         CL_MEM_OBJECT_BUFFER | CL_MEM_OBJECT_IMAGE1D | CL_MEM_OBJECT_IMAGE1D_BUFFER
62     ) {
63         debug_assert!(height == 1);
64         height = 1;
65     }
66 
67     if mem_type == CL_MEM_OBJECT_IMAGE1D_ARRAY {
68         mem::swap(&mut height, &mut depth);
69         mem::swap(&mut y, &mut z);
70     }
71 
72     Ok(pipe_box {
73         x: x,
74         y: y,
75         z: z,
76         width: width,
77         height: height,
78         depth: depth,
79     })
80 }
81