1 #ifndef _VKTCONDITIONALRENDERINGTESTUTIL_HPP 2 #define _VKTCONDITIONALRENDERINGTESTUTIL_HPP 3 /*------------------------------------------------------------------------ 4 * Vulkan Conformance Tests 5 * ------------------------ 6 * 7 * Copyright (c) 2018 The Khronos Group Inc. 8 * Copyright (c) 2018 Danylo Piliaiev <[email protected]> 9 * 10 * Licensed under the Apache License, Version 2.0 (the "License"); 11 * you may not use this file except in compliance with the License. 12 * You may obtain a copy of the License at 13 * 14 * http://www.apache.org/licenses/LICENSE-2.0 15 * 16 * Unless required by applicable law or agreed to in writing, software 17 * distributed under the License is distributed on an "AS IS" BASIS, 18 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 19 * See the License for the specific language governing permissions and 20 * limitations under the License. 21 * 22 *//*! 23 * \file 24 * \brief Conditional Rendering Test Utils 25 *//*--------------------------------------------------------------------*/ 26 27 #include "vkDefs.hpp" 28 #include "vkObjUtil.hpp" 29 #include "vktDrawBufferObjectUtil.hpp" 30 #include "vktTestCase.hpp" 31 #include "deSharedPtr.hpp" 32 33 namespace vkt 34 { 35 namespace conditional 36 { 37 38 enum ConditionalBufferMemory 39 { 40 LOCAL, 41 HOST 42 }; 43 44 struct ConditionalData 45 { 46 bool conditionInPrimaryCommandBuffer; 47 bool conditionInSecondaryCommandBuffer; 48 bool conditionInverted; 49 bool conditionInherited; 50 uint32_t conditionValue; 51 bool padConditionValue; 52 bool allocationOffset; // Apply an offset to the condition variable buffer allocation. 53 bool clearInRenderPass; // Clear the color attachment as part of beginning the render pass instead of outside. 54 bool secondaryCommandBufferNested; 55 56 bool expectCommandExecution; 57 58 ConditionalBufferMemory memoryType; 59 }; 60 61 static const ConditionalData s_testsData[] = { 62 // CONDPRI CONDSEC INV INH V PAD ALLOCOFFSET RP_CLEAR NEST RES MEM 63 {true, false, false, false, 1, false, false, false, false, true, HOST}, 64 {true, false, false, false, 0, false, false, false, false, false, HOST}, 65 {true, false, true, false, 0, false, false, false, false, true, HOST}, 66 {true, false, true, false, 1, false, false, false, false, false, HOST}, 67 {true, false, false, true, 1, false, false, false, false, true, HOST}, 68 {true, false, false, true, 0, false, false, false, false, false, HOST}, 69 {true, false, true, true, 0, false, false, false, false, true, HOST}, 70 {true, false, true, true, 1, false, false, false, false, false, HOST}, 71 72 {true, false, false, false, 1, false, false, false, false, true, LOCAL}, 73 {true, false, false, false, 0, false, false, false, false, false, LOCAL}, 74 {true, false, true, false, 0, false, false, false, false, true, LOCAL}, 75 {true, false, true, false, 1, false, false, false, false, false, LOCAL}, 76 {true, false, false, true, 1, false, false, false, false, true, LOCAL}, 77 {true, false, false, true, 0, false, false, false, false, false, LOCAL}, 78 {true, false, true, true, 0, false, false, false, false, true, LOCAL}, 79 {true, false, true, true, 1, false, false, false, false, false, LOCAL}, 80 81 {false, true, false, false, 1, false, false, false, false, true, HOST}, 82 {false, true, false, false, 0, false, false, false, false, false, HOST}, 83 {false, true, true, false, 0, false, false, false, false, true, HOST}, 84 {false, true, true, false, 1, false, false, false, false, false, HOST}, 85 86 {false, true, false, false, 1, false, false, false, false, true, LOCAL}, 87 {false, true, false, false, 0, false, false, false, false, false, LOCAL}, 88 {false, true, true, false, 0, false, false, false, false, true, LOCAL}, 89 {false, true, true, false, 1, false, false, false, false, false, LOCAL}, 90 91 // Test that inheritance does not affect outcome of secondary command buffer with conditional rendering or not. 92 {false, false, false, true, 0, false, false, false, false, true, HOST}, 93 {false, false, false, true, 0, false, false, false, false, true, LOCAL}, 94 95 {false, true, false, true, 1, false, false, false, false, true, HOST}, 96 {false, true, false, true, 0, false, false, false, false, false, HOST}, 97 {false, true, true, true, 1, false, false, false, false, false, HOST}, 98 {false, true, true, true, 0, false, false, false, false, true, HOST}, 99 100 {false, true, false, true, 1, false, false, false, false, true, LOCAL}, 101 {false, true, false, true, 0, false, false, false, false, false, LOCAL}, 102 {false, true, true, true, 1, false, false, false, false, false, LOCAL}, 103 {false, true, true, true, 0, false, false, false, false, true, LOCAL}, 104 105 // Test clearing the attachment when beginning the render pass. 106 {true, false, false, false, 1, false, false, true, true, true, HOST}, 107 {true, false, false, false, 0, false, false, true, true, false, HOST}, 108 {true, false, true, false, 0, false, false, true, true, true, HOST}, 109 {true, false, true, false, 1, false, false, true, true, false, HOST}, 110 111 // Test secondary buffers with nesting 112 {true, false, false, true, 1, false, false, false, true, true, HOST}, 113 {true, false, false, true, 0, false, false, false, true, false, HOST}, 114 {true, false, true, true, 0, false, false, false, true, true, HOST}, 115 {true, false, true, true, 1, false, false, false, true, false, HOST}, 116 117 {true, false, false, true, 1, false, false, false, true, true, LOCAL}, 118 {true, false, false, true, 0, false, false, false, true, false, LOCAL}, 119 {true, false, true, true, 0, false, false, false, true, true, LOCAL}, 120 {true, false, true, true, 1, false, false, false, true, false, LOCAL}, 121 122 {false, true, false, false, 1, false, false, false, true, true, HOST}, 123 {false, true, false, false, 0, false, false, false, true, false, HOST}, 124 {false, true, true, false, 0, false, false, false, true, true, HOST}, 125 {false, true, true, false, 1, false, false, false, true, false, HOST}, 126 127 {false, true, false, false, 1, false, false, false, true, true, LOCAL}, 128 {false, true, false, false, 0, false, false, false, true, false, LOCAL}, 129 {false, true, true, false, 0, false, false, false, true, true, LOCAL}, 130 {false, true, true, false, 1, false, false, false, true, false, LOCAL}, 131 132 {false, false, false, true, 0, false, false, false, true, true, HOST}, 133 {false, false, false, true, 0, false, false, false, true, true, LOCAL}, 134 135 {false, true, false, true, 1, false, false, false, true, true, HOST}, 136 {false, true, false, true, 0, false, false, false, true, false, HOST}, 137 {false, true, true, true, 1, false, false, false, true, false, HOST}, 138 {false, true, true, true, 0, false, false, false, true, true, HOST}, 139 140 {false, true, false, true, 1, false, false, false, true, true, LOCAL}, 141 {false, true, false, true, 0, false, false, false, true, false, LOCAL}, 142 {false, true, true, true, 1, false, false, false, true, false, LOCAL}, 143 {false, true, true, true, 0, false, false, false, true, true, LOCAL}, 144 }; 145 146 std::ostream &operator<<(std::ostream &str, ConditionalData const &c); 147 148 void checkConditionalRenderingCapabilities(vkt::Context &context, const ConditionalData &data); 149 void checkNestedRenderPassCapabilities(vkt::Context &context); 150 de::SharedPtr<Draw::Buffer> createConditionalRenderingBuffer(vkt::Context &context, const ConditionalData &data); 151 void beginConditionalRendering(const vk::DeviceInterface &vk, vk::VkCommandBuffer cmdBuffer, Draw::Buffer &buffer, 152 const ConditionalData &data); 153 154 } // namespace conditional 155 } // namespace vkt 156 157 #endif // _VKTCONDITIONALRENDERINGTESTUTIL_HPP 158