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