#ifndef _VKTQUERYPOOLOCCLUSIONTESTS_HPP
#define _VKTQUERYPOOLOCCLUSIONTESTS_HPP
/*------------------------------------------------------------------------
 * Vulkan Conformance Tests
 * ------------------------
 *
 * Copyright (c) 2015 The Khronos Group Inc.
 * Copyright (c) 2015 Intel Corporation
 *
 * 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 Vulkan Occlusion Query Tests
 *//*--------------------------------------------------------------------*/

#include "vktTestCase.hpp"

namespace vkt
{
	namespace QueryPool
	{

class QueryPoolOcclusionTests : public tcu::TestCaseGroup
{
public:
	QueryPoolOcclusionTests		(tcu::TestContext &testCtx);
	~QueryPoolOcclusionTests	(void);
	void init					(void);

private:
	QueryPoolOcclusionTests					(const QueryPoolOcclusionTests &other);
	QueryPoolOcclusionTests&	operator=	(const QueryPoolOcclusionTests &other);
};

} // QueryPool
} // vkt

#endif // _VKTQUERYPOOLOCCLUSIONTESTS_HPP
