1 #ifndef _VKTROBUSTNESSUTIL_HPP
2 #define _VKTROBUSTNESSUTIL_HPP
3 /*------------------------------------------------------------------------
4 * Vulkan Conformance Tests
5 * ------------------------
7 * Copyright (c) 2016 The Khronos Group Inc.
8 * Copyright (c) 2016 Imagination Technologies Ltd.
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
14 * http://www.apache.org/licenses/LICENSE-2.0
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.
24 * \brief Robustness Utilities
25 *//*--------------------------------------------------------------------*/
27 #include "tcuDefs.hpp"
29 #include "vkRefUtil.hpp"
30 #include "vktTestCase.hpp"
31 #include "vkMemUtil.hpp"
32 #include "deUniquePtr.hpp"
33 #include "tcuVectorUtil.hpp"
34 #include "vktCustomInstancesDevices.hpp"
41 vk::Move<vk::VkDevice> createRobustBufferAccessDevice (Context& context, vk::VkInstance instance, const vk::InstanceInterface& vki, const vk::VkPhysicalDeviceFeatures2* enabledFeatures2 = DE_NULL);
42 bool areEqual (float a, float b);
43 bool isValueZero (const void* valuePtr, size_t valueSize);
44 bool isValueWithinBuffer (const void* buffer, vk::VkDeviceSize bufferSize, const void* valuePtr, size_t valueSizeInBytes);
45 bool isValueWithinBufferOrZero (const void* buffer, vk::VkDeviceSize bufferSize, const void* valuePtr, size_t valueSizeInBytes);
46 bool verifyOutOfBoundsVec4 (const void* vecPtr, vk::VkFormat bufferFormat);
47 void populateBufferWithTestValues (void* buffer, vk::VkDeviceSize size, vk::VkFormat format);
48 void logValue (std::ostringstream& logMsg, const void* valuePtr, vk::VkFormat valueFormat, size_t valueSize);
53 TestEnvironment (Context& context,
54 vk::VkInstance instance,
55 const vk::InstanceInterface& instanceInterface,
57 vk::VkDescriptorSetLayout descriptorSetLayout,
58 vk::VkDescriptorSet descriptorSet);
60 virtual ~TestEnvironment (void) {}
62 virtual vk::VkCommandBuffer getCommandBuffer (void);
66 vk::VkInstance m_instance;
67 const vk::InstanceInterface& m_instanceInterface;
68 vk::VkDevice m_device;
69 vk::VkDescriptorSetLayout m_descriptorSetLayout;
70 vk::VkDescriptorSet m_descriptorSet;
72 vk::Move<vk::VkCommandPool> m_commandPool;
73 vk::Move<vk::VkCommandBuffer> m_commandBuffer;
76 class GraphicsEnvironment: public TestEnvironment
79 typedef std::vector<vk::VkVertexInputBindingDescription> VertexBindings;
80 typedef std::vector<vk::VkVertexInputAttributeDescription> VertexAttributes;
84 std::vector<vk::VkBuffer> vertexBuffers;
86 deUint32 instanceCount;
88 vk::VkBuffer indexBuffer;
92 GraphicsEnvironment (Context& context,
93 vk::VkInstance instance,
94 const vk::InstanceInterface& instanceInterface,
96 vk::VkDescriptorSetLayout descriptorSetLayout,
97 vk::VkDescriptorSet descriptorSet,
98 const VertexBindings& vertexBindings,
99 const VertexAttributes& vertexAttributes,
100 const DrawConfig& drawConfig,
101 bool testPipelineRobustness = false);
103 virtual ~GraphicsEnvironment (void) {}
106 const tcu::UVec2 m_renderSize;
107 const vk::VkFormat m_colorFormat;
109 vk::Move<vk::VkImage> m_colorImage;
110 de::MovePtr<vk::Allocation> m_colorImageAlloc;
111 vk::Move<vk::VkImageView> m_colorAttachmentView;
112 vk::Move<vk::VkRenderPass> m_renderPass;
113 vk::Move<vk::VkFramebuffer> m_framebuffer;
115 vk::Move<vk::VkShaderModule> m_vertexShaderModule;
116 vk::Move<vk::VkShaderModule> m_fragmentShaderModule;
118 vk::Move<vk::VkBuffer> m_vertexBuffer;
119 de::MovePtr<vk::Allocation> m_vertexBufferAlloc;
121 vk::Move<vk::VkPipelineLayout> m_pipelineLayout;
122 vk::Move<vk::VkPipeline> m_graphicsPipeline;
125 class ComputeEnvironment: public TestEnvironment
128 ComputeEnvironment (Context& context,
129 vk::VkInstance instance,
130 const vk::InstanceInterface& instanceInterface,
132 vk::VkDescriptorSetLayout descriptorSetLayout,
133 vk::VkDescriptorSet descriptorSet,
134 bool testPipelineRobustness = false);
136 virtual ~ComputeEnvironment (void) {}
139 vk::Move<vk::VkShaderModule> m_computeShaderModule;
140 vk::Move<vk::VkPipelineLayout> m_pipelineLayout;
141 vk::Move<vk::VkPipeline> m_computePipeline;
147 #endif // _VKTROBUSTNESSUTIL_HPP