init
This commit is contained in:
@@ -0,0 +1,667 @@
|
||||
/* Copyright (c) 2019-2024, Sascha Willems
|
||||
*
|
||||
* SPDX-License-Identifier: Apache-2.0
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 the "License";
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include "volk.h"
|
||||
#include <vector>
|
||||
|
||||
namespace vkb
|
||||
{
|
||||
namespace initializers
|
||||
{
|
||||
inline VkMemoryAllocateInfo memory_allocate_info()
|
||||
{
|
||||
VkMemoryAllocateInfo memory_allocation{};
|
||||
memory_allocation.sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO;
|
||||
return memory_allocation;
|
||||
}
|
||||
|
||||
inline VkMappedMemoryRange mapped_memory_range()
|
||||
{
|
||||
VkMappedMemoryRange mapped_memory_range{};
|
||||
mapped_memory_range.sType = VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE;
|
||||
return mapped_memory_range;
|
||||
}
|
||||
|
||||
inline VkCommandBufferAllocateInfo command_buffer_allocate_info(
|
||||
VkCommandPool command_pool,
|
||||
VkCommandBufferLevel level,
|
||||
uint32_t buffer_count)
|
||||
{
|
||||
VkCommandBufferAllocateInfo command_buffer_allocate_info{};
|
||||
command_buffer_allocate_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_ALLOCATE_INFO;
|
||||
command_buffer_allocate_info.commandPool = command_pool;
|
||||
command_buffer_allocate_info.level = level;
|
||||
command_buffer_allocate_info.commandBufferCount = buffer_count;
|
||||
return command_buffer_allocate_info;
|
||||
}
|
||||
|
||||
inline VkCommandPoolCreateInfo command_pool_create_info()
|
||||
{
|
||||
VkCommandPoolCreateInfo command_pool_create_info{};
|
||||
command_pool_create_info.sType = VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO;
|
||||
return command_pool_create_info;
|
||||
}
|
||||
|
||||
inline VkCommandBufferBeginInfo command_buffer_begin_info()
|
||||
{
|
||||
VkCommandBufferBeginInfo cmdBufferBeginInfo{};
|
||||
cmdBufferBeginInfo.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_BEGIN_INFO;
|
||||
return cmdBufferBeginInfo;
|
||||
}
|
||||
|
||||
inline VkCommandBufferInheritanceInfo command_buffer_inheritance_info()
|
||||
{
|
||||
VkCommandBufferInheritanceInfo command_buffer_inheritance_info{};
|
||||
command_buffer_inheritance_info.sType = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO;
|
||||
return command_buffer_inheritance_info;
|
||||
}
|
||||
|
||||
inline VkRenderPassBeginInfo render_pass_begin_info()
|
||||
{
|
||||
VkRenderPassBeginInfo render_pass_begin_info{};
|
||||
render_pass_begin_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO;
|
||||
return render_pass_begin_info;
|
||||
}
|
||||
|
||||
inline VkRenderPassCreateInfo render_pass_create_info()
|
||||
{
|
||||
VkRenderPassCreateInfo render_pass_create_info{};
|
||||
render_pass_create_info.sType = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO;
|
||||
return render_pass_create_info;
|
||||
}
|
||||
|
||||
/** @brief Initialize rendering_attachment_info */
|
||||
inline VkRenderingAttachmentInfoKHR rendering_attachment_info()
|
||||
{
|
||||
VkRenderingAttachmentInfoKHR attachment_info{};
|
||||
attachment_info.sType = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR;
|
||||
attachment_info.pNext = VK_NULL_HANDLE;
|
||||
return attachment_info;
|
||||
}
|
||||
|
||||
/** @brief Initialize VkRenderingInfoKHR, e.g. for use with dynamic rendering extension */
|
||||
inline VkRenderingInfoKHR rendering_info(VkRect2D render_area = {},
|
||||
uint32_t color_attachment_count = 0,
|
||||
const VkRenderingAttachmentInfoKHR *pColorAttachments = VK_NULL_HANDLE,
|
||||
VkRenderingFlagsKHR flags = 0)
|
||||
{
|
||||
VkRenderingInfoKHR rendering_info = {};
|
||||
rendering_info.sType = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR;
|
||||
rendering_info.pNext = VK_NULL_HANDLE;
|
||||
rendering_info.flags = flags;
|
||||
rendering_info.renderArea = render_area;
|
||||
rendering_info.layerCount = 0;
|
||||
rendering_info.viewMask = 0;
|
||||
rendering_info.colorAttachmentCount = color_attachment_count;
|
||||
rendering_info.pColorAttachments = pColorAttachments;
|
||||
rendering_info.pDepthAttachment = VK_NULL_HANDLE;
|
||||
rendering_info.pStencilAttachment = VK_NULL_HANDLE;
|
||||
return rendering_info;
|
||||
}
|
||||
|
||||
/** @brief Initialize an image memory barrier with no image transfer ownership */
|
||||
inline VkImageMemoryBarrier image_memory_barrier()
|
||||
{
|
||||
VkImageMemoryBarrier image_memory_barrier{};
|
||||
image_memory_barrier.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER;
|
||||
image_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
image_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
return image_memory_barrier;
|
||||
}
|
||||
|
||||
/** @brief Initialize a buffer memory barrier with no image transfer ownership */
|
||||
inline VkBufferMemoryBarrier buffer_memory_barrier()
|
||||
{
|
||||
VkBufferMemoryBarrier buffer_memory_barrier{};
|
||||
buffer_memory_barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER;
|
||||
buffer_memory_barrier.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
buffer_memory_barrier.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED;
|
||||
return buffer_memory_barrier;
|
||||
}
|
||||
|
||||
inline VkMemoryBarrier memory_barrier()
|
||||
{
|
||||
VkMemoryBarrier memory_barrier{};
|
||||
memory_barrier.sType = VK_STRUCTURE_TYPE_MEMORY_BARRIER;
|
||||
return memory_barrier;
|
||||
}
|
||||
|
||||
inline VkImageCreateInfo image_create_info()
|
||||
{
|
||||
VkImageCreateInfo image_create_info{};
|
||||
image_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO;
|
||||
return image_create_info;
|
||||
}
|
||||
|
||||
inline VkSamplerCreateInfo sampler_create_info()
|
||||
{
|
||||
VkSamplerCreateInfo sampler_create_info{};
|
||||
sampler_create_info.sType = VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO;
|
||||
sampler_create_info.maxAnisotropy = 1.0f;
|
||||
return sampler_create_info;
|
||||
}
|
||||
|
||||
inline VkImageViewCreateInfo image_view_create_info()
|
||||
{
|
||||
VkImageViewCreateInfo image_view_create_info{};
|
||||
image_view_create_info.sType = VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO;
|
||||
return image_view_create_info;
|
||||
}
|
||||
|
||||
inline VkFramebufferCreateInfo framebuffer_create_info()
|
||||
{
|
||||
VkFramebufferCreateInfo framebuffer_create_info{};
|
||||
framebuffer_create_info.sType = VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO;
|
||||
return framebuffer_create_info;
|
||||
}
|
||||
|
||||
inline VkSemaphoreCreateInfo semaphore_create_info()
|
||||
{
|
||||
VkSemaphoreCreateInfo semaphore_create_info{};
|
||||
semaphore_create_info.sType = VK_STRUCTURE_TYPE_SEMAPHORE_CREATE_INFO;
|
||||
return semaphore_create_info;
|
||||
}
|
||||
|
||||
inline VkFenceCreateInfo fence_create_info(VkFenceCreateFlags flags = 0)
|
||||
{
|
||||
VkFenceCreateInfo fence_create_info{};
|
||||
fence_create_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
|
||||
fence_create_info.flags = flags;
|
||||
return fence_create_info;
|
||||
}
|
||||
|
||||
inline VkEventCreateInfo event_create_info()
|
||||
{
|
||||
VkEventCreateInfo event_create_info{};
|
||||
event_create_info.sType = VK_STRUCTURE_TYPE_EVENT_CREATE_INFO;
|
||||
return event_create_info;
|
||||
}
|
||||
|
||||
inline VkSubmitInfo submit_info()
|
||||
{
|
||||
VkSubmitInfo submit_info{};
|
||||
submit_info.sType = VK_STRUCTURE_TYPE_SUBMIT_INFO;
|
||||
return submit_info;
|
||||
}
|
||||
|
||||
inline VkViewport viewport(
|
||||
float width,
|
||||
float height,
|
||||
float min_depth,
|
||||
float max_depth)
|
||||
{
|
||||
VkViewport viewport{};
|
||||
viewport.width = width;
|
||||
viewport.height = height;
|
||||
viewport.minDepth = min_depth;
|
||||
viewport.maxDepth = max_depth;
|
||||
return viewport;
|
||||
}
|
||||
|
||||
inline VkRect2D rect2D(
|
||||
int32_t width,
|
||||
int32_t height,
|
||||
int32_t offset_x,
|
||||
int32_t offset_y)
|
||||
{
|
||||
VkRect2D rect2D{};
|
||||
rect2D.extent.width = width;
|
||||
rect2D.extent.height = height;
|
||||
rect2D.offset.x = offset_x;
|
||||
rect2D.offset.y = offset_y;
|
||||
return rect2D;
|
||||
}
|
||||
|
||||
inline VkBufferCreateInfo buffer_create_info()
|
||||
{
|
||||
VkBufferCreateInfo buffer_create_info{};
|
||||
buffer_create_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
return buffer_create_info;
|
||||
}
|
||||
|
||||
inline VkBufferCreateInfo buffer_create_info(
|
||||
VkBufferUsageFlags usage,
|
||||
VkDeviceSize size)
|
||||
{
|
||||
VkBufferCreateInfo buffer_create_info{};
|
||||
buffer_create_info.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO;
|
||||
buffer_create_info.usage = usage;
|
||||
buffer_create_info.size = size;
|
||||
return buffer_create_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolCreateInfo descriptor_pool_create_info(
|
||||
uint32_t count,
|
||||
VkDescriptorPoolSize *pool_sizes,
|
||||
uint32_t max_sets)
|
||||
{
|
||||
VkDescriptorPoolCreateInfo descriptor_pool_info{};
|
||||
descriptor_pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
descriptor_pool_info.poolSizeCount = count;
|
||||
descriptor_pool_info.pPoolSizes = pool_sizes;
|
||||
descriptor_pool_info.maxSets = max_sets;
|
||||
return descriptor_pool_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolCreateInfo descriptor_pool_create_info(
|
||||
const std::vector<VkDescriptorPoolSize> &pool_sizes,
|
||||
uint32_t max_sets)
|
||||
{
|
||||
VkDescriptorPoolCreateInfo descriptor_pool_info{};
|
||||
descriptor_pool_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO;
|
||||
descriptor_pool_info.poolSizeCount = static_cast<uint32_t>(pool_sizes.size());
|
||||
descriptor_pool_info.pPoolSizes = pool_sizes.data();
|
||||
descriptor_pool_info.maxSets = max_sets;
|
||||
return descriptor_pool_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorPoolSize descriptor_pool_size(
|
||||
VkDescriptorType type,
|
||||
uint32_t count)
|
||||
{
|
||||
VkDescriptorPoolSize descriptor_pool_size{};
|
||||
descriptor_pool_size.type = type;
|
||||
descriptor_pool_size.descriptorCount = count;
|
||||
return descriptor_pool_size;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutBinding descriptor_set_layout_binding(
|
||||
VkDescriptorType type,
|
||||
VkShaderStageFlags flags,
|
||||
uint32_t binding,
|
||||
uint32_t count = 1)
|
||||
{
|
||||
VkDescriptorSetLayoutBinding set_layout_binding{};
|
||||
set_layout_binding.descriptorType = type;
|
||||
set_layout_binding.stageFlags = flags;
|
||||
set_layout_binding.binding = binding;
|
||||
set_layout_binding.descriptorCount = count;
|
||||
return set_layout_binding;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutCreateInfo descriptor_set_layout_create_info(
|
||||
const VkDescriptorSetLayoutBinding *bindings,
|
||||
uint32_t binding_count)
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo descriptor_set_layout_create_info{};
|
||||
descriptor_set_layout_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
descriptor_set_layout_create_info.pBindings = bindings;
|
||||
descriptor_set_layout_create_info.bindingCount = binding_count;
|
||||
return descriptor_set_layout_create_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetLayoutCreateInfo descriptor_set_layout_create_info(
|
||||
const std::vector<VkDescriptorSetLayoutBinding> &bindings)
|
||||
{
|
||||
VkDescriptorSetLayoutCreateInfo descriptor_set_layout_create_info{};
|
||||
descriptor_set_layout_create_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_CREATE_INFO;
|
||||
descriptor_set_layout_create_info.pBindings = bindings.data();
|
||||
descriptor_set_layout_create_info.bindingCount = static_cast<uint32_t>(bindings.size());
|
||||
return descriptor_set_layout_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineLayoutCreateInfo pipeline_layout_create_info(
|
||||
const VkDescriptorSetLayout *set_layouts,
|
||||
uint32_t set_layout_count = 1)
|
||||
{
|
||||
VkPipelineLayoutCreateInfo pipeline_layout_create_info{};
|
||||
pipeline_layout_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pipeline_layout_create_info.setLayoutCount = set_layout_count;
|
||||
pipeline_layout_create_info.pSetLayouts = set_layouts;
|
||||
return pipeline_layout_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineLayoutCreateInfo pipeline_layout_create_info(
|
||||
uint32_t set_layout_count = 1)
|
||||
{
|
||||
VkPipelineLayoutCreateInfo pipeline_layout_create_info{};
|
||||
pipeline_layout_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_LAYOUT_CREATE_INFO;
|
||||
pipeline_layout_create_info.setLayoutCount = set_layout_count;
|
||||
return pipeline_layout_create_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorSetAllocateInfo descriptor_set_allocate_info(
|
||||
VkDescriptorPool descriptor_pool,
|
||||
const VkDescriptorSetLayout *set_layouts,
|
||||
uint32_t descriptor_set_count)
|
||||
{
|
||||
VkDescriptorSetAllocateInfo descriptor_set_allocate_info{};
|
||||
descriptor_set_allocate_info.sType = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO;
|
||||
descriptor_set_allocate_info.descriptorPool = descriptor_pool;
|
||||
descriptor_set_allocate_info.pSetLayouts = set_layouts;
|
||||
descriptor_set_allocate_info.descriptorSetCount = descriptor_set_count;
|
||||
return descriptor_set_allocate_info;
|
||||
}
|
||||
|
||||
inline VkDescriptorImageInfo descriptor_image_info(VkSampler sampler, VkImageView image_view, VkImageLayout image_layout)
|
||||
{
|
||||
VkDescriptorImageInfo descriptor_image_info{};
|
||||
descriptor_image_info.sampler = sampler;
|
||||
descriptor_image_info.imageView = image_view;
|
||||
descriptor_image_info.imageLayout = image_layout;
|
||||
return descriptor_image_info;
|
||||
}
|
||||
|
||||
inline VkWriteDescriptorSet write_descriptor_set(
|
||||
VkDescriptorSet dst_set,
|
||||
VkDescriptorType type,
|
||||
uint32_t binding,
|
||||
VkDescriptorBufferInfo *buffer_info,
|
||||
uint32_t descriptor_count = 1)
|
||||
{
|
||||
VkWriteDescriptorSet write_descriptor_set{};
|
||||
write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||
write_descriptor_set.dstSet = dst_set;
|
||||
write_descriptor_set.descriptorType = type;
|
||||
write_descriptor_set.dstBinding = binding;
|
||||
write_descriptor_set.pBufferInfo = buffer_info;
|
||||
write_descriptor_set.descriptorCount = descriptor_count;
|
||||
return write_descriptor_set;
|
||||
}
|
||||
|
||||
inline VkWriteDescriptorSet write_descriptor_set(
|
||||
VkDescriptorSet dst_set,
|
||||
VkDescriptorType type,
|
||||
uint32_t binding,
|
||||
VkDescriptorImageInfo *image_info,
|
||||
uint32_t descriptor_count = 1)
|
||||
{
|
||||
VkWriteDescriptorSet write_descriptor_set{};
|
||||
write_descriptor_set.sType = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET;
|
||||
write_descriptor_set.dstSet = dst_set;
|
||||
write_descriptor_set.descriptorType = type;
|
||||
write_descriptor_set.dstBinding = binding;
|
||||
write_descriptor_set.pImageInfo = image_info;
|
||||
write_descriptor_set.descriptorCount = descriptor_count;
|
||||
return write_descriptor_set;
|
||||
}
|
||||
|
||||
inline VkVertexInputBindingDescription vertex_input_binding_description(
|
||||
uint32_t binding,
|
||||
uint32_t stride,
|
||||
VkVertexInputRate input_rate)
|
||||
{
|
||||
VkVertexInputBindingDescription vertex_input_binding_description{};
|
||||
vertex_input_binding_description.binding = binding;
|
||||
vertex_input_binding_description.stride = stride;
|
||||
vertex_input_binding_description.inputRate = input_rate;
|
||||
return vertex_input_binding_description;
|
||||
}
|
||||
|
||||
inline VkVertexInputBindingDescription2EXT vertex_input_binding_description2ext(
|
||||
uint32_t binding,
|
||||
uint32_t stride,
|
||||
VkVertexInputRate input_rate,
|
||||
uint32_t divisor)
|
||||
{
|
||||
VkVertexInputBindingDescription2EXT vertex_input_binding_description2ext{};
|
||||
vertex_input_binding_description2ext.sType = VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT;
|
||||
vertex_input_binding_description2ext.binding = binding;
|
||||
vertex_input_binding_description2ext.stride = stride;
|
||||
vertex_input_binding_description2ext.inputRate = input_rate;
|
||||
vertex_input_binding_description2ext.divisor = divisor;
|
||||
return vertex_input_binding_description2ext;
|
||||
}
|
||||
|
||||
inline VkVertexInputAttributeDescription vertex_input_attribute_description(
|
||||
uint32_t binding,
|
||||
uint32_t location,
|
||||
VkFormat format,
|
||||
uint32_t offset)
|
||||
{
|
||||
VkVertexInputAttributeDescription vertex_input_attribute_description{};
|
||||
vertex_input_attribute_description.location = location;
|
||||
vertex_input_attribute_description.binding = binding;
|
||||
vertex_input_attribute_description.format = format;
|
||||
vertex_input_attribute_description.offset = offset;
|
||||
return vertex_input_attribute_description;
|
||||
}
|
||||
|
||||
inline VkVertexInputAttributeDescription2EXT vertex_input_attribute_description2ext(
|
||||
uint32_t binding,
|
||||
uint32_t location,
|
||||
VkFormat format,
|
||||
uint32_t offset)
|
||||
{
|
||||
VkVertexInputAttributeDescription2EXT vertex_input_attribute_description2ext{};
|
||||
vertex_input_attribute_description2ext.sType = VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT;
|
||||
vertex_input_attribute_description2ext.location = location;
|
||||
vertex_input_attribute_description2ext.binding = binding;
|
||||
vertex_input_attribute_description2ext.format = format;
|
||||
vertex_input_attribute_description2ext.offset = offset;
|
||||
return vertex_input_attribute_description2ext;
|
||||
}
|
||||
|
||||
inline VkPipelineVertexInputStateCreateInfo pipeline_vertex_input_state_create_info()
|
||||
{
|
||||
VkPipelineVertexInputStateCreateInfo pipeline_vertex_input_state_create_info{};
|
||||
pipeline_vertex_input_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO;
|
||||
return pipeline_vertex_input_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_create_info(
|
||||
VkPrimitiveTopology topology,
|
||||
VkPipelineInputAssemblyStateCreateFlags flags,
|
||||
VkBool32 primitive_restart_enable)
|
||||
{
|
||||
VkPipelineInputAssemblyStateCreateInfo pipeline_input_assembly_state_create_info{};
|
||||
pipeline_input_assembly_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
|
||||
pipeline_input_assembly_state_create_info.topology = topology;
|
||||
pipeline_input_assembly_state_create_info.flags = flags;
|
||||
pipeline_input_assembly_state_create_info.primitiveRestartEnable = primitive_restart_enable;
|
||||
return pipeline_input_assembly_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineRasterizationStateCreateInfo pipeline_rasterization_state_create_info(
|
||||
VkPolygonMode polygon_mode,
|
||||
VkCullModeFlags cull_mode,
|
||||
VkFrontFace front_face,
|
||||
VkPipelineRasterizationStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineRasterizationStateCreateInfo pipeline_rasterization_state_create_info{};
|
||||
pipeline_rasterization_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_CREATE_INFO;
|
||||
pipeline_rasterization_state_create_info.polygonMode = polygon_mode;
|
||||
pipeline_rasterization_state_create_info.cullMode = cull_mode;
|
||||
pipeline_rasterization_state_create_info.frontFace = front_face;
|
||||
pipeline_rasterization_state_create_info.flags = flags;
|
||||
pipeline_rasterization_state_create_info.depthClampEnable = VK_FALSE;
|
||||
pipeline_rasterization_state_create_info.lineWidth = 1.0f;
|
||||
return pipeline_rasterization_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineColorBlendAttachmentState pipeline_color_blend_attachment_state(
|
||||
VkColorComponentFlags color_write_mask,
|
||||
VkBool32 blend_enable)
|
||||
{
|
||||
VkPipelineColorBlendAttachmentState pipeline_color_blend_attachment_state{};
|
||||
pipeline_color_blend_attachment_state.colorWriteMask = color_write_mask;
|
||||
pipeline_color_blend_attachment_state.blendEnable = blend_enable;
|
||||
return pipeline_color_blend_attachment_state;
|
||||
}
|
||||
|
||||
inline VkPipelineColorBlendStateCreateInfo pipeline_color_blend_state_create_info(
|
||||
uint32_t attachment_count,
|
||||
const VkPipelineColorBlendAttachmentState *attachments)
|
||||
{
|
||||
VkPipelineColorBlendStateCreateInfo pipeline_color_blend_state_create_info{};
|
||||
pipeline_color_blend_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
|
||||
pipeline_color_blend_state_create_info.attachmentCount = attachment_count;
|
||||
pipeline_color_blend_state_create_info.pAttachments = attachments;
|
||||
return pipeline_color_blend_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineDepthStencilStateCreateInfo pipeline_depth_stencil_state_create_info(
|
||||
VkBool32 depth_test_enable,
|
||||
VkBool32 depth_write_enable,
|
||||
VkCompareOp depth_compare_op)
|
||||
{
|
||||
VkPipelineDepthStencilStateCreateInfo pipeline_depth_stencil_state_create_info{};
|
||||
pipeline_depth_stencil_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
|
||||
pipeline_depth_stencil_state_create_info.depthTestEnable = depth_test_enable;
|
||||
pipeline_depth_stencil_state_create_info.depthWriteEnable = depth_write_enable;
|
||||
pipeline_depth_stencil_state_create_info.depthCompareOp = depth_compare_op;
|
||||
pipeline_depth_stencil_state_create_info.front = pipeline_depth_stencil_state_create_info.back;
|
||||
pipeline_depth_stencil_state_create_info.back.compareOp = VK_COMPARE_OP_ALWAYS;
|
||||
return pipeline_depth_stencil_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineViewportStateCreateInfo pipeline_viewport_state_create_info(
|
||||
uint32_t viewport_count,
|
||||
uint32_t scissor_count,
|
||||
VkPipelineViewportStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineViewportStateCreateInfo pipeline_viewport_state_create_info{};
|
||||
pipeline_viewport_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_STATE_CREATE_INFO;
|
||||
pipeline_viewport_state_create_info.viewportCount = viewport_count;
|
||||
pipeline_viewport_state_create_info.scissorCount = scissor_count;
|
||||
pipeline_viewport_state_create_info.flags = flags;
|
||||
return pipeline_viewport_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineMultisampleStateCreateInfo pipeline_multisample_state_create_info(
|
||||
VkSampleCountFlagBits rasterization_samples,
|
||||
VkPipelineMultisampleStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineMultisampleStateCreateInfo pipeline_multisample_state_create_info{};
|
||||
pipeline_multisample_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_MULTISAMPLE_STATE_CREATE_INFO;
|
||||
pipeline_multisample_state_create_info.rasterizationSamples = rasterization_samples;
|
||||
pipeline_multisample_state_create_info.flags = flags;
|
||||
return pipeline_multisample_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineDynamicStateCreateInfo pipeline_dynamic_state_create_info(
|
||||
const VkDynamicState *dynamic_states,
|
||||
uint32_t dynamicStateCount,
|
||||
VkPipelineDynamicStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineDynamicStateCreateInfo pipeline_dynamic_state_create_info{};
|
||||
pipeline_dynamic_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
|
||||
pipeline_dynamic_state_create_info.pDynamicStates = dynamic_states;
|
||||
pipeline_dynamic_state_create_info.dynamicStateCount = dynamicStateCount;
|
||||
pipeline_dynamic_state_create_info.flags = flags;
|
||||
return pipeline_dynamic_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineDynamicStateCreateInfo pipeline_dynamic_state_create_info(
|
||||
const std::vector<VkDynamicState> &dynamic_states,
|
||||
VkPipelineDynamicStateCreateFlags flags = 0)
|
||||
{
|
||||
VkPipelineDynamicStateCreateInfo pipeline_dynamic_state_create_info{};
|
||||
pipeline_dynamic_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_DYNAMIC_STATE_CREATE_INFO;
|
||||
pipeline_dynamic_state_create_info.pDynamicStates = dynamic_states.data();
|
||||
pipeline_dynamic_state_create_info.dynamicStateCount = static_cast<uint32_t>(dynamic_states.size());
|
||||
pipeline_dynamic_state_create_info.flags = flags;
|
||||
return pipeline_dynamic_state_create_info;
|
||||
}
|
||||
|
||||
inline VkPipelineTessellationStateCreateInfo pipeline_tessellation_state_create_info(uint32_t patch_control_points)
|
||||
{
|
||||
VkPipelineTessellationStateCreateInfo pipeline_tessellation_state_create_info{};
|
||||
pipeline_tessellation_state_create_info.sType = VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO;
|
||||
pipeline_tessellation_state_create_info.patchControlPoints = patch_control_points;
|
||||
return pipeline_tessellation_state_create_info;
|
||||
}
|
||||
|
||||
inline VkGraphicsPipelineCreateInfo pipeline_create_info(
|
||||
VkPipelineLayout layout,
|
||||
VkRenderPass render_pass,
|
||||
VkPipelineCreateFlags flags = 0)
|
||||
{
|
||||
VkGraphicsPipelineCreateInfo pipeline_create_info{};
|
||||
pipeline_create_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
pipeline_create_info.layout = layout;
|
||||
pipeline_create_info.renderPass = render_pass;
|
||||
pipeline_create_info.flags = flags;
|
||||
pipeline_create_info.basePipelineIndex = -1;
|
||||
pipeline_create_info.basePipelineHandle = VK_NULL_HANDLE;
|
||||
return pipeline_create_info;
|
||||
}
|
||||
|
||||
inline VkGraphicsPipelineCreateInfo pipeline_create_info()
|
||||
{
|
||||
VkGraphicsPipelineCreateInfo pipeline_create_info{};
|
||||
pipeline_create_info.sType = VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_CREATE_INFO;
|
||||
pipeline_create_info.basePipelineIndex = -1;
|
||||
pipeline_create_info.basePipelineHandle = VK_NULL_HANDLE;
|
||||
return pipeline_create_info;
|
||||
}
|
||||
|
||||
inline VkComputePipelineCreateInfo compute_pipeline_create_info(
|
||||
VkPipelineLayout layout,
|
||||
VkPipelineCreateFlags flags = 0)
|
||||
{
|
||||
VkComputePipelineCreateInfo compute_pipeline_create_info{};
|
||||
compute_pipeline_create_info.sType = VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO;
|
||||
compute_pipeline_create_info.layout = layout;
|
||||
compute_pipeline_create_info.flags = flags;
|
||||
return compute_pipeline_create_info;
|
||||
}
|
||||
|
||||
inline VkPushConstantRange push_constant_range(
|
||||
VkShaderStageFlags stage_flags,
|
||||
uint32_t size,
|
||||
uint32_t offset)
|
||||
{
|
||||
VkPushConstantRange push_constant_range{};
|
||||
push_constant_range.stageFlags = stage_flags;
|
||||
push_constant_range.offset = offset;
|
||||
push_constant_range.size = size;
|
||||
return push_constant_range;
|
||||
}
|
||||
|
||||
inline VkBindSparseInfo bind_sparse_info()
|
||||
{
|
||||
VkBindSparseInfo bind_sparse_info{};
|
||||
bind_sparse_info.sType = VK_STRUCTURE_TYPE_BIND_SPARSE_INFO;
|
||||
return bind_sparse_info;
|
||||
}
|
||||
|
||||
/** @brief Initialize a map entry for a shader specialization constant */
|
||||
inline VkSpecializationMapEntry specialization_map_entry(uint32_t constant_id, uint32_t offset, size_t size)
|
||||
{
|
||||
VkSpecializationMapEntry specialization_map_entry{};
|
||||
specialization_map_entry.constantID = constant_id;
|
||||
specialization_map_entry.offset = offset;
|
||||
specialization_map_entry.size = size;
|
||||
return specialization_map_entry;
|
||||
}
|
||||
|
||||
/** @brief Initialize a specialization constant info structure to pass to a shader stage */
|
||||
inline VkSpecializationInfo specialization_info(uint32_t map_entry_count, const VkSpecializationMapEntry *map_entries, size_t data_size, const void *data)
|
||||
{
|
||||
VkSpecializationInfo specialization_info{};
|
||||
specialization_info.mapEntryCount = map_entry_count;
|
||||
specialization_info.pMapEntries = map_entries;
|
||||
specialization_info.dataSize = data_size;
|
||||
specialization_info.pData = data;
|
||||
return specialization_info;
|
||||
}
|
||||
|
||||
inline VkTimelineSemaphoreSubmitInfo timeline_semaphore_submit_info(uint32_t wait_value_count, uint64_t *wait_values, uint32_t signal_value_count, uint64_t *signal_values)
|
||||
{
|
||||
return VkTimelineSemaphoreSubmitInfo{
|
||||
VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO,
|
||||
NULL,
|
||||
wait_value_count,
|
||||
wait_values,
|
||||
signal_value_count,
|
||||
signal_values};
|
||||
}
|
||||
} // namespace initializers
|
||||
} // namespace vkb
|
||||
Reference in New Issue
Block a user