1 #ifndef _RSGSAMPLERS_HPP
2 #define _RSGSAMPLERS_HPP
3 /*-------------------------------------------------------------------------
4  * drawElements Quality Program Random Shader Generator
5  * ----------------------------------------------------
6  *
7  * Copyright 2014 The Android Open Source Project
8  *
9  * Licensed under the Apache License, Version 2.0 (the "License");
10  * you may not use this file except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *      http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  *//*!
22  * \file
23  * \brief Samplers.
24  *//*--------------------------------------------------------------------*/
25 
26 #include "rsgDefs.hpp"
27 #include "tcuTexture.hpp"
28 
29 #include <map>
30 
31 namespace rsg
32 {
33 
34 class Sampler2D
35 {
36 public:
Sampler2D(void)37 	Sampler2D (void)
38 		: m_texture	(DE_NULL)
39 		, m_sampler	()
40 	{
41 	}
42 
Sampler2D(const tcu::Texture2D * texture,const tcu::Sampler & sampler)43 	Sampler2D (const tcu::Texture2D* texture, const tcu::Sampler& sampler)
44 		: m_texture	(texture)
45 		, m_sampler	(sampler)
46 	{
47 	}
48 
sample(float s,float t,float lod) const49 	inline tcu::Vec4 sample (float s, float t, float lod) const
50 	{
51 		return m_texture->sample(m_sampler, s, t, lod);
52 	}
53 
54 private:
55 	const tcu::Texture2D*		m_texture;
56 	tcu::Sampler				m_sampler;
57 };
58 
59 class SamplerCube
60 {
61 public:
SamplerCube(void)62 	SamplerCube (void)
63 		: m_texture	(DE_NULL)
64 		, m_sampler	()
65 	{
66 	}
67 
SamplerCube(const tcu::TextureCube * texture,const tcu::Sampler & sampler)68 	SamplerCube (const tcu::TextureCube* texture, const tcu::Sampler& sampler)
69 		: m_texture	(texture)
70 		, m_sampler	(sampler)
71 	{
72 	}
73 
sample(float s,float t,float r,float lod) const74 	inline tcu::Vec4 sample (float s, float t, float r, float lod) const
75 	{
76 		return m_texture->sample(m_sampler, s, t, r, lod);
77 	}
78 
79 private:
80 	const tcu::TextureCube*		m_texture;
81 	tcu::Sampler				m_sampler;
82 };
83 
84 typedef std::map<int, Sampler2D>	Sampler2DMap;
85 typedef std::map<int, SamplerCube>	SamplerCubeMap;
86 
87 } // rsg
88 
89 #endif // _RSGSAMPLERS_HPP
90