| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | // Copyright 2016 Dolphin Emulator Project
 | 
					
						
							|  |  |  | // Licensed under GPLv2+
 | 
					
						
							|  |  |  | // Refer to the license.txt file included.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-30 23:07:50 -04:00
										 |  |  | #include <array>
 | 
					
						
							| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | #include <memory>
 | 
					
						
							|  |  |  | #include <string>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Common/CommonTypes.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "VideoBackends/Vulkan/VulkanLoader.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace Vulkan | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | class StagingBuffer; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class BoundingBox | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  |   BoundingBox(); | 
					
						
							|  |  |  |   ~BoundingBox(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   bool Initialize(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   VkBuffer GetGPUBuffer() const { return m_gpu_buffer; } | 
					
						
							|  |  |  |   VkDeviceSize GetGPUBufferOffset() const { return 0; } | 
					
						
							|  |  |  |   VkDeviceSize GetGPUBufferSize() const { return BUFFER_SIZE; } | 
					
						
							| 
									
										
										
										
											2016-10-22 20:50:36 +10:00
										 |  |  |   s32 Get(size_t index); | 
					
						
							|  |  |  |   void Set(size_t index, s32 value); | 
					
						
							| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-22 20:50:36 +10:00
										 |  |  |   void Invalidate(); | 
					
						
							|  |  |  |   void Flush(); | 
					
						
							| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  |   bool CreateGPUBuffer(); | 
					
						
							|  |  |  |   bool CreateReadbackBuffer(); | 
					
						
							| 
									
										
										
										
											2016-10-22 20:50:36 +10:00
										 |  |  |   void Readback(); | 
					
						
							| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |   VkBuffer m_gpu_buffer = VK_NULL_HANDLE; | 
					
						
							| 
									
										
										
										
											2016-10-01 10:40:44 +10:00
										 |  |  |   VkDeviceMemory m_gpu_memory = VK_NULL_HANDLE; | 
					
						
							| 
									
										
										
										
											2016-08-13 22:57:50 +10:00
										 |  |  | 
 | 
					
						
							|  |  |  |   static const size_t NUM_VALUES = 4; | 
					
						
							|  |  |  |   static const size_t BUFFER_SIZE = sizeof(u32) * NUM_VALUES; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   std::unique_ptr<StagingBuffer> m_readback_buffer; | 
					
						
							|  |  |  |   std::array<bool, NUM_VALUES> m_values_dirty = {}; | 
					
						
							|  |  |  |   bool m_valid = true; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | }  // namespace Vulkan
 |