Home | History | Annotate | Download | only in spirv_assembly
      1 #ifndef _VKTSPVASMCOMPUTESHADERCASE_HPP
      2 #define _VKTSPVASMCOMPUTESHADERCASE_HPP
      3 /*-------------------------------------------------------------------------
      4  * Vulkan Conformance Tests
      5  * ------------------------
      6  *
      7  * Copyright (c) 2015 Google Inc.
      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 Test Case Skeleton Based on Compute Shaders
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "vkPrograms.hpp"
     27 #include "vktTestCase.hpp"
     28 
     29 #include "vktSpvAsmComputeShaderTestUtil.hpp"
     30 
     31 namespace vkt
     32 {
     33 namespace SpirVAssembly
     34 {
     35 
     36 enum ComputeTestFeatures
     37 {
     38 	COMPUTE_TEST_USES_NONE,
     39 	COMPUTE_TEST_USES_INT16,
     40 	COMPUTE_TEST_USES_INT64,
     41 	COMPUTE_TEST_USES_INT16_INT64,
     42 };
     43 
     44 /*--------------------------------------------------------------------*//*!
     45  * \brief Test instance for compute pipeline
     46  *
     47  * The compute shader is specified in the format of SPIR-V assembly, which
     48  * is allowed to access MAX_NUM_INPUT_BUFFERS input storage buffers and
     49  * MAX_NUM_OUTPUT_BUFFERS output storage buffers maximally. The shader
     50  * source and input/output data are given in a ComputeShaderSpec object.
     51  *
     52  * This instance runs the given compute shader by feeding the data from input
     53  * buffers and compares the data in the output buffers with the expected.
     54  *//*--------------------------------------------------------------------*/
     55 class SpvAsmComputeShaderInstance : public TestInstance
     56 {
     57 public:
     58 										SpvAsmComputeShaderInstance	(Context& ctx, const ComputeShaderSpec& spec, const ComputeTestFeatures features);
     59 	tcu::TestStatus						iterate						(void);
     60 
     61 private:
     62 	const ComputeShaderSpec&			m_shaderSpec;
     63 	const ComputeTestFeatures			m_features;
     64 };
     65 
     66 class SpvAsmComputeShaderCase : public TestCase
     67 {
     68 public:
     69 						SpvAsmComputeShaderCase	(tcu::TestContext& testCtx, const char* name, const char* description, const ComputeShaderSpec& spec, const ComputeTestFeatures features = COMPUTE_TEST_USES_NONE);
     70 	void				initPrograms			(vk::SourceCollections& programCollection) const;
     71 	TestInstance*		createInstance			(Context& ctx) const;
     72 
     73 private:
     74 	ComputeShaderSpec	m_shaderSpec;
     75 	const ComputeTestFeatures	m_features;
     76 };
     77 
     78 } // SpirVAssembly
     79 } // vkt
     80 
     81 #endif // _VKTSPVASMCOMPUTESHADERCASE_HPP
     82