#ifndef _TCUASTCUTIL_HPP
#define _TCUASTCUTIL_HPP
/*-------------------------------------------------------------------------
 * drawElements Quality Program Tester Core
 * ----------------------------------------
 *
 * Copyright 2016 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *//*!
 * \file
 * \brief ASTC Utilities.
 *//*--------------------------------------------------------------------*/

#include "tcuDefs.hpp"
#include "tcuCompressedTexture.hpp"

#include <vector>

namespace tcu
{
namespace astc
{

enum BlockTestType
{
	BLOCK_TEST_TYPE_VOID_EXTENT_LDR = 0,
	BLOCK_TEST_TYPE_VOID_EXTENT_HDR,
	BLOCK_TEST_TYPE_WEIGHT_GRID,
	BLOCK_TEST_TYPE_WEIGHT_ISE,
	BLOCK_TEST_TYPE_CEMS,
	BLOCK_TEST_TYPE_PARTITION_SEED,
	BLOCK_TEST_TYPE_ENDPOINT_VALUE_LDR,
	BLOCK_TEST_TYPE_ENDPOINT_VALUE_HDR_NO_15,
	BLOCK_TEST_TYPE_ENDPOINT_VALUE_HDR_15,
	BLOCK_TEST_TYPE_ENDPOINT_ISE,
	BLOCK_TEST_TYPE_CCS,
	BLOCK_TEST_TYPE_RANDOM,

	BLOCK_TEST_TYPE_LAST
};

enum
{
	BLOCK_SIZE_BYTES = 128/8,
};

const char*		getBlockTestTypeName			(BlockTestType testType);
const char*		getBlockTestTypeDescription		(BlockTestType testType);
bool			isBlockTestTypeHDROnly			(BlockTestType testType);
Vec4			getBlockTestTypeColorScale		(BlockTestType testType);
Vec4			getBlockTestTypeColorBias		(BlockTestType testType);

void			generateBlockCaseTestData		(std::vector<deUint8>& dst, CompressedTexFormat format, BlockTestType testType);

void			generateRandomBlocks			(deUint8* dst, size_t numBlocks, CompressedTexFormat format, deUint32 seed);
void			generateRandomValidBlocks		(deUint8* dst, size_t numBlocks, CompressedTexFormat format, TexDecompressionParams::AstcMode mode, deUint32 seed);

void			generateDummyVoidExtentBlocks	(deUint8* dst, size_t numBlocks);
void			generateDummyNormalBlocks		(deUint8* dst, size_t numBlocks, int blockWidth, int blockHeight);

bool			isValidBlock					(const deUint8* data, CompressedTexFormat format, TexDecompressionParams::AstcMode mode);

void			decompress						(const PixelBufferAccess& dst, const deUint8* data, CompressedTexFormat format, TexDecompressionParams::AstcMode mode);

} // astc
} // tcu

#endif // _TCUASTCUTIL_HPP
