36 virtual ~Core()
override;
40 virtual void RegisterWindow(
Window* window)
override;
43 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
44 virtual VkInstance GetInstance();
45 virtual VkDevice GetDevice();
46 virtual VkPhysicalDevice GetPhysicalDevice();
47 virtual VkCommandBuffer BeginSingleTimeCommands(
const char* debugName);
48 virtual uint32_t GetGraphicsFamily();
49 virtual void EndSingleTimeCommands(VkCommandBuffer commandBuffer);
50 VkCommandPool GetGraphicsCommandPool()
const;
54 VkInstance instance =
nullptr;
55 VkDevice device =
nullptr;
56 VkPhysicalDevice physicalDevice =
nullptr;
57 VkDebugUtilsMessengerEXT debugMessenger =
nullptr;
58 PFN_vkSetDebugUtilsObjectNameEXT pfnDebugUtilsSetObjectName =
nullptr;
60 VkQueue graphicsQueue =
nullptr;
61 VkQueue presentQueue =
nullptr;
62 uint32_t graphicsFamily = 0;
63 uint32_t presentFamily = 0;
64 VkCommandPool commandPoolGraphics =
nullptr;
65 VkDescriptorPool descriptorPool =
nullptr;
67 void CreateInstance();
68 void SetupDebugMessenger();
69 void PickPhysicalDevice();
70 void CreateLogicalDevice();
71 void CreateCommandPool();
72 void CreateDescriptorPool();
74 void CreateAllocator();
75 uint16_t ScoreDevice(VkPhysicalDevice device);
76 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
77 bool CheckValidationLayerSupport();
78 std::vector<const char*> GetRequiredExtensions();
79 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
81 virtual void NameObject(VkObjectType objectType,
void*
object,
const char* objectName);
83 virtual const char* GetVendorName()
const override;
84 virtual const char* GetAdapterName()
const override;
85 virtual const char* GetAPIName()
const override;
86 virtual const char* GetAPIVersion()
const override;
88 virtual void AdjustPerspective(
float *perspective)
override;
125 virtual inline bool ShouldUseImmediateMode()
const override;
126 virtual inline bool SupportsCommandBuffers()
const override;
127 virtual inline bool SupportsTesselation()
const override;
128 virtual inline bool SupportsGeometryShader()
const override;
129 virtual inline bool SupportsComputeShader()
const override;
130 virtual inline bool SupportsMultiDrawIndirect()
const override;
132 virtual void WaitUntilIdle()
override;
135 virtual void Clear(ClearMode mask,
float clear_color[4],
float clear_depth, uint32_t clear_stencil)
override;
138 virtual void DrawImmediateIndexed(GeometryType geom_type,
bool largeBuffer, int32_t baseVertex, uint32_t indexOffsetPtr, uint32_t indexCount)
override;
139 virtual void DrawImmediateVertices(GeometryType geom_type, uint32_t base, uint32_t count)
override;
140 virtual void SetImmediateBlending(
141 BlendOperation colorOp, BlendFactor colorSrc, BlendFactor colorDst,
142 BlendOperation alphaOp, BlendFactor alphaSrc, BlendFactor alphaDst
144 virtual void EnableDepthWrite(
bool state)
override;
145 virtual void SetColorMask(ColorMask mask)
override;
147 std::string vendorName;
148 std::string adapterName;
149 std::string apiVersion;
150 VmaAllocator allocator;
153 Window* primaryWindow =
nullptr;
156 virtual const char* GetDefaultShaderExtension()
const override;
157 virtual void CopyDepthBufferFromReadToWrite(uint32_t srcWidth, uint32_t srcHeight, uint32_t dstWidth, uint32_t dstHeight)
override;
158 virtual void BindDefaultFramebuffer()
override;
159 virtual void BindDefaultFramebufferWrite()
override;
160 virtual void BindDefaultFramebufferRead()
override;
161 virtual void ResizeViewport(uint32_t w, uint32_t h)
override;
163 using SamplerHash = size_t;
164 using PipelineHash = size_t;
165 using PipelineLayoutHash = size_t;
166 using DescriptorSetLayoutHash = size_t;
167 std::unordered_map<DescriptorSetLayoutHash, Grindstone::GraphicsAPI::DescriptorSetLayout*> descriptorSetLayoutCache;
168 std::unordered_map<PipelineLayoutHash, Grindstone::GraphicsAPI::PipelineLayout*> pipelineLayoutCache;
169 std::unordered_map<PipelineHash, Grindstone::GraphicsAPI::GraphicsPipeline*> graphicsPipelineCache;
170 std::unordered_map<SamplerHash, Grindstone::GraphicsAPI::Sampler*> samplerCache;