Home | History | Annotate | Download | only in spirv_assembly
      1 #ifndef _VKTSPVASMCOMPUTESHADERTESTUTIL_HPP
      2 #define _VKTSPVASMCOMPUTESHADERTESTUTIL_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 Compute Shader Based Test Case Utility Structs/Functions
     24  *//*--------------------------------------------------------------------*/
     25 
     26 #include "deDefs.h"
     27 #include "deSharedPtr.hpp"
     28 #include "tcuVector.hpp"
     29 #include "vkMemUtil.hpp"
     30 
     31 #include <string>
     32 #include <vector>
     33 
     34 namespace vkt
     35 {
     36 namespace SpirVAssembly
     37 {
     38 
     39 typedef de::MovePtr<vk::Allocation>			AllocationMp;
     40 typedef de::SharedPtr<vk::Allocation>		AllocationSp;
     41 
     42 /*--------------------------------------------------------------------*//*!
     43  * \brief Abstract class for an input/output storage buffer object
     44  *//*--------------------------------------------------------------------*/
     45 class BufferInterface
     46 {
     47 public:
     48 	virtual				~BufferInterface	(void)				{}
     49 
     50 	virtual size_t		getNumBytes			(void) const = 0;
     51 	virtual const void*	data				(void) const = 0;
     52 };
     53 
     54 typedef de::SharedPtr<BufferInterface>		BufferSp;
     55 
     56 /*--------------------------------------------------------------------*//*!
     57  * \brief Concrete class for an input/output storage buffer object
     58  *//*--------------------------------------------------------------------*/
     59 template<typename E>
     60 class Buffer : public BufferInterface
     61 {
     62 public:
     63 						Buffer				(const std::vector<E>& elements)
     64 							: m_elements(elements)
     65 						{}
     66 
     67 	size_t				getNumBytes			(void) const		{ return m_elements.size() * sizeof(E); }
     68 	const void*			data				(void) const		{ return &m_elements.front(); }
     69 
     70 private:
     71 	std::vector<E>		m_elements;
     72 };
     73 
     74 DE_STATIC_ASSERT(sizeof(tcu::Vec4) == 4 * sizeof(float));
     75 
     76 typedef Buffer<float>		Float32Buffer;
     77 typedef Buffer<deInt32>		Int32Buffer;
     78 typedef Buffer<tcu::Vec4>	Vec4Buffer;
     79 
     80 
     81 /*--------------------------------------------------------------------*//*!
     82  * \brief Specification for a compute shader.
     83  *
     84  * This struct bundles SPIR-V assembly code, input and expected output
     85  * together.
     86  *//*--------------------------------------------------------------------*/
     87 struct ComputeShaderSpec
     88 {
     89 	std::string				assembly;
     90 	std::string				entryPoint;
     91 	std::vector<BufferSp>	inputs;
     92 	std::vector<BufferSp>	outputs;
     93 	tcu::IVec3				numWorkGroups;
     94 	std::vector<deUint32>	specConstants;
     95 	// If null, a default verification will be performed by comparing the memory pointed to by outputAllocations
     96 	// and the contents of expectedOutputs. Otherwise the function pointed to by verifyIO will be called.
     97 	// If true is returned, then the test case is assumed to have passed, if false is returned, then the test
     98 	// case is assumed to have failed.
     99 	bool					(*verifyIO)(const std::vector<BufferSp>& inputs, const std::vector<AllocationSp>& outputAllocations, const std::vector<BufferSp>& expectedOutputs);
    100 
    101 							ComputeShaderSpec()
    102 								: entryPoint	("main")
    103 								, verifyIO		(DE_NULL)
    104 							{}
    105 
    106 };
    107 
    108 } // SpirVAssembly
    109 } // vkt
    110 
    111 #endif // _VKTSPVASMCOMPUTESHADERTESTUTIL_HPP
    112