xref: /aosp_15_r20/external/angle/src/libANGLE/CLSampler.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // CLSampler.h: Defines the cl::Sampler class, which describes how to sample an OpenCL Image.
7*8975f5c5SAndroid Build Coastguard Worker 
8*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_CLSAMPLER_H_
9*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_CLSAMPLER_H_
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLObject.h"
12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/CLSamplerImpl.h"
13*8975f5c5SAndroid Build Coastguard Worker 
14*8975f5c5SAndroid Build Coastguard Worker namespace cl
15*8975f5c5SAndroid Build Coastguard Worker {
16*8975f5c5SAndroid Build Coastguard Worker 
17*8975f5c5SAndroid Build Coastguard Worker class Sampler final : public _cl_sampler, public Object
18*8975f5c5SAndroid Build Coastguard Worker {
19*8975f5c5SAndroid Build Coastguard Worker   public:
20*8975f5c5SAndroid Build Coastguard Worker     // Front end entry functions, only called from OpenCL entry points
21*8975f5c5SAndroid Build Coastguard Worker 
22*8975f5c5SAndroid Build Coastguard Worker     angle::Result getInfo(SamplerInfo name,
23*8975f5c5SAndroid Build Coastguard Worker                           size_t valueSize,
24*8975f5c5SAndroid Build Coastguard Worker                           void *value,
25*8975f5c5SAndroid Build Coastguard Worker                           size_t *valueSizeRet) const;
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker   public:
28*8975f5c5SAndroid Build Coastguard Worker     using PropArray = std::vector<cl_sampler_properties>;
29*8975f5c5SAndroid Build Coastguard Worker 
30*8975f5c5SAndroid Build Coastguard Worker     ~Sampler() override;
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker     const Context &getContext() const;
33*8975f5c5SAndroid Build Coastguard Worker     const PropArray &getProperties() const;
34*8975f5c5SAndroid Build Coastguard Worker     cl_bool getNormalizedCoords() const;
35*8975f5c5SAndroid Build Coastguard Worker     AddressingMode getAddressingMode() const;
36*8975f5c5SAndroid Build Coastguard Worker     FilterMode getFilterMode() const;
37*8975f5c5SAndroid Build Coastguard Worker 
38*8975f5c5SAndroid Build Coastguard Worker     template <typename T = rx::CLSamplerImpl>
39*8975f5c5SAndroid Build Coastguard Worker     T &getImpl() const;
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker     static Sampler *Cast(cl_sampler sampler);
42*8975f5c5SAndroid Build Coastguard Worker 
43*8975f5c5SAndroid Build Coastguard Worker   private:
44*8975f5c5SAndroid Build Coastguard Worker     Sampler(Context &context,
45*8975f5c5SAndroid Build Coastguard Worker             PropArray &&properties,
46*8975f5c5SAndroid Build Coastguard Worker             cl_bool normalizedCoords,
47*8975f5c5SAndroid Build Coastguard Worker             AddressingMode addressingMode,
48*8975f5c5SAndroid Build Coastguard Worker             FilterMode filterMode);
49*8975f5c5SAndroid Build Coastguard Worker 
50*8975f5c5SAndroid Build Coastguard Worker     const ContextPtr mContext;
51*8975f5c5SAndroid Build Coastguard Worker     const PropArray mProperties;
52*8975f5c5SAndroid Build Coastguard Worker     const cl_bool mNormalizedCoords;
53*8975f5c5SAndroid Build Coastguard Worker     const AddressingMode mAddressingMode;
54*8975f5c5SAndroid Build Coastguard Worker     const FilterMode mFilterMode;
55*8975f5c5SAndroid Build Coastguard Worker     rx::CLSamplerImpl::Ptr mImpl;
56*8975f5c5SAndroid Build Coastguard Worker 
57*8975f5c5SAndroid Build Coastguard Worker     friend class Object;
58*8975f5c5SAndroid Build Coastguard Worker };
59*8975f5c5SAndroid Build Coastguard Worker 
getContext()60*8975f5c5SAndroid Build Coastguard Worker inline const Context &Sampler::getContext() const
61*8975f5c5SAndroid Build Coastguard Worker {
62*8975f5c5SAndroid Build Coastguard Worker     return *mContext;
63*8975f5c5SAndroid Build Coastguard Worker }
64*8975f5c5SAndroid Build Coastguard Worker 
getProperties()65*8975f5c5SAndroid Build Coastguard Worker inline const Sampler::PropArray &Sampler::getProperties() const
66*8975f5c5SAndroid Build Coastguard Worker {
67*8975f5c5SAndroid Build Coastguard Worker     return mProperties;
68*8975f5c5SAndroid Build Coastguard Worker }
69*8975f5c5SAndroid Build Coastguard Worker 
getNormalizedCoords()70*8975f5c5SAndroid Build Coastguard Worker inline cl_bool Sampler::getNormalizedCoords() const
71*8975f5c5SAndroid Build Coastguard Worker {
72*8975f5c5SAndroid Build Coastguard Worker     return mNormalizedCoords;
73*8975f5c5SAndroid Build Coastguard Worker }
74*8975f5c5SAndroid Build Coastguard Worker 
getAddressingMode()75*8975f5c5SAndroid Build Coastguard Worker inline AddressingMode Sampler::getAddressingMode() const
76*8975f5c5SAndroid Build Coastguard Worker {
77*8975f5c5SAndroid Build Coastguard Worker     return mAddressingMode;
78*8975f5c5SAndroid Build Coastguard Worker }
79*8975f5c5SAndroid Build Coastguard Worker 
getFilterMode()80*8975f5c5SAndroid Build Coastguard Worker inline FilterMode Sampler::getFilterMode() const
81*8975f5c5SAndroid Build Coastguard Worker {
82*8975f5c5SAndroid Build Coastguard Worker     return mFilterMode;
83*8975f5c5SAndroid Build Coastguard Worker }
84*8975f5c5SAndroid Build Coastguard Worker 
85*8975f5c5SAndroid Build Coastguard Worker template <typename T>
getImpl()86*8975f5c5SAndroid Build Coastguard Worker inline T &Sampler::getImpl() const
87*8975f5c5SAndroid Build Coastguard Worker {
88*8975f5c5SAndroid Build Coastguard Worker     return static_cast<T &>(*mImpl);
89*8975f5c5SAndroid Build Coastguard Worker }
90*8975f5c5SAndroid Build Coastguard Worker 
Cast(cl_sampler sampler)91*8975f5c5SAndroid Build Coastguard Worker inline Sampler *Sampler::Cast(cl_sampler sampler)
92*8975f5c5SAndroid Build Coastguard Worker {
93*8975f5c5SAndroid Build Coastguard Worker     return static_cast<Sampler *>(sampler);
94*8975f5c5SAndroid Build Coastguard Worker }
95*8975f5c5SAndroid Build Coastguard Worker 
96*8975f5c5SAndroid Build Coastguard Worker }  // namespace cl
97*8975f5c5SAndroid Build Coastguard Worker 
98*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_CLSAMPLER_H_
99