34 virtual ~Core()
override;
38 virtual void RegisterWindow(
Window* window)
override;
41 uint32_t FindMemoryType(uint32_t typeFilter, VkMemoryPropertyFlags properties);
42 virtual VkInstance GetInstance();
43 virtual VkDevice GetDevice();
44 virtual VkPhysicalDevice GetPhysicalDevice();
45 virtual VkCommandBuffer BeginSingleTimeCommands();
46 virtual uint32_t GetGraphicsFamily();
47 virtual void EndSingleTimeCommands(VkCommandBuffer commandBuffer);
48 VkCommandPool GetGraphicsCommandPool()
const;
51 VkInstance instance =
nullptr;
52 VkDevice device =
nullptr;
53 VkPhysicalDevice physicalDevice =
nullptr;
54 VkDebugUtilsMessengerEXT debugMessenger =
nullptr;
55 PFN_vkSetDebugUtilsObjectNameEXT pfnDebugUtilsSetObjectName =
nullptr;
57 VkQueue graphicsQueue =
nullptr;
58 VkQueue presentQueue =
nullptr;
59 uint32_t graphicsFamily = 0;
60 uint32_t presentFamily = 0;
61 VkCommandPool commandPoolGraphics =
nullptr;
62 VkDescriptorPool descriptorPool =
nullptr;
64 void CreateInstance();
65 void SetupDebugMessenger();
66 void PickPhysicalDevice();
67 void CreateLogicalDevice();
68 void CreateCommandPool();
69 void CreateDescriptorPool();
71 void CreateAllocator();
72 uint16_t ScoreDevice(VkPhysicalDevice device);
73 bool CheckDeviceExtensionSupport(VkPhysicalDevice device);
74 bool CheckValidationLayerSupport();
75 std::vector<const char*> GetRequiredExtensions();
76 void PopulateDebugMessengerCreateInfo(VkDebugUtilsMessengerCreateInfoEXT& createInfo);
78 virtual void NameObject(VkObjectType objectType,
void*
object,
const char* objectName);
80 virtual const char* GetVendorName()
const override;
81 virtual const char* GetAdapterName()
const override;
82 virtual const char* GetAPIName()
const override;
83 virtual const char* GetAPIVersion()
const override;
85 virtual void AdjustPerspective(
float *perspective)
override;
113 virtual inline bool ShouldUseImmediateMode()
const override;
114 virtual inline bool SupportsCommandBuffers()
const override;
115 virtual inline bool SupportsTesselation()
const override;
116 virtual inline bool SupportsGeometryShader()
const override;
117 virtual inline bool SupportsComputeShader()
const override;
118 virtual inline bool SupportsMultiDrawIndirect()
const override;
120 virtual void WaitUntilIdle()
override;
123 virtual void Clear(ClearMode mask,
float clear_color[4],
float clear_depth, uint32_t clear_stencil)
override;
126 virtual void DrawImmediateIndexed(GeometryType geom_type,
bool largeBuffer, int32_t baseVertex, uint32_t indexOffsetPtr, uint32_t indexCount)
override;
127 virtual void DrawImmediateVertices(GeometryType geom_type, uint32_t base, uint32_t count)
override;
128 virtual void SetImmediateBlending(
129 BlendOperation colorOp, BlendFactor colorSrc, BlendFactor colorDst,
130 BlendOperation alphaOp, BlendFactor alphaSrc, BlendFactor alphaDst
132 virtual void EnableDepthWrite(
bool state)
override;
133 virtual void SetColorMask(ColorMask mask)
override;
135 std::string vendorName;
136 std::string adapterName;
137 std::string apiVersion;
138 VmaAllocator allocator;
140 Window* primaryWindow =
nullptr;
143 virtual const char* GetDefaultShaderExtension()
const override;
144 virtual void CopyDepthBufferFromReadToWrite(uint32_t srcWidth, uint32_t srcHeight, uint32_t dstWidth, uint32_t dstHeight)
override;
145 virtual void BindDefaultFramebuffer()
override;
146 virtual void BindDefaultFramebufferWrite()
override;
147 virtual void BindDefaultFramebufferRead()
override;
148 virtual void ResizeViewport(uint32_t w, uint32_t h)
override;
150 using PipelineHash = size_t;
151 std::unordered_map<PipelineHash, Grindstone::GraphicsAPI::GraphicsPipeline*> graphicsPipelineCache;