summaryrefslogtreecommitdiff
path: root/tools/render-test/vk-api.h
diff options
context:
space:
mode:
Diffstat (limited to 'tools/render-test/vk-api.h')
-rw-r--r--tools/render-test/vk-api.h187
1 files changed, 187 insertions, 0 deletions
diff --git a/tools/render-test/vk-api.h b/tools/render-test/vk-api.h
new file mode 100644
index 000000000..1616a4065
--- /dev/null
+++ b/tools/render-test/vk-api.h
@@ -0,0 +1,187 @@
+// vk-api.h
+#pragma once
+
+#include "vk-module.h"
+
+namespace renderer_test {
+
+#define VK_API_GLOBAL_PROCS(x) \
+ x(vkGetInstanceProcAddr) \
+ x(vkCreateInstance) \
+ /* */
+
+#define VK_API_INSTANCE_PROCS(x) \
+ x(vkCreateDevice) \
+ x(vkCreateDebugReportCallbackEXT) \
+ x(vkDestroyDebugReportCallbackEXT) \
+ x(vkDebugReportMessageEXT) \
+ x(vkEnumeratePhysicalDevices) \
+ x(vkGetPhysicalDeviceProperties) \
+ x(vkGetPhysicalDeviceFeatures) \
+ x(vkGetPhysicalDeviceMemoryProperties) \
+ x(vkGetPhysicalDeviceQueueFamilyProperties) \
+ x(vkGetPhysicalDeviceFormatProperties) \
+ x(vkGetDeviceProcAddr) \
+ /* */
+
+#define VK_API_DEVICE_PROCS(x) \
+ x(vkCreateDescriptorPool) \
+ x(vkDestroyDescriptorPool) \
+ x(vkGetDeviceQueue) \
+ x(vkQueueSubmit) \
+ x(vkQueueWaitIdle) \
+ x(vkCreateBuffer) \
+ x(vkGetBufferMemoryRequirements) \
+ x(vkAllocateMemory) \
+ x(vkBindBufferMemory) \
+ x(vkMapMemory) \
+ x(vkUnmapMemory) \
+ x(vkCmdCopyBuffer) \
+ x(vkDestroyBuffer) \
+ x(vkFreeMemory) \
+ x(vkCreateDescriptorSetLayout) \
+ x(vkDestroyDescriptorSetLayout) \
+ x(vkAllocateDescriptorSets) \
+ x(vkUpdateDescriptorSets) \
+ x(vkCreatePipelineLayout) \
+ x(vkDestroyPipelineLayout) \
+ x(vkCreateComputePipelines) \
+ x(vkCreateGraphicsPipelines) \
+ x(vkDestroyPipeline) \
+ x(vkCreateShaderModule) \
+ x(vkDestroyShaderModule) \
+ x(vkCreateFramebuffer) \
+ x(vkDestroyFramebuffer) \
+ \
+ x(vkCmdBindPipeline) \
+ x(vkCmdBindDescriptorSets) \
+ x(vkCmdDispatch) \
+ x(vkCmdDraw) \
+ x(vkCmdSetScissor) \
+ x(vkCmdSetViewport) \
+ x(vkCmdBindVertexBuffers) \
+ x(vkCmdBindIndexBuffer) \
+ x(vkCmdBeginRenderPass) \
+ x(vkCmdEndRenderPass) \
+ \
+ x(vkCreateFence) \
+ x(vkDestroyFence) \
+ x(vkResetFences) \
+ x(vkGetFenceStatus) \
+ x(vkWaitForFences) \
+ \
+ x(vkCreateSemaphore) \
+ x(vkDestroySemaphore) \
+ \
+ x(vkCreateEvent) \
+ x(vkDestroyEvent) \
+ x(vkGetEventStatus) \
+ x(vkSetEvent) \
+ x(vkResetEvent) \
+ \
+ x(vkCreateCommandPool) \
+ x(vkDestroyCommandPool) \
+ \
+ x(vkFreeCommandBuffers) \
+ x(vkAllocateCommandBuffers) \
+ x(vkBeginCommandBuffer) \
+ x(vkEndCommandBuffer) \
+ x(vkResetCommandBuffer) \
+ \
+ x(vkCreateImageView) \
+ x(vkDestroyImageView) \
+ \
+ x(vkCreateRenderPass) \
+ x(vkDestroyRenderPass) \
+ /* */
+
+#if SLANG_WINDOWS_FAMILY
+# define VK_API_INSTANCE_PLATFORM_KHR_PROCS(x) \
+ x(vkCreateWin32SurfaceKHR) \
+ /* */
+#else
+# define VK_API_INSTANCE_PLATFORM_KHR_PROCS(x) \
+ x(vkCreateXlibSurfaceKHR) \
+ /* */
+#endif
+
+#define VK_API_INSTANCE_KHR_PROCS(x) \
+ VK_API_INSTANCE_PLATFORM_KHR_PROCS(x) \
+ x(vkGetPhysicalDeviceSurfaceSupportKHR) \
+ x(vkGetPhysicalDeviceSurfaceFormatsKHR) \
+ x(vkGetPhysicalDeviceSurfacePresentModesKHR) \
+ x(vkGetPhysicalDeviceSurfaceCapabilitiesKHR) \
+ x(vkDestroySurfaceKHR) \
+ /* */
+
+#define VK_API_DEVICE_KHR_PROCS(x) \
+ x(vkQueuePresentKHR) \
+ x(vkCreateSwapchainKHR) \
+ x(vkGetSwapchainImagesKHR) \
+ x(vkDestroySwapchainKHR) \
+ x(vkAcquireNextImageKHR) \
+ /* */
+
+#define VK_API_ALL_GLOBAL_PROCS(x) \
+ VK_API_GLOBAL_PROCS(x)
+
+#define VK_API_ALL_INSTANCE_PROCS(x) \
+ VK_API_INSTANCE_PROCS(x) \
+ VK_API_INSTANCE_KHR_PROCS(x)
+
+#define VK_API_ALL_DEVICE_PROCS(x) \
+ VK_API_DEVICE_PROCS(x) \
+ VK_API_DEVICE_KHR_PROCS(x)
+
+#define VK_API_ALL_PROCS(x) \
+ VK_API_ALL_GLOBAL_PROCS(x) \
+ VK_API_ALL_INSTANCE_PROCS(x) \
+ VK_API_ALL_DEVICE_PROCS(x) \
+ /* */
+
+#define VK_API_DECLARE_PROC(NAME) PFN_##NAME NAME = nullptr;
+
+struct VulkanApi
+{
+ VK_API_ALL_PROCS(VK_API_DECLARE_PROC)
+
+ enum class ProcType
+ {
+ Global,
+ Instance,
+ Device,
+ };
+
+ /// Returns true if all the functions in the class are defined
+ bool areDefined(ProcType type) const;
+
+ /// Sets up global parameters
+ Slang::Result initGlobalProcs(const VulkanModule& module);
+ /// Initialize the instance functions
+ Slang::Result initInstanceProcs(VkInstance instance);
+
+ /// Called before initDevice
+ Slang::Result initPhysicalDevice(VkPhysicalDevice physicalDevice);
+
+ /// Initialize the device functions
+ Slang::Result initDeviceProcs(VkDevice device);
+
+ /// Type bits control which indices are tested against bit 0 for testing at index 0
+ /// properties - a memory type must have all the bits set as passed in
+ /// Returns -1 if couldn't find an appropriate memory type index
+ int findMemoryTypeIndex(uint32_t typeBits, VkMemoryPropertyFlags properties) const;
+
+ /// Given queue required flags, finds a queue
+ int findQueue(VkQueueFlags reqFlags) const;
+
+ const VulkanModule* m_module = nullptr; ///< Module this was all loaded from
+ VkInstance m_instance = VK_NULL_HANDLE;
+ VkDevice m_device = VK_NULL_HANDLE;
+ VkPhysicalDevice m_physicalDevice = VK_NULL_HANDLE;
+
+ VkPhysicalDeviceProperties m_deviceProperties;
+ VkPhysicalDeviceFeatures m_deviceFeatures;
+ VkPhysicalDeviceMemoryProperties m_deviceMemoryProperties;
+};
+
+} // renderer_test