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