diff --git a/VkCppGenerator.cpp b/VkCppGenerator.cpp index e4df018..c2ae184 100644 --- a/VkCppGenerator.cpp +++ b/VkCppGenerator.cpp @@ -350,6 +350,13 @@ struct VkData std::string vulkanLicenseHeader; }; +enum class FunctionType +{ + standard, + singular, + initializerList +}; + void createDefaults( VkData const& vkData, std::map & defaultValues ); std::string determineFunctionName(std::string const& name, CommandData const& commandData); std::string determineReturnType(CommandData const& commandData, size_t returnIndex, bool isVector = false); @@ -391,11 +398,11 @@ std::string strip(std::string const& value, std::string const& prefix, std::stri std::string stripCommand(std::string const& value); std::string toCamelCase(std::string const& value); std::string toUpperCase(std::string const& name); -void writeCall(std::ofstream & ofs, std::string const& name, size_t templateIndex, CommandData const& commandData, std::set const& vkTypes, std::map const& vectorParameters, size_t returnIndex, bool firstCall, bool singular); +void writeCall(std::ofstream & ofs, std::string const& name, size_t templateIndex, CommandData const& commandData, std::set const& vkTypes, std::map const& vectorParameters, size_t returnIndex, bool firstCall, FunctionType ft); void writeEnumsToString(std::ofstream & ofs, VkData const& vkData); void writeExceptionCheck(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::vector const& successCodes); -void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::string const& returnType, size_t templateIndex, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes, size_t returnIndex, std::map const& vectorParameters, bool singular); -void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters, bool singular); +void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::string const& returnType, size_t templateIndex, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes, size_t returnIndex, std::map const& vectorParameters, FunctionType ft); +void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters, FunctionType ft); void writeMemberData(std::ofstream & ofs, MemberData const& memberData, std::set const& vkTypes); void writeStructConstructor( std::ofstream & ofs, std::string const& name, std::string const& memberName, StructData const& structData, std::set const& vkTypes, std::map const& defaultValues ); void writeStructGetter( std::ofstream & ofs, MemberData const& memberData, std::string const& memberName, std::set const& vkTypes, bool constVersion ); @@ -1550,7 +1557,7 @@ std::string toUpperCase(std::string const& name) return convertedName; } -void writeCall(std::ofstream & ofs, std::string const& name, size_t templateIndex, CommandData const& commandData, std::set const& vkTypes, std::map const& vectorParameters, size_t returnIndex, bool firstCall, bool singular) +void writeCall(std::ofstream & ofs, std::string const& name, size_t templateIndex, CommandData const& commandData, std::set const& vkTypes, std::map const& vectorParameters, size_t returnIndex, bool firstCall, FunctionType ft) { std::map countIndices; for (std::map::const_iterator it = vectorParameters.begin(); it != vectorParameters.end(); ++it) @@ -1587,7 +1594,7 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde } else { - if (singular) + if (ft == FunctionType::singular) { if (templateIndex == it->second) { @@ -1634,15 +1641,19 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde ofs << "Vk"; } ofs << commandData.arguments[it->first].pureType << "*>( "; - if (singular) + if (ft == FunctionType::singular) { ofs << "&"; } - ofs << reduceName(commandData.arguments[it->first].name, singular); - if (!singular) + ofs << reduceName(commandData.arguments[it->first].name, ft == FunctionType::singular); + if ((ft == FunctionType::standard) || ((ft != FunctionType::singular) && (it->first == returnIndex))) { ofs << ".data()"; } + else if (ft == FunctionType::initializerList) + { + ofs << ".begin()"; + } ofs << " )"; } else if (commandData.arguments[it->first].pureType == "char") @@ -1659,14 +1670,21 @@ void writeCall(std::ofstream & ofs, std::string const& name, size_t templateInde } else { - if (singular) + if (ft == FunctionType::singular) { ofs << "&"; } - ofs << reduceName(commandData.arguments[it->first].name, singular); - if (!singular) + ofs << reduceName(commandData.arguments[it->first].name, ft == FunctionType::singular); + switch (ft) { - ofs << ".data()"; + case FunctionType::initializerList: + ofs << ".begin()"; + break; + case FunctionType::standard: + ofs << ".data()"; + break; + default: + break; } } } @@ -1754,7 +1772,7 @@ void writeExceptionCheck(std::ofstream & ofs, std::string const& indentation, st << indentation << " }" << std::endl; } -void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::string const& returnType, size_t templateIndex, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes, size_t returnIndex, std::map const& vectorParameters, bool singular) +void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std::string const& className, std::string const& functionName, std::string const& returnType, size_t templateIndex, DependencyData const& dependencyData, CommandData const& commandData, std::set const& vkTypes, size_t returnIndex, std::map const& vectorParameters, FunctionType ft) { ofs << indentation << "{" << std::endl; @@ -1765,7 +1783,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: } // add some error checks if multiple vectors need to have the same size - if (!singular && (1 < vectorParameters.size())) + if ((ft != FunctionType::singular) && (1 < vectorParameters.size())) { for (std::map::const_iterator it0 = vectorParameters.begin(); it0 != vectorParameters.end(); ++it0) { @@ -1788,9 +1806,9 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: // write the local variable to hold a returned value if ((returnIndex != ~0) && (commandData.returnType != returnType)) { - ofs << indentation << " " << (singular ? commandData.arguments[returnIndex].pureType : returnType) << " " << reduceName(commandData.arguments[returnIndex].name, singular); + ofs << indentation << " " << ((ft == FunctionType::singular) ? commandData.arguments[returnIndex].pureType : returnType) << " " << reduceName(commandData.arguments[returnIndex].name, ft == FunctionType::singular); - if (!singular) + if (ft != FunctionType::singular) { std::map::const_iterator it = vectorParameters.find(returnIndex); if (it != vectorParameters.end() && !commandData.twoStep) @@ -1855,7 +1873,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: assert(!commandData.twoStep); ofs << "return "; } - writeCall(ofs, dependencyData.name, templateIndex, commandData, vkTypes, vectorParameters, returnIndex, true, singular); + writeCall(ofs, dependencyData.name, templateIndex, commandData, vkTypes, vectorParameters, returnIndex, true, ft); if (commandData.returnType == "Result") { ofs << " )"; @@ -1889,7 +1907,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: { ofs << indentation << " "; } - writeCall(ofs, dependencyData.name, templateIndex, commandData, vkTypes, vectorParameters, returnIndex, false, singular); + writeCall(ofs, dependencyData.name, templateIndex, commandData, vkTypes, vectorParameters, returnIndex, false, ft); if (commandData.returnType == "Result") { ofs << " )"; @@ -1913,7 +1931,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: // return the returned value if ((returnIndex != ~0) && (commandData.returnType != returnType)) { - ofs << indentation << " return " << reduceName(commandData.arguments[returnIndex].name, singular) << ";" << std::endl; + ofs << indentation << " return " << reduceName(commandData.arguments[returnIndex].name, ft == FunctionType::singular) << ";" << std::endl; } else if (returnType == "Result") { @@ -1923,7 +1941,7 @@ void writeFunctionBody(std::ofstream & ofs, std::string const& indentation, std: ofs << indentation << "}" << std::endl; } -void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters, bool singular) +void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, std::string const& returnType, std::string const& name, CommandData const& commandData, size_t returnIndex, size_t templateIndex, std::map const& vectorParameters, FunctionType ft) { std::set skippedArguments; for (std::map::const_iterator it = vectorParameters.begin(); it != vectorParameters.end(); ++it) @@ -1954,7 +1972,7 @@ void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, st { ofs << "inline "; } - ofs << ((singular && (returnIndex != ~0)) ? commandData.arguments[returnIndex].pureType : returnType) << " " << reduceName(name, singular) << "("; + ofs << (((ft == FunctionType::singular) && (returnIndex != ~0)) ? commandData.arguments[returnIndex].pureType : returnType) << " " << reduceName(name, ft == FunctionType::singular) << "("; if (skippedArguments.size() + (commandData.handleCommand ? 1 : 0) < commandData.arguments.size()) { size_t lastArgument = ~0; @@ -2012,23 +2030,39 @@ void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, st { if (templateIndex == i) { - ofs << (singular ? "T" : "std::vector"); + switch (ft) + { + case FunctionType::initializerList : + ofs << "std::initializer_list"; + break; + case FunctionType::singular : + ofs << "T"; + break; + case FunctionType::standard : + ofs << "std::vector"; + break; + } } else if (commandData.arguments[i].pureType == "char") { ofs << "std::string"; } - else if (commandData.arguments[i].pureType == "void") - { - ofs << "std::vector"; - } - else if (singular) - { - ofs << commandData.arguments[i].pureType; - } else { - ofs << "std::vector<" << commandData.arguments[i].pureType << ">"; + switch (ft) + { + case FunctionType::initializerList : + ofs << "std::initializer_list<"; + break; + case FunctionType::standard : + ofs << "std::vector<"; + break; + } + ofs << commandData.arguments[i].pureType; + if (ft != FunctionType::singular) + { + ofs << ">"; + } } if (commandData.arguments[i].type.find("const") != std::string::npos) { @@ -2039,7 +2073,7 @@ void writeFunctionHeader(std::ofstream & ofs, std::string const& indentation, st { ofs << "> const"; } - ofs << " & " << reduceName(commandData.arguments[i].name, singular); + ofs << " & " << reduceName(commandData.arguments[i].name, ft == FunctionType::singular); if (optional && (i == lastArgument)) { ofs << " = nullptr"; @@ -2340,13 +2374,16 @@ void writeTypeCommandEnhanced(std::ofstream & ofs, std::string const& indentatio std::map::const_iterator returnVector = vectorParameters.find(returnIndex); std::string returnType = determineReturnType(commandData, returnIndex, returnVector != vectorParameters.end()); - writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters, false); - writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters, false); + writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters, FunctionType::standard); + writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters, FunctionType::standard); if (hasSizedVectorParameter(vectorParameters, returnIndex)) { ofs << std::endl; - writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters, true); - writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters, true); + writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters, FunctionType::initializerList); + writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters, FunctionType::initializerList); + ofs << std::endl; + writeFunctionHeader(ofs, indentation, returnType, functionName, commandData, returnIndex, templateIndex, vectorParameters, FunctionType::singular); + writeFunctionBody(ofs, indentation, className, functionName, returnType, templateIndex, dependencyData, commandData, vkTypes, returnIndex, vectorParameters, FunctionType::singular); } leaveProtect(ofs, commandData.protect); } diff --git a/vulkan/vk_cpp.hpp b/vulkan/vk_cpp.hpp index 2485f8a..7f97735 100644 --- a/vulkan/vk_cpp.hpp +++ b/vulkan/vk_cpp.hpp @@ -17657,6 +17657,11 @@ namespace vk vkCmdSetViewport( m_commandBuffer, firstViewport, static_cast( viewports.size() ), reinterpret_cast( viewports.data() ) ); } + void setViewport( uint32_t firstViewport, std::initializer_list const & viewports ) const + { + vkCmdSetViewport( m_commandBuffer, firstViewport, static_cast( viewports.size() ), reinterpret_cast( viewports.begin() ) ); + } + void setViewport( uint32_t firstViewport, Viewport const & viewport ) const { vkCmdSetViewport( m_commandBuffer, firstViewport, 1, reinterpret_cast( &viewport ) ); @@ -17674,6 +17679,11 @@ namespace vk vkCmdSetScissor( m_commandBuffer, firstScissor, static_cast( scissors.size() ), reinterpret_cast( scissors.data() ) ); } + void setScissor( uint32_t firstScissor, std::initializer_list const & scissors ) const + { + vkCmdSetScissor( m_commandBuffer, firstScissor, static_cast( scissors.size() ), reinterpret_cast( scissors.begin() ) ); + } + void setScissor( uint32_t firstScissor, Rect2D const & scissor ) const { vkCmdSetScissor( m_commandBuffer, firstScissor, 1, reinterpret_cast( &scissor ) ); @@ -17789,6 +17799,11 @@ namespace vk vkCmdBindDescriptorSets( m_commandBuffer, static_cast( pipelineBindPoint ), static_cast( layout ), firstSet, static_cast( descriptorSets.size() ), reinterpret_cast( descriptorSets.data() ), static_cast( dynamicOffsets.size() ), dynamicOffsets.data() ); } + void bindDescriptorSets( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, std::initializer_list const & descriptorSets, std::initializer_list const & dynamicOffsets ) const + { + vkCmdBindDescriptorSets( m_commandBuffer, static_cast( pipelineBindPoint ), static_cast( layout ), firstSet, static_cast( descriptorSets.size() ), reinterpret_cast( descriptorSets.begin() ), static_cast( dynamicOffsets.size() ), dynamicOffsets.begin() ); + } + void bindDescriptorSet( PipelineBindPoint pipelineBindPoint, PipelineLayout layout, uint32_t firstSet, DescriptorSet const & descriptorSet, uint32_t const & dynamicOffset ) const { vkCmdBindDescriptorSets( m_commandBuffer, static_cast( pipelineBindPoint ), static_cast( layout ), firstSet, 1, reinterpret_cast( &descriptorSet ), 1, &dynamicOffset ); @@ -17824,6 +17839,15 @@ namespace vk vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, static_cast( buffers.size() ), reinterpret_cast( buffers.data() ), offsets.data() ); } + void bindVertexBuffers( uint32_t firstBinding, std::initializer_list const & buffers, std::initializer_list const & offsets ) const + { + if ( buffers.size() != offsets.size() ) + { + throw std::logic_error( "vk::CommandBuffer::bindVertexBuffers: buffers.size() != offsets.size()" ); + } + vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, static_cast( buffers.size() ), reinterpret_cast( buffers.begin() ), offsets.begin() ); + } + void bindVertexBuffer( uint32_t firstBinding, Buffer const & buffer, DeviceSize const & offset ) const { vkCmdBindVertexBuffers( m_commandBuffer, firstBinding, 1, reinterpret_cast( &buffer ), &offset ); @@ -17925,6 +17949,11 @@ namespace vk vkCmdCopyBuffer( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstBuffer ), static_cast( regions.size() ), reinterpret_cast( regions.data() ) ); } + void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, std::initializer_list const & regions ) const + { + vkCmdCopyBuffer( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstBuffer ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ) ); + } + void copyBuffer( Buffer srcBuffer, Buffer dstBuffer, BufferCopy const & region ) const { vkCmdCopyBuffer( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstBuffer ), 1, reinterpret_cast( ®ion ) ); @@ -17942,6 +17971,11 @@ namespace vk vkCmdCopyImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.data() ) ); } + void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, std::initializer_list const & regions ) const + { + vkCmdCopyImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ) ); + } + void copyImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ImageCopy const & region ) const { vkCmdCopyImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), 1, reinterpret_cast( ®ion ) ); @@ -17959,6 +17993,11 @@ namespace vk vkCmdBlitImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.data() ), static_cast( filter ) ); } + void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, std::initializer_list const & regions, Filter filter ) const + { + vkCmdBlitImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ), static_cast( filter ) ); + } + void blitImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ImageBlit const & region, Filter filter ) const { vkCmdBlitImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), 1, reinterpret_cast( ®ion ), static_cast( filter ) ); @@ -17976,6 +18015,11 @@ namespace vk vkCmdCopyBufferToImage( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.data() ) ); } + void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, std::initializer_list const & regions ) const + { + vkCmdCopyBufferToImage( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ) ); + } + void copyBufferToImage( Buffer srcBuffer, Image dstImage, ImageLayout dstImageLayout, BufferImageCopy const & region ) const { vkCmdCopyBufferToImage( m_commandBuffer, static_cast( srcBuffer ), static_cast( dstImage ), static_cast( dstImageLayout ), 1, reinterpret_cast( ®ion ) ); @@ -17993,6 +18037,11 @@ namespace vk vkCmdCopyImageToBuffer( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstBuffer ), static_cast( regions.size() ), reinterpret_cast( regions.data() ) ); } + void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, std::initializer_list const & regions ) const + { + vkCmdCopyImageToBuffer( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstBuffer ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ) ); + } + void copyImageToBuffer( Image srcImage, ImageLayout srcImageLayout, Buffer dstBuffer, BufferImageCopy const & region ) const { vkCmdCopyImageToBuffer( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstBuffer ), 1, reinterpret_cast( ®ion ) ); @@ -18038,6 +18087,11 @@ namespace vk vkCmdClearColorImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &color ), static_cast( ranges.size() ), reinterpret_cast( ranges.data() ) ); } + void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, std::initializer_list const & ranges ) const + { + vkCmdClearColorImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &color ), static_cast( ranges.size() ), reinterpret_cast( ranges.begin() ) ); + } + void clearColorImage( Image image, ImageLayout imageLayout, const ClearColorValue & color, ImageSubresourceRange const & range ) const { vkCmdClearColorImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &color ), 1, reinterpret_cast( &range ) ); @@ -18055,6 +18109,11 @@ namespace vk vkCmdClearDepthStencilImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &depthStencil ), static_cast( ranges.size() ), reinterpret_cast( ranges.data() ) ); } + void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, std::initializer_list const & ranges ) const + { + vkCmdClearDepthStencilImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &depthStencil ), static_cast( ranges.size() ), reinterpret_cast( ranges.begin() ) ); + } + void clearDepthStencilImage( Image image, ImageLayout imageLayout, const ClearDepthStencilValue & depthStencil, ImageSubresourceRange const & range ) const { vkCmdClearDepthStencilImage( m_commandBuffer, static_cast( image ), static_cast( imageLayout ), reinterpret_cast( &depthStencil ), 1, reinterpret_cast( &range ) ); @@ -18072,6 +18131,11 @@ namespace vk vkCmdClearAttachments( m_commandBuffer, static_cast( attachments.size() ), reinterpret_cast( attachments.data() ), static_cast( rects.size() ), reinterpret_cast( rects.data() ) ); } + void clearAttachments( std::initializer_list const & attachments, std::initializer_list const & rects ) const + { + vkCmdClearAttachments( m_commandBuffer, static_cast( attachments.size() ), reinterpret_cast( attachments.begin() ), static_cast( rects.size() ), reinterpret_cast( rects.begin() ) ); + } + void clearAttachment( ClearAttachment const & attachment, ClearRect const & rect ) const { vkCmdClearAttachments( m_commandBuffer, 1, reinterpret_cast( &attachment ), 1, reinterpret_cast( &rect ) ); @@ -18089,6 +18153,11 @@ namespace vk vkCmdResolveImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.data() ) ); } + void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, std::initializer_list const & regions ) const + { + vkCmdResolveImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), static_cast( regions.size() ), reinterpret_cast( regions.begin() ) ); + } + void resolveImage( Image srcImage, ImageLayout srcImageLayout, Image dstImage, ImageLayout dstImageLayout, ImageResolve const & region ) const { vkCmdResolveImage( m_commandBuffer, static_cast( srcImage ), static_cast( srcImageLayout ), static_cast( dstImage ), static_cast( dstImageLayout ), 1, reinterpret_cast( ®ion ) ); @@ -18134,6 +18203,11 @@ namespace vk vkCmdWaitEvents( m_commandBuffer, static_cast( events.size() ), reinterpret_cast( events.data() ), static_cast( srcStageMask ), static_cast( dstStageMask ), static_cast( memoryBarriers.size() ), reinterpret_cast( memoryBarriers.data() ), static_cast( bufferMemoryBarriers.size() ), reinterpret_cast( bufferMemoryBarriers.data() ), static_cast( imageMemoryBarriers.size() ), reinterpret_cast( imageMemoryBarriers.data() ) ); } + void waitEvents( std::initializer_list const & events, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, std::initializer_list const & memoryBarriers, std::initializer_list const & bufferMemoryBarriers, std::initializer_list const & imageMemoryBarriers ) const + { + vkCmdWaitEvents( m_commandBuffer, static_cast( events.size() ), reinterpret_cast( events.begin() ), static_cast( srcStageMask ), static_cast( dstStageMask ), static_cast( memoryBarriers.size() ), reinterpret_cast( memoryBarriers.begin() ), static_cast( bufferMemoryBarriers.size() ), reinterpret_cast( bufferMemoryBarriers.begin() ), static_cast( imageMemoryBarriers.size() ), reinterpret_cast( imageMemoryBarriers.begin() ) ); + } + void waitEvent( Event const & event, PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, MemoryBarrier const & memoryBarrier, BufferMemoryBarrier const & bufferMemoryBarrier, ImageMemoryBarrier const & imageMemoryBarrier ) const { vkCmdWaitEvents( m_commandBuffer, 1, reinterpret_cast( &event ), static_cast( srcStageMask ), static_cast( dstStageMask ), 1, reinterpret_cast( &memoryBarrier ), 1, reinterpret_cast( &bufferMemoryBarrier ), 1, reinterpret_cast( &imageMemoryBarrier ) ); @@ -18151,6 +18225,11 @@ namespace vk vkCmdPipelineBarrier( m_commandBuffer, static_cast( srcStageMask ), static_cast( dstStageMask ), static_cast( dependencyFlags ), static_cast( memoryBarriers.size() ), reinterpret_cast( memoryBarriers.data() ), static_cast( bufferMemoryBarriers.size() ), reinterpret_cast( bufferMemoryBarriers.data() ), static_cast( imageMemoryBarriers.size() ), reinterpret_cast( imageMemoryBarriers.data() ) ); } + void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, std::initializer_list const & memoryBarriers, std::initializer_list const & bufferMemoryBarriers, std::initializer_list const & imageMemoryBarriers ) const + { + vkCmdPipelineBarrier( m_commandBuffer, static_cast( srcStageMask ), static_cast( dstStageMask ), static_cast( dependencyFlags ), static_cast( memoryBarriers.size() ), reinterpret_cast( memoryBarriers.begin() ), static_cast( bufferMemoryBarriers.size() ), reinterpret_cast( bufferMemoryBarriers.begin() ), static_cast( imageMemoryBarriers.size() ), reinterpret_cast( imageMemoryBarriers.begin() ) ); + } + void pipelineBarrier( PipelineStageFlags srcStageMask, PipelineStageFlags dstStageMask, DependencyFlags dependencyFlags, MemoryBarrier const & memoryBarrier, BufferMemoryBarrier const & bufferMemoryBarrier, ImageMemoryBarrier const & imageMemoryBarrier ) const { vkCmdPipelineBarrier( m_commandBuffer, static_cast( srcStageMask ), static_cast( dstStageMask ), static_cast( dependencyFlags ), 1, reinterpret_cast( &memoryBarrier ), 1, reinterpret_cast( &bufferMemoryBarrier ), 1, reinterpret_cast( &imageMemoryBarrier ) ); @@ -18239,6 +18318,12 @@ namespace vk vkCmdPushConstants( m_commandBuffer, static_cast( layout ), static_cast( stageFlags ), offset, static_cast( values.size() * sizeof( T ) ), reinterpret_cast( values.data() ) ); } + template + void pushConstants( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, std::initializer_list const & values ) const + { + vkCmdPushConstants( m_commandBuffer, static_cast( layout ), static_cast( stageFlags ), offset, static_cast( values.size() * sizeof( T ) ), reinterpret_cast( values.begin() ) ); + } + template void pushConstant( PipelineLayout layout, ShaderStageFlags stageFlags, uint32_t offset, T const & value ) const { @@ -18297,6 +18382,11 @@ namespace vk vkCmdExecuteCommands( m_commandBuffer, static_cast( commandBuffers.size() ), reinterpret_cast( commandBuffers.data() ) ); } + void executeCommands( std::initializer_list const & commandBuffers ) const + { + vkCmdExecuteCommands( m_commandBuffer, static_cast( commandBuffers.size() ), reinterpret_cast( commandBuffers.begin() ) ); + } + void executeCommand( CommandBuffer const & commandBuffer ) const { vkCmdExecuteCommands( m_commandBuffer, 1, reinterpret_cast( &commandBuffer ) ); @@ -18881,6 +18971,15 @@ namespace vk } } + void submit( std::initializer_list const & submits, Fence fence ) const + { + Result result = static_cast( vkQueueSubmit( m_queue, static_cast( submits.size() ), reinterpret_cast( submits.begin() ), static_cast( fence ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Queue::submit" ); + } + } + void submit( SubmitInfo const & submit, Fence fence ) const { Result result = static_cast( vkQueueSubmit( m_queue, 1, reinterpret_cast( &submit ), static_cast( fence ) ) ); @@ -18924,6 +19023,15 @@ namespace vk } } + void bindSparse( std::initializer_list const & bindInfo, Fence fence ) const + { + Result result = static_cast( vkQueueBindSparse( m_queue, static_cast( bindInfo.size() ), reinterpret_cast( bindInfo.begin() ), static_cast( fence ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Queue::bindSparse" ); + } + } + void bindSparse( BindSparseInfo const & bindInfo, Fence fence ) const { Result result = static_cast( vkQueueBindSparse( m_queue, 1, reinterpret_cast( &bindInfo ), static_cast( fence ) ) ); @@ -20335,6 +20443,15 @@ namespace vk } } + void flushMappedMemoryRanges( std::initializer_list const & memoryRanges ) const + { + Result result = static_cast( vkFlushMappedMemoryRanges( m_device, static_cast( memoryRanges.size() ), reinterpret_cast( memoryRanges.begin() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::flushMappedMemoryRanges" ); + } + } + void flushMappedMemoryRange( MappedMemoryRange const & memoryRange ) const { Result result = static_cast( vkFlushMappedMemoryRanges( m_device, 1, reinterpret_cast( &memoryRange ) ) ); @@ -20360,6 +20477,15 @@ namespace vk } } + void invalidateMappedMemoryRanges( std::initializer_list const & memoryRanges ) const + { + Result result = static_cast( vkInvalidateMappedMemoryRanges( m_device, static_cast( memoryRanges.size() ), reinterpret_cast( memoryRanges.begin() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::invalidateMappedMemoryRanges" ); + } + } + void invalidateMappedMemoryRange( MappedMemoryRange const & memoryRange ) const { Result result = static_cast( vkInvalidateMappedMemoryRanges( m_device, 1, reinterpret_cast( &memoryRange ) ) ); @@ -20510,6 +20636,15 @@ namespace vk } } + void resetFences( std::initializer_list const & fences ) const + { + Result result = static_cast( vkResetFences( m_device, static_cast( fences.size() ), reinterpret_cast( fences.begin() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::resetFences" ); + } + } + void resetFence( Fence const & fence ) const { Result result = static_cast( vkResetFences( m_device, 1, reinterpret_cast( &fence ) ) ); @@ -20555,6 +20690,16 @@ namespace vk return result; } + Result waitForFences( std::initializer_list const & fences, Bool32 waitAll, uint64_t timeout ) const + { + Result result = static_cast( vkWaitForFences( m_device, static_cast( fences.size() ), reinterpret_cast( fences.begin() ), waitAll, timeout ) ); + if ( ( result != Result::eSuccess ) && ( result != Result::eTimeout ) ) + { + throw std::system_error( result, "vk::Device::waitForFences" ); + } + return result; + } + Result waitForFence( Fence const & fence, Bool32 waitAll, uint64_t timeout ) const { Result result = static_cast( vkWaitForFences( m_device, 1, reinterpret_cast( &fence ), waitAll, timeout ) ); @@ -20962,6 +21107,15 @@ namespace vk } } + void mergePipelineCaches( PipelineCache dstCache, std::initializer_list const & srcCaches ) const + { + Result result = static_cast( vkMergePipelineCaches( m_device, static_cast( dstCache ), static_cast( srcCaches.size() ), reinterpret_cast( srcCaches.begin() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::mergePipelineCaches" ); + } + } + void mergePipelineCache( PipelineCache dstCache, PipelineCache const & srcCache ) const { Result result = static_cast( vkMergePipelineCaches( m_device, static_cast( dstCache ), 1, reinterpret_cast( &srcCache ) ) ); @@ -20989,6 +21143,17 @@ namespace vk return pipelines; } + std::vector createGraphicsPipelines( PipelineCache pipelineCache, std::initializer_list const & createInfos, Optional const & allocator = nullptr ) const + { + std::vector pipelines( createInfos.size() ); + Result result = static_cast( vkCreateGraphicsPipelines( m_device, static_cast( pipelineCache ), static_cast( createInfos.size() ), reinterpret_cast( createInfos.begin() ), reinterpret_cast( static_cast( allocator)), reinterpret_cast( pipelines.data() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::createGraphicsPipelines" ); + } + return pipelines; + } + Pipeline createGraphicsPipeline( PipelineCache pipelineCache, GraphicsPipelineCreateInfo const & createInfo, Optional const & allocator = nullptr ) const { Pipeline pipeline; @@ -21018,6 +21183,17 @@ namespace vk return pipelines; } + std::vector createComputePipelines( PipelineCache pipelineCache, std::initializer_list const & createInfos, Optional const & allocator = nullptr ) const + { + std::vector pipelines( createInfos.size() ); + Result result = static_cast( vkCreateComputePipelines( m_device, static_cast( pipelineCache ), static_cast( createInfos.size() ), reinterpret_cast( createInfos.begin() ), reinterpret_cast( static_cast( allocator)), reinterpret_cast( pipelines.data() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::createComputePipelines" ); + } + return pipelines; + } + Pipeline createComputePipeline( PipelineCache pipelineCache, ComputePipelineCreateInfo const & createInfo, Optional const & allocator = nullptr ) const { Pipeline pipeline; @@ -21213,6 +21389,15 @@ namespace vk } } + void freeDescriptorSets( DescriptorPool descriptorPool, std::initializer_list const & descriptorSets ) const + { + Result result = static_cast( vkFreeDescriptorSets( m_device, static_cast( descriptorPool ), static_cast( descriptorSets.size() ), reinterpret_cast( descriptorSets.begin() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::freeDescriptorSets" ); + } + } + void freeDescriptorSet( DescriptorPool descriptorPool, DescriptorSet const & descriptorSet ) const { Result result = static_cast( vkFreeDescriptorSets( m_device, static_cast( descriptorPool ), 1, reinterpret_cast( &descriptorSet ) ) ); @@ -21234,6 +21419,11 @@ namespace vk vkUpdateDescriptorSets( m_device, static_cast( descriptorWrites.size() ), reinterpret_cast( descriptorWrites.data() ), static_cast( descriptorCopies.size() ), reinterpret_cast( descriptorCopies.data() ) ); } + void updateDescriptorSets( std::initializer_list const & descriptorWrites, std::initializer_list const & descriptorCopies ) const + { + vkUpdateDescriptorSets( m_device, static_cast( descriptorWrites.size() ), reinterpret_cast( descriptorWrites.begin() ), static_cast( descriptorCopies.size() ), reinterpret_cast( descriptorCopies.begin() ) ); + } + void updateDescriptorSet( WriteDescriptorSet const & descriptorWrite, CopyDescriptorSet const & descriptorCopie ) const { vkUpdateDescriptorSets( m_device, 1, reinterpret_cast( &descriptorWrite ), 1, reinterpret_cast( &descriptorCopie ) ); @@ -21391,6 +21581,11 @@ namespace vk vkFreeCommandBuffers( m_device, static_cast( commandPool ), static_cast( commandBuffers.size() ), reinterpret_cast( commandBuffers.data() ) ); } + void freeCommandBuffers( CommandPool commandPool, std::initializer_list const & commandBuffers ) const + { + vkFreeCommandBuffers( m_device, static_cast( commandPool ), static_cast( commandBuffers.size() ), reinterpret_cast( commandBuffers.begin() ) ); + } + void freeCommandBuffer( CommandPool commandPool, CommandBuffer const & commandBuffer ) const { vkFreeCommandBuffers( m_device, static_cast( commandPool ), 1, reinterpret_cast( &commandBuffer ) ); @@ -21414,6 +21609,17 @@ namespace vk return swapchains; } + std::vector createSharedSwapchainsKHR( std::initializer_list const & createInfos, Optional const & allocator = nullptr ) const + { + std::vector swapchains( createInfos.size() ); + Result result = static_cast( vkCreateSharedSwapchainsKHR( m_device, static_cast( createInfos.size() ), reinterpret_cast( createInfos.begin() ), reinterpret_cast( static_cast( allocator)), reinterpret_cast( swapchains.data() ) ) ); + if ( result != Result::eSuccess ) + { + throw std::system_error( result, "vk::Device::createSharedSwapchainsKHR" ); + } + return swapchains; + } + SwapchainKHR createSharedSwapchainsKHR( SwapchainCreateInfoKHR const & createInfo, Optional const & allocator = nullptr ) const { SwapchainKHR swapchain;