dynamic_ocl/safe/buffer/
flags.rs1use crate::raw::{
5 cl_mem_flags, CL_MEM_ALLOC_HOST_PTR, CL_MEM_HOST_NO_ACCESS, CL_MEM_HOST_READ_ONLY,
6 CL_MEM_HOST_WRITE_ONLY, CL_MEM_READ_ONLY, CL_MEM_READ_WRITE, CL_MEM_WRITE_ONLY,
7};
8
9mod sealed {
10 use crate::raw::cl_mem_flags;
11
12 pub trait FlagInternal {
13 const FLAGS: cl_mem_flags;
14 }
15}
16
17pub trait HostAccess: sealed::FlagInternal {}
22
23pub trait HostReadable: HostAccess {}
25
26pub trait HostWritable: HostAccess {}
28
29pub struct HostNoAccess;
31
32pub struct HostReadOnly;
34
35pub struct HostWriteOnly;
37
38pub struct HostReadWrite;
40
41impl sealed::FlagInternal for HostNoAccess {
42 const FLAGS: cl_mem_flags = CL_MEM_HOST_NO_ACCESS;
43}
44
45impl sealed::FlagInternal for HostReadOnly {
46 const FLAGS: cl_mem_flags = CL_MEM_HOST_READ_ONLY;
47}
48
49impl sealed::FlagInternal for HostWriteOnly {
50 const FLAGS: cl_mem_flags = CL_MEM_HOST_WRITE_ONLY;
51}
52
53impl sealed::FlagInternal for HostReadWrite {
54 const FLAGS: cl_mem_flags = 0;
55}
56
57impl HostAccess for HostNoAccess {}
58
59impl HostAccess for HostReadOnly {}
60impl HostReadable for HostReadOnly {}
61
62impl HostAccess for HostWriteOnly {}
63impl HostWritable for HostWriteOnly {}
64
65impl HostAccess for HostReadWrite {}
66impl HostReadable for HostReadWrite {}
67impl HostWritable for HostReadWrite {}
68
69pub trait DeviceAccess: sealed::FlagInternal {}
74
75pub struct DeviceReadOnly;
77
78pub struct DeviceWriteOnly;
80
81pub struct DeviceReadWrite;
83
84impl sealed::FlagInternal for DeviceReadOnly {
85 const FLAGS: cl_mem_flags = CL_MEM_READ_ONLY;
86}
87
88impl sealed::FlagInternal for DeviceWriteOnly {
89 const FLAGS: cl_mem_flags = CL_MEM_WRITE_ONLY;
90}
91
92impl sealed::FlagInternal for DeviceReadWrite {
93 const FLAGS: cl_mem_flags = CL_MEM_READ_WRITE;
94}
95
96impl DeviceAccess for DeviceReadOnly {}
97impl DeviceAccess for DeviceWriteOnly {}
98impl DeviceAccess for DeviceReadWrite {}
99
100pub trait BufferFlags: sealed::FlagInternal {}
102
103pub struct NoFlags;
105
106pub struct AllocHostPtr;
109
110impl sealed::FlagInternal for NoFlags {
111 const FLAGS: cl_mem_flags = 0;
112}
113
114impl sealed::FlagInternal for AllocHostPtr {
115 const FLAGS: cl_mem_flags = CL_MEM_ALLOC_HOST_PTR;
116}
117
118impl BufferFlags for NoFlags {}
119impl BufferFlags for AllocHostPtr {}