141702fa78437820bc601e604de6a490eb09513ddPeter Siket/*------------------------------------------------------------------------ 241702fa78437820bc601e604de6a490eb09513ddPeter Siket * Vulkan Conformance Tests 341702fa78437820bc601e604de6a490eb09513ddPeter Siket * ------------------------ 441702fa78437820bc601e604de6a490eb09513ddPeter Siket * 541702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2016 The Khronos Group Inc. 641702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2016 Samsung Electronics Co., Ltd. 741702fa78437820bc601e604de6a490eb09513ddPeter Siket * Copyright (c) 2014 The Android Open Source Project 841702fa78437820bc601e604de6a490eb09513ddPeter Siket * 941702fa78437820bc601e604de6a490eb09513ddPeter Siket * Licensed under the Apache License, Version 2.0 (the "License"); 1041702fa78437820bc601e604de6a490eb09513ddPeter Siket * you may not use this file except in compliance with the License. 1141702fa78437820bc601e604de6a490eb09513ddPeter Siket * You may obtain a copy of the License at 1241702fa78437820bc601e604de6a490eb09513ddPeter Siket * 1341702fa78437820bc601e604de6a490eb09513ddPeter Siket * http://www.apache.org/licenses/LICENSE-2.0 1441702fa78437820bc601e604de6a490eb09513ddPeter Siket * 1541702fa78437820bc601e604de6a490eb09513ddPeter Siket * Unless required by applicable law or agreed to in writing, software 1641702fa78437820bc601e604de6a490eb09513ddPeter Siket * distributed under the License is distributed on an "AS IS" BASIS, 1741702fa78437820bc601e604de6a490eb09513ddPeter Siket * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1841702fa78437820bc601e604de6a490eb09513ddPeter Siket * See the License for the specific language governing permissions and 1941702fa78437820bc601e604de6a490eb09513ddPeter Siket * limitations under the License. 2041702fa78437820bc601e604de6a490eb09513ddPeter Siket * 2141702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*! 2241702fa78437820bc601e604de6a490eb09513ddPeter Siket * \file 2341702fa78437820bc601e604de6a490eb09513ddPeter Siket * \brief Texture test utilities. 2441702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*--------------------------------------------------------------------*/ 2541702fa78437820bc601e604de6a490eb09513ddPeter Siket 2641702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vktTextureTestUtil.hpp" 2741702fa78437820bc601e604de6a490eb09513ddPeter Siket 2841702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "deFilePath.hpp" 2941702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "deMath.h" 3041702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuCompressedTexture.hpp" 3141702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuImageIO.hpp" 3241702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuStringTemplate.hpp" 3341702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "tcuTestLog.hpp" 3441702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkBuilderUtil.hpp" 3541702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkImageUtil.hpp" 3641702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkPrograms.hpp" 3741702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkQueryUtil.hpp" 3841702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkRefUtil.hpp" 3941702fa78437820bc601e604de6a490eb09513ddPeter Siket#include "vkTypeUtil.hpp" 4041702fa78437820bc601e604de6a490eb09513ddPeter Siket#include <map> 4141702fa78437820bc601e604de6a490eb09513ddPeter Siket#include <string> 4241702fa78437820bc601e604de6a490eb09513ddPeter Siket#include <vector> 4341702fa78437820bc601e604de6a490eb09513ddPeter Siket 4441702fa78437820bc601e604de6a490eb09513ddPeter Siketusing tcu::TestLog; 4541702fa78437820bc601e604de6a490eb09513ddPeter Siket 4641702fa78437820bc601e604de6a490eb09513ddPeter Siketusing namespace vk; 4741702fa78437820bc601e604de6a490eb09513ddPeter Siketusing namespace glu::TextureTestUtil; 4841702fa78437820bc601e604de6a490eb09513ddPeter Siket 4941702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace vkt 5041702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 5141702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace texture 5241702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 5341702fa78437820bc601e604de6a490eb09513ddPeter Siketnamespace util 5441702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 5541702fa78437820bc601e604de6a490eb09513ddPeter Siket 5641702fa78437820bc601e604de6a490eb09513ddPeter Siketstruct ShaderParameters { 5741702fa78437820bc601e604de6a490eb09513ddPeter Siket float bias; //!< User-supplied bias. 5841702fa78437820bc601e604de6a490eb09513ddPeter Siket float ref; //!< Reference value for shadow lookups. 5941702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec2 padding; //!< Shader uniform padding. 6041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec4 colorScale; //!< Scale for texture color values. 6141702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec4 colorBias; //!< Bias for texture color values. 6241702fa78437820bc601e604de6a490eb09513ddPeter Siket}; 6341702fa78437820bc601e604de6a490eb09513ddPeter Siket 6441702fa78437820bc601e604de6a490eb09513ddPeter Siketconst char* getProgramName(Program program) 6541702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 6641702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (program) 6741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 6841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_FLOAT: return "2D_FLOAT"; 6941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_INT: return "2D_INT"; 7041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_UINT: return "2D_UINT"; 7141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_SHADOW: return "2D_SHADOW"; 7241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_FLOAT_BIAS: return "2D_FLOAT_BIAS"; 7341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_INT_BIAS: return "2D_INT_BIAS"; 7441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_UINT_BIAS: return "2D_UINT_BIAS"; 7541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_SHADOW_BIAS: return "2D_SHADOW_BIAS"; 7641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_FLOAT: return "1D_FLOAT"; 7741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_INT: return "1D_INT"; 7841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_UINT: return "1D_UINT"; 7941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_SHADOW: return "1D_SHADOW"; 8041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_FLOAT_BIAS: return "1D_FLOAT_BIAS"; 8141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_INT_BIAS: return "1D_INT_BIAS"; 8241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_UINT_BIAS: return "1D_UINT_BIAS"; 8341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_SHADOW_BIAS: return "1D_SHADOW_BIAS"; 8441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_FLOAT: return "CUBE_FLOAT"; 8541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_INT: return "CUBE_INT"; 8641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_UINT: return "CUBE_UINT"; 8741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_SHADOW: return "CUBE_SHADOW"; 8841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_FLOAT_BIAS: return "CUBE_FLOAT_BIAS"; 8941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_INT_BIAS: return "CUBE_INT_BIAS"; 9041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_UINT_BIAS: return "CUBE_UINT_BIAS"; 9141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_SHADOW_BIAS: return "CUBE_SHADOW_BIAS"; 9241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_FLOAT: return "2D_ARRAY_FLOAT"; 9341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_INT: return "2D_ARRAY_INT"; 9441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_UINT: return "2D_ARRAY_UINT"; 9541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_SHADOW: return "2D_ARRAY_SHADOW"; 9641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_FLOAT: return "3D_FLOAT"; 9741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_INT: return "3D_INT"; 9841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_UINT: return "3D_UINT"; 9941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_FLOAT_BIAS: return "3D_FLOAT_BIAS"; 10041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_INT_BIAS: return "3D_INT_BIAS"; 10141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_UINT_BIAS: return "3D_UINT_BIAS"; 10241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_FLOAT: return "CUBE_ARRAY_FLOAT"; 10341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_INT: return "CUBE_ARRAY_INT"; 10441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_UINT: return "CUBE_ARRAY_UINT"; 10541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_SHADOW: return "CUBE_ARRAY_SHADOW"; 10641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_FLOAT: return "1D_ARRAY_FLOAT"; 10741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_INT: return "1D_ARRAY_INT"; 10841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_UINT: return "1D_ARRAY_UINT"; 10941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_SHADOW: return "1D_ARRAY_SHADOW"; 11041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_FLOAT: return "BUFFER_FLOAT"; 11141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_INT: return "BUFFER_INT"; 11241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_UINT: return "BUFFER_UINT"; 11341702fa78437820bc601e604de6a490eb09513ddPeter Siket default: 11441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(false); 11541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 11641702fa78437820bc601e604de6a490eb09513ddPeter Siket return NULL; 11741702fa78437820bc601e604de6a490eb09513ddPeter Siket} 11841702fa78437820bc601e604de6a490eb09513ddPeter Siket 11941702fa78437820bc601e604de6a490eb09513ddPeter SiketVkImageViewType textureTypeToImageViewType (TextureBinding::Type type) 12041702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 12141702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (type) 12241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 12341702fa78437820bc601e604de6a490eb09513ddPeter Siket case TextureBinding::TYPE_2D: return VK_IMAGE_VIEW_TYPE_2D; 12441702fa78437820bc601e604de6a490eb09513ddPeter Siket case TextureBinding::TYPE_2D_ARRAY: return VK_IMAGE_VIEW_TYPE_2D_ARRAY; 12541702fa78437820bc601e604de6a490eb09513ddPeter Siket case TextureBinding::TYPE_CUBE_MAP: return VK_IMAGE_VIEW_TYPE_CUBE; 12641702fa78437820bc601e604de6a490eb09513ddPeter Siket case TextureBinding::TYPE_3D: return VK_IMAGE_VIEW_TYPE_3D; 12741702fa78437820bc601e604de6a490eb09513ddPeter Siket default: 12841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(false); 12941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 13041702fa78437820bc601e604de6a490eb09513ddPeter Siket 13141702fa78437820bc601e604de6a490eb09513ddPeter Siket return VK_IMAGE_VIEW_TYPE_2D; 13241702fa78437820bc601e604de6a490eb09513ddPeter Siket} 13341702fa78437820bc601e604de6a490eb09513ddPeter Siket 13441702fa78437820bc601e604de6a490eb09513ddPeter SiketVkImageType imageViewTypeToImageType (VkImageViewType type) 13541702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 13641702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (type) 13741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 13841702fa78437820bc601e604de6a490eb09513ddPeter Siket case VK_IMAGE_VIEW_TYPE_2D: 13941702fa78437820bc601e604de6a490eb09513ddPeter Siket case VK_IMAGE_VIEW_TYPE_2D_ARRAY: 14041702fa78437820bc601e604de6a490eb09513ddPeter Siket case VK_IMAGE_VIEW_TYPE_CUBE: return VK_IMAGE_TYPE_2D; 14141702fa78437820bc601e604de6a490eb09513ddPeter Siket case VK_IMAGE_VIEW_TYPE_3D: return VK_IMAGE_TYPE_3D; 14241702fa78437820bc601e604de6a490eb09513ddPeter Siket default: 14341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(false); 14441702fa78437820bc601e604de6a490eb09513ddPeter Siket } 14541702fa78437820bc601e604de6a490eb09513ddPeter Siket 14641702fa78437820bc601e604de6a490eb09513ddPeter Siket return VK_IMAGE_TYPE_2D; 14741702fa78437820bc601e604de6a490eb09513ddPeter Siket} 14841702fa78437820bc601e604de6a490eb09513ddPeter Siket 14941702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid initializePrograms(vk::SourceCollections& programCollection, glu::Precision texCoordPrecision, const std::vector<Program>& programs) 15041702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 15141702fa78437820bc601e604de6a490eb09513ddPeter Siket static const char* vertShaderTemplate = 15241702fa78437820bc601e604de6a490eb09513ddPeter Siket "${VTX_HEADER}" 15341702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout(location = 0) ${VTX_IN} highp vec4 a_position;\n" 15441702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout(location = 1) ${VTX_IN} ${PRECISION} ${TEXCOORD_TYPE} a_texCoord;\n" 15541702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout(location = 0) ${VTX_OUT} ${PRECISION} ${TEXCOORD_TYPE} v_texCoord;\n" 15641702fa78437820bc601e604de6a490eb09513ddPeter Siket "${VTX_OUT} gl_PerVertex { vec4 gl_Position; };\n" 15741702fa78437820bc601e604de6a490eb09513ddPeter Siket "\n" 15841702fa78437820bc601e604de6a490eb09513ddPeter Siket "void main (void)\n" 15941702fa78437820bc601e604de6a490eb09513ddPeter Siket "{\n" 16041702fa78437820bc601e604de6a490eb09513ddPeter Siket " gl_Position = a_position;\n" 16141702fa78437820bc601e604de6a490eb09513ddPeter Siket " v_texCoord = a_texCoord;\n" 16241702fa78437820bc601e604de6a490eb09513ddPeter Siket "}\n"; 16341702fa78437820bc601e604de6a490eb09513ddPeter Siket 16441702fa78437820bc601e604de6a490eb09513ddPeter Siket static const char* fragShaderTemplate = 16541702fa78437820bc601e604de6a490eb09513ddPeter Siket "${FRAG_HEADER}" 16641702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout(location = 0) ${FRAG_IN} ${PRECISION} ${TEXCOORD_TYPE} v_texCoord;\n" 16741702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout(location = 0) out mediump vec4 ${FRAG_COLOR};\n" 16841702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout (set=0, binding=0, std140) uniform Block \n" 16941702fa78437820bc601e604de6a490eb09513ddPeter Siket "{\n" 17041702fa78437820bc601e604de6a490eb09513ddPeter Siket " ${PRECISION} float u_bias;\n" 17141702fa78437820bc601e604de6a490eb09513ddPeter Siket " ${PRECISION} float u_ref;\n" 17241702fa78437820bc601e604de6a490eb09513ddPeter Siket " ${PRECISION} vec4 u_colorScale;\n" 17341702fa78437820bc601e604de6a490eb09513ddPeter Siket " ${PRECISION} vec4 u_colorBias;\n" 17441702fa78437820bc601e604de6a490eb09513ddPeter Siket "};\n\n" 17541702fa78437820bc601e604de6a490eb09513ddPeter Siket "layout (set=1, binding=0) uniform ${PRECISION} ${SAMPLER_TYPE} u_sampler;\n" 17641702fa78437820bc601e604de6a490eb09513ddPeter Siket "void main (void)\n" 17741702fa78437820bc601e604de6a490eb09513ddPeter Siket "{\n" 17841702fa78437820bc601e604de6a490eb09513ddPeter Siket " ${FRAG_COLOR} = ${LOOKUP} * u_colorScale + u_colorBias;\n" 17941702fa78437820bc601e604de6a490eb09513ddPeter Siket "}\n"; 18041702fa78437820bc601e604de6a490eb09513ddPeter Siket 18141702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::StringTemplate vertexSource (vertShaderTemplate); 18241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::StringTemplate fragmentSource (fragShaderTemplate); 18341702fa78437820bc601e604de6a490eb09513ddPeter Siket 18441702fa78437820bc601e604de6a490eb09513ddPeter Siket for (std::vector<Program>::const_iterator programIt = programs.begin(); programIt != programs.end(); ++programIt) 18541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 18641702fa78437820bc601e604de6a490eb09513ddPeter Siket Program program = *programIt; 18741702fa78437820bc601e604de6a490eb09513ddPeter Siket std::map<std::string, std::string> params; 18841702fa78437820bc601e604de6a490eb09513ddPeter Siket 18941702fa78437820bc601e604de6a490eb09513ddPeter Siket bool isCube = de::inRange<int>(program, PROGRAM_CUBE_FLOAT, PROGRAM_CUBE_SHADOW_BIAS); 19041702fa78437820bc601e604de6a490eb09513ddPeter Siket bool isArray = de::inRange<int>(program, PROGRAM_2D_ARRAY_FLOAT, PROGRAM_2D_ARRAY_SHADOW) 19141702fa78437820bc601e604de6a490eb09513ddPeter Siket || de::inRange<int>(program, PROGRAM_1D_ARRAY_FLOAT, PROGRAM_1D_ARRAY_SHADOW); 19241702fa78437820bc601e604de6a490eb09513ddPeter Siket 19341702fa78437820bc601e604de6a490eb09513ddPeter Siket bool is1D = de::inRange<int>(program, PROGRAM_1D_FLOAT, PROGRAM_1D_SHADOW_BIAS) 19441702fa78437820bc601e604de6a490eb09513ddPeter Siket || de::inRange<int>(program, PROGRAM_1D_ARRAY_FLOAT, PROGRAM_1D_ARRAY_SHADOW) 19541702fa78437820bc601e604de6a490eb09513ddPeter Siket || de::inRange<int>(program, PROGRAM_BUFFER_FLOAT, PROGRAM_BUFFER_UINT); 19641702fa78437820bc601e604de6a490eb09513ddPeter Siket 19741702fa78437820bc601e604de6a490eb09513ddPeter Siket bool is2D = de::inRange<int>(program, PROGRAM_2D_FLOAT, PROGRAM_2D_SHADOW_BIAS) 19841702fa78437820bc601e604de6a490eb09513ddPeter Siket || de::inRange<int>(program, PROGRAM_2D_ARRAY_FLOAT, PROGRAM_2D_ARRAY_SHADOW); 19941702fa78437820bc601e604de6a490eb09513ddPeter Siket 20041702fa78437820bc601e604de6a490eb09513ddPeter Siket bool is3D = de::inRange<int>(program, PROGRAM_3D_FLOAT, PROGRAM_3D_UINT_BIAS); 20141702fa78437820bc601e604de6a490eb09513ddPeter Siket bool isCubeArray = de::inRange<int>(program, PROGRAM_CUBE_ARRAY_FLOAT, PROGRAM_CUBE_ARRAY_SHADOW); 20241702fa78437820bc601e604de6a490eb09513ddPeter Siket 20341702fa78437820bc601e604de6a490eb09513ddPeter Siket const std::string version = glu::getGLSLVersionDeclaration(glu::GLSL_VERSION_450); 20441702fa78437820bc601e604de6a490eb09513ddPeter Siket 20541702fa78437820bc601e604de6a490eb09513ddPeter Siket params["FRAG_HEADER"] = version + "\n"; 20641702fa78437820bc601e604de6a490eb09513ddPeter Siket params["VTX_HEADER"] = version + "\n"; 20741702fa78437820bc601e604de6a490eb09513ddPeter Siket params["VTX_IN"] = "in"; 20841702fa78437820bc601e604de6a490eb09513ddPeter Siket params["VTX_OUT"] = "out"; 20941702fa78437820bc601e604de6a490eb09513ddPeter Siket params["FRAG_IN"] = "in"; 21041702fa78437820bc601e604de6a490eb09513ddPeter Siket params["FRAG_COLOR"] = "dEQP_FragColor"; 21141702fa78437820bc601e604de6a490eb09513ddPeter Siket 21241702fa78437820bc601e604de6a490eb09513ddPeter Siket params["PRECISION"] = glu::getPrecisionName(texCoordPrecision); 21341702fa78437820bc601e604de6a490eb09513ddPeter Siket 21441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (isCubeArray) 21541702fa78437820bc601e604de6a490eb09513ddPeter Siket params["TEXCOORD_TYPE"] = "vec4"; 21641702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (isCube || (is2D && isArray) || is3D) 21741702fa78437820bc601e604de6a490eb09513ddPeter Siket params["TEXCOORD_TYPE"] = "vec3"; 21841702fa78437820bc601e604de6a490eb09513ddPeter Siket else if ((is1D && isArray) || is2D) 21941702fa78437820bc601e604de6a490eb09513ddPeter Siket params["TEXCOORD_TYPE"] = "vec2"; 22041702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (is1D) 22141702fa78437820bc601e604de6a490eb09513ddPeter Siket params["TEXCOORD_TYPE"] = "float"; 22241702fa78437820bc601e604de6a490eb09513ddPeter Siket else 22341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(DE_FALSE); 22441702fa78437820bc601e604de6a490eb09513ddPeter Siket 22541702fa78437820bc601e604de6a490eb09513ddPeter Siket const char* sampler = DE_NULL; 22641702fa78437820bc601e604de6a490eb09513ddPeter Siket const char* lookup = DE_NULL; 22741702fa78437820bc601e604de6a490eb09513ddPeter Siket 22841702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (program) 22941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 23041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_FLOAT: sampler = "sampler2D"; lookup = "texture(u_sampler, v_texCoord)"; break; 23141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_INT: sampler = "isampler2D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 23241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_UINT: sampler = "usampler2D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 23341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_SHADOW: sampler = "sampler2DShadow"; lookup = "vec4(texture(u_sampler, vec3(v_texCoord, u_ref)), 0.0, 0.0, 1.0)"; break; 23441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_FLOAT_BIAS: sampler = "sampler2D"; lookup = "texture(u_sampler, v_texCoord, u_bias)"; break; 23541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_INT_BIAS: sampler = "isampler2D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 23641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_UINT_BIAS: sampler = "usampler2D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 23741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_SHADOW_BIAS: sampler = "sampler2DShadow"; lookup = "vec4(texture(u_sampler, vec3(v_texCoord, u_ref), u_bias), 0.0, 0.0, 1.0)"; break; 23841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_FLOAT: sampler = "sampler1D"; lookup = "texture(u_sampler, v_texCoord)"; break; 23941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_INT: sampler = "isampler1D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 24041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_UINT: sampler = "usampler1D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 24141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_SHADOW: sampler = "sampler1DShadow"; lookup = "vec4(texture(u_sampler, vec3(v_texCoord, 0.0, u_ref)), 0.0, 0.0, 1.0)"; break; 24241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_FLOAT_BIAS: sampler = "sampler1D"; lookup = "texture(u_sampler, v_texCoord, u_bias)"; break; 24341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_INT_BIAS: sampler = "isampler1D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 24441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_UINT_BIAS: sampler = "usampler1D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 24541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_SHADOW_BIAS: sampler = "sampler1DShadow"; lookup = "vec4(texture(u_sampler, vec3(v_texCoord, 0.0, u_ref), u_bias), 0.0, 0.0, 1.0)"; break; 24641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_FLOAT: sampler = "samplerCube"; lookup = "texture(u_sampler, v_texCoord)"; break; 24741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_INT: sampler = "isamplerCube"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 24841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_UINT: sampler = "usamplerCube"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 24941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_SHADOW: sampler = "samplerCubeShadow"; lookup = "vec4(texture(u_sampler, vec4(v_texCoord, u_ref)), 0.0, 0.0, 1.0)"; break; 25041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_FLOAT_BIAS: sampler = "samplerCube"; lookup = "texture(u_sampler, v_texCoord, u_bias)"; break; 25141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_INT_BIAS: sampler = "isamplerCube"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 25241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_UINT_BIAS: sampler = "usamplerCube"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 25341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_SHADOW_BIAS: sampler = "samplerCubeShadow"; lookup = "vec4(texture(u_sampler, vec4(v_texCoord, u_ref), u_bias), 0.0, 0.0, 1.0)"; break; 25441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_FLOAT: sampler = "sampler2DArray"; lookup = "texture(u_sampler, v_texCoord)"; break; 25541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_INT: sampler = "isampler2DArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 25641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_UINT: sampler = "usampler2DArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 25741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_2D_ARRAY_SHADOW: sampler = "sampler2DArrayShadow"; lookup = "vec4(texture(u_sampler, vec4(v_texCoord, u_ref)), 0.0, 0.0, 1.0)"; break; 25841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_FLOAT: sampler = "sampler3D"; lookup = "texture(u_sampler, v_texCoord)"; break; 25941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_INT: sampler = "isampler3D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 26041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_UINT: sampler = "usampler3D"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 26141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_FLOAT_BIAS: sampler = "sampler3D"; lookup = "texture(u_sampler, v_texCoord, u_bias)"; break; 26241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_INT_BIAS: sampler = "isampler3D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 26341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_3D_UINT_BIAS: sampler = "usampler3D"; lookup = "vec4(texture(u_sampler, v_texCoord, u_bias))"; break; 26441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_FLOAT: sampler = "samplerCubeArray"; lookup = "texture(u_sampler, v_texCoord)"; break; 26541702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_INT: sampler = "isamplerCubeArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 26641702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_UINT: sampler = "usamplerCubeArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 26741702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_CUBE_ARRAY_SHADOW: sampler = "samplerCubeArrayShadow"; lookup = "vec4(texture(u_sampler, v_texCoord, u_ref), 0.0, 0.0, 1.0)"; break; 26841702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_FLOAT: sampler = "sampler1DArray"; lookup = "texture(u_sampler, v_texCoord)"; break; 26941702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_INT: sampler = "isampler1DArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 27041702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_UINT: sampler = "usampler1DArray"; lookup = "vec4(texture(u_sampler, v_texCoord))"; break; 27141702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_1D_ARRAY_SHADOW: sampler = "sampler1DArrayShadow"; lookup = "vec4(texture(u_sampler, vec3(v_texCoord, u_ref)), 0.0, 0.0, 1.0)"; break; 27241702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_FLOAT: sampler = "samplerBuffer"; lookup = "texelFetch(u_sampler, int(v_texCoord))"; break; 27341702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_INT: sampler = "isamplerBuffer"; lookup = "vec4(texelFetch(u_sampler, int(v_texCoord)))"; break; 27441702fa78437820bc601e604de6a490eb09513ddPeter Siket case PROGRAM_BUFFER_UINT: sampler = "usamplerBuffer"; lookup = "vec4(texelFetch(u_sampler, int(v_texCoord)))"; break; 27541702fa78437820bc601e604de6a490eb09513ddPeter Siket default: 27641702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(false); 27741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 27841702fa78437820bc601e604de6a490eb09513ddPeter Siket 27941702fa78437820bc601e604de6a490eb09513ddPeter Siket params["SAMPLER_TYPE"] = sampler; 28041702fa78437820bc601e604de6a490eb09513ddPeter Siket params["LOOKUP"] = lookup; 28141702fa78437820bc601e604de6a490eb09513ddPeter Siket 28241702fa78437820bc601e604de6a490eb09513ddPeter Siket programCollection.glslSources.add("vertext_" + std::string(getProgramName(program))) << glu::VertexSource(vertexSource.specialize(params)); 28341702fa78437820bc601e604de6a490eb09513ddPeter Siket programCollection.glslSources.add("fragment_" + std::string(getProgramName(program))) << glu::FragmentSource(fragmentSource.specialize(params)); 28441702fa78437820bc601e604de6a490eb09513ddPeter Siket } 28541702fa78437820bc601e604de6a490eb09513ddPeter Siket} 28641702fa78437820bc601e604de6a490eb09513ddPeter Siket 28741702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureBinding::TextureBinding (Context& context) 28841702fa78437820bc601e604de6a490eb09513ddPeter Siket : m_context (context) 28941702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 29041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 29141702fa78437820bc601e604de6a490eb09513ddPeter Siket 29241702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureBinding::TextureBinding (Context& context, const TestTextureSp& textureData, const TextureBinding::Type type) 29341702fa78437820bc601e604de6a490eb09513ddPeter Siket : m_context (context) 29441702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_type (type) 29541702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_textureData (textureData) 29641702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 29741702fa78437820bc601e604de6a490eb09513ddPeter Siket updateTextureData(m_textureData, m_type); 29841702fa78437820bc601e604de6a490eb09513ddPeter Siket} 29941702fa78437820bc601e604de6a490eb09513ddPeter Siket 30041702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureBinding::updateTextureData (const TestTextureSp& textureData, const TextureBinding::Type textureType) 30141702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 30241702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 30341702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 30441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkQueue queue = m_context.getUniversalQueue(); 30541702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 queueFamilyIndex = m_context.getUniversalQueueFamilyIndex(); 30641702fa78437820bc601e604de6a490eb09513ddPeter Siket Allocator& allocator = m_context.getDefaultAllocator(); 30741702fa78437820bc601e604de6a490eb09513ddPeter Siket 30841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_type = textureType; 30941702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureData = textureData; 31041702fa78437820bc601e604de6a490eb09513ddPeter Siket 31141702fa78437820bc601e604de6a490eb09513ddPeter Siket const bool isCube = m_type == TYPE_CUBE_MAP; 31241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageCreateFlags imageCreateFlags = isCube ? VK_IMAGE_CREATE_CUBE_COMPATIBLE_BIT : 0; 31341702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageViewType imageViewType = textureTypeToImageViewType(textureType); 31441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageType imageType = imageViewTypeToImageType(imageViewType); 31541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageTiling imageTiling = VK_IMAGE_TILING_OPTIMAL; 31641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageUsageFlags imageUsageFlags = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; 317044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan const VkFormat format = textureData->isCompressed() ? mapCompressedTextureFormat(textureData->getCompressedLevel(0, 0).getFormat()) : mapTextureFormat(textureData->getTextureFormat()); 31841702fa78437820bc601e604de6a490eb09513ddPeter Siket const tcu::UVec3 textureDimension = textureData->getTextureDimension(); 31941702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 mipLevels = textureData->getNumLevels(); 32041702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 arraySize = textureData->getArraySize(); 32141702fa78437820bc601e604de6a490eb09513ddPeter Siket vk::VkImageFormatProperties imageFormatProperties; 32241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkResult imageFormatQueryResult = m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties(m_context.getPhysicalDevice(), format, imageType, imageTiling, imageUsageFlags, imageCreateFlags, &imageFormatProperties); 32341702fa78437820bc601e604de6a490eb09513ddPeter Siket 32441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (imageFormatQueryResult == VK_ERROR_FORMAT_NOT_SUPPORTED) 32541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 32641702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, (std::string("Format not supported: ") + vk::getFormatName(format)).c_str()); 32741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 32841702fa78437820bc601e604de6a490eb09513ddPeter Siket else 32941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(imageFormatQueryResult); 33041702fa78437820bc601e604de6a490eb09513ddPeter Siket 33141702fa78437820bc601e604de6a490eb09513ddPeter Siket if (imageFormatProperties.maxArrayLayers < arraySize) 33241702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, ("Maximum array layers number for this format is not enough for this test.")); 33341702fa78437820bc601e604de6a490eb09513ddPeter Siket 33441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (imageFormatProperties.maxMipLevels < mipLevels) 33541702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, ("Maximum mimap level number for this format is not enough for this test.")); 33641702fa78437820bc601e604de6a490eb09513ddPeter Siket 33741702fa78437820bc601e604de6a490eb09513ddPeter Siket if (imageFormatProperties.maxExtent.width < textureDimension.x() || 33841702fa78437820bc601e604de6a490eb09513ddPeter Siket imageFormatProperties.maxExtent.height < textureDimension.y() || 33941702fa78437820bc601e604de6a490eb09513ddPeter Siket imageFormatProperties.maxExtent.depth < textureDimension.z()) 34041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 34141702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, ("Maximum image dimension for this format is not enough for this test.")); 34241702fa78437820bc601e604de6a490eb09513ddPeter Siket } 34341702fa78437820bc601e604de6a490eb09513ddPeter Siket 34441702fa78437820bc601e604de6a490eb09513ddPeter Siket // Create image 34541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageCreateInfo imageParams = 34641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 34741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType; 34841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 34941702fa78437820bc601e604de6a490eb09513ddPeter Siket imageCreateFlags, // VkImageCreateFlags flags; 35041702fa78437820bc601e604de6a490eb09513ddPeter Siket imageType, // VkImageType imageType; 35141702fa78437820bc601e604de6a490eb09513ddPeter Siket format, // VkFormat format; 35241702fa78437820bc601e604de6a490eb09513ddPeter Siket { // VkExtent3D extent; 35341702fa78437820bc601e604de6a490eb09513ddPeter Siket (deUint32)textureDimension.x(), 35441702fa78437820bc601e604de6a490eb09513ddPeter Siket (deUint32)textureDimension.y(), 35541702fa78437820bc601e604de6a490eb09513ddPeter Siket (deUint32)textureDimension.z() 35641702fa78437820bc601e604de6a490eb09513ddPeter Siket }, 35741702fa78437820bc601e604de6a490eb09513ddPeter Siket mipLevels, // deUint32 mipLevels; 35841702fa78437820bc601e604de6a490eb09513ddPeter Siket arraySize, // deUint32 arrayLayers; 35941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples; 36041702fa78437820bc601e604de6a490eb09513ddPeter Siket imageTiling, // VkImageTiling tiling; 36141702fa78437820bc601e604de6a490eb09513ddPeter Siket imageUsageFlags, // VkImageUsageFlags usage; 36241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 36341702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyIndexCount; 36441702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex, // const deUint32* pQueueFamilyIndices; 36541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_UNDEFINED // VkImageLayout initialLayout; 36641702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 36741702fa78437820bc601e604de6a490eb09513ddPeter Siket 36841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureImage = createImage(vkd, vkDevice, &imageParams); 36941702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureImageMemory = allocator.allocate(getImageMemoryRequirements(vkd, vkDevice, *m_textureImage), MemoryRequirement::Any); 37041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindImageMemory(vkDevice, *m_textureImage, m_textureImageMemory->getMemory(), m_textureImageMemory->getOffset())); 37141702fa78437820bc601e604de6a490eb09513ddPeter Siket 37241702fa78437820bc601e604de6a490eb09513ddPeter Siket updateTextureViewMipLevels(0, mipLevels - 1); 37341702fa78437820bc601e604de6a490eb09513ddPeter Siket 37441702fa78437820bc601e604de6a490eb09513ddPeter Siket pipeline::uploadTestTexture(vkd, vkDevice, queue, queueFamilyIndex, allocator, *m_textureData, *m_textureImage); 37541702fa78437820bc601e604de6a490eb09513ddPeter Siket} 37641702fa78437820bc601e604de6a490eb09513ddPeter Siket 37741702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureBinding::updateTextureViewMipLevels (deUint32 baseLevel, deUint32 maxLevel) 37841702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 37941702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 38041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 38141702fa78437820bc601e604de6a490eb09513ddPeter Siket const vk::VkImageViewType imageViewType = textureTypeToImageViewType(m_type); 382044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan const vk::VkFormat format = m_textureData->isCompressed() ? mapCompressedTextureFormat(m_textureData->getCompressedLevel(0, 0).getFormat()) : mapTextureFormat(m_textureData->getTextureFormat()); 38341702fa78437820bc601e604de6a490eb09513ddPeter Siket const bool isShadowTexture = tcu::hasDepthComponent(m_textureData->getTextureFormat().order); 38441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageAspectFlags aspectMask = isShadowTexture ? VK_IMAGE_ASPECT_DEPTH_BIT : VK_IMAGE_ASPECT_COLOR_BIT; 38541702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 layerCount = m_textureData->getArraySize(); 38641702fa78437820bc601e604de6a490eb09513ddPeter Siket const vk::VkImageViewCreateInfo viewParams = 38741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 38841702fa78437820bc601e604de6a490eb09513ddPeter Siket vk::VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // VkStructureType sType; 38941702fa78437820bc601e604de6a490eb09513ddPeter Siket NULL, // const voide* pNext; 39041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkImageViewCreateFlags flags; 39141702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_textureImage, // VkImage image; 39241702fa78437820bc601e604de6a490eb09513ddPeter Siket imageViewType, // VkImageViewType viewType; 39341702fa78437820bc601e604de6a490eb09513ddPeter Siket format, // VkFormat format; 39441702fa78437820bc601e604de6a490eb09513ddPeter Siket makeComponentMappingRGBA(), // VkComponentMapping components; 39541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 39641702fa78437820bc601e604de6a490eb09513ddPeter Siket aspectMask, // VkImageAspectFlags aspectMask; 39741702fa78437820bc601e604de6a490eb09513ddPeter Siket baseLevel, // deUint32 baseMipLevel; 39841702fa78437820bc601e604de6a490eb09513ddPeter Siket maxLevel-baseLevel+1, // deUint32 levelCount; 39941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // deUint32 baseArrayLayer; 40041702fa78437820bc601e604de6a490eb09513ddPeter Siket layerCount // deUint32 layerCount; 40141702fa78437820bc601e604de6a490eb09513ddPeter Siket }, // VkImageSubresourceRange subresourceRange; 40241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 40341702fa78437820bc601e604de6a490eb09513ddPeter Siket 40441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureImageView = createImageView(vkd, vkDevice, &viewParams); 40541702fa78437820bc601e604de6a490eb09513ddPeter Siket} 40641702fa78437820bc601e604de6a490eb09513ddPeter Siket 40741702fa78437820bc601e604de6a490eb09513ddPeter Siketconst deUint16 TextureRenderer::s_vertexIndices[6] = { 0, 1, 2, 2, 1, 3 }; 40841702fa78437820bc601e604de6a490eb09513ddPeter Siketconst VkDeviceSize TextureRenderer::s_vertexIndexBufferSize = sizeof(TextureRenderer::s_vertexIndices); 40941702fa78437820bc601e604de6a490eb09513ddPeter Siket 41041702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureRenderer::TextureRenderer (Context& context, VkSampleCountFlagBits sampleCount, deUint32 renderWidth, deUint32 renderHeight) 41141702fa78437820bc601e604de6a490eb09513ddPeter Siket : m_context (context) 41241702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_log (context.getTestContext().getLog()) 41341702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_renderWidth (renderWidth) 41441702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_renderHeight (renderHeight) 41541702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_sampleCount (sampleCount) 41641702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_multisampling (m_sampleCount != VK_SAMPLE_COUNT_1_BIT) 41741702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_imageFormat (VK_FORMAT_R8G8B8A8_UNORM) 41841702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_textureFormat (vk::mapVkFormat(m_imageFormat)) 41941702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_uniformBufferSize (sizeof(ShaderParameters)) 42041702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_resultBufferSize (renderWidth * renderHeight * m_textureFormat.getPixelSize()) 42141702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_viewportOffsetX (0.0f) 42241702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_viewportOffsetY (0.0f) 42341702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_viewportWidth ((float)renderWidth) 42441702fa78437820bc601e604de6a490eb09513ddPeter Siket , m_viewportHeight ((float)renderHeight) 42541702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 42641702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 42741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 42841702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 queueFamilyIndex = m_context.getUniversalQueueFamilyIndex(); 42941702fa78437820bc601e604de6a490eb09513ddPeter Siket Allocator& allocator = m_context.getDefaultAllocator(); 43041702fa78437820bc601e604de6a490eb09513ddPeter Siket 43141702fa78437820bc601e604de6a490eb09513ddPeter Siket // Command Pool 432da03200a87f51bed33b3c3030ecbb6df06ff4f60Mika Isojärvi m_commandPool = createCommandPool(vkd, vkDevice, VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, queueFamilyIndex); 43341702fa78437820bc601e604de6a490eb09513ddPeter Siket 43441702fa78437820bc601e604de6a490eb09513ddPeter Siket // Image 43541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 43641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageUsageFlags imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; 43741702fa78437820bc601e604de6a490eb09513ddPeter Siket VkImageFormatProperties properties; 43841702fa78437820bc601e604de6a490eb09513ddPeter Siket 43941702fa78437820bc601e604de6a490eb09513ddPeter Siket if ((m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties(m_context.getPhysicalDevice(), 44041702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, 44141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TYPE_2D, 44241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TILING_OPTIMAL, 44341702fa78437820bc601e604de6a490eb09513ddPeter Siket imageUsage, 44441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, 44541702fa78437820bc601e604de6a490eb09513ddPeter Siket &properties) == VK_ERROR_FORMAT_NOT_SUPPORTED)) 44641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 44741702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, "Format not supported"); 44841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 44941702fa78437820bc601e604de6a490eb09513ddPeter Siket 45041702fa78437820bc601e604de6a490eb09513ddPeter Siket if ((properties.sampleCounts & m_sampleCount) != m_sampleCount) 45141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 45241702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, "Format not supported"); 45341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 45441702fa78437820bc601e604de6a490eb09513ddPeter Siket 45541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageCreateInfo imageCreateInfo = 45641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 45741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType; 45841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 45941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkImageCreateFlags flags; 46041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TYPE_2D, // VkImageType imageType; 46141702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 46241702fa78437820bc601e604de6a490eb09513ddPeter Siket { m_renderWidth, m_renderHeight, 1u }, // VkExtent3D extent; 46341702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 mipLevels; 46441702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 arrayLayers; 46541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_sampleCount, // VkSampleCountFlagBits samples; 46641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TILING_OPTIMAL, // VkImageTiling tiling; 46741702fa78437820bc601e604de6a490eb09513ddPeter Siket imageUsage, // VkImageUsageFlags usage; 46841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 46941702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyIndexCount; 47041702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex, // const deUint32* pQueueFamilyIndices; 47141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_UNDEFINED // VkImageLayout initialLayout; 47241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 47341702fa78437820bc601e604de6a490eb09513ddPeter Siket 47441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_image = vk::createImage(vkd, vkDevice, &imageCreateInfo, DE_NULL); 47541702fa78437820bc601e604de6a490eb09513ddPeter Siket 47641702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageMemory = allocator.allocate(getImageMemoryRequirements(vkd, vkDevice, *m_image), MemoryRequirement::Any); 47741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindImageMemory(vkDevice, *m_image, m_imageMemory->getMemory(), m_imageMemory->getOffset())); 47841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 47941702fa78437820bc601e604de6a490eb09513ddPeter Siket 48041702fa78437820bc601e604de6a490eb09513ddPeter Siket // Image View 48141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 48241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageViewCreateInfo imageViewCreateInfo = 48341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 48441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // VkStructureType sType; 48541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 48641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkImageViewCreateFlags flags; 48741702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_image, // VkImage image; 48841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_VIEW_TYPE_2D, // VkImageViewType viewType; 48941702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 49041702fa78437820bc601e604de6a490eb09513ddPeter Siket makeComponentMappingRGBA(), // VkComponentMapping components; 49141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 49241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask; 49341702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 baseMipLevel; 49441702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 mipLevels; 49541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 baseArrayLayer; 49641702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 arraySize; 49741702fa78437820bc601e604de6a490eb09513ddPeter Siket }, // VkImageSubresourceRange subresourceRange; 49841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 49941702fa78437820bc601e604de6a490eb09513ddPeter Siket 50041702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageView = vk::createImageView(vkd, vkDevice, &imageViewCreateInfo, DE_NULL); 50141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 50241702fa78437820bc601e604de6a490eb09513ddPeter Siket 50341702fa78437820bc601e604de6a490eb09513ddPeter Siket if (m_multisampling) 50441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 50541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 50641702fa78437820bc601e604de6a490eb09513ddPeter Siket // Resolved Image 50741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageUsageFlags imageUsage = VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT | VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT; 50841702fa78437820bc601e604de6a490eb09513ddPeter Siket VkImageFormatProperties properties; 50941702fa78437820bc601e604de6a490eb09513ddPeter Siket 51041702fa78437820bc601e604de6a490eb09513ddPeter Siket if ((m_context.getInstanceInterface().getPhysicalDeviceImageFormatProperties(m_context.getPhysicalDevice(), 51141702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, 51241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TYPE_2D, 51341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TILING_OPTIMAL, 51441702fa78437820bc601e604de6a490eb09513ddPeter Siket imageUsage, 51541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, 51641702fa78437820bc601e604de6a490eb09513ddPeter Siket &properties) == VK_ERROR_FORMAT_NOT_SUPPORTED)) 51741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 51841702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, "Format not supported"); 51941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 52041702fa78437820bc601e604de6a490eb09513ddPeter Siket 52141702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageCreateInfo imageCreateInfo = 52241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 52341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // VkStructureType sType; 52441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 52541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkImageCreateFlags flags; 52641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TYPE_2D, // VkImageType imageType; 52741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 52841702fa78437820bc601e604de6a490eb09513ddPeter Siket { m_renderWidth, m_renderHeight, 1u }, // VkExtent3D extent; 52941702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 mipLevels; 53041702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 arrayLayers; 53141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples; 53241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_TILING_OPTIMAL, // VkImageTiling tiling; 53341702fa78437820bc601e604de6a490eb09513ddPeter Siket imageUsage, // VkImageUsageFlags usage; 53441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 53541702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyIndexCount; 53641702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex, // const deUint32* pQueueFamilyIndices; 53741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_UNDEFINED // VkImageLayout initialLayout; 53841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 53941702fa78437820bc601e604de6a490eb09513ddPeter Siket 54041702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resolvedImage = vk::createImage(vkd, vkDevice, &imageCreateInfo, DE_NULL); 54141702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resolvedImageMemory = allocator.allocate(getImageMemoryRequirements(vkd, vkDevice, *m_resolvedImage), MemoryRequirement::Any); 54241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindImageMemory(vkDevice, *m_resolvedImage, m_resolvedImageMemory->getMemory(), m_resolvedImageMemory->getOffset())); 54341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 54441702fa78437820bc601e604de6a490eb09513ddPeter Siket 54541702fa78437820bc601e604de6a490eb09513ddPeter Siket // Resolved Image View 54641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 54741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageViewCreateInfo imageViewCreateInfo = 54841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 54941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // VkStructureType sType; 55041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 55141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkImageViewCreateFlags flags; 55241702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_resolvedImage, // VkImage image; 55341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_VIEW_TYPE_2D, // VkImageViewType viewType; 55441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 55541702fa78437820bc601e604de6a490eb09513ddPeter Siket makeComponentMappingRGBA(), // VkComponentMapping components; 55641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 55741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask; 55841702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 baseMipLevel; 55941702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 mipLevels; 56041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 baseArrayLayer; 56141702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 arraySize; 56241702fa78437820bc601e604de6a490eb09513ddPeter Siket }, // VkImageSubresourceRange subresourceRange; 56341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 56441702fa78437820bc601e604de6a490eb09513ddPeter Siket 56541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resolvedImageView = vk::createImageView(vkd, vkDevice, &imageViewCreateInfo, DE_NULL); 56641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 56741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 56841702fa78437820bc601e604de6a490eb09513ddPeter Siket 56941702fa78437820bc601e604de6a490eb09513ddPeter Siket // Render Pass 57041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 57141702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageLayout imageLayout = VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL; 57241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkAttachmentDescription attachmentDesc[] = 57341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 57441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 57541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkAttachmentDescriptionFlags flags; 57641702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 57741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_sampleCount, // VkSampleCountFlagBits samples; 57841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_LOAD_OP_LOAD, // VkAttachmentLoadOp loadOp; 57941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; 58041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; 58141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; 58241702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout initialLayout; 58341702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout finalLayout; 58441702fa78437820bc601e604de6a490eb09513ddPeter Siket }, 58541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 58641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkAttachmentDescriptionFlags flags; 58741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_imageFormat, // VkFormat format; 58841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SAMPLE_COUNT_1_BIT, // VkSampleCountFlagBits samples; 58941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp loadOp; 59041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_STORE_OP_STORE, // VkAttachmentStoreOp storeOp; 59141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_LOAD_OP_DONT_CARE, // VkAttachmentLoadOp stencilLoadOp; 59241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ATTACHMENT_STORE_OP_DONT_CARE, // VkAttachmentStoreOp stencilStoreOp; 59341702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout initialLayout; 59441702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout finalLayout; 59541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 59641702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 59741702fa78437820bc601e604de6a490eb09513ddPeter Siket 59841702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkAttachmentReference attachmentRef = 59941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 60041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 attachment; 60141702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout layout; 60241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 60341702fa78437820bc601e604de6a490eb09513ddPeter Siket 60441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkAttachmentReference resolveAttachmentRef = 60541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 60641702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 attachment; 60741702fa78437820bc601e604de6a490eb09513ddPeter Siket imageLayout, // VkImageLayout layout; 60841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 60941702fa78437820bc601e604de6a490eb09513ddPeter Siket 61041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkSubpassDescription subpassDesc = 61141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 61241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkSubpassDescriptionFlags flags; 61341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_BIND_POINT_GRAPHICS, // VkPipelineBindPoint pipelineBindPoint; 61441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 inputAttachmentCount; 61541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkAttachmentReference* pInputAttachments; 61641702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 colorAttachmentCount; 61741702fa78437820bc601e604de6a490eb09513ddPeter Siket &attachmentRef, // const VkAttachmentReference* pColorAttachments; 61841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_multisampling ? &resolveAttachmentRef : DE_NULL, // const VkAttachmentReference* pResolveAttachments; 61941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkAttachmentReference* pDepthStencilAttachment; 62041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 preserveAttachmentCount; 62141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkAttachmentReference* pPreserveAttachments; 62241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 62341702fa78437820bc601e604de6a490eb09513ddPeter Siket 62441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkRenderPassCreateInfo renderPassCreateInfo = 62541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 62641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // VkStructureType sType; 62741702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 62841702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkRenderPassCreateFlags flags; 62941702fa78437820bc601e604de6a490eb09513ddPeter Siket m_multisampling ? 2u : 1u, // deUint32 attachmentCount; 63041702fa78437820bc601e604de6a490eb09513ddPeter Siket attachmentDesc, // const VkAttachmentDescription* pAttachments; 63141702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 subpassCount; 63241702fa78437820bc601e604de6a490eb09513ddPeter Siket &subpassDesc, // const VkSubpassDescription* pSubpasses; 63341702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 dependencyCount; 63441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSubpassDependency* pDependencies; 63541702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 63641702fa78437820bc601e604de6a490eb09513ddPeter Siket 63741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_renderPass = createRenderPass(vkd, vkDevice, &renderPassCreateInfo, DE_NULL); 63841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 63941702fa78437820bc601e604de6a490eb09513ddPeter Siket 64041702fa78437820bc601e604de6a490eb09513ddPeter Siket // Vertex index buffer 64141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 64241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferCreateInfo indexBufferParams = 64341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 64441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // VkStructureType sType; 64541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 64641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkBufferCreateFlags flags; 64741702fa78437820bc601e604de6a490eb09513ddPeter Siket s_vertexIndexBufferSize, // VkDeviceSize size; 64841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BUFFER_USAGE_INDEX_BUFFER_BIT, // VkBufferUsageFlags usage; 64941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 65041702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyCount; 65141702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex // const deUint32* pQueueFamilyIndices; 65241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 65341702fa78437820bc601e604de6a490eb09513ddPeter Siket 65441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_vertexIndexBuffer = createBuffer(vkd, vkDevice, &indexBufferParams); 65541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_vertexIndexBufferMemory = allocator.allocate(getBufferMemoryRequirements(vkd, vkDevice, *m_vertexIndexBuffer), MemoryRequirement::HostVisible); 65641702fa78437820bc601e604de6a490eb09513ddPeter Siket 65741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindBufferMemory(vkDevice, *m_vertexIndexBuffer, m_vertexIndexBufferMemory->getMemory(), m_vertexIndexBufferMemory->getOffset())); 65841702fa78437820bc601e604de6a490eb09513ddPeter Siket 65941702fa78437820bc601e604de6a490eb09513ddPeter Siket // Load vertices into vertex buffer 66041702fa78437820bc601e604de6a490eb09513ddPeter Siket deMemcpy(m_vertexIndexBufferMemory->getHostPtr(), s_vertexIndices, s_vertexIndexBufferSize); 66146abca75bab000788fcc6289adfd3e668203d20fMaciej Jesionowski flushMappedMemoryRange(vkd, vkDevice, m_vertexIndexBufferMemory->getMemory(), m_vertexIndexBufferMemory->getOffset(), VK_WHOLE_SIZE); 66241702fa78437820bc601e604de6a490eb09513ddPeter Siket } 66341702fa78437820bc601e604de6a490eb09513ddPeter Siket 66441702fa78437820bc601e604de6a490eb09513ddPeter Siket // FrameBuffer 66541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 66641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageView attachments[] = 66741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 66841702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_imageView, 66941702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_resolvedImageView, 67041702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 67141702fa78437820bc601e604de6a490eb09513ddPeter Siket 67241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkFramebufferCreateInfo framebufferCreateInfo = 67341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 67441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // VkStructureType sType; 67541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 67641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkFramebufferCreateFlags flags; 67741702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_renderPass, // VkRenderPass renderPass; 67841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_multisampling ? 2u : 1u, // deUint32 attachmentCount; 67941702fa78437820bc601e604de6a490eb09513ddPeter Siket attachments, // const VkImageView* pAttachments; 68041702fa78437820bc601e604de6a490eb09513ddPeter Siket m_renderWidth, // deUint32 width; 68141702fa78437820bc601e604de6a490eb09513ddPeter Siket m_renderHeight, // deUint32 height; 68241702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 layers; 68341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 68441702fa78437820bc601e604de6a490eb09513ddPeter Siket 68541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_frameBuffer = createFramebuffer(vkd, vkDevice, &framebufferCreateInfo, DE_NULL); 68641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 68741702fa78437820bc601e604de6a490eb09513ddPeter Siket 68841702fa78437820bc601e604de6a490eb09513ddPeter Siket // Uniform Buffer 68941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 69041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferCreateInfo bufferCreateInfo = 69141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 69241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // VkStructureType sType; 69341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 69441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkBufferCreateFlags flags; 69541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_uniformBufferSize, // VkDeviceSize size; 69641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT, // VkBufferUsageFlags usage; 69741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 69841702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyIndexCount; 69941702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex // const deUint32* pQueueFamilyIndices; 70041702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 70141702fa78437820bc601e604de6a490eb09513ddPeter Siket 70241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_uniformBuffer = createBuffer(vkd, vkDevice, &bufferCreateInfo); 70341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_uniformBufferMemory = allocator.allocate(getBufferMemoryRequirements(vkd, vkDevice, *m_uniformBuffer), MemoryRequirement::HostVisible); 70441702fa78437820bc601e604de6a490eb09513ddPeter Siket 70541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindBufferMemory(vkDevice, *m_uniformBuffer, m_uniformBufferMemory->getMemory(), m_uniformBufferMemory->getOffset())); 70641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 70741702fa78437820bc601e604de6a490eb09513ddPeter Siket 70841702fa78437820bc601e604de6a490eb09513ddPeter Siket // DescriptorPool 70941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 71041702fa78437820bc601e604de6a490eb09513ddPeter Siket DescriptorPoolBuilder descriptorPoolBuilder; 71141702fa78437820bc601e604de6a490eb09513ddPeter Siket 71241702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorPoolBuilder.addType(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER); 71341702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorPoolBuilder.addType(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER); 71441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_descriptorPool = descriptorPoolBuilder.build(vkd, vkDevice, VK_DESCRIPTOR_POOL_CREATE_FREE_DESCRIPTOR_SET_BIT, 2u); 71541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 71641702fa78437820bc601e604de6a490eb09513ddPeter Siket 71741702fa78437820bc601e604de6a490eb09513ddPeter Siket // Fence 718da03200a87f51bed33b3c3030ecbb6df06ff4f60Mika Isojärvi m_fence = createFence(vkd, vkDevice); 71941702fa78437820bc601e604de6a490eb09513ddPeter Siket 72041702fa78437820bc601e604de6a490eb09513ddPeter Siket // Result Buffer 72141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 72241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferCreateInfo bufferCreateInfo = 72341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 72441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // VkStructureType sType; 72541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 72641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkBufferCreateFlags flags; 72741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resultBufferSize, // VkDeviceSize size; 72841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BUFFER_USAGE_TRANSFER_DST_BIT, // VkBufferUsageFlags usage; 72941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 73041702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyIndexCount; 73141702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex // const deUint32* pQueueFamilyIndices; 73241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 73341702fa78437820bc601e604de6a490eb09513ddPeter Siket 73441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resultBuffer = createBuffer(vkd, vkDevice, &bufferCreateInfo); 73541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resultBufferMemory = allocator.allocate(getBufferMemoryRequirements(vkd, vkDevice, *m_resultBuffer), MemoryRequirement::HostVisible); 73641702fa78437820bc601e604de6a490eb09513ddPeter Siket 73741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindBufferMemory(vkDevice, *m_resultBuffer, m_resultBufferMemory->getMemory(), m_resultBufferMemory->getOffset())); 73841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 73941702fa78437820bc601e604de6a490eb09513ddPeter Siket 74041702fa78437820bc601e604de6a490eb09513ddPeter Siket clearImage(*m_image); 74141702fa78437820bc601e604de6a490eb09513ddPeter Siket if(m_multisampling) 74241702fa78437820bc601e604de6a490eb09513ddPeter Siket clearImage(*m_resolvedImage); 74341702fa78437820bc601e604de6a490eb09513ddPeter Siket} 74441702fa78437820bc601e604de6a490eb09513ddPeter Siket 74541702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureRenderer::~TextureRenderer (void) 74641702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 74741702fa78437820bc601e604de6a490eb09513ddPeter Siket} 74841702fa78437820bc601e604de6a490eb09513ddPeter Siket 74941702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::clearImage(VkImage image) 75041702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 75141702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 75241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 75341702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkCommandBuffer> commandBuffer; 75441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkQueue queue = m_context.getUniversalQueue(); 75541702fa78437820bc601e604de6a490eb09513ddPeter Siket 75641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageSubresourceRange subResourcerange = 75741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 75841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask; 75941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // deUint32 baseMipLevel; 76041702fa78437820bc601e604de6a490eb09513ddPeter Siket 1, // deUint32 levelCount; 76141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // deUint32 baseArrayLayer; 76241702fa78437820bc601e604de6a490eb09513ddPeter Siket 1 // deUint32 layerCount; 76341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 76441702fa78437820bc601e604de6a490eb09513ddPeter Siket 765da03200a87f51bed33b3c3030ecbb6df06ff4f60Mika Isojärvi commandBuffer = allocateCommandBuffer(vkd, vkDevice, *m_commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY); 76641702fa78437820bc601e604de6a490eb09513ddPeter Siket 76741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkCommandBufferBeginInfo cmdBufferBeginInfo = 76841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 76941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType; 77041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 77141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkCmdBufferOptimizeFlags flags; 77241702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkCommandBufferInheritanceInfo* pInheritanceInfo; 77341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 77441702fa78437820bc601e604de6a490eb09513ddPeter Siket 77541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.beginCommandBuffer(*commandBuffer, &cmdBufferBeginInfo)); 77641702fa78437820bc601e604de6a490eb09513ddPeter Siket 77741702fa78437820bc601e604de6a490eb09513ddPeter Siket addImageTransitionBarrier(*commandBuffer, image, 77841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // VkPipelineStageFlags srcStageMask 77941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // VkPipelineStageFlags dstStageMask 78041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkAccessFlags srcAccessMask 78141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags dstAccessMask 78241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_UNDEFINED, // VkImageLayout oldLayout; 78341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL); // VkImageLayout newLayout; 78441702fa78437820bc601e604de6a490eb09513ddPeter Siket 78541702fa78437820bc601e604de6a490eb09513ddPeter Siket VkClearColorValue color = makeClearValueColorF32(0.0f, 0.0f, 0.0f, 1.0f).color; 78641702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdClearColorImage(*commandBuffer, image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, &color, 1, &subResourcerange); 78741702fa78437820bc601e604de6a490eb09513ddPeter Siket 78841702fa78437820bc601e604de6a490eb09513ddPeter Siket addImageTransitionBarrier(*commandBuffer, image, 78941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_TOP_OF_PIPE_BIT, // VkPipelineStageFlags srcStageMask 79041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, // VkPipelineStageFlags dstStageMask 79141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_TRANSFER_WRITE_BIT, // VkAccessFlags srcAccessMask 79241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask 79341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, // VkImageLayout oldLayout; 79441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); // VkImageLayout newLayout; 79541702fa78437820bc601e604de6a490eb09513ddPeter Siket 79641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.endCommandBuffer(*commandBuffer)); 79741702fa78437820bc601e604de6a490eb09513ddPeter Siket 79841702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkSubmitInfo submitInfo = 79941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 80041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_SUBMIT_INFO, // VkStructureType sType; 80141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 80241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 waitSemaphoreCount; 80341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSemaphore* pWaitSemaphores; 80441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkPipelineStageFlags* pWaitDstStageMask; 80541702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 commandBufferCount; 80641702fa78437820bc601e604de6a490eb09513ddPeter Siket &commandBuffer.get(), // const VkCommandBuffer* pCommandBuffers; 80741702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 signalSemaphoreCount; 80841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSemaphore* pSignalSemaphores; 80941702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 81041702fa78437820bc601e604de6a490eb09513ddPeter Siket 81141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.resetFences(vkDevice, 1, &m_fence.get())); 81241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.queueSubmit(queue, 1, &submitInfo, *m_fence)); 81341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity */)); 81441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 81541702fa78437820bc601e604de6a490eb09513ddPeter Siket 81641702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::add2DTexture (const TestTexture2DSp& texture) 81741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 81841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureBindings.push_back(TextureBindingSp(new TextureBinding(m_context, texture, TextureBinding::TYPE_2D))); 81941702fa78437820bc601e604de6a490eb09513ddPeter Siket} 82041702fa78437820bc601e604de6a490eb09513ddPeter Siket 82141702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::addCubeTexture (const TestTextureCubeSp& texture) 82241702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 82341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureBindings.push_back(TextureBindingSp(new TextureBinding(m_context, texture, TextureBinding::TYPE_CUBE_MAP))); 82441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 82541702fa78437820bc601e604de6a490eb09513ddPeter Siket 82641702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::add2DArrayTexture (const TestTexture2DArraySp& texture) 82741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 82841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureBindings.push_back(TextureBindingSp(new TextureBinding(m_context, texture, TextureBinding::TYPE_2D_ARRAY))); 82941702fa78437820bc601e604de6a490eb09513ddPeter Siket} 83041702fa78437820bc601e604de6a490eb09513ddPeter Siket 83141702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::add3DTexture (const TestTexture3DSp& texture) 83241702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 83341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureBindings.push_back(TextureBindingSp(new TextureBinding(m_context, texture, TextureBinding::TYPE_3D))); 83441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 83541702fa78437820bc601e604de6a490eb09513ddPeter Siket 83641702fa78437820bc601e604de6a490eb09513ddPeter Siketconst pipeline::TestTexture2D& TextureRenderer::get2DTexture (int textureIndex) const 83741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 83841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings.size() > (size_t)textureIndex); 83941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings[textureIndex]->getType() == TextureBinding::TYPE_2D); 84041702fa78437820bc601e604de6a490eb09513ddPeter Siket 84141702fa78437820bc601e604de6a490eb09513ddPeter Siket return dynamic_cast<const pipeline::TestTexture2D&>(m_textureBindings[textureIndex]->getTestTexture()); 84241702fa78437820bc601e604de6a490eb09513ddPeter Siket} 84341702fa78437820bc601e604de6a490eb09513ddPeter Siket 84441702fa78437820bc601e604de6a490eb09513ddPeter Siketconst pipeline::TestTextureCube& TextureRenderer::getCubeTexture (int textureIndex) const 84541702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 84641702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings.size() > (size_t)textureIndex); 84741702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings[textureIndex]->getType() == TextureBinding::TYPE_CUBE_MAP); 84841702fa78437820bc601e604de6a490eb09513ddPeter Siket 84941702fa78437820bc601e604de6a490eb09513ddPeter Siket return dynamic_cast<const pipeline::TestTextureCube&>(m_textureBindings[textureIndex]->getTestTexture()); 85041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 85141702fa78437820bc601e604de6a490eb09513ddPeter Siket 85241702fa78437820bc601e604de6a490eb09513ddPeter Siketconst pipeline::TestTexture2DArray& TextureRenderer::get2DArrayTexture (int textureIndex) const 85341702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 85441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings.size() > (size_t)textureIndex); 85541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings[textureIndex]->getType() == TextureBinding::TYPE_2D_ARRAY); 85641702fa78437820bc601e604de6a490eb09513ddPeter Siket 85741702fa78437820bc601e604de6a490eb09513ddPeter Siket return dynamic_cast<const pipeline::TestTexture2DArray&>(m_textureBindings[textureIndex]->getTestTexture()); 85841702fa78437820bc601e604de6a490eb09513ddPeter Siket} 85941702fa78437820bc601e604de6a490eb09513ddPeter Siket 86041702fa78437820bc601e604de6a490eb09513ddPeter Siketconst pipeline::TestTexture3D& TextureRenderer::get3DTexture (int textureIndex) const 86141702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 86241702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings.size() > (size_t)textureIndex); 86341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings[textureIndex]->getType() == TextureBinding::TYPE_3D); 86441702fa78437820bc601e604de6a490eb09513ddPeter Siket 86541702fa78437820bc601e604de6a490eb09513ddPeter Siket return dynamic_cast<const pipeline::TestTexture3D&>(m_textureBindings[textureIndex]->getTestTexture()); 86641702fa78437820bc601e604de6a490eb09513ddPeter Siket} 86741702fa78437820bc601e604de6a490eb09513ddPeter Siket 86841702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::setViewport (float viewportX, float viewportY, float viewportW, float viewportH) 86941702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 87041702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportHeight = viewportH; 87141702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportWidth = viewportW; 87241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportOffsetX = viewportX; 87341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportOffsetY = viewportY; 87441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 87541702fa78437820bc601e604de6a490eb09513ddPeter Siket 87641702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureBinding* TextureRenderer::getTextureBinding (int textureIndex) const 87741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 87841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(m_textureBindings.size() > (size_t)textureIndex); 87941702fa78437820bc601e604de6a490eb09513ddPeter Siket return m_textureBindings[textureIndex].get(); 88041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 88141702fa78437820bc601e604de6a490eb09513ddPeter Siket 88241702fa78437820bc601e604de6a490eb09513ddPeter SiketdeUint32 TextureRenderer::getRenderWidth (void) const 88341702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 88441702fa78437820bc601e604de6a490eb09513ddPeter Siket return m_renderWidth; 88541702fa78437820bc601e604de6a490eb09513ddPeter Siket} 88641702fa78437820bc601e604de6a490eb09513ddPeter Siket 88741702fa78437820bc601e604de6a490eb09513ddPeter SiketdeUint32 TextureRenderer::getRenderHeight (void) const 88841702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 88941702fa78437820bc601e604de6a490eb09513ddPeter Siket return m_renderHeight; 89041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 89141702fa78437820bc601e604de6a490eb09513ddPeter Siket 89241702fa78437820bc601e604de6a490eb09513ddPeter SiketMove<VkDescriptorSet> TextureRenderer::makeDescriptorSet (const VkDescriptorPool descriptorPool, const VkDescriptorSetLayout setLayout) const 89341702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 89441702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 89541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 89641702fa78437820bc601e604de6a490eb09513ddPeter Siket 89741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDescriptorSetAllocateInfo allocateParams = 89841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 89941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO, // VkStructureType sType 90041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext 90141702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorPool, // VkDescriptorPool descriptorPool 90241702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 descriptorSetCount 90341702fa78437820bc601e604de6a490eb09513ddPeter Siket &setLayout, // const VkDescriptorSetLayout* pSetLayouts 90441702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 90541702fa78437820bc601e604de6a490eb09513ddPeter Siket return allocateDescriptorSet(vkd, vkDevice, &allocateParams); 90641702fa78437820bc601e604de6a490eb09513ddPeter Siket} 90741702fa78437820bc601e604de6a490eb09513ddPeter Siket 90841702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::addImageTransitionBarrier(VkCommandBuffer commandBuffer, VkImage image, VkPipelineStageFlags srcStageMask, VkPipelineStageFlags dstStageMask, VkAccessFlags srcAccessMask, VkAccessFlags dstAccessMask, VkImageLayout oldLayout, VkImageLayout newLayout) const 90941702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 91041702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 91141702fa78437820bc601e604de6a490eb09513ddPeter Siket 91241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageSubresourceRange subResourcerange = 91341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 91441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_ASPECT_COLOR_BIT, // VkImageAspectFlags aspectMask; 91541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // deUint32 baseMipLevel; 91641702fa78437820bc601e604de6a490eb09513ddPeter Siket 1, // deUint32 levelCount; 91741702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // deUint32 baseArrayLayer; 91841702fa78437820bc601e604de6a490eb09513ddPeter Siket 1 // deUint32 layerCount; 91941702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 92041702fa78437820bc601e604de6a490eb09513ddPeter Siket 92141702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkImageMemoryBarrier imageBarrier = 92241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 92341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // VkStructureType sType; 92441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 92541702fa78437820bc601e604de6a490eb09513ddPeter Siket srcAccessMask, // VkAccessFlags srcAccessMask; 92641702fa78437820bc601e604de6a490eb09513ddPeter Siket dstAccessMask, // VkAccessFlags dstAccessMask; 92741702fa78437820bc601e604de6a490eb09513ddPeter Siket oldLayout, // VkImageLayout oldLayout; 92841702fa78437820bc601e604de6a490eb09513ddPeter Siket newLayout, // VkImageLayout newLayout; 92941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; 93041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; 93141702fa78437820bc601e604de6a490eb09513ddPeter Siket image, // VkImage image; 93241702fa78437820bc601e604de6a490eb09513ddPeter Siket subResourcerange // VkImageSubresourceRange subresourceRange; 93341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 93441702fa78437820bc601e604de6a490eb09513ddPeter Siket 93541702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdPipelineBarrier(commandBuffer, srcStageMask, dstStageMask, 0, 0, DE_NULL, 0, DE_NULL, 1, &imageBarrier); 93641702fa78437820bc601e604de6a490eb09513ddPeter Siket} 93741702fa78437820bc601e604de6a490eb09513ddPeter Siket 93841702fa78437820bc601e604de6a490eb09513ddPeter Siket 93941702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::renderQuad (tcu::Surface& result, int texUnit, const float* texCoord, TextureType texType) 94041702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 94141702fa78437820bc601e604de6a490eb09513ddPeter Siket renderQuad(result, texUnit, texCoord, ReferenceParams(texType)); 94241702fa78437820bc601e604de6a490eb09513ddPeter Siket} 94341702fa78437820bc601e604de6a490eb09513ddPeter Siket 94441702fa78437820bc601e604de6a490eb09513ddPeter Siketvoid TextureRenderer::renderQuad (tcu::Surface& result, int texUnit, const float* texCoord, const ReferenceParams& params) 94541702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 946b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa const float maxAnisotropy = 1.0f; 947b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa float positions[] = 948b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa { 949b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa -1.0, -1.0f, 0.0f, 1.0f, 950b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa -1.0f, +1.0f, 0.0f, 1.0f, 951b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa +1.0f, -1.0f, 0.0f, 1.0f, 952b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa +1.0f, +1.0f, 0.0f, 1.0f 953b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa }; 954b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa renderQuad(result, positions, texUnit, texCoord, params, maxAnisotropy); 955b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa} 956b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa 957b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwavoid TextureRenderer::renderQuad (tcu::Surface& result, 958b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa const float* positions, 959b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa int texUnit, 960b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa const float* texCoord, 961b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa const glu::TextureTestUtil::ReferenceParams& params, 962b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa const float maxAnisotropy) 963b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa{ 96441702fa78437820bc601e604de6a490eb09513ddPeter Siket const DeviceInterface& vkd = m_context.getDeviceInterface(); 96541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDevice vkDevice = m_context.getDevice(); 96641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkQueue queue = m_context.getUniversalQueue(); 96741702fa78437820bc601e604de6a490eb09513ddPeter Siket const deUint32 queueFamilyIndex = m_context.getUniversalQueueFamilyIndex(); 96841702fa78437820bc601e604de6a490eb09513ddPeter Siket Allocator& allocator = m_context.getDefaultAllocator(); 96941702fa78437820bc601e604de6a490eb09513ddPeter Siket 97041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec4 wCoord = params.flags & RenderParams::PROJECTED ? params.w : tcu::Vec4(1.0f); 97141702fa78437820bc601e604de6a490eb09513ddPeter Siket bool useBias = !!(params.flags & RenderParams::USE_BIAS); 97241702fa78437820bc601e604de6a490eb09513ddPeter Siket bool logUniforms = !!(params.flags & RenderParams::LOG_UNIFORMS); 97341702fa78437820bc601e604de6a490eb09513ddPeter Siket 97441702fa78437820bc601e604de6a490eb09513ddPeter Siket // Render quad with texture. 97541702fa78437820bc601e604de6a490eb09513ddPeter Siket float position[] = 97641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 977b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa positions[0]*wCoord.x(), positions[1]*wCoord.x(), positions[2], positions[3]*wCoord.x(), 978b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa positions[4]*wCoord.y(), positions[5]*wCoord.y(), positions[6], positions[7]*wCoord.y(), 979b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa positions[8]*wCoord.z(), positions[9]*wCoord.z(), positions[10], positions[11]*wCoord.z(), 980b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa positions[12]*wCoord.w(), positions[13]*wCoord.w(), positions[14], positions[15]*wCoord.w() 98141702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 98241702fa78437820bc601e604de6a490eb09513ddPeter Siket 98341702fa78437820bc601e604de6a490eb09513ddPeter Siket Program progSpec = PROGRAM_LAST; 98441702fa78437820bc601e604de6a490eb09513ddPeter Siket int numComps = 0; 98541702fa78437820bc601e604de6a490eb09513ddPeter Siket 98641702fa78437820bc601e604de6a490eb09513ddPeter Siket if (params.texType == TEXTURETYPE_2D) 98741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 98841702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 2; 98941702fa78437820bc601e604de6a490eb09513ddPeter Siket 99041702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 99141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 99241702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = useBias ? PROGRAM_2D_FLOAT_BIAS : PROGRAM_2D_FLOAT; break; 99341702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = useBias ? PROGRAM_2D_INT_BIAS : PROGRAM_2D_INT; break; 99441702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = useBias ? PROGRAM_2D_UINT_BIAS : PROGRAM_2D_UINT; break; 99541702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = useBias ? PROGRAM_2D_SHADOW_BIAS : PROGRAM_2D_SHADOW; break; 99641702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 99741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 99841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 99941702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_1D) 100041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 100141702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 1; 100241702fa78437820bc601e604de6a490eb09513ddPeter Siket 100341702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 100441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 100541702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = useBias ? PROGRAM_1D_FLOAT_BIAS : PROGRAM_1D_FLOAT; break; 100641702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = useBias ? PROGRAM_1D_INT_BIAS : PROGRAM_1D_INT; break; 100741702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = useBias ? PROGRAM_1D_UINT_BIAS : PROGRAM_1D_UINT; break; 100841702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = useBias ? PROGRAM_1D_SHADOW_BIAS : PROGRAM_1D_SHADOW; break; 100941702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 101041702fa78437820bc601e604de6a490eb09513ddPeter Siket } 101141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 101241702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_CUBE) 101341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 101441702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 3; 101541702fa78437820bc601e604de6a490eb09513ddPeter Siket 101641702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 101741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 101841702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = useBias ? PROGRAM_CUBE_FLOAT_BIAS : PROGRAM_CUBE_FLOAT; break; 101941702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = useBias ? PROGRAM_CUBE_INT_BIAS : PROGRAM_CUBE_INT; break; 102041702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = useBias ? PROGRAM_CUBE_UINT_BIAS : PROGRAM_CUBE_UINT; break; 102141702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = useBias ? PROGRAM_CUBE_SHADOW_BIAS : PROGRAM_CUBE_SHADOW; break; 102241702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 102341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 102441702fa78437820bc601e604de6a490eb09513ddPeter Siket } 102541702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_3D) 102641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 102741702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 3; 102841702fa78437820bc601e604de6a490eb09513ddPeter Siket 102941702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 103041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 103141702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = useBias ? PROGRAM_3D_FLOAT_BIAS : PROGRAM_3D_FLOAT; break; 103241702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = useBias ? PROGRAM_3D_INT_BIAS : PROGRAM_3D_INT; break; 103341702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = useBias ? PROGRAM_3D_UINT_BIAS : PROGRAM_3D_UINT; break; 103441702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 103541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 103641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 103741702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_2D_ARRAY) 103841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 103941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(!useBias); // \todo [2012-02-17 pyry] Support bias. 104041702fa78437820bc601e604de6a490eb09513ddPeter Siket 104141702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 3; 104241702fa78437820bc601e604de6a490eb09513ddPeter Siket 104341702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 104441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 104541702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = PROGRAM_2D_ARRAY_FLOAT; break; 104641702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = PROGRAM_2D_ARRAY_INT; break; 104741702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = PROGRAM_2D_ARRAY_UINT; break; 104841702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = PROGRAM_2D_ARRAY_SHADOW; break; 104941702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 105041702fa78437820bc601e604de6a490eb09513ddPeter Siket } 105141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 105241702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_CUBE_ARRAY) 105341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 105441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(!useBias); 105541702fa78437820bc601e604de6a490eb09513ddPeter Siket 105641702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 4; 105741702fa78437820bc601e604de6a490eb09513ddPeter Siket 105841702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 105941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 106041702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = PROGRAM_CUBE_ARRAY_FLOAT; break; 106141702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = PROGRAM_CUBE_ARRAY_INT; break; 106241702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = PROGRAM_CUBE_ARRAY_UINT; break; 106341702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = PROGRAM_CUBE_ARRAY_SHADOW; break; 106441702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 106541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 106641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 106741702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_1D_ARRAY) 106841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 106941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(!useBias); // \todo [2012-02-17 pyry] Support bias. 107041702fa78437820bc601e604de6a490eb09513ddPeter Siket 107141702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 2; 107241702fa78437820bc601e604de6a490eb09513ddPeter Siket 107341702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 107441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 107541702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FLOAT: progSpec = PROGRAM_1D_ARRAY_FLOAT; break; 107641702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_INT: progSpec = PROGRAM_1D_ARRAY_INT; break; 107741702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_UINT: progSpec = PROGRAM_1D_ARRAY_UINT; break; 107841702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_SHADOW: progSpec = PROGRAM_1D_ARRAY_SHADOW; break; 107941702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 108041702fa78437820bc601e604de6a490eb09513ddPeter Siket } 108141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 108241702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (params.texType == TEXTURETYPE_BUFFER) 108341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 108441702fa78437820bc601e604de6a490eb09513ddPeter Siket numComps = 1; 108541702fa78437820bc601e604de6a490eb09513ddPeter Siket 108641702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (params.samplerType) 108741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 108841702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FETCH_FLOAT: progSpec = PROGRAM_BUFFER_FLOAT; break; 108941702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FETCH_INT: progSpec = PROGRAM_BUFFER_INT; break; 109041702fa78437820bc601e604de6a490eb09513ddPeter Siket case SAMPLERTYPE_FETCH_UINT: progSpec = PROGRAM_BUFFER_UINT; break; 109141702fa78437820bc601e604de6a490eb09513ddPeter Siket default: DE_ASSERT(false); 109241702fa78437820bc601e604de6a490eb09513ddPeter Siket } 109341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 109441702fa78437820bc601e604de6a490eb09513ddPeter Siket else 109541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(DE_FALSE); 109641702fa78437820bc601e604de6a490eb09513ddPeter Siket 109750c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks Unique<VkShaderModule> vertexShaderModule (createShaderModule(vkd, vkDevice, m_context.getBinaryCollection().get("vertext_" + std::string(getProgramName(progSpec))), 0)); 109850c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks Unique<VkShaderModule> fragmentShaderModule (createShaderModule(vkd, vkDevice, m_context.getBinaryCollection().get("fragment_" + std::string(getProgramName(progSpec))), 0)); 109941702fa78437820bc601e604de6a490eb09513ddPeter Siket 110041702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkSampler> sampler; 110141702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkDescriptorSet> descriptorSet[2]; 110241702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkDescriptorSetLayout> descriptorSetLayout[2]; 110341702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkPipelineLayout> pipelineLayout; 110441702fa78437820bc601e604de6a490eb09513ddPeter Siket 110541702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkCommandBuffer> commandBuffer; 110641702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkPipeline> graphicsPipeline; 110741702fa78437820bc601e604de6a490eb09513ddPeter Siket Move<VkBuffer> vertexBuffer; 110841702fa78437820bc601e604de6a490eb09513ddPeter Siket de::MovePtr<Allocation> vertexBufferMemory; 110941702fa78437820bc601e604de6a490eb09513ddPeter Siket 111050c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const VkDeviceSize vertexBufferOffset = 0; 111150c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const deUint32 vertexPositionStrideSize = deUint32(sizeof(tcu::Vec4)); 111250c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const deUint32 vertexTextureStrideSize = deUint32(numComps * sizeof(float)); 111350c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const deUint32 positionDataSize = vertexPositionStrideSize * 4u; 111450c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const deUint32 textureCoordDataSize = vertexTextureStrideSize * 4u; 111550c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks 111650c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks const VkPhysicalDeviceProperties properties = m_context.getDeviceProperties(); 111741702fa78437820bc601e604de6a490eb09513ddPeter Siket 111841702fa78437820bc601e604de6a490eb09513ddPeter Siket if (positionDataSize > properties.limits.maxVertexInputAttributeOffset) 111941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 112041702fa78437820bc601e604de6a490eb09513ddPeter Siket std::stringstream message; 112141702fa78437820bc601e604de6a490eb09513ddPeter Siket message << "Larger vertex input attribute offset is needed (" << positionDataSize << ") than the available maximum (" << properties.limits.maxVertexInputAttributeOffset << ")."; 112241702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, message.str().c_str()); 112341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 112441702fa78437820bc601e604de6a490eb09513ddPeter Siket 112541702fa78437820bc601e604de6a490eb09513ddPeter Siket // Create Graphics Pipeline 112641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 112741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineShaderStageCreateInfo shaderStageParams[2] = 112841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 112941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 113041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType; 113141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 113241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineShaderStageCreateFlags flags; 113341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHADER_STAGE_VERTEX_BIT, // VkShaderStage stage; 113441702fa78437820bc601e604de6a490eb09513ddPeter Siket *vertexShaderModule, // VkShaderModule shader; 113541702fa78437820bc601e604de6a490eb09513ddPeter Siket "main", // const char* pName; 113641702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkSpecializationInfo* pSpecializationInfo; 113741702fa78437820bc601e604de6a490eb09513ddPeter Siket }, 113841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 113941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // VkStructureType sType; 114041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 114141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineShaderStageCreateFlags flags; 114241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHADER_STAGE_FRAGMENT_BIT, // VkShaderStage stage; 114341702fa78437820bc601e604de6a490eb09513ddPeter Siket *fragmentShaderModule, // VkShaderModule shader; 114441702fa78437820bc601e604de6a490eb09513ddPeter Siket "main", // const char* pName; 114541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkSpecializationInfo* pSpecializationInfo; 114641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 114741702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 114841702fa78437820bc601e604de6a490eb09513ddPeter Siket 114941702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkVertexInputBindingDescription vertexInputBindingDescription[2] = 115041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 115141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 115241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 binding; 115341702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexPositionStrideSize, // deUint32 strideInBytes; 115441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_VERTEX_INPUT_RATE_VERTEX // VkVertexInputStepRate stepRate; 115541702fa78437820bc601e604de6a490eb09513ddPeter Siket }, 115641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 115741702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 binding; 115841702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexTextureStrideSize, // deUint32 strideInBytes; 115941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_VERTEX_INPUT_RATE_VERTEX // VkVertexInputStepRate stepRate; 116041702fa78437820bc601e604de6a490eb09513ddPeter Siket } 116141702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 116241702fa78437820bc601e604de6a490eb09513ddPeter Siket 116341702fa78437820bc601e604de6a490eb09513ddPeter Siket VkFormat textureCoordinateFormat = VK_FORMAT_R32G32B32A32_SFLOAT; 116441702fa78437820bc601e604de6a490eb09513ddPeter Siket 116541702fa78437820bc601e604de6a490eb09513ddPeter Siket switch (numComps) { 116641702fa78437820bc601e604de6a490eb09513ddPeter Siket case 1: textureCoordinateFormat = VK_FORMAT_R32_SFLOAT; break; 116741702fa78437820bc601e604de6a490eb09513ddPeter Siket case 2: textureCoordinateFormat = VK_FORMAT_R32G32_SFLOAT; break; 116841702fa78437820bc601e604de6a490eb09513ddPeter Siket case 3: textureCoordinateFormat = VK_FORMAT_R32G32B32_SFLOAT; break; 116941702fa78437820bc601e604de6a490eb09513ddPeter Siket case 4: textureCoordinateFormat = VK_FORMAT_R32G32B32A32_SFLOAT; break; 117041702fa78437820bc601e604de6a490eb09513ddPeter Siket default: 117141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(false); 117241702fa78437820bc601e604de6a490eb09513ddPeter Siket } 117341702fa78437820bc601e604de6a490eb09513ddPeter Siket 117441702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkVertexInputAttributeDescription vertexInputAttributeDescriptions[2] = 117541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 117641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 117741702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 location; 117841702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 binding; 117941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FORMAT_R32G32B32A32_SFLOAT, // VkFormat format; 118041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u // deUint32 offsetInBytes; 118141702fa78437820bc601e604de6a490eb09513ddPeter Siket }, 118241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 118341702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 location; 118441702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 binding; 118541702fa78437820bc601e604de6a490eb09513ddPeter Siket textureCoordinateFormat, // VkFormat format; 118641702fa78437820bc601e604de6a490eb09513ddPeter Siket positionDataSize // deUint32 offsetInBytes; 118741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 118841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 118941702fa78437820bc601e604de6a490eb09513ddPeter Siket 119041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineVertexInputStateCreateInfo vertexInputStateParams = 119141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 119241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // VkStructureType sType; 119341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 119441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineVertexInputStateCreateFlags flags; 119541702fa78437820bc601e604de6a490eb09513ddPeter Siket 2u, // deUint32 bindingCount; 119641702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexInputBindingDescription, // const VkVertexInputBindingDescription* pVertexBindingDescriptions; 119741702fa78437820bc601e604de6a490eb09513ddPeter Siket 2u, // deUint32 attributeCount; 119841702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexInputAttributeDescriptions // const VkVertexInputAttributeDescription* pVertexAttributeDescriptions; 119941702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 120041702fa78437820bc601e604de6a490eb09513ddPeter Siket 120141702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineInputAssemblyStateCreateInfo inputAssemblyStateParams = 120241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 120341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // VkStructureType sType; 120441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 120541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineInputAssemblyStateCreateFlags flags; 120641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, // VkPrimitiveTopology topology; 120741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE // VkBool32 primitiveRestartEnable; 120841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 120941702fa78437820bc601e604de6a490eb09513ddPeter Siket 121041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkViewport viewport = 121141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 121241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportOffsetX, // float originX; 121341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportOffsetY, // float originY; 121441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportWidth, // float width; 121541702fa78437820bc601e604de6a490eb09513ddPeter Siket m_viewportHeight, // float height; 121641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f, // float minDepth; 121741702fa78437820bc601e604de6a490eb09513ddPeter Siket 1.0f // float maxDepth; 121841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 121941702fa78437820bc601e604de6a490eb09513ddPeter Siket 122041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkRect2D scissor = 122141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 122241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 0, 0 }, // VkOffset2D offset; 122341702fa78437820bc601e604de6a490eb09513ddPeter Siket { m_renderWidth, m_renderHeight } // VkExtent2D extent; 122441702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 122541702fa78437820bc601e604de6a490eb09513ddPeter Siket 122641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineViewportStateCreateInfo viewportStateParams = 122741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 122841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // VkStructureType sType; 122941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 123041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineViewportStateCreateFlags flags; 123141702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 viewportCount; 123241702fa78437820bc601e604de6a490eb09513ddPeter Siket &viewport, // const VkViewport* pViewports; 123341702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 scissorCount; 123441702fa78437820bc601e604de6a490eb09513ddPeter Siket &scissor // const VkRect2D* pScissors; 123541702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 123641702fa78437820bc601e604de6a490eb09513ddPeter Siket 123741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineMultisampleStateCreateInfo multisampleStateParams = 123841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 123941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // VkStructureType sType; 124041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 124141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkPipelineMultisampleStateCreateFlags flags; 124241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_sampleCount, // VkSampleCountFlagBits rasterizationSamples; 124341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 sampleShadingEnable; 124441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f, // float minSampleShading; 124541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSampleMask* pSampleMask; 124641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 alphaToCoverageEnable; 124741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE // VkBool32 alphaToOneEnable; 124841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 124941702fa78437820bc601e604de6a490eb09513ddPeter Siket 125041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineRasterizationStateCreateInfo rasterizationStateCreateInfo = 125141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 125241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // VkStructureType sType; 125341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 125441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineRasterizationStateCreateFlags flags; 125541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 depthClipEnable; 125641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 rasterizerDiscardEnable; 125741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_POLYGON_MODE_FILL, // VkFillMode fillMode; 125841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CULL_MODE_NONE, // VkCullMode cullMode; 125941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FRONT_FACE_COUNTER_CLOCKWISE, // VkFrontFace frontFace; 126041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 depthBiasEnable; 126141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f, // float depthBias; 126241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f, // float depthBiasClamp; 126341702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f, // float slopeScaledDepthBias; 126441702fa78437820bc601e604de6a490eb09513ddPeter Siket 1.0f, // float lineWidth; 126541702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 126641702fa78437820bc601e604de6a490eb09513ddPeter Siket 126741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineColorBlendAttachmentState colorBlendAttachmentState = 126841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 126941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 blendEnable; 127041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_FACTOR_ONE, // VkBlend srcBlendColor; 127141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_FACTOR_ZERO, // VkBlend destBlendColor; 127241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_OP_ADD, // VkBlendOp blendOpColor; 127341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_FACTOR_ONE, // VkBlend srcBlendAlpha; 127441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_FACTOR_ZERO, // VkBlend destBlendAlpha; 127541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BLEND_OP_ADD, // VkBlendOp blendOpAlpha; 127641702fa78437820bc601e604de6a490eb09513ddPeter Siket (VK_COLOR_COMPONENT_R_BIT | 127741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_COLOR_COMPONENT_G_BIT | 127841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_COLOR_COMPONENT_B_BIT | 127941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_COLOR_COMPONENT_A_BIT) // VkChannelFlags channelWriteMask; 128041702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 128141702fa78437820bc601e604de6a490eb09513ddPeter Siket 128241702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineColorBlendStateCreateInfo colorBlendStateParams = 128341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 128441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // VkStructureType sType; 128541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 128641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0, // VkPipelineColorBlendStateCreateFlags flags; 128741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_FALSE, // VkBool32 logicOpEnable; 128841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_LOGIC_OP_COPY, // VkLogicOp logicOp; 128941702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 attachmentCount; 129041702fa78437820bc601e604de6a490eb09513ddPeter Siket &colorBlendAttachmentState, // const VkPipelineColorBlendAttachmentState* pAttachments; 129141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 0.0f, 0.0f, 0.0f, 0.0f }, // float blendConst[4]; 129241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 129341702fa78437820bc601e604de6a490eb09513ddPeter Siket 1294b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa VkSamplerCreateInfo samplerCreateInfo = mapSampler(params.sampler, m_textureBindings[texUnit]->getTestTexture().getTextureFormat(), params.minLod, params.maxLod); 1295b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa 1296b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa if (maxAnisotropy > 1.0f) 1297b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa { 1298b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa samplerCreateInfo.anisotropyEnable = VK_TRUE; 1299b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa samplerCreateInfo.maxAnisotropy = maxAnisotropy; 1300b53c2e6f85be0ce0c789ad557cfe9d0732162204Arkadiusz Sarwa } 130141702fa78437820bc601e604de6a490eb09513ddPeter Siket 130241702fa78437820bc601e604de6a490eb09513ddPeter Siket if (samplerCreateInfo.magFilter == VK_FILTER_LINEAR || samplerCreateInfo.minFilter == VK_FILTER_LINEAR || samplerCreateInfo.mipmapMode == VK_SAMPLER_MIPMAP_MODE_LINEAR) 130341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 1304044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan const pipeline::TestTexture& testTexture = m_textureBindings[texUnit]->getTestTexture(); 1305044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan const VkFormat textureFormat = testTexture.isCompressed() ? mapCompressedTextureFormat(testTexture.getCompressedLevel(0, 0).getFormat()) 1306044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan : mapTextureFormat (testTexture.getTextureFormat()); 1307044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan const VkFormatProperties formatProperties = getPhysicalDeviceFormatProperties(m_context.getInstanceInterface(), m_context.getPhysicalDevice(), textureFormat); 1308044cdcc8c124e9b75d36e6a62d8ff42086017037Szilard Ledan 130941702fa78437820bc601e604de6a490eb09513ddPeter Siket if (!(formatProperties.optimalTilingFeatures & VK_FORMAT_FEATURE_SAMPLED_IMAGE_FILTER_LINEAR_BIT)) 131041702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_THROW(NotSupportedError, "Linear filtering for this image format is not supported"); 131141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 131241702fa78437820bc601e604de6a490eb09513ddPeter Siket 131341702fa78437820bc601e604de6a490eb09513ddPeter Siket sampler = createSampler(vkd, vkDevice, &samplerCreateInfo); 131441702fa78437820bc601e604de6a490eb09513ddPeter Siket 131541702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorSetLayout[0] = DescriptorSetLayoutBuilder() 131641702fa78437820bc601e604de6a490eb09513ddPeter Siket .addSingleBinding(VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, VK_SHADER_STAGE_FRAGMENT_BIT) 131741702fa78437820bc601e604de6a490eb09513ddPeter Siket .build(vkd, vkDevice); 131841702fa78437820bc601e604de6a490eb09513ddPeter Siket 131941702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorSetLayout[1] = DescriptorSetLayoutBuilder() 132041702fa78437820bc601e604de6a490eb09513ddPeter Siket .addSingleSamplerBinding(VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, VK_SHADER_STAGE_FRAGMENT_BIT, &sampler.get()) 132141702fa78437820bc601e604de6a490eb09513ddPeter Siket .build(vkd, vkDevice); 132241702fa78437820bc601e604de6a490eb09513ddPeter Siket 132341702fa78437820bc601e604de6a490eb09513ddPeter Siket 132441702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorSet[0] = makeDescriptorSet(*m_descriptorPool, *descriptorSetLayout[0]); 132541702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorSet[1] = makeDescriptorSet(*m_descriptorPool, *descriptorSetLayout[1]); 132641702fa78437820bc601e604de6a490eb09513ddPeter Siket 132741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 132841702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkDescriptorBufferInfo descriptorBufferInfo = 132941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 133041702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_uniformBuffer, // VkBuffer buffer; 133141702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkDeviceSize offset; 133241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_WHOLE_SIZE // VkDeviceSize range; 133341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 133441702fa78437820bc601e604de6a490eb09513ddPeter Siket 133541702fa78437820bc601e604de6a490eb09513ddPeter Siket DescriptorSetUpdateBuilder() 133641702fa78437820bc601e604de6a490eb09513ddPeter Siket .writeSingle(*descriptorSet[0], DescriptorSetUpdateBuilder::Location::binding(0), VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER, &descriptorBufferInfo) 133741702fa78437820bc601e604de6a490eb09513ddPeter Siket .update(vkd, vkDevice); 133841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 133941702fa78437820bc601e604de6a490eb09513ddPeter Siket 134041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 134141702fa78437820bc601e604de6a490eb09513ddPeter Siket VkDescriptorImageInfo descriptorImageInfo = 134241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 134341702fa78437820bc601e604de6a490eb09513ddPeter Siket *sampler, // VkSampler sampler; 134441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_textureBindings[texUnit]->getImageView(), // VkImageView imageView; 134541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL // VkImageLayout imageLayout; 134641702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 134741702fa78437820bc601e604de6a490eb09513ddPeter Siket 134841702fa78437820bc601e604de6a490eb09513ddPeter Siket DescriptorSetUpdateBuilder() 134941702fa78437820bc601e604de6a490eb09513ddPeter Siket .writeSingle(*descriptorSet[1], DescriptorSetUpdateBuilder::Location::binding(0), VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER, &descriptorImageInfo) 135041702fa78437820bc601e604de6a490eb09513ddPeter Siket .update(vkd, vkDevice); 135141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 135241702fa78437820bc601e604de6a490eb09513ddPeter Siket 135341702fa78437820bc601e604de6a490eb09513ddPeter Siket // Pipeline Layout 135441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 135541702fa78437820bc601e604de6a490eb09513ddPeter Siket VkDescriptorSetLayout descriptorSetLayouts[2] = 135641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 135741702fa78437820bc601e604de6a490eb09513ddPeter Siket *descriptorSetLayout[0], 135841702fa78437820bc601e604de6a490eb09513ddPeter Siket *descriptorSetLayout[1] 135941702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 136041702fa78437820bc601e604de6a490eb09513ddPeter Siket 136141702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkPipelineLayoutCreateInfo pipelineLayoutCreateInfo = 136241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 136341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // VkStructureType sType; 136441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 136541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkPipelineLayoutCreateFlags flags; 136641702fa78437820bc601e604de6a490eb09513ddPeter Siket 2u, // deUint32 descriptorSetCount; 136741702fa78437820bc601e604de6a490eb09513ddPeter Siket descriptorSetLayouts, // const VkDescriptorSetLayout* pSetLayouts; 136841702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 pushConstantRangeCount; 136941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkPushConstantRange* pPushConstantRanges; 137041702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 137141702fa78437820bc601e604de6a490eb09513ddPeter Siket 137241702fa78437820bc601e604de6a490eb09513ddPeter Siket pipelineLayout = createPipelineLayout(vkd, vkDevice, &pipelineLayoutCreateInfo); 137341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 137441702fa78437820bc601e604de6a490eb09513ddPeter Siket 137541702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkGraphicsPipelineCreateInfo graphicsPipelineParams = 137641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 137741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, // VkStructureType sType; 137841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 137941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkPipelineCreateFlags flags; 138041702fa78437820bc601e604de6a490eb09513ddPeter Siket 2u, // deUint32 stageCount; 138141702fa78437820bc601e604de6a490eb09513ddPeter Siket shaderStageParams, // const VkPipelineShaderStageCreateInfo* pStages; 138241702fa78437820bc601e604de6a490eb09513ddPeter Siket &vertexInputStateParams, // const VkPipelineVertexInputStateCreateInfo* pVertexInputState; 138341702fa78437820bc601e604de6a490eb09513ddPeter Siket &inputAssemblyStateParams, // const VkPipelineInputAssemblyStateCreateInfo* pInputAssemblyState; 138441702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkPipelineTessellationStateCreateInfo* pTessellationState; 138541702fa78437820bc601e604de6a490eb09513ddPeter Siket &viewportStateParams, // const VkPipelineViewportStateCreateInfo* pViewportState; 138641702fa78437820bc601e604de6a490eb09513ddPeter Siket &rasterizationStateCreateInfo, // const VkPipelineRasterStateCreateInfo* pRasterizationState; 138741702fa78437820bc601e604de6a490eb09513ddPeter Siket &multisampleStateParams, // const VkPipelineMultisampleStateCreateInfo* pMultisampleState; 138841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkPipelineDepthStencilStateCreateInfo* pDepthStencilState; 138941702fa78437820bc601e604de6a490eb09513ddPeter Siket &colorBlendStateParams, // const VkPipelineColorBlendStateCreateInfo* pColorBlendState; 139041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkPipelineDynamicStateCreateInfo* pDynamicState; 139141702fa78437820bc601e604de6a490eb09513ddPeter Siket *pipelineLayout, // VkPipelineLayout layout; 139241702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_renderPass, // VkRenderPass renderPass; 139341702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 subpass; 139441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkPipeline basePipelineHandle; 139541702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u // deInt32 basePipelineIndex; 139641702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 139741702fa78437820bc601e604de6a490eb09513ddPeter Siket 139841702fa78437820bc601e604de6a490eb09513ddPeter Siket graphicsPipeline = createGraphicsPipeline(vkd, vkDevice, DE_NULL, &graphicsPipelineParams); 139941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 140041702fa78437820bc601e604de6a490eb09513ddPeter Siket 140141702fa78437820bc601e604de6a490eb09513ddPeter Siket // Create Vertex Buffer 140241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 140350c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks VkDeviceSize bufferSize = positionDataSize + textureCoordDataSize; 140450c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks 140550c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks // Pad the buffer size to a stride multiple for the last element so that it isn't out of bounds 140650c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks bufferSize += vertexTextureStrideSize - ((bufferSize - vertexBufferOffset) % vertexTextureStrideSize); 140750c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks 140841702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferCreateInfo vertexBufferParams = 140941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 141041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // VkStructureType sType; 141141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 141241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkBufferCreateFlags flags; 141350c0544ec8c2e99158bf8a375eacfc9baf364a91Noah Fredriks bufferSize, // VkDeviceSize size; 141441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, // VkBufferUsageFlags usage; 141541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_SHARING_MODE_EXCLUSIVE, // VkSharingMode sharingMode; 141641702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 queueFamilyCount; 141741702fa78437820bc601e604de6a490eb09513ddPeter Siket &queueFamilyIndex // const deUint32* pQueueFamilyIndices; 141841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 141941702fa78437820bc601e604de6a490eb09513ddPeter Siket 142041702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexBuffer = createBuffer(vkd, vkDevice, &vertexBufferParams); 142141702fa78437820bc601e604de6a490eb09513ddPeter Siket vertexBufferMemory = allocator.allocate(getBufferMemoryRequirements(vkd, vkDevice, *vertexBuffer), MemoryRequirement::HostVisible); 142241702fa78437820bc601e604de6a490eb09513ddPeter Siket 142341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.bindBufferMemory(vkDevice, *vertexBuffer, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset())); 142441702fa78437820bc601e604de6a490eb09513ddPeter Siket 142541702fa78437820bc601e604de6a490eb09513ddPeter Siket // Load vertices into vertex buffer 142641702fa78437820bc601e604de6a490eb09513ddPeter Siket deMemcpy(vertexBufferMemory->getHostPtr(), position, positionDataSize); 142741702fa78437820bc601e604de6a490eb09513ddPeter Siket deMemcpy(reinterpret_cast<deUint8*>(vertexBufferMemory->getHostPtr()) + positionDataSize, texCoord, textureCoordDataSize); 142846abca75bab000788fcc6289adfd3e668203d20fMaciej Jesionowski flushMappedMemoryRange(vkd, vkDevice, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset(), VK_WHOLE_SIZE); 142941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 143041702fa78437820bc601e604de6a490eb09513ddPeter Siket 143141702fa78437820bc601e604de6a490eb09513ddPeter Siket // Create Command Buffer 1432da03200a87f51bed33b3c3030ecbb6df06ff4f60Mika Isojärvi commandBuffer = allocateCommandBuffer(vkd, vkDevice, *m_commandPool, VK_COMMAND_BUFFER_LEVEL_PRIMARY); 143341702fa78437820bc601e604de6a490eb09513ddPeter Siket 143441702fa78437820bc601e604de6a490eb09513ddPeter Siket // Begin Command Buffer 143541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 143641702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkCommandBufferBeginInfo cmdBufferBeginInfo = 143741702fa78437820bc601e604de6a490eb09513ddPeter Siket { 143841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // VkStructureType sType; 143941702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 144041702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkCmdBufferOptimizeFlags flags; 144141702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkCommandBufferInheritanceInfo* pInheritanceInfo; 144241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 144341702fa78437820bc601e604de6a490eb09513ddPeter Siket 144441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.beginCommandBuffer(*commandBuffer, &cmdBufferBeginInfo)); 144541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 144641702fa78437820bc601e604de6a490eb09513ddPeter Siket 144741702fa78437820bc601e604de6a490eb09513ddPeter Siket // Begin Render Pass 144841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 144941702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkRenderPassBeginInfo renderPassBeginInfo = 145041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 145141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // VkStructureType sType; 145241702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 145341702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_renderPass, // VkRenderPass renderPass; 145441702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_frameBuffer, // VkFramebuffer framebuffer; 145541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 145641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 0, 0 }, 145741702fa78437820bc601e604de6a490eb09513ddPeter Siket { m_renderWidth, m_renderHeight } 145841702fa78437820bc601e604de6a490eb09513ddPeter Siket }, // VkRect2D renderArea; 145941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 clearValueCount; 146041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL // const VkClearValue* pClearValues; 146141702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 146241702fa78437820bc601e604de6a490eb09513ddPeter Siket 146341702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBeginRenderPass(*commandBuffer, &renderPassBeginInfo, VK_SUBPASS_CONTENTS_INLINE); 146441702fa78437820bc601e604de6a490eb09513ddPeter Siket } 146541702fa78437820bc601e604de6a490eb09513ddPeter Siket 146641702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindPipeline(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *graphicsPipeline); 146741702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindDescriptorSets(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 0u, 1, &descriptorSet[0].get(), 0u, DE_NULL); 146841702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindDescriptorSets(*commandBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipelineLayout, 1u, 1, &descriptorSet[1].get(), 0u, DE_NULL); 146941702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindVertexBuffers(*commandBuffer, 0, 1, &vertexBuffer.get(), &vertexBufferOffset); 147041702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindVertexBuffers(*commandBuffer, 1, 1, &vertexBuffer.get(), &vertexBufferOffset); 147141702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdBindIndexBuffer(*commandBuffer, *m_vertexIndexBuffer, 0, VK_INDEX_TYPE_UINT16); 147241702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdDrawIndexed(*commandBuffer, 6, 1, 0, 0, 0); 147341702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdEndRenderPass(*commandBuffer); 147441702fa78437820bc601e604de6a490eb09513ddPeter Siket 147541702fa78437820bc601e604de6a490eb09513ddPeter Siket // Copy Image 147641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 147741702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferMemoryBarrier bufferBarrier = 147841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 147941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // VkStructureType sType; 148041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 148141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_TRANSFER_WRITE_BIT, // VkMemoryOutputFlags outputMask; 148241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_HOST_READ_BIT, // VkMemoryInputFlags inputMask; 148341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_QUEUE_FAMILY_IGNORED, // deUint32 srcQueueFamilyIndex; 148441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_QUEUE_FAMILY_IGNORED, // deUint32 destQueueFamilyIndex; 148541702fa78437820bc601e604de6a490eb09513ddPeter Siket *m_resultBuffer, // VkBuffer buffer; 148641702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkDeviceSize offset; 148741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_resultBufferSize // VkDeviceSize size; 148841702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 148941702fa78437820bc601e604de6a490eb09513ddPeter Siket 149041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkBufferImageCopy copyRegion = 149141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 149241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // VkDeviceSize bufferOffset; 149341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_renderWidth, // deUint32 bufferRowLength; 149441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_renderHeight, // deUint32 bufferImageHeight; 149541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 149641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_ASPECT_COLOR_BIT, 149741702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, 149841702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, 149941702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u 150041702fa78437820bc601e604de6a490eb09513ddPeter Siket }, // VkImageSubresourceCopy imageSubresource; 150141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 0, 0, 0 }, // VkOffset3D imageOffset; 150241702fa78437820bc601e604de6a490eb09513ddPeter Siket { m_renderWidth, m_renderHeight, 1u } // VkExtent3D imageExtent; 150341702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 150441702fa78437820bc601e604de6a490eb09513ddPeter Siket 150541702fa78437820bc601e604de6a490eb09513ddPeter Siket addImageTransitionBarrier(*commandBuffer, 150641702fa78437820bc601e604de6a490eb09513ddPeter Siket m_multisampling ? *m_resolvedImage : *m_image, 150741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, // VkPipelineStageFlags srcStageMask 150841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_TRANSFER_BIT, // VkPipelineStageFlags dstStageMask 150941702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags srcAccessMask 151041702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_TRANSFER_READ_BIT, // VkAccessFlags dstAccessMask 151141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // VkImageLayout oldLayout; 151241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL); // VkImageLayout newLayout; 151341702fa78437820bc601e604de6a490eb09513ddPeter Siket 151441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (m_multisampling) 151541702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdCopyImageToBuffer(*commandBuffer, *m_resolvedImage, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *m_resultBuffer, 1, ©Region); 151641702fa78437820bc601e604de6a490eb09513ddPeter Siket else 151741702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdCopyImageToBuffer(*commandBuffer, *m_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *m_resultBuffer, 1, ©Region); 151841702fa78437820bc601e604de6a490eb09513ddPeter Siket 151941702fa78437820bc601e604de6a490eb09513ddPeter Siket vkd.cmdPipelineBarrier(*commandBuffer, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, &bufferBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL); 152041702fa78437820bc601e604de6a490eb09513ddPeter Siket 152141702fa78437820bc601e604de6a490eb09513ddPeter Siket addImageTransitionBarrier(*commandBuffer, 152241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_multisampling ? *m_resolvedImage : *m_image, 152341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_TRANSFER_BIT, // VkPipelineStageFlags srcStageMask 152441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT, // VkPipelineStageFlags dstStageMask 152541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_TRANSFER_READ_BIT, // VkAccessFlags srcAccessMask 152641702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // VkAccessFlags dstAccessMask 152741702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // VkImageLayout oldLayout; 152841702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL); // VkImageLayout newLayout; 152941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 153041702fa78437820bc601e604de6a490eb09513ddPeter Siket 153141702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.endCommandBuffer(*commandBuffer)); 153241702fa78437820bc601e604de6a490eb09513ddPeter Siket 153341702fa78437820bc601e604de6a490eb09513ddPeter Siket // Upload uniform buffer data 153441702fa78437820bc601e604de6a490eb09513ddPeter Siket { 153541702fa78437820bc601e604de6a490eb09513ddPeter Siket const ShaderParameters shaderParameters = 153641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 153741702fa78437820bc601e604de6a490eb09513ddPeter Siket params.bias, // float bias; //!< User-supplied bias. 153841702fa78437820bc601e604de6a490eb09513ddPeter Siket params.ref, // float ref; //!< Reference value for shadow lookups. 153941702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec2(), // tcu::Vec2 padding; //!< Shader uniform padding. 154041702fa78437820bc601e604de6a490eb09513ddPeter Siket params.colorScale, // tcu::Vec4 colorScale; //!< Scale for texture color values. 154141702fa78437820bc601e604de6a490eb09513ddPeter Siket params.colorBias // tcu::Vec4 colorBias; //!< Bias for texture color values. 154241702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 154346abca75bab000788fcc6289adfd3e668203d20fMaciej Jesionowski deMemcpy(m_uniformBufferMemory->getHostPtr(), &shaderParameters, sizeof(shaderParameters)); 154446abca75bab000788fcc6289adfd3e668203d20fMaciej Jesionowski flushMappedMemoryRange(vkd, vkDevice, m_uniformBufferMemory->getMemory(), m_uniformBufferMemory->getOffset(), VK_WHOLE_SIZE); 154541702fa78437820bc601e604de6a490eb09513ddPeter Siket 154641702fa78437820bc601e604de6a490eb09513ddPeter Siket if (logUniforms) 154741702fa78437820bc601e604de6a490eb09513ddPeter Siket m_log << TestLog::Message << "u_sampler = " << texUnit << TestLog::EndMessage; 154841702fa78437820bc601e604de6a490eb09513ddPeter Siket 154941702fa78437820bc601e604de6a490eb09513ddPeter Siket if (useBias) 155041702fa78437820bc601e604de6a490eb09513ddPeter Siket { 155141702fa78437820bc601e604de6a490eb09513ddPeter Siket if (logUniforms) 155241702fa78437820bc601e604de6a490eb09513ddPeter Siket m_log << TestLog::Message << "u_bias = " << shaderParameters.bias << TestLog::EndMessage; 155341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 155441702fa78437820bc601e604de6a490eb09513ddPeter Siket 155541702fa78437820bc601e604de6a490eb09513ddPeter Siket if (params.samplerType == SAMPLERTYPE_SHADOW) 155641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 155741702fa78437820bc601e604de6a490eb09513ddPeter Siket if (logUniforms) 155841702fa78437820bc601e604de6a490eb09513ddPeter Siket m_log << TestLog::Message << "u_ref = " << shaderParameters.ref << TestLog::EndMessage; 155941702fa78437820bc601e604de6a490eb09513ddPeter Siket } 156041702fa78437820bc601e604de6a490eb09513ddPeter Siket 156141702fa78437820bc601e604de6a490eb09513ddPeter Siket if (logUniforms) 156241702fa78437820bc601e604de6a490eb09513ddPeter Siket { 156341702fa78437820bc601e604de6a490eb09513ddPeter Siket m_log << TestLog::Message << "u_colorScale = " << shaderParameters.colorScale << TestLog::EndMessage; 156441702fa78437820bc601e604de6a490eb09513ddPeter Siket m_log << TestLog::Message << "u_colorBias = " << shaderParameters.colorBias << TestLog::EndMessage; 156541702fa78437820bc601e604de6a490eb09513ddPeter Siket } 156641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 156741702fa78437820bc601e604de6a490eb09513ddPeter Siket 156841702fa78437820bc601e604de6a490eb09513ddPeter Siket // Submit 156941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 157041702fa78437820bc601e604de6a490eb09513ddPeter Siket const VkSubmitInfo submitInfo = 157141702fa78437820bc601e604de6a490eb09513ddPeter Siket { 157241702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_STRUCTURE_TYPE_SUBMIT_INFO, // VkStructureType sType; 157341702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const void* pNext; 157441702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 waitSemaphoreCount; 157541702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSemaphore* pWaitSemaphores; 157641702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkPipelineStageFlags* pWaitDstStageMask; 157741702fa78437820bc601e604de6a490eb09513ddPeter Siket 1u, // deUint32 commandBufferCount; 157841702fa78437820bc601e604de6a490eb09513ddPeter Siket &commandBuffer.get(), // const VkCommandBuffer* pCommandBuffers; 157941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0u, // deUint32 signalSemaphoreCount; 158041702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_NULL, // const VkSemaphore* pSignalSemaphores; 158141702fa78437820bc601e604de6a490eb09513ddPeter Siket }; 158241702fa78437820bc601e604de6a490eb09513ddPeter Siket 158341702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.resetFences(vkDevice, 1, &m_fence.get())); 158441702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.queueSubmit(queue, 1, &submitInfo, *m_fence)); 158541702fa78437820bc601e604de6a490eb09513ddPeter Siket VK_CHECK(vkd.waitForFences(vkDevice, 1, &m_fence.get(), true, ~(0ull) /* infinity */)); 158641702fa78437820bc601e604de6a490eb09513ddPeter Siket } 158741702fa78437820bc601e604de6a490eb09513ddPeter Siket 158846abca75bab000788fcc6289adfd3e668203d20fMaciej Jesionowski invalidateMappedMemoryRange(vkd, vkDevice, m_resultBufferMemory->getMemory(), m_resultBufferMemory->getOffset(), VK_WHOLE_SIZE); 158941702fa78437820bc601e604de6a490eb09513ddPeter Siket 159041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(result.getAccess(), tcu::ConstPixelBufferAccess(m_textureFormat, tcu::IVec3(m_renderWidth, m_renderHeight, 1u), m_resultBufferMemory->getHostPtr())); 159141702fa78437820bc601e604de6a490eb09513ddPeter Siket} 159241702fa78437820bc601e604de6a490eb09513ddPeter Siket 159341702fa78437820bc601e604de6a490eb09513ddPeter Siket/*--------------------------------------------------------------------*//*! 159441702fa78437820bc601e604de6a490eb09513ddPeter Siket * \brief Map Vulkan sampler parameters to tcu::Sampler. 159541702fa78437820bc601e604de6a490eb09513ddPeter Siket * 159641702fa78437820bc601e604de6a490eb09513ddPeter Siket * If no mapping is found, throws tcu::InternalError. 159741702fa78437820bc601e604de6a490eb09513ddPeter Siket * 159841702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapU U-component wrap mode 159941702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapV V-component wrap mode 160041702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapW W-component wrap mode 160141702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param minFilterMode Minification filter mode 160241702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param magFilterMode Magnification filter mode 160341702fa78437820bc601e604de6a490eb09513ddPeter Siket * \return Sampler description. 160441702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*--------------------------------------------------------------------*/ 160541702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::WrapMode wrapV, tcu::Sampler::WrapMode wrapW, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode) 160641702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 160741702fa78437820bc601e604de6a490eb09513ddPeter Siket return tcu::Sampler(wrapU, wrapV, wrapW, 160841702fa78437820bc601e604de6a490eb09513ddPeter Siket minFilterMode, magFilterMode, 160941702fa78437820bc601e604de6a490eb09513ddPeter Siket 0.0f /* lod threshold */, 161041702fa78437820bc601e604de6a490eb09513ddPeter Siket true /* normalized coords */, 161141702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Sampler::COMPAREMODE_NONE /* no compare */, 161241702fa78437820bc601e604de6a490eb09513ddPeter Siket 0 /* compare channel */, 161341702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::Vec4(0.0f) /* border color, not used */); 161441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 161541702fa78437820bc601e604de6a490eb09513ddPeter Siket 161641702fa78437820bc601e604de6a490eb09513ddPeter Siket/*--------------------------------------------------------------------*//*! 161741702fa78437820bc601e604de6a490eb09513ddPeter Siket * \brief Map Vulkan sampler parameters to tcu::Sampler. 161841702fa78437820bc601e604de6a490eb09513ddPeter Siket * 161941702fa78437820bc601e604de6a490eb09513ddPeter Siket * If no mapping is found, throws tcu::InternalError. 162041702fa78437820bc601e604de6a490eb09513ddPeter Siket * 162141702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapU U-component wrap mode 162241702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapV V-component wrap mode 162341702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param minFilterMode Minification filter mode 162441702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param minFilterMode Magnification filter mode 162541702fa78437820bc601e604de6a490eb09513ddPeter Siket * \return Sampler description. 162641702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*--------------------------------------------------------------------*/ 162741702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::WrapMode wrapV, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode) 162841702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 162941702fa78437820bc601e604de6a490eb09513ddPeter Siket return createSampler(wrapU, wrapV, wrapU, minFilterMode, magFilterMode); 163041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 163141702fa78437820bc601e604de6a490eb09513ddPeter Siket 163241702fa78437820bc601e604de6a490eb09513ddPeter Siket/*--------------------------------------------------------------------*//*! 163341702fa78437820bc601e604de6a490eb09513ddPeter Siket * \brief Map Vulkan sampler parameters to tcu::Sampler. 163441702fa78437820bc601e604de6a490eb09513ddPeter Siket * 163541702fa78437820bc601e604de6a490eb09513ddPeter Siket * If no mapping is found, throws tcu::InternalError. 163641702fa78437820bc601e604de6a490eb09513ddPeter Siket * 163741702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param wrapU U-component wrap mode 163841702fa78437820bc601e604de6a490eb09513ddPeter Siket * \param minFilterMode Minification filter mode 163941702fa78437820bc601e604de6a490eb09513ddPeter Siket * \return Sampler description. 164041702fa78437820bc601e604de6a490eb09513ddPeter Siket *//*--------------------------------------------------------------------*/ 164141702fa78437820bc601e604de6a490eb09513ddPeter Sikettcu::Sampler createSampler (tcu::Sampler::WrapMode wrapU, tcu::Sampler::FilterMode minFilterMode, tcu::Sampler::FilterMode magFilterMode) 164241702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 164341702fa78437820bc601e604de6a490eb09513ddPeter Siket return createSampler(wrapU, wrapU, wrapU, minFilterMode, magFilterMode); 164441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 164541702fa78437820bc601e604de6a490eb09513ddPeter Siket 164641702fa78437820bc601e604de6a490eb09513ddPeter SiketTestTexture2DSp loadTexture2D (const tcu::Archive& archive, const std::vector<std::string>& filenames) 164741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 164841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(filenames.size() > 0); 164941702fa78437820bc601e604de6a490eb09513ddPeter Siket 165041702fa78437820bc601e604de6a490eb09513ddPeter Siket TestTexture2DSp texture; 165141702fa78437820bc601e604de6a490eb09513ddPeter Siket 165241702fa78437820bc601e604de6a490eb09513ddPeter Siket std::string ext = de::FilePath(filenames[0]).getFileExtension(); 165341702fa78437820bc601e604de6a490eb09513ddPeter Siket 165441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (ext == "png") 165541702fa78437820bc601e604de6a490eb09513ddPeter Siket { 165641702fa78437820bc601e604de6a490eb09513ddPeter Siket 165741702fa78437820bc601e604de6a490eb09513ddPeter Siket for (size_t fileIndex = 0; fileIndex < filenames.size(); ++fileIndex) 165841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 165941702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureLevel level; 166041702fa78437820bc601e604de6a490eb09513ddPeter Siket 166141702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::ImageIO::loadImage(level, archive, filenames[fileIndex].c_str()); 166241702fa78437820bc601e604de6a490eb09513ddPeter Siket 166341702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_CHECK_INTERNAL(level.getFormat() == tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8) || 166441702fa78437820bc601e604de6a490eb09513ddPeter Siket level.getFormat() == tcu::TextureFormat(tcu::TextureFormat::RGB, tcu::TextureFormat::UNORM_INT8)); 166541702fa78437820bc601e604de6a490eb09513ddPeter Siket 166641702fa78437820bc601e604de6a490eb09513ddPeter Siket if (fileIndex == 0) 166741702fa78437820bc601e604de6a490eb09513ddPeter Siket texture = TestTexture2DSp(new pipeline::TestTexture2D(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8), level.getWidth(), level.getHeight())); 166841702fa78437820bc601e604de6a490eb09513ddPeter Siket 166941702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(texture->getLevel((int)fileIndex, 0), level.getAccess()); 167041702fa78437820bc601e604de6a490eb09513ddPeter Siket } 167141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 167241702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (ext == "pkm") 167341702fa78437820bc601e604de6a490eb09513ddPeter Siket { 167441702fa78437820bc601e604de6a490eb09513ddPeter Siket 167541702fa78437820bc601e604de6a490eb09513ddPeter Siket for (size_t fileIndex = 0; fileIndex < filenames.size(); ++fileIndex) 167641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 167741702fa78437820bc601e604de6a490eb09513ddPeter Siket // Compressed texture. 167841702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::CompressedTexture level; 167941702fa78437820bc601e604de6a490eb09513ddPeter Siket 168041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::ImageIO::loadPKM(level, archive, filenames[fileIndex].c_str()); 168141702fa78437820bc601e604de6a490eb09513ddPeter Siket 168241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureFormat uncompressedFormat = tcu::getUncompressedFormat(level.getFormat()); 168341702fa78437820bc601e604de6a490eb09513ddPeter Siket std::vector<deUint8> uncompressedData (uncompressedFormat.getPixelSize() * level.getWidth() * level.getHeight(), 0); 168441702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::PixelBufferAccess decompressedBuffer (uncompressedFormat, level.getWidth(), level.getHeight(), 1, uncompressedData.data()); 168541702fa78437820bc601e604de6a490eb09513ddPeter Siket 168641702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureFormat commonFormat = tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8); 168741702fa78437820bc601e604de6a490eb09513ddPeter Siket std::vector<deUint8> commonFromatData (commonFormat.getPixelSize() * level.getWidth() * level.getHeight(), 0); 168841702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::PixelBufferAccess commonFormatBuffer (commonFormat, level.getWidth(), level.getHeight(), 1, commonFromatData.data()); 168941702fa78437820bc601e604de6a490eb09513ddPeter Siket 169041702fa78437820bc601e604de6a490eb09513ddPeter Siket if (fileIndex == 0) 169141702fa78437820bc601e604de6a490eb09513ddPeter Siket texture = TestTexture2DSp(new pipeline::TestTexture2D(commonFormat, level.getWidth(), level.getHeight())); 169241702fa78437820bc601e604de6a490eb09513ddPeter Siket 169341702fa78437820bc601e604de6a490eb09513ddPeter Siket level.decompress(decompressedBuffer, tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_LDR)); 169441702fa78437820bc601e604de6a490eb09513ddPeter Siket 169541702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(commonFormatBuffer, decompressedBuffer); 169641702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(texture->getLevel((int)fileIndex, 0), commonFormatBuffer); 169741702fa78437820bc601e604de6a490eb09513ddPeter Siket } 169841702fa78437820bc601e604de6a490eb09513ddPeter Siket } 169941702fa78437820bc601e604de6a490eb09513ddPeter Siket else 170041702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_FAIL("Unsupported file format"); 170141702fa78437820bc601e604de6a490eb09513ddPeter Siket 170241702fa78437820bc601e604de6a490eb09513ddPeter Siket return texture; 170341702fa78437820bc601e604de6a490eb09513ddPeter Siket} 170441702fa78437820bc601e604de6a490eb09513ddPeter Siket 170541702fa78437820bc601e604de6a490eb09513ddPeter SiketTestTextureCubeSp loadTextureCube (const tcu::Archive& archive, const std::vector<std::string>& filenames) 170641702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 170741702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_ASSERT(filenames.size() > 0); 170841702fa78437820bc601e604de6a490eb09513ddPeter Siket DE_STATIC_ASSERT(tcu::CUBEFACE_LAST == 6); 170941702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_CHECK((int)filenames.size() % tcu::CUBEFACE_LAST == 0); 171041702fa78437820bc601e604de6a490eb09513ddPeter Siket 171141702fa78437820bc601e604de6a490eb09513ddPeter Siket TestTextureCubeSp texture; 171241702fa78437820bc601e604de6a490eb09513ddPeter Siket 171341702fa78437820bc601e604de6a490eb09513ddPeter Siket std::string ext = de::FilePath(filenames[0]).getFileExtension(); 171441702fa78437820bc601e604de6a490eb09513ddPeter Siket 171541702fa78437820bc601e604de6a490eb09513ddPeter Siket if (ext == "png") 171641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 171741702fa78437820bc601e604de6a490eb09513ddPeter Siket 171841702fa78437820bc601e604de6a490eb09513ddPeter Siket for (size_t fileIndex = 0; fileIndex < filenames.size(); ++fileIndex) 171941702fa78437820bc601e604de6a490eb09513ddPeter Siket { 172041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureLevel level; 172141702fa78437820bc601e604de6a490eb09513ddPeter Siket 172241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::ImageIO::loadImage(level, archive, filenames[fileIndex].c_str()); 172341702fa78437820bc601e604de6a490eb09513ddPeter Siket 172441702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_CHECK_INTERNAL(level.getFormat() == tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8) || 172541702fa78437820bc601e604de6a490eb09513ddPeter Siket level.getFormat() == tcu::TextureFormat(tcu::TextureFormat::RGB, tcu::TextureFormat::UNORM_INT8)); 172641702fa78437820bc601e604de6a490eb09513ddPeter Siket 172741702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_CHECK( level.getWidth() == level.getHeight()); 172841702fa78437820bc601e604de6a490eb09513ddPeter Siket 172941702fa78437820bc601e604de6a490eb09513ddPeter Siket if (fileIndex == 0) 173041702fa78437820bc601e604de6a490eb09513ddPeter Siket texture = TestTextureCubeSp(new pipeline::TestTextureCube(tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8), level.getWidth())); 173141702fa78437820bc601e604de6a490eb09513ddPeter Siket 173241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(texture->getLevel((int)fileIndex / 6, (int)fileIndex % 6), level.getAccess()); 173341702fa78437820bc601e604de6a490eb09513ddPeter Siket } 173441702fa78437820bc601e604de6a490eb09513ddPeter Siket } 173541702fa78437820bc601e604de6a490eb09513ddPeter Siket else if (ext == "pkm") 173641702fa78437820bc601e604de6a490eb09513ddPeter Siket { 173741702fa78437820bc601e604de6a490eb09513ddPeter Siket for (size_t fileIndex = 0; fileIndex < filenames.size(); ++fileIndex) 173841702fa78437820bc601e604de6a490eb09513ddPeter Siket { 173941702fa78437820bc601e604de6a490eb09513ddPeter Siket // Compressed texture. 174041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::CompressedTexture level; 174141702fa78437820bc601e604de6a490eb09513ddPeter Siket 174241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::ImageIO::loadPKM(level, archive, filenames[fileIndex].c_str()); 174341702fa78437820bc601e604de6a490eb09513ddPeter Siket 174441702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_CHECK( level.getWidth() == level.getHeight()); 174541702fa78437820bc601e604de6a490eb09513ddPeter Siket 174641702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureFormat uncompressedFormat = tcu::getUncompressedFormat(level.getFormat()); 174741702fa78437820bc601e604de6a490eb09513ddPeter Siket std::vector<deUint8> uncompressedData (uncompressedFormat.getPixelSize() * level.getWidth() * level.getHeight(), 0); 174841702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::PixelBufferAccess decompressedBuffer (uncompressedFormat, level.getWidth(), level.getHeight(), 1, uncompressedData.data()); 174941702fa78437820bc601e604de6a490eb09513ddPeter Siket 175041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::TextureFormat commonFormat = tcu::TextureFormat(tcu::TextureFormat::RGBA, tcu::TextureFormat::UNORM_INT8); 175141702fa78437820bc601e604de6a490eb09513ddPeter Siket std::vector<deUint8> commonFromatData (commonFormat.getPixelSize() * level.getWidth() * level.getHeight(), 0); 175241702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::PixelBufferAccess commonFormatBuffer (commonFormat, level.getWidth(), level.getHeight(), 1, commonFromatData.data()); 175341702fa78437820bc601e604de6a490eb09513ddPeter Siket 175441702fa78437820bc601e604de6a490eb09513ddPeter Siket if (fileIndex == 0) 175541702fa78437820bc601e604de6a490eb09513ddPeter Siket texture = TestTextureCubeSp(new pipeline::TestTextureCube(commonFormat, level.getWidth())); 175641702fa78437820bc601e604de6a490eb09513ddPeter Siket 175741702fa78437820bc601e604de6a490eb09513ddPeter Siket level.decompress(decompressedBuffer, tcu::TexDecompressionParams(tcu::TexDecompressionParams::ASTCMODE_LDR)); 175841702fa78437820bc601e604de6a490eb09513ddPeter Siket 175941702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(commonFormatBuffer, decompressedBuffer); 176041702fa78437820bc601e604de6a490eb09513ddPeter Siket tcu::copy(texture->getLevel((int)fileIndex / 6, (int)fileIndex % 6), commonFormatBuffer); 176141702fa78437820bc601e604de6a490eb09513ddPeter Siket } 176241702fa78437820bc601e604de6a490eb09513ddPeter Siket } 176341702fa78437820bc601e604de6a490eb09513ddPeter Siket else 176441702fa78437820bc601e604de6a490eb09513ddPeter Siket TCU_FAIL("Unsupported file format"); 176541702fa78437820bc601e604de6a490eb09513ddPeter Siket 176641702fa78437820bc601e604de6a490eb09513ddPeter Siket return texture; 176741702fa78437820bc601e604de6a490eb09513ddPeter Siket} 176841702fa78437820bc601e604de6a490eb09513ddPeter Siket 176941702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureCommonTestCaseParameters::TextureCommonTestCaseParameters (void) 177041702fa78437820bc601e604de6a490eb09513ddPeter Siket : sampleCount (VK_SAMPLE_COUNT_1_BIT) 177141702fa78437820bc601e604de6a490eb09513ddPeter Siket , texCoordPrecision (glu::PRECISION_HIGHP) 177241702fa78437820bc601e604de6a490eb09513ddPeter Siket , minFilter (tcu::Sampler::LINEAR) 177341702fa78437820bc601e604de6a490eb09513ddPeter Siket , magFilter (tcu::Sampler::LINEAR) 177441702fa78437820bc601e604de6a490eb09513ddPeter Siket , wrapS (tcu::Sampler::REPEAT_GL) 177541702fa78437820bc601e604de6a490eb09513ddPeter Siket , wrapT (tcu::Sampler::REPEAT_GL) 177641702fa78437820bc601e604de6a490eb09513ddPeter Siket , format (VK_FORMAT_R8G8B8A8_UNORM) 177741702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 177841702fa78437820bc601e604de6a490eb09513ddPeter Siket} 177941702fa78437820bc601e604de6a490eb09513ddPeter Siket 178041702fa78437820bc601e604de6a490eb09513ddPeter SiketTexture2DTestCaseParameters::Texture2DTestCaseParameters (void) 178141702fa78437820bc601e604de6a490eb09513ddPeter Siket : width (64) 178241702fa78437820bc601e604de6a490eb09513ddPeter Siket , height (64) 178341702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 178441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 178541702fa78437820bc601e604de6a490eb09513ddPeter Siket 178641702fa78437820bc601e604de6a490eb09513ddPeter SiketTextureCubeTestCaseParameters::TextureCubeTestCaseParameters (void) 178741702fa78437820bc601e604de6a490eb09513ddPeter Siket : size (64) 178841702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 178941702fa78437820bc601e604de6a490eb09513ddPeter Siket} 179041702fa78437820bc601e604de6a490eb09513ddPeter Siket 179141702fa78437820bc601e604de6a490eb09513ddPeter SiketTexture2DArrayTestCaseParameters::Texture2DArrayTestCaseParameters (void) 179241702fa78437820bc601e604de6a490eb09513ddPeter Siket : numLayers (8) 179341702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 179441702fa78437820bc601e604de6a490eb09513ddPeter Siket} 179541702fa78437820bc601e604de6a490eb09513ddPeter Siket 179641702fa78437820bc601e604de6a490eb09513ddPeter SiketTexture3DTestCaseParameters::Texture3DTestCaseParameters (void) 179741702fa78437820bc601e604de6a490eb09513ddPeter Siket : wrapR (tcu::Sampler::REPEAT_GL) 179841702fa78437820bc601e604de6a490eb09513ddPeter Siket , depth (64) 179941702fa78437820bc601e604de6a490eb09513ddPeter Siket{ 180041702fa78437820bc601e604de6a490eb09513ddPeter Siket} 180141702fa78437820bc601e604de6a490eb09513ddPeter Siket 180241702fa78437820bc601e604de6a490eb09513ddPeter Siket} // util 180341702fa78437820bc601e604de6a490eb09513ddPeter Siket} // texture 180441702fa78437820bc601e604de6a490eb09513ddPeter Siket} // vkt 1805