16 #if defined( _MSC_VER )
18 #elif defined( __clang__ )
19 # pragma clang diagnostic ignored "-Wmissing-braces"
20 #elif defined( __GNUC__ )
31 #if defined( VULKAN_HPP_NO_TO_STRING )
36 #if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 )
54 bool contains( std::vector<vk::ExtensionProperties>
const & extensionProperties, std::string
const & extensionName )
56 auto propertyIterator = std::find_if( extensionProperties.begin(),
57 extensionProperties.end(),
59 return ( propertyIterator != extensionProperties.end() );
64 assert( !poolSizes.empty() );
66 std::accumulate( poolSizes.begin(), poolSizes.end(), 0, []( uint32_t sum,
vk::DescriptorPoolSize const & dps ) { return sum + dps.descriptorCount; } );
67 assert( 0 < maxSets );
74 std::vector<std::tuple<vk::DescriptorType, uint32_t, vk::ShaderStageFlags>>
const & bindingData,
77 std::vector<vk::DescriptorSetLayoutBinding> bindings( bindingData.size() );
78 for (
size_t i = 0; i < bindingData.size(); i++ )
81 checked_cast<uint32_t>( i ), std::get<0>( bindingData[i] ), std::get<1>( bindingData[i] ), std::get<2>( bindingData[i] ) );
87 uint32_t queueFamilyIndex,
88 std::vector<std::string>
const & extensions,
92 std::vector<char const *> enabledExtensions;
93 enabledExtensions.reserve( extensions.size() );
94 for (
auto const & ext : extensions )
96 enabledExtensions.push_back( ext.data() );
99 float queuePriority = 0.0f;
101 vk::DeviceCreateInfo deviceCreateInfo( {}, deviceQueueCreateInfo, {}, enabledExtensions, physicalDeviceFeatures, pNext );
104 #if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 )
113 std::vector<vk::ImageView>
const & imageViews,
118 attachments[1] = depthImageView;
122 std::vector<vk::Framebuffer> framebuffers;
123 framebuffers.reserve( imageViews.size() );
124 for (
auto const & view : imageViews )
126 attachments[0] = view;
135 std::pair<vk::ShaderModule, vk::SpecializationInfo const *>
const & vertexShaderData,
136 std::pair<vk::ShaderModule, vk::SpecializationInfo const *>
const & fragmentShaderData,
137 uint32_t vertexStride,
138 std::vector<std::pair<vk::Format, uint32_t>>
const & vertexInputAttributeFormatOffset,
144 std::array<vk::PipelineShaderStageCreateInfo, 2> pipelineShaderStageCreateInfos = {
151 std::vector<vk::VertexInputAttributeDescription> vertexInputAttributeDescriptions;
155 if ( 0 < vertexStride )
157 vertexInputAttributeDescriptions.reserve( vertexInputAttributeFormatOffset.size() );
158 for ( uint32_t i = 0; i < vertexInputAttributeFormatOffset.size(); i++ )
160 vertexInputAttributeDescriptions.emplace_back( i, 0, vertexInputAttributeFormatOffset[i].first, vertexInputAttributeFormatOffset[i].second );
198 colorComponentFlags );
206 pipelineShaderStageCreateInfos,
207 &pipelineVertexInputStateCreateInfo,
208 &pipelineInputAssemblyStateCreateInfo,
210 &pipelineViewportStateCreateInfo,
211 &pipelineRasterizationStateCreateInfo,
212 &pipelineMultisampleStateCreateInfo,
213 &pipelineDepthStencilStateCreateInfo,
214 &pipelineColorBlendStateCreateInfo,
215 &pipelineDynamicStateCreateInfo,
225 #
if !defined( NDEBUG )
227 std::vector<vk::ExtensionProperties>
const & extensionProperties
231 std::vector<char const *> enabledExtensions;
232 enabledExtensions.reserve( extensions.size() );
233 for (
auto const & ext : extensions )
236 extensionProperties.begin(), extensionProperties.end(), [ext](
vk::ExtensionProperties const & ep ) { return ext == ep.extensionName; } ) );
237 enabledExtensions.push_back( ext.data() );
239 #if !defined( NDEBUG )
241 extensions.begin(), extensions.end(), []( std::string
const & extension ) { return extension == VK_EXT_DEBUG_UTILS_EXTENSION_NAME; } ) &&
242 std::any_of( extensionProperties.begin(),
243 extensionProperties.end(),
244 [](
vk::ExtensionProperties const & ep ) { return ( strcmp( VK_EXT_DEBUG_UTILS_EXTENSION_NAME, ep.extensionName ) == 0 ); } ) )
249 return enabledExtensions;
252 std::vector<char const *>
gatherLayers( std::vector<std::string>
const & layers
253 #
if !defined( NDEBUG )
255 std::vector<vk::LayerProperties>
const & layerProperties
259 std::vector<char const *> enabledLayers;
260 enabledLayers.reserve( layers.size() );
261 for (
auto const & layer : layers )
263 assert( std::any_of( layerProperties.begin(), layerProperties.end(), [layer](
vk::LayerProperties const & lp ) { return layer == lp.layerName; } ) );
264 enabledLayers.push_back( layer.data() );
266 #if !defined( NDEBUG )
268 if ( std::none_of( layers.begin(), layers.end(), []( std::string
const & layer ) { return layer ==
"VK_LAYER_KHRONOS_validation"; } ) &&
269 std::any_of( layerProperties.begin(),
270 layerProperties.end(),
271 [](
vk::LayerProperties const & lp ) { return ( strcmp(
"VK_LAYER_KHRONOS_validation", lp.layerName ) == 0 ); } ) )
273 enabledLayers.push_back(
"VK_LAYER_KHRONOS_validation" );
276 return enabledLayers;
280 std::string
const & engineName,
281 std::vector<std::string>
const & layers,
282 std::vector<std::string>
const & extensions,
283 uint32_t apiVersion )
285 #if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 )
289 vk::ApplicationInfo applicationInfo( appName.c_str(), 1, engineName.c_str(), 1, apiVersion );
291 #
if !defined( NDEBUG )
297 #
if !defined( NDEBUG )
306 #if ( VULKAN_HPP_DISPATCH_LOADER_DYNAMIC == 1 )
317 std::vector<vk::AttachmentDescription> attachmentDescriptions;
356 #if !defined( NDEBUG )
357 if (
static_cast<uint32_t
>( pCallbackData->
messageIdNumber ) == 0x822806fa )
363 else if (
static_cast<uint32_t
>( pCallbackData->
messageIdNumber ) == 0xe8d1a9fe )
370 std::cerr << vk::to_string( static_cast<vk::DebugUtilsMessageSeverityFlagBitsEXT>( messageSeverity ) ) <<
": "
372 std::cerr << std::string(
"\t" ) <<
"messageIDName = <" << pCallbackData->
pMessageIdName <<
">\n";
373 std::cerr << std::string(
"\t" ) <<
"messageIdNumber = " << pCallbackData->
messageIdNumber <<
"\n";
374 std::cerr << std::string(
"\t" ) <<
"message = <" << pCallbackData->
pMessage <<
">\n";
377 std::cerr << std::string(
"\t" ) <<
"Queue Labels:\n";
380 std::cerr << std::string(
"\t\t" ) <<
"labelName = <" << pCallbackData->
pQueueLabels[i].
pLabelName <<
">\n";
385 std::cerr << std::string(
"\t" ) <<
"CommandBuffer Labels:\n";
393 std::cerr << std::string(
"\t" ) <<
"Objects:\n";
394 for ( uint32_t i = 0; i < pCallbackData->
objectCount; i++ )
396 std::cerr << std::string(
"\t\t" ) <<
"Object " << i <<
"\n";
399 std::cerr << std::string(
"\t\t\t" ) <<
"objectHandle = " << pCallbackData->
pObjects[i].
objectHandle <<
"\n";
402 std::cerr << std::string(
"\t\t\t" ) <<
"objectName = <" << pCallbackData->
pObjects[i].
pObjectName <<
">\n";
412 std::vector<vk::QueueFamilyProperties>::const_iterator graphicsQueueFamilyProperty =
413 std::find_if( queueFamilyProperties.begin(),
414 queueFamilyProperties.end(),
416 assert( graphicsQueueFamilyProperty != queueFamilyProperties.end() );
417 return static_cast<uint32_t
>( std::distance( queueFamilyProperties.begin(), graphicsQueueFamilyProperty ) );
423 assert( queueFamilyProperties.size() < std::numeric_limits<uint32_t>::max() );
428 return std::make_pair( graphicsQueueFamilyIndex,
429 graphicsQueueFamilyIndex );
434 for (
size_t i = 0; i < queueFamilyProperties.size(); i++ )
439 return std::make_pair(
static_cast<uint32_t
>( i ),
static_cast<uint32_t
>( i ) );
445 for (
size_t i = 0; i < queueFamilyProperties.size(); i++ )
449 return std::make_pair( graphicsQueueFamilyIndex,
static_cast<uint32_t
>( i ) );
453 throw std::runtime_error(
"Could not find queues for both graphics or present -> terminating" );
458 uint32_t typeIndex = uint32_t( ~0 );
461 if ( ( typeBits & 1 ) && ( ( memoryProperties.
memoryTypes[i].propertyFlags & requirementsMask ) == requirementsMask ) )
468 assert( typeIndex != uint32_t( ~0 ) );
479 std::vector<std::string> extensions;
481 #if defined( VK_USE_PLATFORM_ANDROID_KHR )
482 extensions.push_back( VK_KHR_ANDROID_SURFACE_EXTENSION_NAME );
483 #elif defined( VK_USE_PLATFORM_IOS_MVK )
484 extensions.push_back( VK_MVK_IOS_SURFACE_EXTENSION_NAME );
485 #elif defined( VK_USE_PLATFORM_MACOS_MVK )
486 extensions.push_back( VK_MVK_MACOS_SURFACE_EXTENSION_NAME );
487 #elif defined( VK_USE_PLATFORM_MIR_KHR )
488 extensions.push_back( VK_KHR_MIR_SURFACE_EXTENSION_NAME );
489 #elif defined( VK_USE_PLATFORM_VI_NN )
490 extensions.push_back( VK_NN_VI_SURFACE_EXTENSION_NAME );
491 #elif defined( VK_USE_PLATFORM_WAYLAND_KHR )
492 extensions.push_back( VK_KHR_WAYLAND_SURFACE_EXTENSION_NAME );
493 #elif defined( VK_USE_PLATFORM_WIN32_KHR )
494 extensions.push_back( VK_KHR_WIN32_SURFACE_EXTENSION_NAME );
495 #elif defined( VK_USE_PLATFORM_XCB_KHR )
496 extensions.push_back( VK_KHR_XCB_SURFACE_EXTENSION_NAME );
497 #elif defined( VK_USE_PLATFORM_XLIB_KHR )
498 extensions.push_back( VK_KHR_XLIB_SURFACE_EXTENSION_NAME );
499 #elif defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT )
500 extensions.push_back( VK_EXT_ACQUIRE_XLIB_DISPLAY_EXTENSION_NAME );
517 throw std::runtime_error(
"failed to find supported format!" );
523 for (
const auto & presentMode : presentModes )
527 pickedMode = presentMode;
533 pickedMode = presentMode;
541 assert( !formats.empty() );
543 if ( formats.size() == 1 )
556 for (
size_t i = 0; i <
sizeof( requestedFormats ) /
sizeof( requestedFormats[0] ); i++ )
558 vk::Format requestedFormat = requestedFormats[i];
559 auto it = std::find_if( formats.begin(),
562 { return ( f.format == requestedFormat ) && ( f.colorSpace == requestedColorSpace ); } );
563 if ( it != formats.end() )
578 switch ( oldImageLayout )
584 default: assert(
false );
break;
588 switch ( oldImageLayout )
594 default: assert(
false );
break;
598 switch ( newImageLayout )
609 default: assert(
false );
break;
613 switch ( newImageLayout )
622 default: assert(
false );
break;
641 destinationAccessMask,
647 imageSubresourceRange );
648 return commandBuffer.
pipelineBarrier( sourceStage, destinationStage, {},
nullptr,
nullptr, imageMemoryBarrier );
662 std::vector<std::tuple<vk::DescriptorType, vk::Buffer const &, vk::DeviceSize, vk::BufferView const &>>
const & bufferData,
664 uint32_t bindingOffset )
666 std::vector<vk::DescriptorBufferInfo> bufferInfos;
667 bufferInfos.reserve( bufferData.size() );
669 std::vector<vk::WriteDescriptorSet> writeDescriptorSets;
670 writeDescriptorSets.reserve( bufferData.size() + 1 );
671 uint32_t dstBinding = bindingOffset;
672 for (
auto const & bd : bufferData )
674 bufferInfos.emplace_back( std::get<1>( bd ), 0, std::get<2>( bd ) );
675 writeDescriptorSets.emplace_back( descriptorSet, dstBinding++, 0, 1, std::get<0>( bd ),
nullptr, &bufferInfos.back(), &std::get<3>( bd ) );
686 std::vector<std::tuple<vk::DescriptorType, vk::Buffer const &, vk::DeviceSize, vk::BufferView const &>>
const & bufferData,
687 std::vector<vk::su::TextureData>
const & textureData,
688 uint32_t bindingOffset )
690 std::vector<vk::DescriptorBufferInfo> bufferInfos;
691 bufferInfos.reserve( bufferData.size() );
693 std::vector<vk::WriteDescriptorSet> writeDescriptorSets;
694 writeDescriptorSets.reserve( bufferData.size() + ( textureData.empty() ? 0 : 1 ) );
695 uint32_t dstBinding = bindingOffset;
696 for (
auto const & bd : bufferData )
698 bufferInfos.emplace_back( std::get<1>( bd ), 0, std::get<2>( bd ) );
699 writeDescriptorSets.emplace_back( descriptorSet, dstBinding++, 0, 1, std::get<0>( bd ),
nullptr, &bufferInfos.back(), &std::get<3>( bd ) );
702 std::vector<vk::DescriptorImageInfo> imageInfos;
703 if ( !textureData.empty() )
705 imageInfos.reserve( textureData.size() );
706 for (
auto const & td : textureData )
710 writeDescriptorSets.emplace_back( descriptorSet,
713 checked_cast<uint32_t>( imageInfos.size() ),
728 #if !defined( NDEBUG )
729 : m_size( size ), m_usage( usage ), m_propertyFlags( propertyFlags )
784 : extent( extent_ ), window(
vk::su::
createWindow( windowName, extent ) )
789 throw std::runtime_error(
"Failed to create window!" );
799 uint32_t graphicsQueueFamilyIndex,
800 uint32_t presentQueueFamilyIndex )
807 if ( surfaceCapabilities.
currentExtent.
width == std::numeric_limits<uint32_t>::max() )
842 if ( graphicsQueueFamilyIndex != presentQueueFamilyIndex )
844 uint32_t queueFamilyIndices[2] = { graphicsQueueFamilyIndex, presentQueueFamilyIndex };
849 swapChainCreateInfo.queueFamilyIndexCount = 2;
850 swapChainCreateInfo.pQueueFamilyIndices = queueFamilyIndices;
858 for (
auto image :
images )
860 imageViewCreateInfo.
image = image;
866 : m_rgb0( rgb0 ), m_rgb1( rgb1 )
873 uint8_t * pImageMemory =
static_cast<uint8_t *
>( data );
874 for ( uint32_t row = 0; row < extent.
height; row++ )
876 for ( uint32_t col = 0; col < extent.
width; col++ )
878 std::array<uint8_t, 3>
const & rgb = ( ( ( row & 0x10 ) == 0 ) ^ ( ( col & 0x10 ) == 0 ) ) ? m_rgb1 : m_rgb0;
879 pImageMemory[0] = rgb[0];
880 pImageMemory[1] = rgb[1];
881 pImageMemory[2] = rgb[2];
882 pImageMemory[3] = 255;
893 unsigned char * pImageMemory =
static_cast<unsigned char *
>( data );
894 for ( uint32_t row = 0; row < extent.
height; row++ )
896 for ( uint32_t col = 0; col < extent.
width; col++ )
898 pImageMemory[0] = m_rgb[0];
899 pImageMemory[1] = m_rgb[1];
900 pImageMemory[2] = m_rgb[2];
901 pImageMemory[3] = 255;
908 : m_extent( extent ), m_channels( channels ), m_pixels( pixels )
910 assert( m_channels == 4 );
915 assert( extent == m_extent );
916 memcpy( data, m_pixels, extent.
width * extent.
height * m_channels );
924 bool anisotropyEnable,
993 glfwDestroyWindow(
handle );
1003 glfwSetErrorCallback(
1004 [](
int error,
const char * msg )
1006 std::cerr <<
"glfw: "
1007 <<
"(" << error <<
") " << msg << std::endl;
1017 static auto glfwCtx = glfwContext();
1020 glfwWindowHint( GLFW_CLIENT_API, GLFW_NO_API );
1021 GLFWwindow * window = glfwCreateWindow( extent.
width, extent.
height, windowName.c_str(),
nullptr,
nullptr );
1022 return WindowData( window, windowName, extent );
1034 #if defined( NDEBUG )
1040 std::vector<char const *>
const & layers,
1041 std::vector<char const *>
const & extensions )
1043 #if defined( NDEBUG )
1055 return instanceCreateInfo;
1063 os << std::setfill(
'0' ) << std::hex;
1066 os << std::setw( 2 ) << static_cast<uint32_t>( uuid.
m_data[j] );
1067 if ( j == 3 || j == 5 || j == 7 || j == 9 )
1072 os << std::setfill(
' ' ) << std::dec;
void cout(vk::SurfaceCapabilitiesKHR const &surfaceCapabilities)
void pipelineBarrier(vk::PipelineStageFlags srcStageMask, vk::PipelineStageFlags dstStageMask, vk::DependencyFlags dependencyFlags, uint32_t memoryBarrierCount, const vk::MemoryBarrier *pMemoryBarriers, uint32_t bufferMemoryBarrierCount, const vk::BufferMemoryBarrier *pBufferMemoryBarriers, uint32_t imageMemoryBarrierCount, const vk::ImageMemoryBarrier *pImageMemoryBarriers, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createFence(const vk::FenceCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Fence *pFence, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getImageMemoryRequirements(vk::Image image, vk::MemoryRequirements *pMemoryRequirements, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result allocateMemory(const vk::MemoryAllocateInfo *pAllocateInfo, const vk::AllocationCallbacks *pAllocator, vk::DeviceMemory *pMemory, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD ResultValue< vk::Pipeline > createGraphicsPipeline(vk::PipelineCache pipelineCache, const vk::GraphicsPipelineCreateInfo &createInfo, Optional< const vk::AllocationCallbacks > allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const
void updateDescriptorSets(uint32_t descriptorWriteCount, const vk::WriteDescriptorSet *pDescriptorWrites, uint32_t descriptorCopyCount, const vk::CopyDescriptorSet *pDescriptorCopies, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createImageView(const vk::ImageViewCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::ImageView *pView, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS ResultValueType< void >::type bindBufferMemory(vk::Buffer buffer, vk::DeviceMemory memory, vk::DeviceSize memoryOffset, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const
VULKAN_HPP_NODISCARD Result waitForFences(uint32_t fenceCount, const vk::Fence *pFences, vk::Bool32 waitAll, uint64_t timeout, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS ResultValueType< void >::type bindImageMemory(vk::Image image, vk::DeviceMemory memory, vk::DeviceSize memoryOffset, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const
VULKAN_HPP_NODISCARD Result createRenderPass(const vk::RenderPassCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::RenderPass *pRenderPass, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createSampler(const vk::SamplerCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Sampler *pSampler, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createImage(const vk::ImageCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Image *pImage, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createBuffer(const vk::BufferCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Buffer *pBuffer, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createDescriptorSetLayout(const vk::DescriptorSetLayoutCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::DescriptorSetLayout *pSetLayout, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void destroyFence(vk::Fence fence, const vk::AllocationCallbacks *pAllocator, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getBufferMemoryRequirements(vk::Buffer buffer, vk::MemoryRequirements *pMemoryRequirements, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createSwapchainKHR(const vk::SwapchainCreateInfoKHR *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::SwapchainKHR *pSwapchain, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createFramebuffer(const vk::FramebufferCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Framebuffer *pFramebuffer, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSwapchainImagesKHR(vk::SwapchainKHR swapchain, uint32_t *pSwapchainImageCount, vk::Image *pSwapchainImages, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createDescriptorPool(const vk::DescriptorPoolCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::DescriptorPool *pDescriptorPool, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceFormatsKHR(vk::SurfaceKHR surface, uint32_t *pSurfaceFormatCount, vk::SurfaceFormatKHR *pSurfaceFormats, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getFormatProperties(vk::Format format, vk::FormatProperties *pFormatProperties, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getQueueFamilyProperties(uint32_t *pQueueFamilyPropertyCount, vk::QueueFamilyProperties *pQueueFamilyProperties, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceCapabilitiesKHR(vk::SurfaceKHR surface, vk::SurfaceCapabilitiesKHR *pSurfaceCapabilities, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfacePresentModesKHR(vk::SurfaceKHR surface, uint32_t *pPresentModeCount, vk::PresentModeKHR *pPresentModes, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
void getMemoryProperties(vk::PhysicalDeviceMemoryProperties *pMemoryProperties, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result createDevice(const vk::DeviceCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Device *pDevice, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result getSurfaceSupportKHR(uint32_t queueFamilyIndex, vk::SurfaceKHR surface, vk::Bool32 *pSupported, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD Result submit(uint32_t submitCount, const vk::SubmitInfo *pSubmits, vk::Fence fence, Dispatch const &d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT) const VULKAN_HPP_NOEXCEPT
CheckerboardImageGenerator(std::array< uint8_t, 3 > const &rgb0={ { 0, 0, 0 } }, std::array< uint8_t, 3 > const &rgb1={ { 255, 255, 255 } })
void operator()(void *data, vk::Extent2D &extent) const
MonochromeImageGenerator(std::array< unsigned char, 3 > const &rgb)
void operator()(void *data, vk::Extent2D const &extent) const
void operator()(void *data, vk::Extent2D const &extent) const
PixelsImageGenerator(vk::Extent2D const &extent, size_t channels, unsigned char const *pixels)
uint32_t findGraphicsQueueFamilyIndex(std::vector< vk::QueueFamilyProperties > const &queueFamilyProperties)
std::vector< vk::Framebuffer > createFramebuffers(vk::Device const &device, vk::RenderPass &renderPass, std::vector< vk::ImageView > const &imageViews, vk::ImageView const &depthImageView, vk::Extent2D const &extent)
vk::DebugUtilsMessengerCreateInfoEXT makeDebugUtilsMessengerCreateInfoEXT()
vk::DeviceMemory allocateDeviceMemory(vk::Device const &device, vk::PhysicalDeviceMemoryProperties const &memoryProperties, vk::MemoryRequirements const &memoryRequirements, vk::MemoryPropertyFlags memoryPropertyFlags)
vk::RenderPass createRenderPass(vk::Device const &device, vk::Format colorFormat, vk::Format depthFormat, vk::AttachmentLoadOp loadOp, vk::ImageLayout colorFinalLayout)
vk::Pipeline createGraphicsPipeline(vk::Device const &device, vk::PipelineCache const &pipelineCache, std::pair< vk::ShaderModule, vk::SpecializationInfo const * > const &vertexShaderData, std::pair< vk::ShaderModule, vk::SpecializationInfo const * > const &fragmentShaderData, uint32_t vertexStride, std::vector< std::pair< vk::Format, uint32_t >> const &vertexInputAttributeFormatOffset, vk::FrontFace frontFace, bool depthBuffered, vk::PipelineLayout const &pipelineLayout, vk::RenderPass const &renderPass)
vk::StructureChain< vk::InstanceCreateInfo, vk::DebugUtilsMessengerCreateInfoEXT > makeInstanceCreateInfoChain(vk::ApplicationInfo const &applicationInfo, std::vector< char const * > const &layers, std::vector< char const * > const &extensions)
uint32_t findMemoryType(vk::PhysicalDeviceMemoryProperties const &memoryProperties, uint32_t typeBits, vk::MemoryPropertyFlags requirementsMask)
void setImageLayout(vk::CommandBuffer const &commandBuffer, vk::Image image, vk::Format format, vk::ImageLayout oldImageLayout, vk::ImageLayout newImageLayout)
vk::Instance createInstance(std::string const &appName, std::string const &engineName, std::vector< std::string > const &layers, std::vector< std::string > const &extensions, uint32_t apiVersion)
const uint64_t FenceTimeout
vk::Device createDevice(vk::PhysicalDevice const &physicalDevice, uint32_t queueFamilyIndex, std::vector< std::string > const &extensions, vk::PhysicalDeviceFeatures const *physicalDeviceFeatures, void const *pNext)
VKAPI_ATTR VkBool32 VKAPI_CALL debugUtilsMessengerCallback(VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity, VkDebugUtilsMessageTypeFlagsEXT messageTypes, VkDebugUtilsMessengerCallbackDataEXT const *pCallbackData, void *)
vk::DescriptorSetLayout createDescriptorSetLayout(vk::Device const &device, std::vector< std::tuple< vk::DescriptorType, uint32_t, vk::ShaderStageFlags >> const &bindingData, vk::DescriptorSetLayoutCreateFlags flags)
WindowData createWindow(std::string const &windowName, vk::Extent2D const &extent)
std::vector< char const * > gatherLayers(std::vector< std::string > const &layers, std::vector< vk::LayerProperties > const &layerProperties)
std::pair< uint32_t, uint32_t > findGraphicsAndPresentQueueFamilyIndex(vk::PhysicalDevice physicalDevice, vk::SurfaceKHR const &surface)
void submitAndWait(vk::Device const &device, vk::Queue const &queue, vk::CommandBuffer const &commandBuffer)
std::vector< char const * > gatherExtensions(std::vector< std::string > const &extensions, std::vector< vk::ExtensionProperties > const &extensionProperties)
std::vector< std::string > getInstanceExtensions()
void updateDescriptorSets(vk::Device const &device, vk::DescriptorSet const &descriptorSet, std::vector< std::tuple< vk::DescriptorType, vk::Buffer const &, vk::DeviceSize, vk::BufferView const & >> const &bufferData, vk::su::TextureData const &textureData, uint32_t bindingOffset)
vk::DescriptorPool createDescriptorPool(vk::Device const &device, std::vector< vk::DescriptorPoolSize > const &poolSizes)
bool contains(std::vector< vk::ExtensionProperties > const &extensionProperties, std::string const &extensionName)
vk::Format pickDepthFormat(vk::PhysicalDevice const &physicalDevice)
vk::PresentModeKHR pickPresentMode(std::vector< vk::PresentModeKHR > const &presentModes)
vk::SurfaceFormatKHR pickSurfaceFormat(std::vector< vk::SurfaceFormatKHR > const &formats)
constexpr VULKAN_HPP_INLINE const T & clamp(const T &v, const T &lo, const T &hi)
std::vector< std::string > getDeviceExtensions()
VULKAN_HPP_CONSTEXPR_INLINE uint32_t False
@ eDepthStencilAttachmentRead
@ eDepthStencilAttachmentWrite
@ eDepthStencilAttachmentOptimal
@ eColorAttachmentOptimal
VULKAN_HPP_INLINE void swap(UniqueHandle< Type, Dispatch > &lhs, UniqueHandle< Type, Dispatch > &rhs) VULKAN_HPP_NOEXCEPT
SurfaceTransformFlagBitsKHR
VULKAN_HPP_INLINE std::string to_string(FormatFeatureFlags value)
CompositeAlphaFlagBitsKHR
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceExtensionProperties(const char *pLayerName, uint32_t *pPropertyCount, vk::ExtensionProperties *pProperties, Dispatch const &d) VULKAN_HPP_NOEXCEPT
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result createInstance(const vk::InstanceCreateInfo *pCreateInfo, const vk::AllocationCallbacks *pAllocator, vk::Instance *pInstance, Dispatch const &d) VULKAN_HPP_NOEXCEPT
@ eDepthStencilAttachment
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result enumerateInstanceLayerProperties(uint32_t *pPropertyCount, vk::LayerProperties *pProperties, Dispatch const &d) VULKAN_HPP_NOEXCEPT
uint32_t cmdBufLabelCount
const VkDebugUtilsLabelEXT * pCmdBufLabels
const char * pMessageIdName
const VkDebugUtilsLabelEXT * pQueueLabels
const VkDebugUtilsObjectNameInfoEXT * pObjects
vk::ArrayWrapper1D< vk::MemoryType, VK_MAX_MEMORY_TYPES > memoryTypes
vk::Extent2D maxImageExtent
vk::Extent2D minImageExtent
vk::SurfaceTransformFlagsKHR supportedTransforms
vk::SurfaceTransformFlagBitsKHR currentTransform
vk::CompositeAlphaFlagsKHR supportedCompositeAlpha
vk::Extent2D currentExtent
vk::SharingMode imageSharingMode
BufferData(vk::PhysicalDevice const &physicalDevice, vk::Device const &device, vk::DeviceSize size, vk::BufferUsageFlags usage, vk::MemoryPropertyFlags propertyFlags=vk::MemoryPropertyFlagBits::eHostVisible|vk::MemoryPropertyFlagBits::eHostCoherent)
DepthBufferData(vk::PhysicalDevice const &physicalDevice, vk::Device const &device, vk::Format format, vk::Extent2D const &extent)
vk::DeviceMemory deviceMemory
ImageData(vk::PhysicalDevice const &physicalDevice, vk::Device const &device, vk::Format format, vk::Extent2D const &extent, vk::ImageTiling tiling, vk::ImageUsageFlags usage, vk::ImageLayout initialLayout, vk::MemoryPropertyFlags memoryProperties, vk::ImageAspectFlags aspectMask)
SurfaceData(vk::Instance const &instance, std::string const &windowName, vk::Extent2D const &extent)
vk::SwapchainKHR swapChain
std::vector< vk::ImageView > imageViews
SwapChainData(vk::PhysicalDevice const &physicalDevice, vk::Device const &device, vk::SurfaceKHR const &surface, vk::Extent2D const &extent, vk::ImageUsageFlags usage, vk::SwapchainKHR const &oldSwapChain, uint32_t graphicsFamilyIndex, uint32_t presentFamilyIndex)
std::vector< vk::Image > images
std::unique_ptr< BufferData > stagingBufferData
std::unique_ptr< ImageData > imageData
TextureData(vk::PhysicalDevice const &physicalDevice, vk::Device const &device, vk::Extent2D const &extent_={ 256, 256 }, vk::ImageUsageFlags usageFlags={}, vk::FormatFeatureFlags formatFeatureFlags={}, bool anisotropyEnable=false, bool forceStaging=false)
UUID(uint8_t const data[VK_UUID_SIZE])
uint8_t m_data[VK_UUID_SIZE]
WindowData(GLFWwindow *wnd, std::string const &name, vk::Extent2D const &extent)
std::ostream & operator<<(std::ostream &os, vk::su::UUID const &uuid)
#define VK_KHR_SURFACE_EXTENSION_NAME
struct VkInstance_T * VkInstance
VkFlags VkDebugUtilsMessageTypeFlagsEXT
#define VK_EXT_DEBUG_UTILS_EXTENSION_NAME
#define VK_KHR_SWAPCHAIN_EXTENSION_NAME
#define VK_QUEUE_FAMILY_IGNORED
VkDebugUtilsMessageSeverityFlagBitsEXT
#define VULKAN_HPP_DEFAULT_DISPATCHER
#define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE