3
0
Fork 0
forked from suyu/suyu

shader: Fix rasterizer integration order issues

This commit is contained in:
ReinUsesLisp 2021-03-26 18:55:07 -03:00 committed by ameerj
parent 17063d16a3
commit ec005be99d
3 changed files with 6 additions and 7 deletions

View file

@ -139,7 +139,6 @@ void GraphicsPipeline::Configure(bool is_indexed) {
static_vector<VkSampler, max_images_elements> samplers; static_vector<VkSampler, max_images_elements> samplers;
texture_cache->SynchronizeGraphicsDescriptors(); texture_cache->SynchronizeGraphicsDescriptors();
texture_cache->UpdateRenderTargets(false);
const auto& regs{maxwell3d->regs}; const auto& regs{maxwell3d->regs};
const bool via_header_index{regs.sampler_index == Maxwell::SamplerIndex::ViaHeaderIndex}; const bool via_header_index{regs.sampler_index == Maxwell::SamplerIndex::ViaHeaderIndex};
@ -181,13 +180,17 @@ void GraphicsPipeline::Configure(bool is_indexed) {
PushImageDescriptors(stage_infos[stage], samplers.data(), image_view_ids.data(), PushImageDescriptors(stage_infos[stage], samplers.data(), image_view_ids.data(),
*texture_cache, *update_descriptor_queue, index); *texture_cache, *update_descriptor_queue, index);
} }
texture_cache->UpdateRenderTargets(false);
scheduler->RequestRenderpass(texture_cache->GetFramebuffer());
scheduler->BindGraphicsPipeline(*pipeline);
if (!descriptor_set_layout) { if (!descriptor_set_layout) {
return; return;
} }
const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()}; const VkDescriptorSet descriptor_set{descriptor_allocator.Commit()};
update_descriptor_queue->Send(*descriptor_update_template, descriptor_set); update_descriptor_queue->Send(*descriptor_update_template, descriptor_set);
scheduler->BindGraphicsPipeline(*pipeline);
scheduler->Record([descriptor_set, layout = *pipeline_layout](vk::CommandBuffer cmdbuf) { scheduler->Record([descriptor_set, layout = *pipeline_layout](vk::CommandBuffer cmdbuf) {
cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, descriptor_set, cmdbuf.BindDescriptorSets(VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, descriptor_set,
nullptr); nullptr);

View file

@ -178,7 +178,6 @@ void RasterizerVulkan::Draw(bool is_indexed, bool is_instanced) {
BeginTransformFeedback(); BeginTransformFeedback();
scheduler.RequestRenderpass(texture_cache.GetFramebuffer());
UpdateDynamicStates(); UpdateDynamicStates();
const auto& regs{maxwell3d.regs}; const auto& regs{maxwell3d.regs};

View file

@ -56,15 +56,12 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) {
return *pair->second; return *pair->second;
} }
boost::container::static_vector<VkAttachmentDescription, 9> descriptions; boost::container::static_vector<VkAttachmentDescription, 9> descriptions;
u32 num_images{0};
for (size_t index = 0; index < key.color_formats.size(); ++index) { for (size_t index = 0; index < key.color_formats.size(); ++index) {
const PixelFormat format{key.color_formats[index]}; const PixelFormat format{key.color_formats[index]};
if (format == PixelFormat::Invalid) { if (format == PixelFormat::Invalid) {
continue; continue;
} }
descriptions.push_back(AttachmentDescription(*device, format, key.samples)); descriptions.push_back(AttachmentDescription(*device, format, key.samples));
++num_images;
} }
const size_t num_colors{descriptions.size()}; const size_t num_colors{descriptions.size()};
const VkAttachmentReference* depth_attachment{}; const VkAttachmentReference* depth_attachment{};
@ -89,7 +86,7 @@ VkRenderPass RenderPassCache::Get(const RenderPassKey& key) {
.pNext = nullptr, .pNext = nullptr,
.flags = 0, .flags = 0,
.attachmentCount = static_cast<u32>(descriptions.size()), .attachmentCount = static_cast<u32>(descriptions.size()),
.pAttachments = descriptions.data(), .pAttachments = descriptions.empty() ? nullptr : descriptions.data(),
.subpassCount = 1, .subpassCount = 1,
.pSubpasses = &subpass, .pSubpasses = &subpass,
.dependencyCount = 0, .dependencyCount = 0,