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