1 #ifndef _VKTROBUSTNESSUTIL_HPP 2 #define _VKTROBUSTNESSUTIL_HPP 3 /*------------------------------------------------------------------------ 4 * Vulkan Conformance Tests 5 * ------------------------ 6 * 7 * Copyright (c) 2016 The Khronos Group Inc. 8 * Copyright (c) 2016 Imagination Technologies Ltd. 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 Robustness Utilities 25 *//*--------------------------------------------------------------------*/ 26 27 #include "tcuDefs.hpp" 28 #include "vkDefs.hpp" 29 #include "vkRefUtil.hpp" 30 #include "vktTestCase.hpp" 31 #include "vkMemUtil.hpp" 32 #include "deUniquePtr.hpp" 33 #include "tcuVectorUtil.hpp" 34 35 namespace vkt 36 { 37 namespace robustness 38 { 39 40 vk::Move<vk::VkDevice> createRobustBufferAccessDevice (Context& context); 41 bool areEqual (float a, float b); 42 bool isValueZero (const void* valuePtr, size_t valueSize); 43 bool isValueWithinBuffer (const void* buffer, vk::VkDeviceSize bufferSize, const void* valuePtr, size_t valueSizeInBytes); 44 bool isValueWithinBufferOrZero (const void* buffer, vk::VkDeviceSize bufferSize, const void* valuePtr, size_t valueSizeInBytes); 45 bool verifyOutOfBoundsVec4 (const void* vecPtr, vk::VkFormat bufferFormat); 46 void populateBufferWithTestValues (void* buffer, vk::VkDeviceSize size, vk::VkFormat format); 47 void logValue (std::ostringstream& logMsg, const void* valuePtr, vk::VkFormat valueFormat, size_t valueSize); 48 49 class TestEnvironment 50 { 51 public: 52 TestEnvironment (Context& context, 53 vk::VkDevice device, 54 vk::VkDescriptorSetLayout descriptorSetLayout, 55 vk::VkDescriptorSet descriptorSet); 56 ~TestEnvironment(void)57 virtual ~TestEnvironment (void) {} 58 59 virtual vk::VkCommandBuffer getCommandBuffer (void); 60 61 protected: 62 Context& m_context; 63 vk::VkDevice m_device; 64 vk::VkDescriptorSetLayout m_descriptorSetLayout; 65 vk::VkDescriptorSet m_descriptorSet; 66 67 vk::Move<vk::VkCommandPool> m_commandPool; 68 vk::Move<vk::VkCommandBuffer> m_commandBuffer; 69 }; 70 71 class GraphicsEnvironment: public TestEnvironment 72 { 73 public: 74 typedef std::vector<vk::VkVertexInputBindingDescription> VertexBindings; 75 typedef std::vector<vk::VkVertexInputAttributeDescription> VertexAttributes; 76 77 struct DrawConfig 78 { 79 std::vector<vk::VkBuffer> vertexBuffers; 80 deUint32 vertexCount; 81 deUint32 instanceCount; 82 83 vk::VkBuffer indexBuffer; 84 deUint32 indexCount; 85 }; 86 87 GraphicsEnvironment (Context& context, 88 vk::VkDevice device, 89 vk::VkDescriptorSetLayout descriptorSetLayout, 90 vk::VkDescriptorSet descriptorSet, 91 const VertexBindings& vertexBindings, 92 const VertexAttributes& vertexAttributes, 93 const DrawConfig& drawConfig); 94 ~GraphicsEnvironment(void)95 virtual ~GraphicsEnvironment (void) {} 96 97 private: 98 const tcu::UVec2 m_renderSize; 99 const vk::VkFormat m_colorFormat; 100 101 vk::Move<vk::VkImage> m_colorImage; 102 de::MovePtr<vk::Allocation> m_colorImageAlloc; 103 vk::Move<vk::VkImageView> m_colorAttachmentView; 104 vk::Move<vk::VkRenderPass> m_renderPass; 105 vk::Move<vk::VkFramebuffer> m_framebuffer; 106 107 vk::Move<vk::VkShaderModule> m_vertexShaderModule; 108 vk::Move<vk::VkShaderModule> m_fragmentShaderModule; 109 110 vk::Move<vk::VkBuffer> m_vertexBuffer; 111 de::MovePtr<vk::Allocation> m_vertexBufferAlloc; 112 113 vk::Move<vk::VkPipelineLayout> m_pipelineLayout; 114 vk::Move<vk::VkPipeline> m_graphicsPipeline; 115 }; 116 117 class ComputeEnvironment: public TestEnvironment 118 { 119 public: 120 ComputeEnvironment (Context& context, 121 vk::VkDevice device, 122 vk::VkDescriptorSetLayout descriptorSetLayout, 123 vk::VkDescriptorSet descriptorSet); 124 ~ComputeEnvironment(void)125 virtual ~ComputeEnvironment (void) {} 126 127 private: 128 vk::Move<vk::VkShaderModule> m_computeShaderModule; 129 vk::Move<vk::VkPipelineLayout> m_pipelineLayout; 130 vk::Move<vk::VkPipeline> m_computePipeline; 131 }; 132 133 } // robustness 134 } // vkt 135 136 #endif // _VKTROBUSTNESSUTIL_HPP 137