• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 #ifndef _VKTAPICOMPUTEINSTANCERESULTBUFFER_HPP
2 #define _VKTAPICOMPUTEINSTANCERESULTBUFFER_HPP
3 /*-------------------------------------------------------------------------
4  * Vulkan Conformance Tests
5  * ------------------------
6  *
7  * Copyright (c) 2015 The Khronos Group Inc.
8  * Copyright (c) 2015 Samsung Electronics Co., Ltd.
9  * Copyright (c) 2015 Google Inc.
10  *
11  * Licensed under the Apache License, Version 2.0 (the "License");
12  * you may not use this file except in compliance with the License.
13  * You may obtain a copy of the License at
14  *
15  *      http://www.apache.org/licenses/LICENSE-2.0
16  *
17  * Unless required by applicable law or agreed to in writing, software
18  * distributed under the License is distributed on an "AS IS" BASIS,
19  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
20  * See the License for the specific language governing permissions and
21  * limitations under the License.
22  *
23  *//*--------------------------------------------------------------------*/
24 
25 #include "tcuDefs.hpp"
26 #include "tcuTestLog.hpp"
27 #include "deUniquePtr.hpp"
28 #include "vkRef.hpp"
29 #include "vkMemUtil.hpp"
30 #include "vkQueryUtil.hpp"
31 
32 namespace vkt
33 {
34 
35 namespace api
36 {
37 
38 class ComputeInstanceResultBuffer
39 {
40 public:
41 	enum
42 	{
43 		DATA_SIZE = sizeof(tcu::Vec4[4])
44 	};
45 
46 											ComputeInstanceResultBuffer (const vk::DeviceInterface &vki,
47 																				vk::VkDevice device,
48 																				vk::Allocator &allocator,
49 																				float initValue = -1.0f);
50 
51 	void									readResultContentsTo(tcu::Vec4 (* results)[4]) const;
52 
53 	void									readResultContentsTo(deUint32* result) const;
54 
getBuffer(void) const55 	inline vk::VkBuffer						getBuffer(void) const { return *m_buffer; }
56 
getResultReadBarrier(void) const57 	inline const vk::VkBufferMemoryBarrier*	getResultReadBarrier(void) const { return &m_bufferBarrier; }
58 
59 private:
60 	static vk::Move<vk::VkBuffer>			createResultBuffer(const vk::DeviceInterface &vki,
61 														vk::VkDevice device,
62 														vk::Allocator &allocator,
63 														de::MovePtr<vk::Allocation>* outAllocation,
64 														float initValue = -1.0f);
65 
66 	static vk::VkBufferMemoryBarrier		createResultBufferBarrier(vk::VkBuffer buffer);
67 
68 	const vk::DeviceInterface &				m_vki;
69 	const vk::VkDevice						m_device;
70 
71 	de::MovePtr<vk::Allocation>				m_bufferMem;
72 	const vk::Unique<vk::VkBuffer>			m_buffer;
73 	const vk::VkBufferMemoryBarrier			m_bufferBarrier;
74 };
75 
76 } // api
77 } // vkt
78 
79 #endif // _VKTAPICOMPUTEINSTANCERESULTBUFFER_HPP
80