1#ifndef _ES3FASTCDECOMPRESSIONCASES_HPP
2#define _ES3FASTCDECOMPRESSIONCASES_HPP
3/*-------------------------------------------------------------------------
4 * drawElements Quality Program OpenGL ES 3.0 Module
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 ASTC decompression tests
24 *//*--------------------------------------------------------------------*/
25
26#include "deDefs.h"
27#include "tes3TestCase.hpp"
28#include "tcuCompressedTexture.hpp"
29#include "deUniquePtr.hpp"
30
31#include <vector>
32
33namespace deqp
34{
35namespace gles3
36{
37namespace Functional
38{
39
40namespace ASTCDecompressionCaseInternal
41{
42
43class ASTCRenderer2D;
44
45}
46
47enum ASTCBlockTestType
48{
49	ASTCBLOCKTESTTYPE_VOID_EXTENT_LDR = 0,
50	ASTCBLOCKTESTTYPE_VOID_EXTENT_HDR,
51	ASTCBLOCKTESTTYPE_WEIGHT_GRID,
52	ASTCBLOCKTESTTYPE_WEIGHT_ISE,
53	ASTCBLOCKTESTTYPE_CEMS,
54	ASTCBLOCKTESTTYPE_PARTITION_SEED,
55	ASTCBLOCKTESTTYPE_ENDPOINT_VALUE_LDR,
56	ASTCBLOCKTESTTYPE_ENDPOINT_VALUE_HDR_NO_15,
57	ASTCBLOCKTESTTYPE_ENDPOINT_VALUE_HDR_15,
58	ASTCBLOCKTESTTYPE_ENDPOINT_ISE,
59	ASTCBLOCKTESTTYPE_CCS,
60	ASTCBLOCKTESTTYPE_RANDOM,
61
62	ASTCBLOCKTESTTYPE_LAST
63};
64
65// General ASTC block test class.
66class ASTCBlockCase2D : public TestCase
67{
68public:
69																	ASTCBlockCase2D			(Context&							context,
70																							 const char*						name,
71																							 const char*						description,
72																							 ASTCBlockTestType					testType,
73																							 tcu::CompressedTexture::Format		format);
74																	~ASTCBlockCase2D		(void);
75
76	void															init					(void);
77	void															deinit					(void);
78	IterateResult													iterate					(void);
79
80private:
81	static void														generateDummyBlocks		(deUint8* dst, int num);
82
83																	ASTCBlockCase2D			(const ASTCBlockCase2D& other);
84	ASTCBlockCase2D&												operator=				(const ASTCBlockCase2D& other);
85
86	const ASTCBlockTestType											m_testType;
87	const tcu::CompressedTexture::Format							m_format;
88	std::vector<deUint8>											m_blockData;
89
90	int																m_numBlocksTested;
91	int																m_currentIteration;
92
93	de::UniquePtr<ASTCDecompressionCaseInternal::ASTCRenderer2D>	m_renderer;
94};
95
96// For a format with block size (W, H), test with texture sizes {(k*W + a, k*H + b) | 0 <= a < W, 0 <= b < H } .
97class ASTCBlockSizeRemainderCase2D : public TestCase
98{
99public:
100																	ASTCBlockSizeRemainderCase2D	(Context&							context,
101																									 const char*						name,
102																									 const char*						description,
103																									 tcu::CompressedTexture::Format		format);
104																	~ASTCBlockSizeRemainderCase2D	(void);
105
106	void															init							(void);
107	void															deinit							(void);
108	IterateResult													iterate							(void);
109
110private:
111	enum
112	{
113		MAX_NUM_BLOCKS_X = 5,
114		MAX_NUM_BLOCKS_Y = 5
115	};
116
117	static void														generateDefaultBlockData		(deUint8* dst, int numBlocks, int blockWidth, int blockHeight);
118
119																	ASTCBlockSizeRemainderCase2D	(const ASTCBlockSizeRemainderCase2D& other);
120	ASTCBlockSizeRemainderCase2D&									operator=						(const ASTCBlockSizeRemainderCase2D& other);
121
122	const tcu::CompressedTexture::Format							m_format;
123
124	int																m_currentIteration;
125
126	de::UniquePtr<ASTCDecompressionCaseInternal::ASTCRenderer2D>	m_renderer;
127};
128
129const char*		getBlockTestTypeName			(ASTCBlockTestType testType);
130const char*		getBlockTestTypeDescription		(ASTCBlockTestType testType);
131bool			isBlockTestTypeHDROnly			(ASTCBlockTestType testType);
132
133} // Functional
134} // gles3
135} // deqp
136
137#endif // _ES3FASTCDECOMPRESSIONCASES_HPP
138