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 46namespace vkt 47{ 48namespace Draw 49{ 50 51struct PositionColorVertex 52{ 53 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 62struct VertexElementData : public PositionColorVertex 63{ 64 VertexElementData (tcu::Vec4 position_, tcu::Vec4 color_, deUint32 refVertexIndex_) 65 : PositionColorVertex (position_, color_) 66 , refVertexIndex (refVertexIndex_) 67 { 68 } 69 70 deUint32 refVertexIndex; 71}; 72 73struct ReferenceImageCoordinates 74{ 75 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 89struct ReferenceImageInstancedCoordinates 90{ 91 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 105class DrawTestsBaseClass : public TestInstance 106{ 107public: 108 DrawTestsBaseClass (Context& context, const char* vertexShaderName, const char* fragmentShaderName, vk::VkPrimitiveTopology topology = vk::VK_PRIMITIVE_TOPOLOGY_TRIANGLE_STRIP); 109 110protected: 111 void initialize (void); 112 virtual void initPipeline (const vk::VkDevice device); 113 void beginRenderPass (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