BsVulkanPrerequisites.h 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #pragma once
  4. #include "BsCorePrerequisites.h"
  5. #define WIN32_LEAN_AND_MEAN
  6. #if !defined(NOMINMAX) && defined(_MSC_VER)
  7. # define NOMINMAX // Required to stop windows.h messing up std::min
  8. #endif
  9. #if BS_PLATFORM == BS_PLATFORM_WIN32
  10. #define VK_USE_PLATFORM_WIN32_KHR
  11. #endif
  12. #define BS_NUM_BACK_BUFFERS 1
  13. /** Maximum number of GPU queues that may exist at once. */
  14. #define BS_MAX_UNIQUE_QUEUES BS_MAX_QUEUES_PER_TYPE * BansheeEngine::GQT_COUNT // Must fit within 4 bytes
  15. #include "vulkan/vulkan.h"
  16. /** @addtogroup Plugins
  17. * @{
  18. */
  19. /** @defgroup Vulkan BansheeVulkanRenderAPI
  20. * Wrapper around the Vulkan render API.
  21. */
  22. /** @} */
  23. namespace BansheeEngine
  24. {
  25. class VulkanRenderAPI;
  26. class Win32RenderWindow;
  27. class VulkanTextureCore;
  28. class Win32VideoMode;
  29. class VulkanIndexBuffer;
  30. class VulkanVertexDeclaration;
  31. class VulkanHardwareBuffer;
  32. class VulkanDevice;
  33. class VulkanGLSLProgramFactory;
  34. class VulkanSwapChain;
  35. class VulkanFramebuffer;
  36. class VulkanDescriptorLayout;
  37. class VulkanDescriptorSet;
  38. class VulkanDescriptorManager;
  39. class VulkanCmdBufferPool;
  40. class VulkanCmdBuffer;
  41. class VulkanCommandBuffer;
  42. class VulkanQueue;
  43. class VulkanResourceManager;
  44. class VulkanGpuParamBlockBufferCore;
  45. class VulkanBuffer;
  46. class VulkanImage;
  47. class VulkanDescriptorPool;
  48. class VulkanGpuParams;
  49. class VulkanTransferBuffer;
  50. class VulkanEvent;
  51. class VulkanQuery;
  52. class VulkanQueryPool;
  53. VkAllocationCallbacks* gVulkanAllocator = nullptr;
  54. /** Vulkan specific types to track resource statistics for. */
  55. enum VulkanRenderStatResourceType
  56. {
  57. RenderStatObject_PipelineState = 100
  58. };
  59. /** Contains lists of images and buffers that require pipeline barrier transitions. */
  60. struct TransitionInfo
  61. {
  62. Vector<VkImageMemoryBarrier> imageBarriers;
  63. Vector<VkBufferMemoryBarrier> bufferBarriers;
  64. };
  65. }
  66. /** Macro to get a procedure address based on a Vulkan instance. */
  67. #define GET_INSTANCE_PROC_ADDR(instance, name) \
  68. vk##name = reinterpret_cast<PFN_vk##name>(vkGetInstanceProcAddr(instance, "vk"#name));
  69. /** Macro to get a procedure address based on a Vulkan device. */
  70. #define GET_DEVICE_PROC_ADDR(device, name) \
  71. vk##name = reinterpret_cast<PFN_vk##name>(vkGetDeviceProcAddr(device, "vk"#name));