#include "pipelinestate_backend.h"
#include "program.h"
#include "rect.h"
+#include "renderpass.h"
#include "sampler.h"
#include "stenciltest.h"
#include "structurebuilder.h"
const PipelineState &self = *static_cast<const PipelineState *>(this);
const FrameFormat &format = self.framebuffer->get_format();
- VkRenderPass render_pass = device.get_pipeline_cache().get_render_pass(format, false, false, false);
+ RenderPass render_pass;
+ render_pass.framebuffer = self.framebuffer;
+ render_pass.update(device);
unsigned n_color_attachments = 0;
for(FrameAttachment a: format)
}
StructureBuilder sb(buffer, 10);
- VkGraphicsPipelineCreateInfo *&pipeline_info = sb.add<VkGraphicsPipelineCreateInfo>();
- VkPipelineInputAssemblyStateCreateInfo *&input_assembly_info = sb.add<VkPipelineInputAssemblyStateCreateInfo>();
- VkPipelineViewportStateCreateInfo *&viewport_info = sb.add<VkPipelineViewportStateCreateInfo>();
- VkPipelineRasterizationStateCreateInfo *&raster_info = sb.add<VkPipelineRasterizationStateCreateInfo>();
- VkPipelineMultisampleStateCreateInfo *&multisample_info = sb.add<VkPipelineMultisampleStateCreateInfo>();
- VkPipelineDepthStencilStateCreateInfo *&depth_stencil_info = sb.add<VkPipelineDepthStencilStateCreateInfo>();
- VkPipelineColorBlendStateCreateInfo *&blend_info = sb.add<VkPipelineColorBlendStateCreateInfo>();
- VkPipelineColorBlendAttachmentState *&blend_attachments = sb.add<VkPipelineColorBlendAttachmentState>(n_color_attachments);
- VkPipelineDynamicStateCreateInfo *&dynamic_info = sb.add<VkPipelineDynamicStateCreateInfo>();
- VkDynamicState *&dynamic_states = sb.add<VkDynamicState>(2);
+ VkGraphicsPipelineCreateInfo *const &pipeline_info = sb.add<VkGraphicsPipelineCreateInfo>();
+ VkPipelineInputAssemblyStateCreateInfo *const &input_assembly_info = sb.add<VkPipelineInputAssemblyStateCreateInfo>();
+ VkPipelineViewportStateCreateInfo *const &viewport_info = sb.add<VkPipelineViewportStateCreateInfo>();
+ VkPipelineRasterizationStateCreateInfo *const &raster_info = sb.add<VkPipelineRasterizationStateCreateInfo>();
+ VkPipelineMultisampleStateCreateInfo *const &multisample_info = sb.add<VkPipelineMultisampleStateCreateInfo>();
+ VkPipelineDepthStencilStateCreateInfo *const &depth_stencil_info = sb.add<VkPipelineDepthStencilStateCreateInfo>();
+ VkPipelineColorBlendStateCreateInfo *const &blend_info = sb.add<VkPipelineColorBlendStateCreateInfo>();
+ VkPipelineColorBlendAttachmentState *const &blend_attachments = sb.add<VkPipelineColorBlendAttachmentState>(n_color_attachments);
+ VkPipelineDynamicStateCreateInfo *const &dynamic_info = sb.add<VkPipelineDynamicStateCreateInfo>();
+ VkDynamicState *const &dynamic_states = sb.add<VkDynamicState>(2);
input_assembly_info->sType = VK_STRUCTURE_TYPE_PIPELINE_INPUT_ASSEMBLY_STATE_CREATE_INFO;
input_assembly_info->topology = static_cast<VkPrimitiveTopology>(get_vulkan_primitive_type(self.primitive_type));
pipeline_info->pDepthStencilState = depth_stencil_info;
pipeline_info->pColorBlendState = blend_info;
pipeline_info->pDynamicState = dynamic_info;
- pipeline_info->renderPass = handle_cast<::VkRenderPass>(render_pass);
+ pipeline_info->renderPass = handle_cast<::VkRenderPass>(render_pass.handle);
pipeline_info->subpass = 0;
if(self.shprog)
unsigned n_writes = n_buffers+n_images;
StructureBuilder sb(buffer, 3);
- VkWriteDescriptorSet *&writes = sb.add<VkWriteDescriptorSet>(n_writes);
- VkDescriptorBufferInfo *&buffers = sb.add<VkDescriptorBufferInfo>(n_buffers);
- VkDescriptorImageInfo *&images = sb.add<VkDescriptorImageInfo>(n_images);
+ VkWriteDescriptorSet *const &writes = sb.add<VkWriteDescriptorSet>(n_writes);
+ VkDescriptorBufferInfo *const &buffers = sb.add<VkDescriptorBufferInfo>(n_buffers);
+ VkDescriptorImageInfo *const &images = sb.add<VkDescriptorImageInfo>(n_images);
VkWriteDescriptorSet *write_ptr = writes;
VkDescriptorBufferInfo *buffer_ptr = buffers;
return n_writes;
}
-void VulkanPipelineState::apply(VkCommandBuffer command_buffer, const VulkanPipelineState *last, unsigned frame, bool negative_viewport) const
+void VulkanPipelineState::apply(const VulkanCommandRecorder &vkCmd, const VulkanPipelineState *last, unsigned frame, bool negative_viewport) const
{
const PipelineState &self = *static_cast<const PipelineState *>(this);
- const VulkanFunctions &vk = device.get_functions();
if(!last)
{
}
if(unapplied&PipelineState::SHPROG)
- vk.CmdBindPipeline(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, handle);
+ vkCmd.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, handle);
if(unapplied&PipelineState::VERTEX_SETUP)
if(const VertexSetup *vs = self.vertex_setup)
{
- vk.CmdBindVertexBuffers(command_buffer, 0, vs->n_bindings, vs->buffers, vs->offsets);
+ vkCmd.BindVertexBuffers(0, vs->n_bindings, vs->buffers, vs->offsets);
VkIndexType index_type = static_cast<VkIndexType>(get_vulkan_index_type(vs->get_index_type()));
- vk.CmdBindIndexBuffer(command_buffer, vs->get_index_buffer()->handle, 0, index_type);
+ vkCmd.BindIndexBuffer(vs->get_index_buffer()->handle, 0, index_type);
}
if(!self.uniform_blocks.empty())
if(first_block.used && first_block.binding==ReflectData::PUSH_CONSTANT)
{
const UniformBlock &pc_block = *first_block.block;
- vk.CmdPushConstants(command_buffer, self.shprog->layout_handle, self.shprog->stage_flags,
+ vkCmd.PushConstants(self.shprog->layout_handle, self.shprog->stage_flags,
pc_block.get_offset(), pc_block.get_data_size(), pc_block.get_data_pointer());
}
}
descriptor_set_handles.push_back(device.get_descriptor_pool().get_descriptor_set(
self.descriptor_set_slots[i], self, i, frame));
- vk.CmdBindDescriptorSets(command_buffer, VK_PIPELINE_BIND_POINT_GRAPHICS, self.shprog->layout_handle,
+ vkCmd.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, self.shprog->layout_handle,
first_changed_desc_set, descriptor_set_handles.size(), descriptor_set_handles.data(), 0, 0);
}
}
viewport.minDepth = 0.0f;
viewport.maxDepth = 1.0f;
- vk.CmdSetViewport(command_buffer, 0, 1, &viewport);
+ vkCmd.SetViewport(0, 1, &viewport);
}
if(unapplied&PipelineState::SCISSOR)
scissor.offset.y = scissor_rect.bottom;
scissor.extent.width = scissor_rect.width;
scissor.extent.height = scissor_rect.height;
- vk.CmdSetScissor(command_buffer, 0, 1, &scissor);
+ vkCmd.SetScissor(0, 1, &scissor);
}
}