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 	tcu::Vec4 position;
58 	tcu::Vec4 color;
59 };
60 
61 struct ReferenceImageCoordinates
62 {
ReferenceImageCoordinatesvkt::Draw::ReferenceImageCoordinates63 	ReferenceImageCoordinates (void)
64 		: left		(-0.3)
65 		, right		(0.3)
66 		, top		(0.3)
67 		, bottom	(-0.3)
68 	{
69 	}
70 
71 	double left;
72 	double right;
73 	double top;
74 	double bottom;
75 };
76 
77 struct ReferenceImageInstancedCoordinates
78 {
ReferenceImageInstancedCoordinatesvkt::Draw::ReferenceImageInstancedCoordinates79 	ReferenceImageInstancedCoordinates (void)
80 		: left		(-0.3)
81 		, right		(0.6)
82 		, top		(0.3)
83 		, bottom	(-0.6)
84 	{
85 	}
86 
87 	double left;
88 	double right;
89 	double top;
90 	double bottom;
91 };
92 
93 class DrawTestsBaseClass : public TestInstance
94 {
95 public:
96 								DrawTestsBaseClass	(Context& context, const char* vertexShaderName, const char* fragmentShaderName);
97 
98 protected:
99 	void						initialize			(void);
100 	virtual void				initPipeline		(const vk::VkDevice device);
101 	void						beginRenderPass		(void);
iterate(void)102 	virtual tcu::TestStatus		iterate				(void)						{ TCU_FAIL("Implement iterate() method!");	}
103 
104 	enum
105 	{
106 		WIDTH = 256,
107 		HEIGHT = 256
108 	};
109 
110 	vk::VkFormat									m_colorAttachmentFormat;
111 
112 	vk::VkPrimitiveTopology							m_topology;
113 
114 	const vk::DeviceInterface&						m_vk;
115 
116 	vk::Move<vk::VkPipeline>						m_pipeline;
117 	vk::Move<vk::VkPipelineLayout>					m_pipelineLayout;
118 
119 	de::SharedPtr<Image>							m_colorTargetImage;
120 	vk::Move<vk::VkImageView>						m_colorTargetView;
121 
122 	de::SharedPtr<Buffer>							m_vertexBuffer;
123 	PipelineCreateInfo::VertexInputState			m_vertexInputState;
124 
125 	vk::Move<vk::VkCommandPool>						m_cmdPool;
126 	vk::Move<vk::VkCommandBuffer>					m_cmdBuffer;
127 
128 	vk::Move<vk::VkFramebuffer>						m_framebuffer;
129 	vk::Move<vk::VkRenderPass>						m_renderPass;
130 
131 	const std::string								m_vertexShaderName;
132 	const std::string								m_fragmentShaderName;
133 
134 	std::vector<PositionColorVertex>				m_data;
135 	std::vector<deUint32>							m_indexes;
136 	de::SharedPtr<Buffer>							m_indexBuffer;
137 };
138 
139 }	// Draw
140 }	// vkt
141 
142 #endif // _VKTDRAWBASECLASS_HPP
143