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
31namespace rsg
32{
33
34class Sampler2D
35{
36public:
37	Sampler2D (void)
38		: m_texture	(DE_NULL)
39		, m_sampler	()
40	{
41	}
42
43	Sampler2D (const tcu::Texture2D* texture, const tcu::Sampler& sampler)
44		: m_texture	(texture)
45		, m_sampler	(sampler)
46	{
47	}
48
49	inline tcu::Vec4 sample (float s, float t, float lod) const
50	{
51		return m_texture->sample(m_sampler, s, t, lod);
52	}
53
54private:
55	const tcu::Texture2D*		m_texture;
56	tcu::Sampler				m_sampler;
57};
58
59class SamplerCube
60{
61public:
62	SamplerCube (void)
63		: m_texture	(DE_NULL)
64		, m_sampler	()
65	{
66	}
67
68	SamplerCube (const tcu::TextureCube* texture, const tcu::Sampler& sampler)
69		: m_texture	(texture)
70		, m_sampler	(sampler)
71	{
72	}
73
74	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
79private:
80	const tcu::TextureCube*		m_texture;
81	tcu::Sampler				m_sampler;
82};
83
84typedef std::map<int, Sampler2D>	Sampler2DMap;
85typedef std::map<int, SamplerCube>	SamplerCubeMap;
86
87} // rsg
88
89#endif // _RSGSAMPLERS_HPP
90