1 #ifndef _VKTDRAWBASECLASS_HPP 2 #define _VKTDRAWBASECLASS_HPP 3 /*------------------------------------------------------------------------ 4 * Vulkan Conformance Tests 5 * ------------------------ 6 * 7 * Copyright (c) 2015 The Khronos Group Inc. 8 * Copyright (c) 2015 Intel Corporation 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 Command draw Tests - Base Class 25 *//*--------------------------------------------------------------------*/ 26 27 #include "vkDefs.hpp" 28 #include "vktTestCase.hpp" 29 30 #include "tcuTestLog.hpp" 31 #include "tcuResource.hpp" 32 #include "tcuImageCompare.hpp" 33 #include "tcuCommandLine.hpp" 34 35 #include "vkRefUtil.hpp" 36 #include "vkImageUtil.hpp" 37 38 #include "deSharedPtr.hpp" 39 40 #include "vkPrograms.hpp" 41 42 #include "vktDrawCreateInfoUtil.hpp" 43 #include "vktDrawImageObjectUtil.hpp" 44 #include "vktDrawBufferObjectUtil.hpp" 45 46 namespace vkt 47 { 48 namespace Draw 49 { 50 51 struct PositionColorVertex 52 { PositionColorVertexvkt::Draw::PositionColorVertex53 PositionColorVertex (tcu::Vec4 position_, tcu::Vec4 color_) 54 : position (position_) 55 , color (color_) 56 {} 57 58 tcu::Vec4 position; 59 tcu::Vec4 color; 60 }; 61 62 struct VertexElementData : public PositionColorVertex 63 { VertexElementDatavkt::Draw::VertexElementData64 VertexElementData (tcu::Vec4 position_, tcu::Vec4 color_, deUint32 refVertexIndex_) 65 : PositionColorVertex (position_, color_) 66 , refVertexIndex (refVertexIndex_) 67 { 68 } 69 70 deUint32 refVertexIndex; 71 }; 72 73 struct ReferenceImageCoordinates 74 { ReferenceImageCoordinatesvkt::Draw::ReferenceImageCoordinates75 ReferenceImageCoordinates (void) 76 : left (-0.3) 77 , right (0.3) 78 , top (0.3) 79 , bottom (-0.3) 80 { 81 } 82 83 double left; 84 double right; 85 double top; 86 double bottom; 87 }; 88 89 struct ReferenceImageInstancedCoordinates 90 { ReferenceImageInstancedCoordinatesvkt::Draw::ReferenceImageInstancedCoordinates91 ReferenceImageInstancedCoordinates (void) 92 : left (-0.3) 93 , right (0.6) 94 , top (0.3) 95 , bottom (-0.6) 96 { 97 } 98 99 double left; 100 double right; 101 double top; 102 double bottom; 103 }; 104 105 class DrawTestsBaseClass : public TestInstance 106 { 107 public: 108 DrawTestsBaseClass (Context& context, const char* vertexShaderName, const char* fragmentShaderName, vk::VkPrimitiveTopology topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP); 109 110 protected: 111 void initialize (void); 112 virtual void initPipeline (const vk::VkDevice device); 113 void beginRenderPass (const vk::VkSubpassContents content = vk::VK_SUBPASS_CONTENTS_INLINE); iterate(void)114 virtual tcu::TestStatus iterate (void) { TCU_FAIL("Implement iterate() method!"); } 115 116 enum 117 { 118 WIDTH = 256, 119 HEIGHT = 256 120 }; 121 122 vk::VkFormat m_colorAttachmentFormat; 123 124 const vk::VkPrimitiveTopology m_topology; 125 126 const vk::DeviceInterface& m_vk; 127 128 vk::Move<vk::VkPipeline> m_pipeline; 129 vk::Move<vk::VkPipelineLayout> m_pipelineLayout; 130 131 de::SharedPtr<Image> m_colorTargetImage; 132 vk::Move<vk::VkImageView> m_colorTargetView; 133 134 // vertex buffer for vertex colors & position 135 de::SharedPtr<Buffer> m_vertexBuffer; 136 137 // vertex buffer with reference data used in VS 138 de::SharedPtr<Buffer> m_vertexRefDataBuffer; 139 140 PipelineCreateInfo::VertexInputState m_vertexInputState; 141 142 vk::Move<vk::VkCommandPool> m_cmdPool; 143 vk::Move<vk::VkCommandBuffer> m_cmdBuffer; 144 145 vk::Move<vk::VkFramebuffer> m_framebuffer; 146 vk::Move<vk::VkRenderPass> m_renderPass; 147 148 const std::string m_vertexShaderName; 149 const std::string m_fragmentShaderName; 150 151 std::vector<VertexElementData> m_data; 152 }; 153 154 } // Draw 155 } // vkt 156 157 #endif // _VKTDRAWBASECLASS_HPP 158