1c5a432af8404a1620230c8b0f31bc9a469196726Peter Gal#ifndef _VKTSHADERRENDER_HPP 2c5a432af8404a1620230c8b0f31bc9a469196726Peter Gal#define _VKTSHADERRENDER_HPP 3f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal/*------------------------------------------------------------------------ 43c17bc60af5c131488c834c64851a00449e4ef59Peter Gal * Vulkan Conformance Tests 53c17bc60af5c131488c834c64851a00449e4ef59Peter Gal * ------------------------ 63c17bc60af5c131488c834c64851a00449e4ef59Peter Gal * 7f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * Copyright (c) 2015 The Khronos Group Inc. 8f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * Copyright (c) 2015 Samsung Electronics Co., Ltd. 9f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * 10978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 12978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 13f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * 14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 15f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 18978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 20978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 21f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * 22f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal *//*! 23f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * \file 24f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal * \brief Vulkan ShaderRenderCase 25f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal *//*--------------------------------------------------------------------*/ 26f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 27f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal#include "tcuTexture.hpp" 28e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal#include "tcuSurface.hpp" 29e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 308bf213587134990dfac34fac8da2e3b3ee4c4f5aPeter Gal#include "deMemory.h" 31fed10ac2196b9f764eb9c365afee4d73dcbf7768Peter Gal#include "deSharedPtr.hpp" 328bf213587134990dfac34fac8da2e3b3ee4c4f5aPeter Gal#include "deUniquePtr.hpp" 338bf213587134990dfac34fac8da2e3b3ee4c4f5aPeter Gal 34e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal#include "vkDefs.hpp" 3570fc0800efe725f4f91f4d03b09aa0e567dbb09cDominik Witczak#include "vkRefUtil.hpp" 368bf213587134990dfac34fac8da2e3b3ee4c4f5aPeter Gal#include "vkPrograms.hpp" 37e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal#include "vkRef.hpp" 38e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal#include "vkMemUtil.hpp" 39da90931967434116522be552f82c8bc164a835bfPeter Gal#include "vkBuilderUtil.hpp" 4030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner#include "vkTypeUtil.hpp" 41ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus#include "vkPlatform.hpp" 42f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 43fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal#include "vktTestCaseUtil.hpp" 44fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal 45f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galnamespace vkt 46f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 47c5a432af8404a1620230c8b0f31bc9a469196726Peter Galnamespace sr 48f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 49f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 50d994b3a2d869497f1496273b6d9b8affb1752b20Peter Galclass LineStream 51d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal{ 52d994b3a2d869497f1496273b6d9b8affb1752b20Peter Galpublic: 53d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal LineStream (int indent = 0) { m_indent = indent; } 54d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal ~LineStream (void) {} 55d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal 56d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal const char* str (void) const { m_string = m_stream.str(); return m_string.c_str(); } 57d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal LineStream& operator<< (const char* line) { for (int i = 0; i < m_indent; i++) { m_stream << "\t"; } m_stream << line << "\n"; return *this; } 58d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal 59d994b3a2d869497f1496273b6d9b8affb1752b20Peter Galprivate: 60d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal int m_indent; 61d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal std::ostringstream m_stream; 62d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal mutable std::string m_string; 63d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal}; 64d994b3a2d869497f1496273b6d9b8affb1752b20Peter Gal 65f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass QuadGrid; 66e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galclass ShaderRenderCaseInstance; 67f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 68f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass TextureBinding 69f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 70fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Galpublic: 71fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal enum Type 72fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal { 73fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal TYPE_NONE = 0, 748c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TYPE_1D, 75fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal TYPE_2D, 768c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TYPE_3D, 77fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal TYPE_CUBE_MAP, 788c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TYPE_1D_ARRAY, 79fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal TYPE_2D_ARRAY, 808c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TYPE_CUBE_ARRAY, 81fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal 82fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal TYPE_LAST 83fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal }; 84fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal 85efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan enum Init 86efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan { 87efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan INIT_UPLOAD_DATA, 88efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan INIT_CLEAR, 89efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan 90efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan INIT_LAST 91efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan }; 92efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan 9330ce08903679a18155ace4ae14042f8af01261c1Akos Dirner struct Parameters 9430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner { 9530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 baseMipLevel; 9630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner vk::VkComponentMapping componentMapping; 978c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner vk::VkSampleCountFlagBits samples; 98efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan Init initialization; 9930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 10030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner Parameters (deUint32 baseMipLevel_ = 0, 1018c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner vk::VkComponentMapping componentMapping_ = vk::makeComponentMappingRGBA(), 102a15e7d7f566d93c76ca90171eb728e3d1cd82378Pyry Haulos vk::VkSampleCountFlagBits samples_ = vk::VK_SAMPLE_COUNT_1_BIT, 103efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan Init initialization_ = INIT_UPLOAD_DATA) 10430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner : baseMipLevel (baseMipLevel_) 10530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner , componentMapping (componentMapping_) 1068c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , samples (samples_) 107efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan , initialization (initialization_) 10830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner { 10930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner } 11030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner }; 11130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 1123038af220852000e643054412d14679c61d58838Peter Gal TextureBinding (const tcu::Archive& archive, 1133038af220852000e643054412d14679c61d58838Peter Gal const char* filename, 1143038af220852000e643054412d14679c61d58838Peter Gal const Type type, 1153038af220852000e643054412d14679c61d58838Peter Gal const tcu::Sampler& sampler); 1168c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner 1178c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TextureBinding (const tcu::Texture1D* tex1D, const tcu::Sampler& sampler); 11830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner TextureBinding (const tcu::Texture2D* tex2D, const tcu::Sampler& sampler); 1198c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TextureBinding (const tcu::Texture3D* tex3D, const tcu::Sampler& sampler); 12030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner TextureBinding (const tcu::TextureCube* texCube, const tcu::Sampler& sampler); 1218c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TextureBinding (const tcu::Texture1DArray* tex1DArray, const tcu::Sampler& sampler); 12230ce08903679a18155ace4ae14042f8af01261c1Akos Dirner TextureBinding (const tcu::Texture2DArray* tex2DArray, const tcu::Sampler& sampler); 1238c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner TextureBinding (const tcu::TextureCubeArray* texCubeArray, const tcu::Sampler& sampler); 1248c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner 1253038af220852000e643054412d14679c61d58838Peter Gal ~TextureBinding (void); 12630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 12794128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos Type getType (void) const { return m_type; } 1283038af220852000e643054412d14679c61d58838Peter Gal const tcu::Sampler& getSampler (void) const { return m_sampler; } 1298c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner 1308c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1D& get1D (void) const { DE_ASSERT(getType() == TYPE_1D && m_binding.tex1D != NULL); return *m_binding.tex1D; } 1318c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture2D& get2D (void) const { DE_ASSERT(getType() == TYPE_2D && m_binding.tex2D != NULL); return *m_binding.tex2D; } 1328c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture3D& get3D (void) const { DE_ASSERT(getType() == TYPE_3D && m_binding.tex3D != NULL); return *m_binding.tex3D; } 1338c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::TextureCube& getCube (void) const { DE_ASSERT(getType() == TYPE_CUBE_MAP && m_binding.texCube != NULL); return *m_binding.texCube; } 1348c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1DArray& get1DArray (void) const { DE_ASSERT(getType() == TYPE_1D_ARRAY && m_binding.tex1DArray != NULL); return *m_binding.tex1DArray; } 1358c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture2DArray& get2DArray (void) const { DE_ASSERT(getType() == TYPE_2D_ARRAY && m_binding.tex2DArray != NULL); return *m_binding.tex2DArray; } 1368c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::TextureCubeArray& getCubeArray (void) const { DE_ASSERT(getType() == TYPE_CUBE_ARRAY && m_binding.texCubeArray != NULL); return *m_binding.texCubeArray; } 13730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 13830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner void setParameters (const Parameters& params) { m_params = params; } 13930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const Parameters& getParameters (void) const { return m_params; } 140fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal 141fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Galprivate: 1423038af220852000e643054412d14679c61d58838Peter Gal TextureBinding (const TextureBinding&); // not allowed! 1433038af220852000e643054412d14679c61d58838Peter Gal TextureBinding& operator= (const TextureBinding&); // not allowed! 1443038af220852000e643054412d14679c61d58838Peter Gal 1453038af220852000e643054412d14679c61d58838Peter Gal static de::MovePtr<tcu::Texture2D> loadTexture2D (const tcu::Archive& archive, const char* filename); 1463038af220852000e643054412d14679c61d58838Peter Gal 1473038af220852000e643054412d14679c61d58838Peter Gal Type m_type; 1483038af220852000e643054412d14679c61d58838Peter Gal tcu::Sampler m_sampler; 14930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner Parameters m_params; 150baa4bb8dff87dc81ad289516e0b82027b8d7d7c2Peter Gal 151fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal union 152fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal { 1538c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1D* tex1D; 15430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::Texture2D* tex2D; 1558c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture3D* tex3D; 15630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::TextureCube* texCube; 1578c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1DArray* tex1DArray; 15830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::Texture2DArray* tex2DArray; 1598c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::TextureCubeArray* texCubeArray; 160fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal } m_binding; 161f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal}; 162f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 1633038af220852000e643054412d14679c61d58838Peter Galtypedef de::SharedPtr<TextureBinding> TextureBindingSp; 1643038af220852000e643054412d14679c61d58838Peter Gal 165f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal// ShaderEvalContext. 166f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 167f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass ShaderEvalContext 168f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 169f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galpublic: 170e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal // Limits. 171e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal enum 172e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal { 173e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal MAX_USER_ATTRIBS = 4, 174e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal MAX_TEXTURES = 4 175e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal }; 176e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 177e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal struct ShaderSampler 178e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal { 1798c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner tcu::Sampler sampler; 1808c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1D* tex1D; 1818c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture2D* tex2D; 1828c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture3D* tex3D; 1838c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::TextureCube* texCube; 1848c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture1DArray* tex1DArray; 1858c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::Texture2DArray* tex2DArray; 1868c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner const tcu::TextureCubeArray* texCubeArray; 187e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 188e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal inline ShaderSampler (void) 1898c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner : tex1D (DE_NULL) 1908c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , tex2D (DE_NULL) 1918c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , tex3D (DE_NULL) 1928c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , texCube (DE_NULL) 1938c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , tex1DArray (DE_NULL) 1948c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , tex2DArray (DE_NULL) 1958c55aaea29fd4f9c690f8827957af80e23385e06Akos Dirner , texCubeArray (DE_NULL) 196e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal { 197e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal } 198e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal }; 199e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 200e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal ShaderEvalContext (const QuadGrid& quadGrid); 201e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal ~ShaderEvalContext (void); 202e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 203e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal void reset (float sx, float sy); 204e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 205e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal // Inputs. 206e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 coords; 207e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 unitCoords; 208e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 constCoords; 209e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 210e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 in[MAX_USER_ATTRIBS]; 211e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal ShaderSampler textures[MAX_TEXTURES]; 212e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 213e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal // Output. 214e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 color; 215e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal bool isDiscarded; 216e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal 217e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal // Functions. 218e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal inline void discard (void) { isDiscarded = true; } 219e8694a658f24ec536ab5373cca3fc898a07225cfPeter Gal tcu::Vec4 texture2D (int unitNdx, const tcu::Vec2& coords); 220f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 221f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galprivate: 2223c17bc60af5c131488c834c64851a00449e4ef59Peter Gal const QuadGrid& m_quadGrid; 223f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal}; 224f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 225f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galtypedef void (*ShaderEvalFunc) (ShaderEvalContext& c); 226f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 227e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galinline void evalCoordsPassthroughX (ShaderEvalContext& c) { c.color.x() = c.coords.x(); } 228e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galinline void evalCoordsPassthroughXY (ShaderEvalContext& c) { c.color.xy() = c.coords.swizzle(0,1); } 229e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galinline void evalCoordsPassthroughXYZ (ShaderEvalContext& c) { c.color.xyz() = c.coords.swizzle(0,1,2); } 230e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galinline void evalCoordsPassthrough (ShaderEvalContext& c) { c.color = c.coords; } 231e8694a658f24ec536ab5373cca3fc898a07225cfPeter Galinline void evalCoordsSwizzleWZYX (ShaderEvalContext& c) { c.color = c.coords.swizzle(3,2,1,0); } 232f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 233f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal// ShaderEvaluator 234f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal// Either inherit a class with overridden evaluate() or just pass in an evalFunc. 235f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 236f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass ShaderEvaluator 237f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 238f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galpublic: 239fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal ShaderEvaluator (void); 240fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal ShaderEvaluator (const ShaderEvalFunc evalFunc); 241fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal virtual ~ShaderEvaluator (void); 242f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 243fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal virtual void evaluate (ShaderEvalContext& ctx) const; 244f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 245f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galprivate: 246fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal ShaderEvaluator (const ShaderEvaluator&); // not allowed! 247fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal ShaderEvaluator& operator= (const ShaderEvaluator&); // not allowed! 248f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 249fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const ShaderEvalFunc m_evalFunc; 250f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal}; 251f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 25202297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal// UniformSetup 25302297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal 25402297b806657cc6311a7ff5f5cc4976e91abbb83Peter Galtypedef void (*UniformSetupFunc) (ShaderRenderCaseInstance& instance, const tcu::Vec4& constCoords); 25502297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal 25602297b806657cc6311a7ff5f5cc4976e91abbb83Peter Galclass UniformSetup 25702297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal{ 25802297b806657cc6311a7ff5f5cc4976e91abbb83Peter Galpublic: 259fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal UniformSetup (void); 260fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal UniformSetup (const UniformSetupFunc setup); 261fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal virtual ~UniformSetup (void); 262fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal virtual void setup (ShaderRenderCaseInstance& instance, const tcu::Vec4& constCoords) const; 26302297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal 26402297b806657cc6311a7ff5f5cc4976e91abbb83Peter Galprivate: 265fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal UniformSetup (const UniformSetup&); // not allowed! 266fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal UniformSetup& operator= (const UniformSetup&); // not allowed! 26702297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal 268fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const UniformSetupFunc m_setupFunc; 26902297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal}; 27002297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal 271c42d55f61c1476f3f6cb425d7c81a62c035f6dc7Peter Galtypedef void (*AttributeSetupFunc) (ShaderRenderCaseInstance& instance, deUint32 numVertices); 272f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 273f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass ShaderRenderCase : public vkt::TestCase 274f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 275f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galpublic: 2760a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal ShaderRenderCase (tcu::TestContext& testCtx, 2770a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const std::string& name, 2780a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const std::string& description, 2790a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const bool isVertexCase, 2800a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const ShaderEvalFunc evalFunc, 2810a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const UniformSetup* uniformSetup, 2820a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const AttributeSetupFunc attribFunc); 2830a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal 2840a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal ShaderRenderCase (tcu::TestContext& testCtx, 2850a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const std::string& name, 2860a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const std::string& description, 2870a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const bool isVertexCase, 2880a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const ShaderEvaluator* evaluator, 2890a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const UniformSetup* uniformSetup, 2900a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const AttributeSetupFunc attribFunc); 2910a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal 2920a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal virtual ~ShaderRenderCase (void); 2930a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal virtual void initPrograms (vk::SourceCollections& programCollection) const; 2940a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal virtual TestInstance* createInstance (Context& context) const; 295f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 296e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Galprotected: 2970a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal std::string m_vertShaderSource; 2980a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal std::string m_fragShaderSource; 299e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 3000a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const bool m_isVertexCase; 3010a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const de::UniquePtr<const ShaderEvaluator> m_evaluator; 3020a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const de::UniquePtr<const UniformSetup> m_uniformSetup; 3030a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal const AttributeSetupFunc m_attribFunc; 304f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal}; 305f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 306657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Galenum BaseUniformType 307657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal{ 308657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Bool 309657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UB_FALSE, 310657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UB_TRUE, 311657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 312657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// BVec4 313657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UB4_FALSE, 314657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UB4_TRUE, 315657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 316657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Integers 317657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_ZERO, 318657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_ONE, 319657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_TWO, 320657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_THREE, 321657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_FOUR, 322657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_FIVE, 323657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_SIX, 324657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_SEVEN, 3258de9729b70dce1afe01b302d07daee35a25baec7Peter Gal UI_EIGHT, 326657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI_ONEHUNDREDONE, 327657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 328657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// IVec2 329657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_MINUS_ONE, 330657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_ZERO, 331657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_ONE, 332657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_TWO, 333657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_THREE, 334657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_FOUR, 335657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI2_FIVE, 336657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 337657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// IVec3 338657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_MINUS_ONE, 339657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_ZERO, 340657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_ONE, 341657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_TWO, 342657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_THREE, 343657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_FOUR, 344657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI3_FIVE, 345657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 346657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// IVec4 347657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_MINUS_ONE, 348657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_ZERO, 349657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_ONE, 350657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_TWO, 351657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_THREE, 352657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_FOUR, 353657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UI4_FIVE, 354657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 355657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Float 356657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_ZERO, 357657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_ONE, 358657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_TWO, 359657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_THREE, 360657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_FOUR, 361657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_FIVE, 362657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_SIX, 363657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_SEVEN, 3648de9729b70dce1afe01b302d07daee35a25baec7Peter Gal UF_EIGHT, 365657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 366657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_HALF, 367657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_THIRD, 368657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_FOURTH, 369657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_FIFTH, 370657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_SIXTH, 371657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_SEVENTH, 372657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UF_EIGHTH, 373657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 374657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Vec2 375657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_MINUS_ONE, 376657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_ZERO, 377657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_ONE, 378657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_TWO, 379657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_THREE, 380657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 381657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV2_HALF, 382657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 383657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Vec3 384657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_MINUS_ONE, 385657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_ZERO, 386657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_ONE, 387657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_TWO, 388657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_THREE, 389657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 390657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV3_HALF, 391657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 392657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal// Vec4 393657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_MINUS_ONE, 394657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_ZERO, 395657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_ONE, 396657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_TWO, 397657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_THREE, 398657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 399657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_HALF, 400657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal 401657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_BLACK, 402657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal UV4_GRAY, 403ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus UV4_WHITE, 404ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus 405ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus// Last 406ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus U_LAST 407657538108bc5d1c30e2b7c1caa3d0eee9ab7602dPeter Gal}; 408da90931967434116522be552f82c8bc164a835bfPeter Gal 40923597067ccf919c019f237c49dd153d1ea502efcPeter Galenum BaseAttributeType 41023597067ccf919c019f237c49dd153d1ea502efcPeter Gal{ 41123597067ccf919c019f237c49dd153d1ea502efcPeter Gal// User attributes 41223597067ccf919c019f237c49dd153d1ea502efcPeter Gal A_IN0, 41323597067ccf919c019f237c49dd153d1ea502efcPeter Gal A_IN1, 41423597067ccf919c019f237c49dd153d1ea502efcPeter Gal A_IN2, 41523597067ccf919c019f237c49dd153d1ea502efcPeter Gal A_IN3, 41623597067ccf919c019f237c49dd153d1ea502efcPeter Gal 41723597067ccf919c019f237c49dd153d1ea502efcPeter Gal// Matrices 41823597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT2, 41923597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT2x3, 42023597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT2x4, 42123597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT3x2, 42223597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT3, 42323597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT3x4, 42423597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT4x2, 42523597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT4x3, 42623597067ccf919c019f237c49dd153d1ea502efcPeter Gal MAT4 42723597067ccf919c019f237c49dd153d1ea502efcPeter Gal}; 42823597067ccf919c019f237c49dd153d1ea502efcPeter Gal 429f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal// ShaderRenderCaseInstance. 430f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 431f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galclass ShaderRenderCaseInstance : public vkt::TestInstance 432f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal{ 433f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galpublic: 4343fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham enum ImageBackingMode 4353fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham { 4363fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham IMAGE_BACKING_MODE_REGULAR = 0, 4373fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham IMAGE_BACKING_MODE_SPARSE, 4383fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham }; 4393fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham 440446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // Default wertex and fragment grid sizes are used by a large collection of tests 441446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // to generate input sets. Some tests might change their behavior if the 442446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // default grid size values are altered, so care should be taken to confirm that 443446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // any changes to default values do not produce regressions. 444446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // If a particular tests needs to use a different grid size value, rather than 445446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // modifying the default grid size values for all tests, it is recommended that 446446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // the test specifies the required grid size using the gridSize parameter in the 447446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga // ShaderRenderCaseInstance constuctor instead. 448446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga enum 449446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga { 450446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga GRID_SIZE_DEFAULTS = 0, 451446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga GRID_SIZE_DEFAULT_VERTEX = 90, 452446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga GRID_SIZE_DEFAULT_FRAGMENT = 4, 453446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga }; 454446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga 455304cfa10f23de889965ba19223120cf3d65592c0Peter Siket ShaderRenderCaseInstance (Context& context); 456fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal ShaderRenderCaseInstance (Context& context, 457fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const bool isVertexCase, 458fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const ShaderEvaluator& evaluator, 459fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const UniformSetup& uniformSetup, 4603fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const AttributeSetupFunc attribFunc, 461446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR, 462446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga const deUint32 gridSize = static_cast<deUint32>(GRID_SIZE_DEFAULTS)); 463a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal 464a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal virtual ~ShaderRenderCaseInstance (void); 465a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal virtual tcu::TestStatus iterate (void); 466a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal 4673c17bc60af5c131488c834c64851a00449e4ef59Peter Gal void addAttribute (deUint32 bindingLocation, 4683c17bc60af5c131488c834c64851a00449e4ef59Peter Gal vk::VkFormat format, 4693c17bc60af5c131488c834c64851a00449e4ef59Peter Gal deUint32 sizePerElement, 4703c17bc60af5c131488c834c64851a00449e4ef59Peter Gal deUint32 count, 4713c17bc60af5c131488c834c64851a00449e4ef59Peter Gal const void* data); 4723c17bc60af5c131488c834c64851a00449e4ef59Peter Gal void useAttribute (deUint32 bindingLocation, 4733c17bc60af5c131488c834c64851a00449e4ef59Peter Gal BaseAttributeType type); 474c42d55f61c1476f3f6cb425d7c81a62c035f6dc7Peter Gal 4758cb8307ee692db4a772d298911b90a6bfb2d1604Peter Gal template<typename T> 4763c17bc60af5c131488c834c64851a00449e4ef59Peter Gal void addUniform (deUint32 bindingLocation, 4773c17bc60af5c131488c834c64851a00449e4ef59Peter Gal vk::VkDescriptorType descriptorType, 47894128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos const T& data); 4793c17bc60af5c131488c834c64851a00449e4ef59Peter Gal void addUniform (deUint32 bindingLocation, 4803c17bc60af5c131488c834c64851a00449e4ef59Peter Gal vk::VkDescriptorType descriptorType, 4812fefaff91934f41ff34328c6e6b95ed24892b5a4Pyry Haulos size_t dataSize, 4823c17bc60af5c131488c834c64851a00449e4ef59Peter Gal const void* data); 4833c17bc60af5c131488c834c64851a00449e4ef59Peter Gal void useUniform (deUint32 bindingLocation, 4843c17bc60af5c131488c834c64851a00449e4ef59Peter Gal BaseUniformType type); 48530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner void useSampler (deUint32 bindingLocation, 4863c17bc60af5c131488c834c64851a00449e4ef59Peter Gal deUint32 textureId); 487da90931967434116522be552f82c8bc164a835bfPeter Gal 48830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner static const tcu::Vec4 getDefaultConstCoords (void) { return tcu::Vec4(0.125f, 0.25f, 0.5f, 1.0f); } 48968ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket void setPushConstantRanges (const deUint32 rangeCount, const vk::VkPushConstantRange* const pcRanges); 49068ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket virtual void updatePushConstants (vk::VkCommandBuffer commandBuffer, vk::VkPipelineLayout pipelineLayout); 49130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 492e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Galprotected: 49330ce08903679a18155ace4ae14042f8af01261c1Akos Dirner ShaderRenderCaseInstance (Context& context, 49430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const bool isVertexCase, 49530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const ShaderEvaluator* evaluator, 49630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const UniformSetup* uniformSetup, 4973fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const AttributeSetupFunc attribFunc, 498446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga const ImageBackingMode imageBackingMode = IMAGE_BACKING_MODE_REGULAR, 499446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga const deUint32 gridSize = static_cast<deUint32>(GRID_SIZE_DEFAULTS)); 50030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 501a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal virtual void setup (void); 502a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal virtual void setupUniforms (const tcu::Vec4& constCoords); 50330ce08903679a18155ace4ae14042f8af01261c1Akos Dirner virtual void setupDefaultInputs (void); 50430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 50530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner void render (deUint32 numVertices, 50630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 numTriangles, 50730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const deUint16* indices, 50830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::Vec4& constCoords = getDefaultConstCoords()); 50930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 51068ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket void render (deUint32 numVertices, 51168ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket deUint32 numIndices, 51268ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket const deUint16* indices, 51368ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket vk::VkPrimitiveTopology topology, 51468ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket const tcu::Vec4& constCoords = getDefaultConstCoords()); 51568ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket 51630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::TextureLevel& getResultImage (void) const { return m_resultImage; } 517e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 518689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos const tcu::UVec2 getViewportSize (void) const; 519e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 520ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus void setSampleCount (vk::VkSampleCountFlagBits sampleCount); 521ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus 522d6a0393ade7cd708f3497dcd7d1e82a931c31b1eDaniel Hegedus bool isMultiSampling (void) const; 523304cfa10f23de889965ba19223120cf3d65592c0Peter Siket 52472a80055d864e628d5cca1ec402bf303b180496fPeter Siket ImageBackingMode m_imageBackingMode; 525446a2fdc65c554d54b4cb58327a8ed9190486463Iago Toral Quiroga 5263b177126650ab2c7ddba7071c2402d5d5c86107cBoris Zanin deUint32 m_quadGridSize; 52772a80055d864e628d5cca1ec402bf303b180496fPeter Siketprivate: 52872a80055d864e628d5cca1ec402bf303b180496fPeter Siket 52972a80055d864e628d5cca1ec402bf303b180496fPeter Siket struct SparseContext 53072a80055d864e628d5cca1ec402bf303b180496fPeter Siket { 53172a80055d864e628d5cca1ec402bf303b180496fPeter Siket SparseContext (vkt::Context& context); 53272a80055d864e628d5cca1ec402bf303b180496fPeter Siket 53372a80055d864e628d5cca1ec402bf303b180496fPeter Siket vkt::Context& m_context; 53472a80055d864e628d5cca1ec402bf303b180496fPeter Siket const deUint32 m_queueFamilyIndex; 53572a80055d864e628d5cca1ec402bf303b180496fPeter Siket vk::Unique<vk::VkDevice> m_device; 53672a80055d864e628d5cca1ec402bf303b180496fPeter Siket vk::DeviceDriver m_deviceInterface; 537da03200a87f51bed33b3c3030ecbb6df06ff4f60Mika Isojärvi const vk::VkQueue m_queue; 53872a80055d864e628d5cca1ec402bf303b180496fPeter Siket const de::UniquePtr<vk::Allocator> m_allocator; 53972a80055d864e628d5cca1ec402bf303b180496fPeter Siket private: 54072a80055d864e628d5cca1ec402bf303b180496fPeter Siket vk::Move<vk::VkDevice> createDevice (void) const; 54172a80055d864e628d5cca1ec402bf303b180496fPeter Siket vk::Allocator* createAllocator (void) const; 54272a80055d864e628d5cca1ec402bf303b180496fPeter Siket 54372a80055d864e628d5cca1ec402bf303b180496fPeter Siket }; 54472a80055d864e628d5cca1ec402bf303b180496fPeter Siket 54572a80055d864e628d5cca1ec402bf303b180496fPeter Siket de::UniquePtr<SparseContext> m_sparseContext; 54672a80055d864e628d5cca1ec402bf303b180496fPeter Siketprotected: 54730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner vk::Allocator& m_memAlloc; 548fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const tcu::Vec4 m_clearColor; 54930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const bool m_isVertexCase; 55030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 55130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner std::vector<tcu::Mat4> m_userAttribTransforms; 5523038af220852000e643054412d14679c61d58838Peter Gal std::vector<TextureBindingSp> m_textures; 553e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 55430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner std::string m_vertexShaderName; 55530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner std::string m_fragmentShaderName; 55630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner tcu::UVec2 m_renderSize; 55730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner vk::VkFormat m_colorFormat; 558da90931967434116522be552f82c8bc164a835bfPeter Gal 559f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Galprivate: 56030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner typedef std::vector<tcu::ConstPixelBufferAccess> TextureLayerData; 56130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner typedef std::vector<TextureLayerData> TextureData; 56230ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 56330ce08903679a18155ace4ae14042f8af01261c1Akos Dirner void uploadImage (const tcu::TextureFormat& texFormat, 56430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const TextureData& textureData, 56530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::Sampler& refSampler, 56630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 mipLevels, 56730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 arrayLayers, 56830ce08903679a18155ace4ae14042f8af01261c1Akos Dirner vk::VkImage destImage); 56930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 570efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan void clearImage (const tcu::Sampler& refSampler, 571efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan deUint32 mipLevels, 572efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan deUint32 arrayLayers, 573efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan vk::VkImage destImage); 574efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan 5752fe94dcfdd7717b349bdfec56183e303ab52f2bbMarcin Kańtoch void checkSparseSupport (const vk::VkImageCreateInfo& imageInfo) const; 5763fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham 5773fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham void uploadSparseImage (const tcu::TextureFormat& texFormat, 5783fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const TextureData& textureData, 5793fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const tcu::Sampler& refSampler, 5803fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const deUint32 mipLevels, 5813fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const deUint32 arrayLayers, 5823fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const vk::VkImage sparseImage, 5833fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const vk::VkImageCreateInfo& imageCreateInfo, 5843fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const tcu::UVec3 texSize); 5853fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham 58630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner void createSamplerUniform (deUint32 bindingLocation, 58730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner TextureBinding::Type textureType, 588efc1d1b69b644d80e91c96faa4d65bb4c0f60586Slawomir Cygan TextureBinding::Init textureInit, 58930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::TextureFormat& texFormat, 5903fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const tcu::UVec3 texSize, 59130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const TextureData& textureData, 59230ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const tcu::Sampler& refSampler, 59330ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 mipLevels, 59430ce08903679a18155ace4ae14042f8af01261c1Akos Dirner deUint32 arrayLayers, 59530ce08903679a18155ace4ae14042f8af01261c1Akos Dirner TextureBinding::Parameters textureParams); 5960d978e5f907c8a3be619ca09f66605b1bdbfe8a5Peter Gal 5972fefaff91934f41ff34328c6e6b95ed24892b5a4Pyry Haulos void setupUniformData (deUint32 bindingLocation, size_t size, const void* dataPtr); 598e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 599a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal void computeVertexReference (tcu::Surface& result, const QuadGrid& quadGrid); 600a52f7463763fff8640cd7bf8c7828b380939132dPeter Gal void computeFragmentReference (tcu::Surface& result, const QuadGrid& quadGrid); 6013c17bc60af5c131488c834c64851a00449e4ef59Peter Gal bool compareImages (const tcu::Surface& resImage, 602fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const tcu::Surface& refImage, 603fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal float errorThreshold); 604e66ed84fc26170ce1c07b0c3eeda03bf8e87bcdePeter Gal 60530ce08903679a18155ace4ae14042f8af01261c1Akos Dirnerprivate: 60630ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const ShaderEvaluator* m_evaluator; 60730ce08903679a18155ace4ae14042f8af01261c1Akos Dirner const UniformSetup* m_uniformSetup; 608fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Gal const AttributeSetupFunc m_attribFunc; 60930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner de::MovePtr<QuadGrid> m_quadGrid; 61030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner tcu::TextureLevel m_resultImage; 61130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner 61223597067ccf919c019f237c49dd153d1ea502efcPeter Gal struct EnabledBaseAttribute 61323597067ccf919c019f237c49dd153d1ea502efcPeter Gal { 61423597067ccf919c019f237c49dd153d1ea502efcPeter Gal deUint32 location; 61523597067ccf919c019f237c49dd153d1ea502efcPeter Gal BaseAttributeType type; 61623597067ccf919c019f237c49dd153d1ea502efcPeter Gal }; 61723597067ccf919c019f237c49dd153d1ea502efcPeter Gal std::vector<EnabledBaseAttribute> m_enabledBaseAttributes; 61823597067ccf919c019f237c49dd153d1ea502efcPeter Gal 61930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner de::MovePtr<vk::DescriptorSetLayoutBuilder> m_descriptorSetLayoutBuilder; 62030ce08903679a18155ace4ae14042f8af01261c1Akos Dirner de::MovePtr<vk::DescriptorPoolBuilder> m_descriptorPoolBuilder; 62130ce08903679a18155ace4ae14042f8af01261c1Akos Dirner de::MovePtr<vk::DescriptorSetUpdateBuilder> m_descriptorSetUpdateBuilder; 622da90931967434116522be552f82c8bc164a835bfPeter Gal 62394128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos typedef de::SharedPtr<vk::Unique<vk::VkBuffer> > VkBufferSp; 62494128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos typedef de::SharedPtr<vk::Unique<vk::VkImage> > VkImageSp; 6254ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal typedef de::SharedPtr<vk::Unique<vk::VkImageView> > VkImageViewSp; 62694128dffb454628346f09bb736e0f4ace9df0b9ePyry Haulos typedef de::SharedPtr<vk::Unique<vk::VkSampler> > VkSamplerSp; 6270a4b8faafc7ea9160867de01d209e505c70a660aPeter Gal typedef de::SharedPtr<vk::Allocation> AllocationSp; 6284ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 6294ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal class UniformInfo 6301321ec058d8d9a206223de94ba29037a28f8caddPeter Gal { 6314ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal public: 6324ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal UniformInfo (void) {} 6334ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal virtual ~UniformInfo (void) {} 6344ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 635fad070c442e5230420cafdf5c98d35e9fd5f3676Peter Gal vk::VkDescriptorType type; 6361321ec058d8d9a206223de94ba29037a28f8caddPeter Gal deUint32 location; 6371321ec058d8d9a206223de94ba29037a28f8caddPeter Gal }; 6384ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 6394ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal class BufferUniform : public UniformInfo 6404ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal { 6414ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal public: 6424ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal BufferUniform (void) {} 6434ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal virtual ~BufferUniform (void) {} 6444ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 6454ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal VkBufferSp buffer; 6464ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal AllocationSp alloc; 64768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos vk::VkDescriptorBufferInfo descriptor; 6484ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal }; 6494ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 6504ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal class SamplerUniform : public UniformInfo 6514ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal { 6524ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal public: 6534ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal SamplerUniform (void) {} 6544ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal virtual ~SamplerUniform (void) {} 6554ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 656baa4bb8dff87dc81ad289516e0b82027b8d7d7c2Peter Gal VkImageSp image; 6574ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal VkImageViewSp imageView; 6584ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal VkSamplerSp sampler; 659baa4bb8dff87dc81ad289516e0b82027b8d7d7c2Peter Gal AllocationSp alloc; 66068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos vk::VkDescriptorImageInfo descriptor; 6614ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal }; 6624ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal 6634ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal typedef de::SharedPtr<de::UniquePtr<UniformInfo> > UniformInfoSp; 6644ccb48ac2f145d675648098906ddd252bbc0c63bPeter Gal std::vector<UniformInfoSp> m_uniformInfos; 665c42d55f61c1476f3f6cb425d7c81a62c035f6dc7Peter Gal 66670fc0800efe725f4f91f4d03b09aa0e567dbb09cDominik Witczak std::vector< de::SharedPtr<vk::Allocation> > m_allocations; 66770fc0800efe725f4f91f4d03b09aa0e567dbb09cDominik Witczak 668c42d55f61c1476f3f6cb425d7c81a62c035f6dc7Peter Gal std::vector<vk::VkVertexInputBindingDescription> m_vertexBindingDescription; 66930ce08903679a18155ace4ae14042f8af01261c1Akos Dirner std::vector<vk::VkVertexInputAttributeDescription> m_vertexAttributeDescription; 670fed10ac2196b9f764eb9c365afee4d73dcbf7768Peter Gal 671fed10ac2196b9f764eb9c365afee4d73dcbf7768Peter Gal std::vector<VkBufferSp> m_vertexBuffers; 672fed10ac2196b9f764eb9c365afee4d73dcbf7768Peter Gal std::vector<AllocationSp> m_vertexBufferAllocs; 673ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus 674ece5b23cbb13cd4e908a44bb5d8227fae30c32d9Daniel Hegedus vk::VkSampleCountFlagBits m_sampleCount; 67568ee9460976d1add6e36d0f2f216bb6c1c86aa96Peter Siket std::vector<vk::VkPushConstantRange> m_pushConstantRanges; 6763fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham 6773fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham // Wrapper functions around m_context calls to support sparse cases. 6783fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham vk::VkDevice getDevice (void) const; 6793fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham deUint32 getUniversalQueueFamilyIndex (void) const; 6803fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const vk::DeviceInterface& getDeviceInterface (void) const; 6813fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham vk::VkQueue getUniversalQueue (void) const; 6823fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham vk::VkPhysicalDevice getPhysicalDevice (void) const; 6833fabf9547b3e2113a74936b196c69f101ce0851bGabor Abraham const vk::InstanceInterface& getInstanceInterface (void) const; 68472a80055d864e628d5cca1ec402bf303b180496fPeter Siket SparseContext* createSparseContext (void) const; 68572a80055d864e628d5cca1ec402bf303b180496fPeter Siket vk::Allocator& getAllocator (void) const; 686f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal}; 687f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 6888cb8307ee692db4a772d298911b90a6bfb2d1604Peter Galtemplate<typename T> 689fd55d45dec3cf8f7dfe47f8809938da17553ffc9Peter Galvoid ShaderRenderCaseInstance::addUniform (deUint32 bindingLocation, vk::VkDescriptorType descriptorType, const T& data) 6908cb8307ee692db4a772d298911b90a6bfb2d1604Peter Gal{ 69102297b806657cc6311a7ff5f5cc4976e91abbb83Peter Gal addUniform(bindingLocation, descriptorType, sizeof(T), &data); 6928cb8307ee692db4a772d298911b90a6bfb2d1604Peter Gal} 6938cb8307ee692db4a772d298911b90a6bfb2d1604Peter Gal 694c5a432af8404a1620230c8b0f31bc9a469196726Peter Gal} // sr 695f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal} // vkt 696f520162e23ff1304a0d3a7148774b4d7f15056e8Peter Gal 697c5a432af8404a1620230c8b0f31bc9a469196726Peter Gal#endif // _VKTSHADERRENDER_HPP 698