1 #pragma once
2 
3 #include "vulkan/VulkanDef.h"
4 #include "vulkan/Device.h"
5 #include "vulkan/Buffer.h"
6 #include "vulkan/CommandBufferPool.h"
7 #include "../GSHandler.h"
8 
9 namespace GSH_Vulkan
10 {
11 	class CContext
12 	{
13 	public:
14 		Framework::Vulkan::CInstance* instance = nullptr;
15 		VkPhysicalDevice physicalDevice;
16 		Framework::Vulkan::CDevice device;
17 		VkSurfaceKHR surface = VK_NULL_HANDLE;
18 		VkSurfaceFormatKHR surfaceFormat;
19 		Framework::Vulkan::CCommandBufferPool commandBufferPool;
20 		VkQueue queue = VK_NULL_HANDLE;
21 		VkDescriptorPool descriptorPool = VK_NULL_HANDLE;
22 		VkPhysicalDeviceMemoryProperties physicalDeviceMemoryProperties;
23 		Framework::Vulkan::CBuffer memoryBuffer;
24 		Framework::Vulkan::CBuffer clutBuffer;
25 		VkImageView swizzleTablePSMCT32View = VK_NULL_HANDLE;
26 		VkImageView swizzleTablePSMCT16View = VK_NULL_HANDLE;
27 		VkImageView swizzleTablePSMCT16SView = VK_NULL_HANDLE;
28 		VkImageView swizzleTablePSMT8View = VK_NULL_HANDLE;
29 		VkImageView swizzleTablePSMT4View = VK_NULL_HANDLE;
30 		VkImageView swizzleTablePSMZ32View = VK_NULL_HANDLE;
31 		VkImageView swizzleTablePSMZ16View = VK_NULL_HANDLE;
32 
GetSwizzleTable(uint32 psm)33 		VkImageView GetSwizzleTable(uint32 psm) const
34 		{
35 			switch(psm)
36 			{
37 			default:
38 				assert(false);
39 			case CGSHandler::PSMCT32:
40 			case CGSHandler::PSMCT24:
41 			case CGSHandler::PSMCT24_UNK:
42 			case CGSHandler::PSMT8H:
43 			case CGSHandler::PSMT4HL:
44 			case CGSHandler::PSMT4HH:
45 				return swizzleTablePSMCT32View;
46 			case CGSHandler::PSMCT16:
47 				return swizzleTablePSMCT16View;
48 			case CGSHandler::PSMCT16S:
49 				return swizzleTablePSMCT16SView;
50 			case CGSHandler::PSMT8:
51 				return swizzleTablePSMT8View;
52 			case CGSHandler::PSMT4:
53 				return swizzleTablePSMT4View;
54 			case CGSHandler::PSMZ32:
55 			case CGSHandler::PSMZ24:
56 				return swizzleTablePSMZ32View;
57 				break;
58 			case CGSHandler::PSMZ16:
59 				return swizzleTablePSMZ16View;
60 				break;
61 			case CGSHandler::PSMZ16S:
62 				//TODO: Use real swizzle table
63 				return swizzleTablePSMCT16SView;
64 				break;
65 			}
66 		}
67 	};
68 
69 	typedef std::shared_ptr<CContext> ContextPtr;
70 }
71