xref: /aosp_15_r20/external/mesa3d/src/gallium/frontends/rusticl/core/util.rs (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1 use crate::api::{icd::CLResult, types::CLVec};
2 
3 use mesa_rust_gen::*;
4 use rusticl_opencl_gen::*;
5 
6 use super::gl::is_cube_map_face;
7 
cl_mem_type_to_texture_target(mem_type: cl_mem_object_type) -> pipe_texture_target8 pub fn cl_mem_type_to_texture_target(mem_type: cl_mem_object_type) -> pipe_texture_target {
9     match mem_type {
10         CL_MEM_OBJECT_BUFFER => pipe_texture_target::PIPE_BUFFER,
11         CL_MEM_OBJECT_IMAGE1D => pipe_texture_target::PIPE_TEXTURE_1D,
12         CL_MEM_OBJECT_IMAGE2D => pipe_texture_target::PIPE_TEXTURE_2D,
13         CL_MEM_OBJECT_IMAGE3D => pipe_texture_target::PIPE_TEXTURE_3D,
14         CL_MEM_OBJECT_IMAGE1D_ARRAY => pipe_texture_target::PIPE_TEXTURE_1D_ARRAY,
15         CL_MEM_OBJECT_IMAGE2D_ARRAY => pipe_texture_target::PIPE_TEXTURE_2D_ARRAY,
16         CL_MEM_OBJECT_IMAGE1D_BUFFER => pipe_texture_target::PIPE_BUFFER,
17         _ => pipe_texture_target::PIPE_TEXTURE_2D,
18     }
19 }
20 
cl_mem_type_to_texture_target_gl( mem_type: cl_mem_object_type, target: cl_GLenum, ) -> pipe_texture_target21 pub fn cl_mem_type_to_texture_target_gl(
22     mem_type: cl_mem_object_type,
23     target: cl_GLenum,
24 ) -> pipe_texture_target {
25     if is_cube_map_face(target) {
26         debug_assert_eq!(mem_type, CL_MEM_OBJECT_IMAGE2D);
27         pipe_texture_target::PIPE_TEXTURE_CUBE
28     } else {
29         cl_mem_type_to_texture_target(mem_type)
30     }
31 }
32 
create_pipe_box( mut base: CLVec<usize>, mut region: CLVec<usize>, mem_type: cl_mem_object_type, ) -> CLResult<pipe_box>33 pub fn create_pipe_box(
34     mut base: CLVec<usize>,
35     mut region: CLVec<usize>,
36     mem_type: cl_mem_object_type,
37 ) -> CLResult<pipe_box> {
38     if matches!(
39         mem_type,
40         CL_MEM_OBJECT_BUFFER
41             | CL_MEM_OBJECT_IMAGE1D
42             | CL_MEM_OBJECT_IMAGE1D_ARRAY
43             | CL_MEM_OBJECT_IMAGE1D_BUFFER
44             | CL_MEM_OBJECT_IMAGE2D
45     ) {
46         debug_assert!(region[2] == 1);
47         region[2] = 1;
48     }
49 
50     if matches!(
51         mem_type,
52         CL_MEM_OBJECT_BUFFER | CL_MEM_OBJECT_IMAGE1D | CL_MEM_OBJECT_IMAGE1D_BUFFER
53     ) {
54         debug_assert!(region[1] == 1);
55         region[1] = 1;
56     }
57 
58     if mem_type == CL_MEM_OBJECT_IMAGE1D_ARRAY {
59         base.swap(1, 2);
60         region.swap(1, 2);
61     };
62 
63     Ok(pipe_box {
64         x: base[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
65         y: base[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
66         z: base[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
67         width: region[0].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
68         height: region[1].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
69         depth: region[2].try_into().map_err(|_| CL_OUT_OF_HOST_MEMORY)?,
70     })
71 }
72