134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos/*------------------------------------------------------------------------- 234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * Vulkan Conformance Tests 334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * ------------------------ 434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * 534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * Copyright (c) 2015 Google Inc. 634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * 7978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Licensed under the Apache License, Version 2.0 (the "License"); 8978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * you may not use this file except in compliance with the License. 9978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * You may obtain a copy of the License at 1034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * 11978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * http://www.apache.org/licenses/LICENSE-2.0 1234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * 13978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * Unless required by applicable law or agreed to in writing, software 14978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * distributed under the License is distributed on an "AS IS" BASIS, 15978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * See the License for the specific language governing permissions and 17978d3d585aa549eb1e729b51e9d85fc6477240f9Pyry Haulos * limitations under the License. 1834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * 1934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos *//*! 2034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * \file 2134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos * \brief Simple Smoke Tests 2234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos *//*--------------------------------------------------------------------*/ 2334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 2434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vktApiTests.hpp" 2534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 2634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vktTestCaseUtil.hpp" 2734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 2834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkDefs.hpp" 2934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkPlatform.hpp" 3034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkStrUtil.hpp" 3134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkRef.hpp" 3234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkRefUtil.hpp" 3334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkQueryUtil.hpp" 3434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkMemUtil.hpp" 3534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkDeviceUtil.hpp" 3634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "vkPrograms.hpp" 370ae6069583c8d178964c87b1e321d8e9448bd197Pyry Haulos#include "vkTypeUtil.hpp" 384ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos#include "vkImageUtil.hpp" 3934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 4034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "tcuTestLog.hpp" 4134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "tcuFormatUtil.hpp" 424ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos#include "tcuTextureUtil.hpp" 434ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos#include "tcuImageCompare.hpp" 444ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 454ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos#include "rrRenderer.hpp" 4634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 4734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos#include "deUniquePtr.hpp" 4834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 4934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosnamespace vkt 5034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 5134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosnamespace api 5234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 5334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 5434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosnamespace 5534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 5634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 5734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosusing namespace vk; 5834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosusing std::vector; 5934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosusing tcu::TestLog; 6034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulosusing de::UniquePtr; 6134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 6234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulostcu::TestStatus createSamplerTest (Context& context) 6334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 6434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkDevice vkDevice = context.getDevice(); 6534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const DeviceInterface& vk = context.getDeviceInterface(); 6634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 6734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 6834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const struct VkSamplerCreateInfo samplerInfo = 6934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 7068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO, // sType 7168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 7268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 7368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FILTER_NEAREST, // magFilter 7468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FILTER_NEAREST, // minFilter 75689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos VK_SAMPLER_MIPMAP_MODE_NEAREST, // mipmapMode 7668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeU 7768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeV 7868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLER_ADDRESS_MODE_CLAMP_TO_EDGE, // addressModeW 7968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // mipLodBias 80689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos VK_FALSE, // anisotropyEnable 810aeee78a8c5276964d855b097b91059daa3fd79aPyry Haulos 1.0f, // maxAnisotropy 8268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // compareEnable 8368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPARE_OP_ALWAYS, // compareOp 8468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // minLod 8568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // maxLod 8668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BORDER_COLOR_FLOAT_TRANSPARENT_BLACK, // borderColor 8768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // unnormalizedCoords 8834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 8934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 9034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos Move<VkSampler> tmpSampler = createSampler(vk, vkDevice, &samplerInfo); 9134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos Move<VkSampler> tmp2Sampler; 9234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 9334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos tmp2Sampler = tmpSampler; 9434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 9534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkSampler> sampler (tmp2Sampler); 9634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 9734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 9834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos return tcu::TestStatus::pass("Creating sampler succeeded"); 9934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 10034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 1017485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszynvoid createShaderProgs (SourceCollections& dst) 10234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 1037485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn dst.glslSources.add("test") << glu::VertexSource( 104fd7944ef801e5be2e9883c4acc6c9d826574e743Csaba Osztrogonác "#version 310 es\n" 10504e0b933ea3c81ffd6964aecc2e295d7207c876aSlawomir Cygan "layout(location = 0) in highp vec4 a_position;\n" 10634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos "void main (void) { gl_Position = a_position; }\n"); 10734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 10834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 10934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulostcu::TestStatus createShaderModuleTest (Context& context) 11034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 11134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkDevice vkDevice = context.getDevice(); 11234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const DeviceInterface& vk = context.getDeviceInterface(); 11334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkShaderModule> shader (createShaderModule(vk, vkDevice, context.getBinaryCollection().get("test"), 0)); 11434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 11534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos return tcu::TestStatus::pass("Creating shader module succeeded"); 11634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 11734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 1187485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszynvoid createTriangleAsmProgs (SourceCollections& dst) 11934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 1207485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn dst.spirvAsmSources.add("vert") << 1217485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpCapability Shader\n" 1227485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%1 = OpExtInstImport \"GLSL.std.450\"\n" 1237485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpMemoryModel Logical GLSL450\n" 12421c0fb00ba42f8077fe62868301cf0be711d8147Lei Zhang " OpEntryPoint Vertex %4 \"main\" %10 %12 %16 %17\n" 1258e061635437aa8a4d572a585d400378eb43fcfbeDae Kim " OpSource ESSL 300\n" 1267485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpName %4 \"main\"\n" 1277485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpName %10 \"gl_Position\"\n" 1287485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpName %12 \"a_position\"\n" 129a0cfd75ba580cdd649b82211875371f8a2959a27Andrew Woloszyn " OpName %16 \"gl_VertexIndex\"\n" 130a0cfd75ba580cdd649b82211875371f8a2959a27Andrew Woloszyn " OpName %17 \"gl_InstanceIndex\"\n" 1317485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpDecorate %10 BuiltIn Position\n" 1327485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpDecorate %12 Location 0\n" 133a0cfd75ba580cdd649b82211875371f8a2959a27Andrew Woloszyn " OpDecorate %16 BuiltIn VertexIndex\n" 134a0cfd75ba580cdd649b82211875371f8a2959a27Andrew Woloszyn " OpDecorate %17 BuiltIn InstanceIndex\n" 1357485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%2 = OpTypeVoid\n" 1367485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%3 = OpTypeFunction %2\n" 1377485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%7 = OpTypeFloat 32\n" 1387485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%8 = OpTypeVector %7 4\n" 1397485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%9 = OpTypePointer Output %8\n" 1407485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%10 = OpVariable %9 Output\n" 1417485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%11 = OpTypePointer Input %8\n" 1427485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%12 = OpVariable %11 Input\n" 1437485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%14 = OpTypeInt 32 1\n" 1447485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%15 = OpTypePointer Input %14\n" 1457485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%16 = OpVariable %15 Input\n" 1467485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%17 = OpVariable %15 Input\n" 1477485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%4 = OpFunction %2 None %3\n" 1487485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%5 = OpLabel\n" 1497485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%13 = OpLoad %8 %12\n" 1507485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpStore %10 %13\n" 1517485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpBranch %6\n" 1527485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%6 = OpLabel\n" 1537485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpReturn\n" 1547485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpFunctionEnd\n"; 1557485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn dst.spirvAsmSources.add("frag") << 1567485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpCapability Shader\n" 1577485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%1 = OpExtInstImport \"GLSL.std.450\"\n" 1587485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpMemoryModel Logical GLSL450\n" 15921c0fb00ba42f8077fe62868301cf0be711d8147Lei Zhang " OpEntryPoint Fragment %4 \"main\" %10\n" 1607485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpExecutionMode %4 OriginLowerLeft\n" 1618e061635437aa8a4d572a585d400378eb43fcfbeDae Kim " OpSource ESSL 300\n" 1627485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpName %4 \"main\"\n" 1637485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpName %10 \"o_color\"\n" 1647485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpDecorate %10 RelaxedPrecision\n" 1657485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpDecorate %10 Location 0\n" 1667485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%2 = OpTypeVoid\n" 1677485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%3 = OpTypeFunction %2\n" 1687485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%7 = OpTypeFloat 32\n" 1697485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%8 = OpTypeVector %7 4\n" 1707485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%9 = OpTypePointer Output %8\n" 1717485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%10 = OpVariable %9 Output\n" 1727485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%11 = OpConstant %7 1065353216\n" 1737485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%12 = OpConstant %7 0\n" 1747485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%13 = OpConstantComposite %8 %11 %12 %11 %11\n" 1757485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%4 = OpFunction %2 None %3\n" 1767485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%5 = OpLabel\n" 1777485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpStore %10 %13\n" 1787485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpBranch %6\n" 1797485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn "%6 = OpLabel\n" 1807485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpReturn\n" 1817485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn " OpFunctionEnd\n"; 1827485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn} 1837485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn 1847485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszynvoid createTriangleProgs (SourceCollections& dst) 1857485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn{ 1867485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn dst.glslSources.add("vert") << glu::VertexSource( 187fd7944ef801e5be2e9883c4acc6c9d826574e743Csaba Osztrogonác "#version 310 es\n" 18834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos "layout(location = 0) in highp vec4 a_position;\n" 18934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos "void main (void) { gl_Position = a_position; }\n"); 1907485f0bbab69ed556d54503e8f94bedc5b71175dAndrew Woloszyn dst.glslSources.add("frag") << glu::FragmentSource( 191fd7944ef801e5be2e9883c4acc6c9d826574e743Csaba Osztrogonác "#version 310 es\n" 19234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos "layout(location = 0) out lowp vec4 o_color;\n" 19334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos "void main (void) { o_color = vec4(1.0, 0.0, 1.0, 1.0); }\n"); 19434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 19534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 1961d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulosvoid createProgsNoOpName (SourceCollections& dst) 1971d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos{ 1981d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos dst.spirvAsmSources.add("vert") << 1991d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpCapability Shader\n" 2001d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%1 = OpExtInstImport \"GLSL.std.450\"\n" 2011d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpMemoryModel Logical GLSL450\n" 2021d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpEntryPoint Vertex %4 \"main\" %20 %22 %26\n" 2031d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpSource ESSL 310\n" 2041d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpMemberDecorate %18 0 BuiltIn Position\n" 2051d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpMemberDecorate %18 1 BuiltIn PointSize\n" 2061d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %18 Block\n" 2071d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %22 Location 0\n" 2081d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %26 Location 2\n" 2091d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%2 = OpTypeVoid\n" 2101d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%3 = OpTypeFunction %2\n" 2111d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%6 = OpTypeFloat 32\n" 2121d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%7 = OpTypeVector %6 4\n" 2131d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%8 = OpTypeStruct %7\n" 2141d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%9 = OpTypePointer Function %8\n" 2151d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%11 = OpTypeInt 32 1\n" 2161d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%12 = OpConstant %11 0\n" 2171d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%13 = OpConstant %6 1\n" 2181d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%14 = OpConstant %6 0\n" 2191d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%15 = OpConstantComposite %7 %13 %14 %13 %13\n" 2201d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%16 = OpTypePointer Function %7\n" 2211d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%18 = OpTypeStruct %7 %6\n" 2221d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%19 = OpTypePointer Output %18\n" 2231d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%20 = OpVariable %19 Output\n" 2241d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%21 = OpTypePointer Input %7\n" 2251d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%22 = OpVariable %21 Input\n" 2261d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%24 = OpTypePointer Output %7\n" 2271d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%26 = OpVariable %24 Output\n" 2281d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%4 = OpFunction %2 None %3\n" 2291d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%5 = OpLabel\n" 2301d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%10 = OpVariable %9 Function\n" 2311d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%17 = OpAccessChain %16 %10 %12\n" 2321d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpStore %17 %15\n" 2331d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%23 = OpLoad %7 %22\n" 2341d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%25 = OpAccessChain %24 %20 %12\n" 2351d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpStore %25 %23\n" 2361d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%27 = OpAccessChain %16 %10 %12\n" 2371d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%28 = OpLoad %7 %27\n" 2381d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpStore %26 %28\n" 2391d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpReturn\n" 2401d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpFunctionEnd\n"; 2411d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos dst.spirvAsmSources.add("frag") << 2421d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpCapability Shader\n" 2431d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%1 = OpExtInstImport \"GLSL.std.450\"\n" 2441d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpMemoryModel Logical GLSL450\n" 2451d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpEntryPoint Fragment %4 \"main\" %9 %11\n" 2461d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpExecutionMode %4 OriginUpperLeft\n" 2471d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpSource ESSL 310\n" 2481d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %9 RelaxedPrecision\n" 2491d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %9 Location 0\n" 2501d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpDecorate %11 Location 2\n" 2511d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%2 = OpTypeVoid\n" 2521d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%3 = OpTypeFunction %2\n" 2531d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%6 = OpTypeFloat 32\n" 2541d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%7 = OpTypeVector %6 4\n" 2551d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%8 = OpTypePointer Output %7\n" 2561d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%9 = OpVariable %8 Output\n" 2571d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%10 = OpTypePointer Input %7\n" 2581d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%11 = OpVariable %10 Input\n" 2591d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%4 = OpFunction %2 None %3\n" 2601d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%5 = OpLabel\n" 2611d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "%12 = OpLoad %7 %11\n" 2621d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpStore %9 %12\n" 2631d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpReturn\n" 2641d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos "OpFunctionEnd\n"; 2651d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos} 2661d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos 2674ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulosclass RefVertexShader : public rr::VertexShader 2684ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos{ 2694ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulospublic: 2704ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos RefVertexShader (void) 2714ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos : rr::VertexShader(1, 0) 2724ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 2734ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos m_inputs[0].type = rr::GENERICVECTYPE_FLOAT; 2744ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 2754ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 2764ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos void shadeVertices (const rr::VertexAttrib* inputs, rr::VertexPacket* const* packets, const int numPackets) const 2774ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 2784ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos for (int packetNdx = 0; packetNdx < numPackets; ++packetNdx) 2794ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 2804ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos packets[packetNdx]->position = rr::readVertexAttribFloat(inputs[0], 2814ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos packets[packetNdx]->instanceNdx, 2824ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos packets[packetNdx]->vertexNdx); 2834ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 2844ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 2854ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos}; 2864ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 2874ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulosclass RefFragmentShader : public rr::FragmentShader 2884ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos{ 2894ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulospublic: 2904ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos RefFragmentShader (void) 2914ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos : rr::FragmentShader(0, 1) 2924ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 2934ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos m_outputs[0].type = rr::GENERICVECTYPE_FLOAT; 2944ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 2954ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 2964ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos void shadeFragments (rr::FragmentPacket*, const int numPackets, const rr::FragmentShadingContext& context) const 2974ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 2984ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos for (int packetNdx = 0; packetNdx < numPackets; ++packetNdx) 2994ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 3004ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos for (int fragNdx = 0; fragNdx < rr::NUM_FRAGMENTS_PER_PACKET; ++fragNdx) 3014ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 3024ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos rr::writeFragmentOutput(context, packetNdx, fragNdx, 0, tcu::Vec4(1.0f, 0.0f, 1.0f, 1.0f)); 3034ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 3044ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 3054ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 3064ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos}; 3074ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 3084ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulosvoid renderReferenceTriangle (const tcu::PixelBufferAccess& dst, const tcu::Vec4 (&vertices)[3]) 3094ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos{ 3104ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const RefVertexShader vertShader; 3114ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const RefFragmentShader fragShader; 3124ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const rr::Program program (&vertShader, &fragShader); 3134ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const rr::MultisamplePixelBufferAccess colorBuffer = rr::MultisamplePixelBufferAccess::fromSinglesampleAccess(dst); 3144ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const rr::RenderTarget renderTarget (colorBuffer); 315417115b2676c3064a06385184573b6d7a0644f42David Sodman const rr::RenderState renderState ((rr::ViewportState(colorBuffer)), rr::VIEWPORTORIENTATION_UPPER_LEFT); 3164ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const rr::Renderer renderer; 3174ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const rr::VertexAttrib vertexAttribs[] = 3184ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 3194ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos rr::VertexAttrib(rr::VERTEXATTRIBTYPE_FLOAT, 4, sizeof(tcu::Vec4), 0, vertices[0].getPtr()) 3204ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos }; 3214ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 3224ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos renderer.draw(rr::DrawCommand(renderState, 3234ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos renderTarget, 3244ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos program, 3254ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos DE_LENGTH_OF_ARRAY(vertexAttribs), 3264ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos &vertexAttribs[0], 3274ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos rr::PrimitiveList(rr::PRIMITIVETYPE_TRIANGLES, DE_LENGTH_OF_ARRAY(vertices), 0))); 3284ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos} 3294ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 33034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulostcu::TestStatus renderTriangleTest (Context& context) 33134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 33234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkDevice vkDevice = context.getDevice(); 33334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const DeviceInterface& vk = context.getDeviceInterface(); 33434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkQueue queue = context.getUniversalQueue(); 33534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); 33634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos SimpleAllocator memAlloc (vk, vkDevice, getPhysicalDeviceMemoryProperties(context.getInstanceInterface(), context.getPhysicalDevice())); 33734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const tcu::IVec2 renderSize (256, 256); 3384ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const VkFormat colorFormat = VK_FORMAT_R8G8B8A8_UNORM; 3394ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const tcu::Vec4 clearColor (0.125f, 0.25f, 0.75f, 1.0f); 34034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 34134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const tcu::Vec4 vertices[] = 34234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 34334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos tcu::Vec4(-0.5f, -0.5f, 0.0f, 1.0f), 34434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos tcu::Vec4(+0.5f, -0.5f, 0.0f, 1.0f), 34534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos tcu::Vec4( 0.0f, +0.5f, 0.0f, 1.0f) 34634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 34734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 34834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkBufferCreateInfo vertexBufferParams = 34934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 35068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // sType 35168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 35268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 35368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VkDeviceSize)sizeof(vertices), // size 35468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, // usage 35568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SHARING_MODE_EXCLUSIVE, // sharingMode 35668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // queueFamilyIndexCount 35768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &queueFamilyIndex, // pQueueFamilyIndices 35834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 35934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkBuffer> vertexBuffer (createBuffer(vk, vkDevice, &vertexBufferParams)); 36034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const UniquePtr<Allocation> vertexBufferMemory (memAlloc.allocate(getBufferMemoryRequirements(vk, vkDevice, *vertexBuffer), MemoryRequirement::HostVisible)); 36134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 36234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.bindBufferMemory(vkDevice, *vertexBuffer, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset())); 36334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 36434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkDeviceSize imageSizeBytes = (VkDeviceSize)(sizeof(deUint32)*renderSize.x()*renderSize.y()); 36534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkBufferCreateInfo readImageBufferParams = 36634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 36768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // sType 36868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 36968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VkBufferCreateFlags)0u, // flags 37068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos imageSizeBytes, // size 37168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BUFFER_USAGE_TRANSFER_DST_BIT, // usage 37268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SHARING_MODE_EXCLUSIVE, // sharingMode 37368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // queueFamilyIndexCount 37468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &queueFamilyIndex, // pQueueFamilyIndices 37534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 37634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkBuffer> readImageBuffer (createBuffer(vk, vkDevice, &readImageBufferParams)); 37734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const UniquePtr<Allocation> readImageBufferMemory (memAlloc.allocate(getBufferMemoryRequirements(vk, vkDevice, *readImageBuffer), MemoryRequirement::HostVisible)); 37834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 37934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.bindBufferMemory(vkDevice, *readImageBuffer, readImageBufferMemory->getMemory(), readImageBufferMemory->getOffset())); 38034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 38134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkImageCreateInfo imageParams = 38234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 38368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // sType 38468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 38568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 38668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_TYPE_2D, // imageType 38768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FORMAT_R8G8B8A8_UNORM, // format 388689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos { (deUint32)renderSize.x(), (deUint32)renderSize.y(), 1 }, // extent 38968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // mipLevels 39068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // arraySize 39168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLE_COUNT_1_BIT, // samples 39268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_TILING_OPTIMAL, // tiling 39368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT, // usage 39468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SHARING_MODE_EXCLUSIVE, // sharingMode 39568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // queueFamilyIndexCount 39668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &queueFamilyIndex, // pQueueFamilyIndices 39768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_UNDEFINED, // initialLayout 39834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 39934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 40034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkImage> image (createImage(vk, vkDevice, &imageParams)); 40134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const UniquePtr<Allocation> imageMemory (memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *image), MemoryRequirement::Any)); 40234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 40334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.bindImageMemory(vkDevice, *image, imageMemory->getMemory(), imageMemory->getOffset())); 40434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 40534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkAttachmentDescription colorAttDesc = 40634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 40768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 40868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FORMAT_R8G8B8A8_UNORM, // format 40968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLE_COUNT_1_BIT, // samples 41068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ATTACHMENT_LOAD_OP_CLEAR, // loadOp 41168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ATTACHMENT_STORE_OP_STORE, // storeOp 41268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ATTACHMENT_LOAD_OP_DONT_CARE, // stencilLoadOp 41368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ATTACHMENT_STORE_OP_DONT_CARE, // stencilStoreOp 41468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // initialLayout 41568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // finalLayout 41634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 41734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkAttachmentReference colorAttRef = 41834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 41968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // attachment 42068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // layout 42134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 42234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkSubpassDescription subpassDesc = 42334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 42468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VkSubpassDescriptionFlags)0u, // flags 42568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint 42668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // inputAttachmentCount 42768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pInputAttachments 42868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // colorAttachmentCount 42968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &colorAttRef, // pColorAttachments 43068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pResolveAttachments 43168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // depthStencilAttachment 43268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // preserveAttachmentCount 43368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pPreserveAttachments 43434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 43534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkRenderPassCreateInfo renderPassParams = 43634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 43768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // sType 43868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 43968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 44068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // attachmentCount 44168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &colorAttDesc, // pAttachments 44268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // subpassCount 44368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &subpassDesc, // pSubpasses 44468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // dependencyCount 44568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pDependencies 44634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 44734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkRenderPass> renderPass (createRenderPass(vk, vkDevice, &renderPassParams)); 44834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 4493d2071b82061ee418aa87064333069281133eddaPyry Haulos const VkImageViewCreateInfo colorAttViewParams = 45034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 45168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // sType 45268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 45368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 45468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *image, // image 45568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_VIEW_TYPE_2D, // viewType 45668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FORMAT_R8G8B8A8_UNORM, // format 4573d2071b82061ee418aa87064333069281133eddaPyry Haulos { 45868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPONENT_SWIZZLE_R, 45968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPONENT_SWIZZLE_G, 46068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPONENT_SWIZZLE_B, 46168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPONENT_SWIZZLE_A 46268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // components 4633d2071b82061ee418aa87064333069281133eddaPyry Haulos { 46468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 46568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseMipLevel 46668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // levelCount 46768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseArrayLayer 46868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // layerCount 46968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // subresourceRange 47034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 4713d2071b82061ee418aa87064333069281133eddaPyry Haulos const Unique<VkImageView> colorAttView (createImageView(vk, vkDevice, &colorAttViewParams)); 47234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 47334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Pipeline layout 47434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineLayoutCreateInfo pipelineLayoutParams = 47534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 47668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // sType 47768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 47868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (vk::VkPipelineLayoutCreateFlags)0, 47968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // setLayoutCount 48068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pSetLayouts 48168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // pushConstantRangeCount 48268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pPushConstantRanges 48334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 48434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkPipelineLayout> pipelineLayout (createPipelineLayout(vk, vkDevice, &pipelineLayoutParams)); 48534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 48668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos // Shaders 48768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const Unique<VkShaderModule> vertShaderModule (createShaderModule(vk, vkDevice, context.getBinaryCollection().get("vert"), 0)); 48868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const Unique<VkShaderModule> fragShaderModule (createShaderModule(vk, vkDevice, context.getBinaryCollection().get("frag"), 0)); 48968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 49034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Pipeline 49134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkSpecializationInfo emptyShaderSpecParams = 49234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 49368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // mapEntryCount 49468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pMap 49568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0, // dataSize 49668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pData 49734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 49834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineShaderStageCreateInfo shaderStageParams[] = 49934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 50034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 50168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // sType 50268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 50368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 50468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SHADER_STAGE_VERTEX_BIT, // stage 50568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *vertShaderModule, // module 50668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos "main", // pName 50768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &emptyShaderSpecParams, // pSpecializationInfo 50834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }, 50934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 51068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // sType 51168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 51268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 51368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SHADER_STAGE_FRAGMENT_BIT, // stage 51468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *fragShaderModule, // module 51568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos "main", // pName 51668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &emptyShaderSpecParams, // pSpecializationInfo 51734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 51834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 51934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineDepthStencilStateCreateInfo depthStencilParams = 52034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 52168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // sType 52268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 52368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 52468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // depthTestEnable 52568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // depthWriteEnable 52668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPARE_OP_ALWAYS, // depthCompareOp 52768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // depthBoundsTestEnable 52868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // stencilTestEnable 52934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 53068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // failOp 53168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // passOp 53268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // depthFailOp 53368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPARE_OP_ALWAYS, // compareOp 53468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // compareMask 53568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // writeMask 53668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // reference 53768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // front 53834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 53968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // failOp 54068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // passOp 54168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STENCIL_OP_KEEP, // depthFailOp 54268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMPARE_OP_ALWAYS, // compareOp 54368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // compareMask 54468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // writeMask 54568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // reference 54668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // back; 5473d8e6ee58a6f3a7701a3e6cdc4ba9fb14b162410Pyry Haulos 0.0f, // float minDepthBounds; 5483d8e6ee58a6f3a7701a3e6cdc4ba9fb14b162410Pyry Haulos 1.0f, // float maxDepthBounds; 5493d2071b82061ee418aa87064333069281133eddaPyry Haulos }; 5503d2071b82061ee418aa87064333069281133eddaPyry Haulos const VkViewport viewport0 = 5513d2071b82061ee418aa87064333069281133eddaPyry Haulos { 55268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // x 55368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // y 55468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (float)renderSize.x(), // width 55568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (float)renderSize.y(), // height 55668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // minDepth 55768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1.0f, // maxDepth 5583d2071b82061ee418aa87064333069281133eddaPyry Haulos }; 5593d2071b82061ee418aa87064333069281133eddaPyry Haulos const VkRect2D scissor0 = 5603d2071b82061ee418aa87064333069281133eddaPyry Haulos { 5613d2071b82061ee418aa87064333069281133eddaPyry Haulos { 56268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // x 56368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // y 56468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // offset 5653d2071b82061ee418aa87064333069281133eddaPyry Haulos { 566689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (deUint32)renderSize.x(), // width 567689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (deUint32)renderSize.y(), // height 56868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // extent; 56934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 57034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineViewportStateCreateInfo viewportParams = 57134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 57268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // sType 57368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 57468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 57568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // viewportCount 57668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &viewport0, // pViewports 57768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // scissorCount 57868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &scissor0 // pScissors 57934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 5803d2071b82061ee418aa87064333069281133eddaPyry Haulos const VkSampleMask sampleMask = ~0u; 58134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineMultisampleStateCreateInfo multisampleParams = 58234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 58368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // sType 58468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 58568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 58668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_SAMPLE_COUNT_1_BIT, // rasterizationSamples 58768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // sampleShadingEnable 58868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // minSampleShading 58968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &sampleMask, // sampleMask 59068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // alphaToCoverageEnable 59168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // alphaToOneEnable 59268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }; 59368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const VkPipelineRasterizationStateCreateInfo rasterParams = 59468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos { 59568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // sType 59668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 59768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 5986140c85a76b7866db94aaf77bcd5dca80490e19bJorg Wagner VK_FALSE, // depthClampEnable 59968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // rasterizerDiscardEnable 60068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_POLYGON_MODE_FILL, // polygonMode 60168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_CULL_MODE_NONE, // cullMode 60268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FRONT_FACE_COUNTER_CLOCKWISE, // frontFace 60368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // depthBiasEnable 60468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // depthBiasConstantFactor 60568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // depthBiasClamp 60668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0.0f, // depthBiasSlopeFactor 60768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1.0f, // lineWidth 60834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 60934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineInputAssemblyStateCreateInfo inputAssemblyParams = 61034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 61168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // sType 61268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 61368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 61468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, // topology 61568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // primitiveRestartEnable 61634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 61734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkVertexInputBindingDescription vertexBinding0 = 61834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 61968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // binding 62068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)sizeof(tcu::Vec4), // stride 62168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_VERTEX_INPUT_RATE_VERTEX, // inputRate 62234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 62334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkVertexInputAttributeDescription vertexAttrib0 = 62434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 62568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // location 62668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // binding 62768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FORMAT_R32G32B32A32_SFLOAT, // format 62868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // offset 62934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 63034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineVertexInputStateCreateInfo vertexInputStateParams = 63134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 63268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // sType 63368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 63468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 63568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // vertexBindingDescriptionCount 63668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &vertexBinding0, // pVertexBindingDescriptions 63768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // vertexAttributeDescriptionCount 63868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &vertexAttrib0, // pVertexAttributeDescriptions 63934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 64034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineColorBlendAttachmentState attBlendParams = 64134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 64268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_FALSE, // blendEnable 64368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_FACTOR_ONE, // srcColorBlendFactor 64468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_FACTOR_ZERO, // dstColorBlendFactor 64568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_OP_ADD, // colorBlendOp 64668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_FACTOR_ONE, // srcAlphaBlendFactor 64768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_FACTOR_ZERO, // dstAlphaBlendFactor 64868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_BLEND_OP_ADD, // alphaBlendOp 64968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VK_COLOR_COMPONENT_R_BIT| 65068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COLOR_COMPONENT_G_BIT| 65168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COLOR_COMPONENT_B_BIT| 65268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COLOR_COMPONENT_A_BIT), // colorWriteMask 65334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 65434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkPipelineColorBlendStateCreateInfo blendParams = 65534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 65668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // sType 65768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 65868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 65968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_FALSE, // logicOpEnable 66068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_LOGIC_OP_COPY, // logicOp 66168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // attachmentCount 66268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &attBlendParams, // pAttachments 66368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos { 0.0f, 0.0f, 0.0f, 0.0f }, // blendConstants[4] 6643d2071b82061ee418aa87064333069281133eddaPyry Haulos }; 66534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkGraphicsPipelineCreateInfo pipelineParams = 66634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 66768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, // sType 66868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 66968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 67068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)DE_LENGTH_OF_ARRAY(shaderStageParams), // stageCount 67168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos shaderStageParams, // pStages 67268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &vertexInputStateParams, // pVertexInputState 67368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &inputAssemblyParams, // pInputAssemblyState 67468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pTessellationState 67568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &viewportParams, // pViewportState 67668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &rasterParams, // pRasterizationState 67768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &multisampleParams, // pMultisampleState 67868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &depthStencilParams, // pDepthStencilState 67968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &blendParams, // pColorBlendState 68086a8ae9e0d61bbfe1f1e273fdbb026369bdb5f29Pyry Haulos (const VkPipelineDynamicStateCreateInfo*)DE_NULL, // pDynamicState 68168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *pipelineLayout, // layout 68268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *renderPass, // renderPass 68368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // subpass 68468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // basePipelineHandle 68568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // basePipelineIndex 68634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 68734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 68834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkPipeline> pipeline (createGraphicsPipeline(vk, vkDevice, DE_NULL, &pipelineParams)); 68934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 69034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Framebuffer 69134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkFramebufferCreateInfo framebufferParams = 69234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 69368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // sType 69468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 69568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 69668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *renderPass, // renderPass 69768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // attachmentCount 69868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &*colorAttView, // pAttachments 69968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)renderSize.x(), // width 70068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)renderSize.y(), // height 70168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // layers 70234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 7033d2071b82061ee418aa87064333069281133eddaPyry Haulos const Unique<VkFramebuffer> framebuffer (createFramebuffer(vk, vkDevice, &framebufferParams)); 70434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 70568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const VkCommandPoolCreateInfo cmdPoolParams = 70634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 70768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, // sType 70868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 70968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, // flags 71068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // queueFamilyIndex 71134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 71268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const Unique<VkCommandPool> cmdPool (createCommandPool(vk, vkDevice, &cmdPoolParams)); 71334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 71434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Command buffer 71568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const VkCommandBufferAllocateInfo cmdBufParams = 71634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 71768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType 71868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 71968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *cmdPool, // pool 72068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level 72168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // bufferCount 72234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 72368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const Unique<VkCommandBuffer> cmdBuf (allocateCommandBuffer(vk, vkDevice, &cmdBufParams)); 72434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 72568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const VkCommandBufferBeginInfo cmdBufBeginParams = 72634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 72768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // sType 72868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 72968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 730689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (const VkCommandBufferInheritanceInfo*)DE_NULL, 73134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 73234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 73334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Record commands 73434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.beginCommandBuffer(*cmdBuf, &cmdBufBeginParams)); 73534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 73634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 73734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkMemoryBarrier vertFlushBarrier = 73834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 73968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_MEMORY_BARRIER, // sType 74068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 74168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_HOST_WRITE_BIT, // srcAccessMask 74268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, // dstAccessMask 74334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 74434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkImageMemoryBarrier colorAttBarrier = 74534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 74668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType 74768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 74868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // srcAccessMask 74968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT| 75068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT), // dstAccessMask 75168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_UNDEFINED, // oldLayout 75268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // newLayout 75368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // srcQueueFamilyIndex 75468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // dstQueueFamilyIndex 75568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *image, // image 75634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 75768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 75868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseMipLevel 75968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // levelCount 76068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseArrayLayer 76168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // layerCount 76268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos } // subresourceRange 76334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 764689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, (VkDependencyFlags)0, 1, &vertFlushBarrier, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &colorAttBarrier); 76534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 76634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 76734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 7684ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const VkClearValue clearValue = makeClearValueColorF32(clearColor[0], 7694ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos clearColor[1], 7704ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos clearColor[2], 7714ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos clearColor[3]); 77234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkRenderPassBeginInfo passBeginParams = 77334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 77468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // sType 77568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 77668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *renderPass, // renderPass 77768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *framebuffer, // framebuffer 778689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos { 779689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos { 0, 0 }, 780689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos { (deUint32)renderSize.x(), (deUint32)renderSize.y() } 781689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos }, // renderArea 78268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // clearValueCount 78368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &clearValue, // pClearValues 78434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 78568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos vk.cmdBeginRenderPass(*cmdBuf, &passBeginParams, VK_SUBPASS_CONTENTS_INLINE); 78634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 78734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 78834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos vk.cmdBindPipeline(*cmdBuf, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); 78934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 79034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkDeviceSize bindingOffset = 0; 79134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos vk.cmdBindVertexBuffers(*cmdBuf, 0u, 1u, &vertexBuffer.get(), &bindingOffset); 79234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 7933d2071b82061ee418aa87064333069281133eddaPyry Haulos vk.cmdDraw(*cmdBuf, 3u, 1u, 0u, 0u); 79434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos vk.cmdEndRenderPass(*cmdBuf); 79534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 79634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 79734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkImageMemoryBarrier renderFinishBarrier = 79834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 79968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType 80068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 80168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // outputMask 80268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_TRANSFER_READ_BIT, // inputMask 80368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // oldLayout 80468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // newLayout 80568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // srcQueueFamilyIndex 80668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // dstQueueFamilyIndex 80768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *image, // image 80834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 80968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 81068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseMipLevel 81168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // mipLevels 81268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseArraySlice 81368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // arraySize 81468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos } // subresourceRange 81534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 816689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &renderFinishBarrier); 81734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 81834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 81934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 82034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkBufferImageCopy copyParams = 82134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 82268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VkDeviceSize)0u, // bufferOffset 82368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)renderSize.x(), // bufferRowLength 82468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (deUint32)renderSize.y(), // bufferImageHeight 82534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 82668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 82768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // mipLevel 82868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // baseArrayLayer 82968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // layerCount 83068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }, // imageSubresource 83168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos { 0u, 0u, 0u }, // imageOffset 832689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos { 833689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (deUint32)renderSize.x(), 834689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (deUint32)renderSize.y(), 835689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos 1u 836689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos } // imageExtent 83734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 83868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos vk.cmdCopyImageToBuffer(*cmdBuf, *image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *readImageBuffer, 1u, ©Params); 83934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 84034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 84134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 84234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkBufferMemoryBarrier copyFinishBarrier = 84334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 84468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // sType 84568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 84668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_TRANSFER_WRITE_BIT, // srcAccessMask 84768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_ACCESS_HOST_READ_BIT, // dstAccessMask 84868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // srcQueueFamilyIndex 84968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos queueFamilyIndex, // dstQueueFamilyIndex 85068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos *readImageBuffer, // buffer 85168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // offset 85268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos imageSizeBytes // size 85334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 854689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, ©FinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL); 85534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 85634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 85734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.endCommandBuffer(*cmdBuf)); 85834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 85934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Upload vertex data 86034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 8617965292de01eac3af42c1de1e61b9442739eb188Pyry Haulos const VkMappedMemoryRange range = 86234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 86368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, // sType 86468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 86568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos vertexBufferMemory->getMemory(), // memory 86668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0, // offset 86768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos (VkDeviceSize)sizeof(vertices), // size 86834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 8697965292de01eac3af42c1de1e61b9442739eb188Pyry Haulos void* vertexBufPtr = vertexBufferMemory->getHostPtr(); 87034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 87134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos deMemcpy(vertexBufPtr, &vertices[0], sizeof(vertices)); 87234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.flushMappedMemoryRanges(vkDevice, 1u, &range)); 87334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 87434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 87534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos // Submit & wait for completion 87634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 87734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const VkFenceCreateInfo fenceParams = 87834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 87968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, // sType 88068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 88168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // flags 88268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos }; 88368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos const VkSubmitInfo submitInfo = 88468e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos { 88568e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_SUBMIT_INFO, // sType 88668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 88768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // waitSemaphoreCount 88868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pWaitSemaphores 889689c095f881a410da6a315795452a8e00ad95a9dPyry Haulos (const VkPipelineStageFlags*)DE_NULL, 89068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 1u, // commandBufferCount 89168e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos &cmdBuf.get(), // pCommandBuffers 89268e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0u, // signalSemaphoreCount 89368e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pSignalSemaphores 89434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 89534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos const Unique<VkFence> fence (createFence(vk, vkDevice, &fenceParams)); 89634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 89768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence)); 89834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.waitForFences(vkDevice, 1u, &fence.get(), DE_TRUE, ~0ull)); 89934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 90034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 9014ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos // Read results, render reference, compare 90234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 9034ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const tcu::TextureFormat tcuFormat = vk::mapVkFormat(colorFormat); 9044ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const VkMappedMemoryRange range = 90534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos { 90668e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, // sType 90768e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos DE_NULL, // pNext 90868e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos readImageBufferMemory->getMemory(), // memory 90968e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos 0, // offset 91068e7282426d639b54d15c4710d97ba97e72c76efPyry Haulos imageSizeBytes, // size 91134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos }; 9124ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const tcu::ConstPixelBufferAccess resultAccess (tcuFormat, renderSize.x(), renderSize.y(), 1, readImageBufferMemory->getHostPtr()); 91334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 91434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos VK_CHECK(vk.invalidateMappedMemoryRanges(vkDevice, 1u, &range)); 9154ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 9164ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos { 9174ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos tcu::TextureLevel refImage (tcuFormat, renderSize.x(), renderSize.y()); 9184ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const tcu::UVec4 threshold (0u); 9194ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos const tcu::IVec3 posDeviation (1,1,0); 9204ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 9214ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos tcu::clear(refImage.getAccess(), clearColor); 9224ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos renderReferenceTriangle(refImage.getAccess(), vertices); 9234ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos 9244ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos if (tcu::intThresholdPositionDeviationCompare(context.getTestContext().getLog(), 9254ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos "ComparisonResult", 9264ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos "Image comparison result", 9274ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos refImage.getAccess(), 9284ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos resultAccess, 9294ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos threshold, 9304ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos posDeviation, 9314ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos false, 9324ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos tcu::COMPARE_LOG_RESULT)) 9334ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos return tcu::TestStatus::pass("Rendering succeeded"); 9344ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos else 9354ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos return tcu::TestStatus::fail("Image comparison failed"); 9364ec2e131d2a984fe8a2f0e8f58c4f77faec35106Pyry Haulos } 93734823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos } 93834823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 93934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos return tcu::TestStatus::pass("Rendering succeeded"); 94034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 94134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 94241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvitcu::TestStatus renderTriangleUnusedResolveAttachmentTest (Context& context) 94341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi{ 94441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkDevice vkDevice = context.getDevice(); 94541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const DeviceInterface& vk = context.getDeviceInterface(); 94641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkQueue queue = context.getUniversalQueue(); 94741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const deUint32 queueFamilyIndex = context.getUniversalQueueFamilyIndex(); 94841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi SimpleAllocator memAlloc (vk, vkDevice, getPhysicalDeviceMemoryProperties(context.getInstanceInterface(), context.getPhysicalDevice())); 94941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::IVec2 renderSize (256, 256); 95041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkFormat colorFormat = VK_FORMAT_R8G8B8A8_UNORM; 95141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::Vec4 clearColor (0.125f, 0.25f, 0.75f, 1.0f); 95241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 95341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::Vec4 vertices[] = 95441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 95541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::Vec4(-0.5f, -0.5f, 0.0f, 1.0f), 95641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::Vec4(+0.5f, -0.5f, 0.0f, 1.0f), 95741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::Vec4( 0.0f, +0.5f, 0.0f, 1.0f) 95841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 95941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 96041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkBufferCreateInfo vertexBufferParams = 96141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 96241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // sType 96341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 96441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 96541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VkDeviceSize)sizeof(vertices), // size 96641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BUFFER_USAGE_VERTEX_BUFFER_BIT, // usage 96741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SHARING_MODE_EXCLUSIVE, // sharingMode 96841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // queueFamilyIndexCount 96941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &queueFamilyIndex, // pQueueFamilyIndices 97041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 97141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkBuffer> vertexBuffer (createBuffer(vk, vkDevice, &vertexBufferParams)); 97241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const UniquePtr<Allocation> vertexBufferMemory (memAlloc.allocate(getBufferMemoryRequirements(vk, vkDevice, *vertexBuffer), MemoryRequirement::HostVisible)); 97341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 97441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.bindBufferMemory(vkDevice, *vertexBuffer, vertexBufferMemory->getMemory(), vertexBufferMemory->getOffset())); 97541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 97641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkDeviceSize imageSizeBytes = (VkDeviceSize)(sizeof(deUint32)*renderSize.x()*renderSize.y()); 97741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkBufferCreateInfo readImageBufferParams = 97841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 97941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO, // sType 98041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 98141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VkBufferCreateFlags)0u, // flags 98241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi imageSizeBytes, // size 98341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BUFFER_USAGE_TRANSFER_DST_BIT, // usage 98441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SHARING_MODE_EXCLUSIVE, // sharingMode 98541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // queueFamilyIndexCount 98641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &queueFamilyIndex, // pQueueFamilyIndices 98741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 98841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkBuffer> readImageBuffer (createBuffer(vk, vkDevice, &readImageBufferParams)); 98941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const UniquePtr<Allocation> readImageBufferMemory (memAlloc.allocate(getBufferMemoryRequirements(vk, vkDevice, *readImageBuffer), MemoryRequirement::HostVisible)); 99041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 99141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.bindBufferMemory(vkDevice, *readImageBuffer, readImageBufferMemory->getMemory(), readImageBufferMemory->getOffset())); 99241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 99341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkImageCreateInfo imageParams = 99441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 99541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO, // sType 99641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 99741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 99841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_TYPE_2D, // imageType 99941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FORMAT_R8G8B8A8_UNORM, // format 100041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { (deUint32)renderSize.x(), (deUint32)renderSize.y(), 1 }, // extent 100141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // mipLevels 100241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // arraySize 100341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SAMPLE_COUNT_1_BIT, // samples 100441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_TILING_OPTIMAL, // tiling 100541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT|VK_IMAGE_USAGE_TRANSFER_SRC_BIT, // usage 100641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SHARING_MODE_EXCLUSIVE, // sharingMode 100741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // queueFamilyIndexCount 100841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &queueFamilyIndex, // pQueueFamilyIndices 100941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_UNDEFINED, // initialLayout 101041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 101141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 101241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkImage> image (createImage(vk, vkDevice, &imageParams)); 101341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const UniquePtr<Allocation> imageMemory (memAlloc.allocate(getImageMemoryRequirements(vk, vkDevice, *image), MemoryRequirement::Any)); 101441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 101541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.bindImageMemory(vkDevice, *image, imageMemory->getMemory(), imageMemory->getOffset())); 101641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 101741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkAttachmentDescription colorAttDesc = 101841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 101941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 102041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FORMAT_R8G8B8A8_UNORM, // format 102141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SAMPLE_COUNT_1_BIT, // samples 102241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ATTACHMENT_LOAD_OP_CLEAR, // loadOp 102341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ATTACHMENT_STORE_OP_STORE, // storeOp 102441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ATTACHMENT_LOAD_OP_DONT_CARE, // stencilLoadOp 102541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ATTACHMENT_STORE_OP_DONT_CARE, // stencilStoreOp 102641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // initialLayout 102741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // finalLayout 102841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 102941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkAttachmentReference colorAttRef = 103041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 103141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // attachment 103241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // layout 103341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 103441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkAttachmentReference resolveAttRef = 103541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 103641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ATTACHMENT_UNUSED, 103741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_GENERAL 103841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 103941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkSubpassDescription subpassDesc = 104041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 104141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VkSubpassDescriptionFlags)0u, // flags 104241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_PIPELINE_BIND_POINT_GRAPHICS, // pipelineBindPoint 104341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // inputAttachmentCount 104441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pInputAttachments 104541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // colorAttachmentCount 104641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &colorAttRef, // pColorAttachments 104741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &resolveAttRef, // pResolveAttachments 104841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // depthStencilAttachment 104941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // preserveAttachmentCount 105041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pPreserveAttachments 105141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 105241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkRenderPassCreateInfo renderPassParams = 105341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 105441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO, // sType 105541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 105641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 105741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // attachmentCount 105841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &colorAttDesc, // pAttachments 105941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // subpassCount 106041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &subpassDesc, // pSubpasses 106141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // dependencyCount 106241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pDependencies 106341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 106441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkRenderPass> renderPass (createRenderPass(vk, vkDevice, &renderPassParams)); 106541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 106641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkImageViewCreateInfo colorAttViewParams = 106741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 106841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO, // sType 106941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 107041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 107141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *image, // image 107241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_VIEW_TYPE_2D, // viewType 107341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FORMAT_R8G8B8A8_UNORM, // format 107441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 107541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPONENT_SWIZZLE_R, 107641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPONENT_SWIZZLE_G, 107741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPONENT_SWIZZLE_B, 107841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPONENT_SWIZZLE_A 107941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // components 108041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 108141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 108241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseMipLevel 108341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // levelCount 108441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseArrayLayer 108541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // layerCount 108641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // subresourceRange 108741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 108841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkImageView> colorAttView (createImageView(vk, vkDevice, &colorAttViewParams)); 108941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 109041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Pipeline layout 109141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineLayoutCreateInfo pipelineLayoutParams = 109241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 109341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO, // sType 109441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 109541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (vk::VkPipelineLayoutCreateFlags)0, 109641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // setLayoutCount 109741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pSetLayouts 109841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // pushConstantRangeCount 109941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pPushConstantRanges 110041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 110141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkPipelineLayout> pipelineLayout (createPipelineLayout(vk, vkDevice, &pipelineLayoutParams)); 110241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 110341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Shaders 110441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkShaderModule> vertShaderModule (createShaderModule(vk, vkDevice, context.getBinaryCollection().get("vert"), 0)); 110541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkShaderModule> fragShaderModule (createShaderModule(vk, vkDevice, context.getBinaryCollection().get("frag"), 0)); 110641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 110741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Pipeline 110841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkSpecializationInfo emptyShaderSpecParams = 110941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 111041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // mapEntryCount 111141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pMap 111241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0, // dataSize 111341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pData 111441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 111541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineShaderStageCreateInfo shaderStageParams[] = 111641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 111741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 111841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // sType 111941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 112041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 112141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SHADER_STAGE_VERTEX_BIT, // stage 112241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *vertShaderModule, // module 112341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi "main", // pName 112441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &emptyShaderSpecParams, // pSpecializationInfo 112541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, 112641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 112741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO, // sType 112841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 112941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 113041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SHADER_STAGE_FRAGMENT_BIT, // stage 113141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *fragShaderModule, // module 113241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi "main", // pName 113341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &emptyShaderSpecParams, // pSpecializationInfo 113441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 113541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 113641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineDepthStencilStateCreateInfo depthStencilParams = 113741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 113841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO, // sType 113941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 114041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 114141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // depthTestEnable 114241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // depthWriteEnable 114341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPARE_OP_ALWAYS, // depthCompareOp 114441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // depthBoundsTestEnable 114541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // stencilTestEnable 114641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 114741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // failOp 114841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // passOp 114941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // depthFailOp 115041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPARE_OP_ALWAYS, // compareOp 115141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // compareMask 115241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // writeMask 115341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // reference 115441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // front 115541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 115641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // failOp 115741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // passOp 115841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STENCIL_OP_KEEP, // depthFailOp 115941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMPARE_OP_ALWAYS, // compareOp 116041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // compareMask 116141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // writeMask 116241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // reference 116341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // back; 116441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi -1.0f, // float minDepthBounds; 116541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi +1.0f, // float maxDepthBounds; 116641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 116741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkViewport viewport0 = 116841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 116941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // x 117041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // y 117141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (float)renderSize.x(), // width 117241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (float)renderSize.y(), // height 117341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // minDepth 117441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1.0f, // maxDepth 117541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 117641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkRect2D scissor0 = 117741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 117841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 117941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // x 118041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // y 118141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // offset 118241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 118341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.x(), // width 118441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.y(), // height 118541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // extent; 118641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 118741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineViewportStateCreateInfo viewportParams = 118841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 118941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO, // sType 119041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 119141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 119241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // viewportCount 119341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &viewport0, // pViewports 119441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // scissorCount 119541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &scissor0 // pScissors 119641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 119741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkSampleMask sampleMask = ~0u; 119841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineMultisampleStateCreateInfo multisampleParams = 119941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 120041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO, // sType 120141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 120241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 120341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_SAMPLE_COUNT_1_BIT, // rasterizationSamples 120441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // sampleShadingEnable 120541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // minSampleShading 120641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &sampleMask, // sampleMask 120741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // alphaToCoverageEnable 120841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // alphaToOneEnable 120941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 121041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineRasterizationStateCreateInfo rasterParams = 121141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 121241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO, // sType 121341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 121441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 121541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_TRUE, // depthClampEnable 121641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // rasterizerDiscardEnable 121741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_POLYGON_MODE_FILL, // polygonMode 121841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CULL_MODE_NONE, // cullMode 121941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FRONT_FACE_COUNTER_CLOCKWISE, // frontFace 122041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // depthBiasEnable 122141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // depthBiasConstantFactor 122241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // depthBiasClamp 122341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0.0f, // depthBiasSlopeFactor 122441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1.0f, // lineWidth 122541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 122641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineInputAssemblyStateCreateInfo inputAssemblyParams = 122741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 122841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO, // sType 122941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 123041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 123141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_PRIMITIVE_TOPOLOGY_TRIANGLE_LIST, // topology 123241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // primitiveRestartEnable 123341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 123441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkVertexInputBindingDescription vertexBinding0 = 123541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 123641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // binding 123741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)sizeof(tcu::Vec4), // stride 123841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_VERTEX_INPUT_RATE_VERTEX, // inputRate 123941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 124041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkVertexInputAttributeDescription vertexAttrib0 = 124141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 124241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // location 124341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // binding 124441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FORMAT_R32G32B32A32_SFLOAT, // format 124541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // offset 124641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 124741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineVertexInputStateCreateInfo vertexInputStateParams = 124841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 124941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO, // sType 125041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 125141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 125241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // vertexBindingDescriptionCount 125341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &vertexBinding0, // pVertexBindingDescriptions 125441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // vertexAttributeDescriptionCount 125541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &vertexAttrib0, // pVertexAttributeDescriptions 125641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 125741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineColorBlendAttachmentState attBlendParams = 125841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 125941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_FALSE, // blendEnable 126041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_FACTOR_ONE, // srcColorBlendFactor 126141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_FACTOR_ZERO, // dstColorBlendFactor 126241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_OP_ADD, // colorBlendOp 126341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_FACTOR_ONE, // srcAlphaBlendFactor 126441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_FACTOR_ZERO, // dstAlphaBlendFactor 126541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_BLEND_OP_ADD, // alphaBlendOp 126641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VK_COLOR_COMPONENT_R_BIT| 126741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COLOR_COMPONENT_G_BIT| 126841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COLOR_COMPONENT_B_BIT| 126941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COLOR_COMPONENT_A_BIT), // colorWriteMask 127041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 127141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkPipelineColorBlendStateCreateInfo blendParams = 127241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 127341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO, // sType 127441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 127541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 127641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_FALSE, // logicOpEnable 127741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_LOGIC_OP_COPY, // logicOp 127841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // attachmentCount 127941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &attBlendParams, // pAttachments 128041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 0.0f, 0.0f, 0.0f, 0.0f }, // blendConstants[4] 128141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 128241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkGraphicsPipelineCreateInfo pipelineParams = 128341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 128441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO, // sType 128541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 128641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 128741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)DE_LENGTH_OF_ARRAY(shaderStageParams), // stageCount 128841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi shaderStageParams, // pStages 128941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &vertexInputStateParams, // pVertexInputState 129041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &inputAssemblyParams, // pInputAssemblyState 129141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pTessellationState 129241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &viewportParams, // pViewportState 129341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &rasterParams, // pRasterizationState 129441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &multisampleParams, // pMultisampleState 129541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &depthStencilParams, // pDepthStencilState 129641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &blendParams, // pColorBlendState 129741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (const VkPipelineDynamicStateCreateInfo*)DE_NULL, // pDynamicState 129841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *pipelineLayout, // layout 129941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *renderPass, // renderPass 130041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // subpass 130141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // basePipelineHandle 130241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // basePipelineIndex 130341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 130441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 130541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkPipeline> pipeline (createGraphicsPipeline(vk, vkDevice, DE_NULL, &pipelineParams)); 130641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 130741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Framebuffer 130841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkFramebufferCreateInfo framebufferParams = 130941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 131041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO, // sType 131141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 131241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 131341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *renderPass, // renderPass 131441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // attachmentCount 131541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &*colorAttView, // pAttachments 131641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.x(), // width 131741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.y(), // height 131841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // layers 131941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 132041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkFramebuffer> framebuffer (createFramebuffer(vk, vkDevice, &framebufferParams)); 132141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 132241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkCommandPoolCreateInfo cmdPoolParams = 132341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 132441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO, // sType 132541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 132641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMMAND_POOL_CREATE_RESET_COMMAND_BUFFER_BIT, // flags 132741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // queueFamilyIndex 132841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 132941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkCommandPool> cmdPool (createCommandPool(vk, vkDevice, &cmdPoolParams)); 133041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 133141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Command buffer 133241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkCommandBufferAllocateInfo cmdBufParams = 133341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 133441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO, // sType 133541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 133641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *cmdPool, // pool 133741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_COMMAND_BUFFER_LEVEL_PRIMARY, // level 133841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // bufferCount 133941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 134041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkCommandBuffer> cmdBuf (allocateCommandBuffer(vk, vkDevice, &cmdBufParams)); 134141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 134241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkCommandBufferBeginInfo cmdBufBeginParams = 134341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 134441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO, // sType 134541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 134641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 134741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (const VkCommandBufferInheritanceInfo*)DE_NULL, 134841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 134941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 135041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Record commands 135141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.beginCommandBuffer(*cmdBuf, &cmdBufBeginParams)); 135241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 135341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 135441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkMemoryBarrier vertFlushBarrier = 135541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 135641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_MEMORY_BARRIER, // sType 135741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 135841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_HOST_WRITE_BIT, // srcAccessMask 135941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_VERTEX_ATTRIBUTE_READ_BIT, // dstAccessMask 136041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 136141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkImageMemoryBarrier colorAttBarrier = 136241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 136341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType 136441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 136541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // srcAccessMask 136641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VK_ACCESS_COLOR_ATTACHMENT_READ_BIT| 136741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT), // dstAccessMask 136841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_UNDEFINED, // oldLayout 136941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // newLayout 137041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // srcQueueFamilyIndex 137141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // dstQueueFamilyIndex 137241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *image, // image 137341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 137441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 137541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseMipLevel 137641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // levelCount 137741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseArrayLayer 137841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // layerCount 137941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } // subresourceRange 138041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 138141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_HOST_BIT, VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, (VkDependencyFlags)0, 1, &vertFlushBarrier, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &colorAttBarrier); 138241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 138341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 138441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 138541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkClearValue clearValue = makeClearValueColorF32(clearColor[0], 138641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi clearColor[1], 138741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi clearColor[2], 138841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi clearColor[3]); 138941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkRenderPassBeginInfo passBeginParams = 139041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 139141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO, // sType 139241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 139341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *renderPass, // renderPass 139441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *framebuffer, // framebuffer 139541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 139641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 0, 0 }, 139741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { (deUint32)renderSize.x(), (deUint32)renderSize.y() } 139841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // renderArea 139941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // clearValueCount 140041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &clearValue, // pClearValues 140141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 140241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdBeginRenderPass(*cmdBuf, &passBeginParams, VK_SUBPASS_CONTENTS_INLINE); 140341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 140441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 140541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdBindPipeline(*cmdBuf, VK_PIPELINE_BIND_POINT_GRAPHICS, *pipeline); 140641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 140741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkDeviceSize bindingOffset = 0; 140841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdBindVertexBuffers(*cmdBuf, 0u, 1u, &vertexBuffer.get(), &bindingOffset); 140941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 141041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdDraw(*cmdBuf, 3u, 1u, 0u, 0u); 141141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdEndRenderPass(*cmdBuf); 141241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 141341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 141441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkImageMemoryBarrier renderFinishBarrier = 141541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 141641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER, // sType 141741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 141841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT, // outputMask 141941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_TRANSFER_READ_BIT, // inputMask 142041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL, // oldLayout 142141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, // newLayout 142241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // srcQueueFamilyIndex 142341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // dstQueueFamilyIndex 142441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *image, // image 142541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 142641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 142741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseMipLevel 142841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // mipLevels 142941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseArraySlice 143041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // arraySize 143141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } // subresourceRange 143241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 143341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 0, (const VkBufferMemoryBarrier*)DE_NULL, 1, &renderFinishBarrier); 143441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 143541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 143641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 143741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkBufferImageCopy copyParams = 143841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 143941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VkDeviceSize)0u, // bufferOffset 144041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.x(), // bufferRowLength 144141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.y(), // bufferImageHeight 144241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 144341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_IMAGE_ASPECT_COLOR_BIT, // aspectMask 144441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // mipLevel 144541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // baseArrayLayer 144641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // layerCount 144741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }, // imageSubresource 144841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 0u, 0u, 0u }, // imageOffset 144941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 145041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.x(), 145141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (deUint32)renderSize.y(), 145241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u 145341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } // imageExtent 145441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 145541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdCopyImageToBuffer(*cmdBuf, *image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL, *readImageBuffer, 1u, ©Params); 145641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 145741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 145841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 145941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkBufferMemoryBarrier copyFinishBarrier = 146041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 146141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER, // sType 146241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 146341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_TRANSFER_WRITE_BIT, // srcAccessMask 146441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_ACCESS_HOST_READ_BIT, // dstAccessMask 146541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // srcQueueFamilyIndex 146641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi queueFamilyIndex, // dstQueueFamilyIndex 146741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi *readImageBuffer, // buffer 146841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // offset 146941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi imageSizeBytes // size 147041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 147141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vk.cmdPipelineBarrier(*cmdBuf, VK_PIPELINE_STAGE_TRANSFER_BIT, VK_PIPELINE_STAGE_HOST_BIT, (VkDependencyFlags)0, 0, (const VkMemoryBarrier*)DE_NULL, 1, ©FinishBarrier, 0, (const VkImageMemoryBarrier*)DE_NULL); 147241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 147341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 147441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.endCommandBuffer(*cmdBuf)); 147541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 147641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Upload vertex data 147741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 147841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkMappedMemoryRange range = 147941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 148041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, // sType 148141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 148241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi vertexBufferMemory->getMemory(), // memory 148341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0, // offset 148441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (VkDeviceSize)sizeof(vertices), // size 148541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 148641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi void* vertexBufPtr = vertexBufferMemory->getHostPtr(); 148741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 148841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi deMemcpy(vertexBufPtr, &vertices[0], sizeof(vertices)); 148941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.flushMappedMemoryRanges(vkDevice, 1u, &range)); 149041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 149141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 149241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Submit & wait for completion 149341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 149441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkFenceCreateInfo fenceParams = 149541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 149641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_FENCE_CREATE_INFO, // sType 149741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 149841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // flags 149941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 150041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkSubmitInfo submitInfo = 150141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 150241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_SUBMIT_INFO, // sType 150341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 150441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // waitSemaphoreCount 150541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pWaitSemaphores 150641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi (const VkPipelineStageFlags*)DE_NULL, 150741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 1u, // commandBufferCount 150841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi &cmdBuf.get(), // pCommandBuffers 150941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0u, // signalSemaphoreCount 151041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pSignalSemaphores 151141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 151241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const Unique<VkFence> fence (createFence(vk, vkDevice, &fenceParams)); 151341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 151441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.queueSubmit(queue, 1u, &submitInfo, *fence)); 151541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.waitForFences(vkDevice, 1u, &fence.get(), DE_TRUE, ~0ull)); 151641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 151741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 151841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi // Read results, render reference, compare 151941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 152041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::TextureFormat tcuFormat = vk::mapVkFormat(colorFormat); 152141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const VkMappedMemoryRange range = 152241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 152341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE, // sType 152441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi DE_NULL, // pNext 152541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi readImageBufferMemory->getMemory(), // memory 152641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 0, // offset 152741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi imageSizeBytes, // size 152841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi }; 152941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::ConstPixelBufferAccess resultAccess (tcuFormat, renderSize.x(), renderSize.y(), 1, readImageBufferMemory->getHostPtr()); 153041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 153141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi VK_CHECK(vk.invalidateMappedMemoryRanges(vkDevice, 1u, &range)); 153241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 153341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi { 153441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::TextureLevel refImage (tcuFormat, renderSize.x(), renderSize.y()); 153541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::UVec4 threshold (0u); 153641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi const tcu::IVec3 posDeviation (1,1,0); 153741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 153841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::clear(refImage.getAccess(), clearColor); 153941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi renderReferenceTriangle(refImage.getAccess(), vertices); 154041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 154141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi if (tcu::intThresholdPositionDeviationCompare(context.getTestContext().getLog(), 154241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi "ComparisonResult", 154341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi "Image comparison result", 154441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi refImage.getAccess(), 154541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi resultAccess, 154641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi threshold, 154741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi posDeviation, 154841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi false, 154941ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi tcu::COMPARE_LOG_RESULT)) 155041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi return tcu::TestStatus::pass("Rendering succeeded"); 155141ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi else 155241ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi return tcu::TestStatus::fail("Image comparison failed"); 155341ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 155441ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi } 155541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 155641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi return tcu::TestStatus::pass("Rendering succeeded"); 155741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi} 155841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi 155934823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} // anonymous 156034823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 156134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulostcu::TestCaseGroup* createSmokeTests (tcu::TestContext& testCtx) 156234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos{ 156334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos de::MovePtr<tcu::TestCaseGroup> smokeTests (new tcu::TestCaseGroup(testCtx, "smoke", "Smoke Tests")); 156434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 156541ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi addFunctionCase (smokeTests.get(), "create_sampler", "", createSamplerTest); 156641ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi addFunctionCaseWithPrograms (smokeTests.get(), "create_shader", "", createShaderProgs, createShaderModuleTest); 156741ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi addFunctionCaseWithPrograms (smokeTests.get(), "triangle", "", createTriangleProgs, renderTriangleTest); 156841ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi addFunctionCaseWithPrograms (smokeTests.get(), "asm_triangle", "", createTriangleAsmProgs, renderTriangleTest); 15691d385a1405fae6be086a68a216b758c2a824d6a6Pyry Haulos addFunctionCaseWithPrograms (smokeTests.get(), "asm_triangle_no_opname", "", createProgsNoOpName, renderTriangleTest); 157041ff4d37f7c0bca4df89667da1f689d00a4dbccbMika Isojärvi addFunctionCaseWithPrograms (smokeTests.get(), "unused_resolve_attachment", "", createTriangleProgs, renderTriangleUnusedResolveAttachmentTest); 157134823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 157234823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos return smokeTests.release(); 157334823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} 157434823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos 157534823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} // api 157634823916fd57e1694b2af8ed159811ca9bd40958Pyry Haulos} // vkt 1577