mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-07 06:18:23 +00:00
Keep adjusting the barriers until qcom is finally fixed
This commit is contained in:
@@ -452,34 +452,6 @@ VkExtent2D GetConversionExtent(const ImageView& src_image_view) {
|
|||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransitionImageLayout(vk::CommandBuffer& cmdbuf, VkImage image, VkImageLayout target_layout,
|
|
||||||
VkImageLayout source_layout = VK_IMAGE_LAYOUT_GENERAL) {
|
|
||||||
constexpr VkAccessFlags2 flags{VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT |
|
|
||||||
VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT |
|
|
||||||
VK_ACCESS_2_SHADER_READ_BIT};
|
|
||||||
const VkImageMemoryBarrier2 barrier{
|
|
||||||
.sType = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2,
|
|
||||||
.pNext = nullptr,
|
|
||||||
.srcStageMask = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE,
|
|
||||||
.srcAccessMask = flags,
|
|
||||||
.dstStageMask = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE,
|
|
||||||
.dstAccessMask = flags,
|
|
||||||
.oldLayout = source_layout,
|
|
||||||
.newLayout = target_layout,
|
|
||||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
|
||||||
.dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
|
||||||
.image = image,
|
|
||||||
.subresourceRange{
|
|
||||||
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
|
|
||||||
.baseMipLevel = 0,
|
|
||||||
.levelCount = 1,
|
|
||||||
.baseArrayLayer = 0,
|
|
||||||
.layerCount = 1,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
cmdbuf.PipelineBarrier(barrier);
|
|
||||||
}
|
|
||||||
|
|
||||||
void RecordShaderReadBarrier(Scheduler& scheduler, const ImageView& image_view) {
|
void RecordShaderReadBarrier(Scheduler& scheduler, const ImageView& image_view) {
|
||||||
const VkImage image = image_view.ImageHandle();
|
const VkImage image = image_view.ImageHandle();
|
||||||
const VkImageSubresourceRange subresource_range = SubresourceRangeFromView(image_view);
|
const VkImageSubresourceRange subresource_range = SubresourceRangeFromView(image_view);
|
||||||
@@ -562,25 +534,6 @@ void RecordShaderReadBarrier(Scheduler& scheduler, const ImageView& image_view)
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void BeginRenderPass(vk::CommandBuffer& cmdbuf, const Framebuffer* framebuffer) {
|
|
||||||
const VkRenderPass render_pass = framebuffer->RenderPass();
|
|
||||||
const VkFramebuffer framebuffer_handle = framebuffer->Handle();
|
|
||||||
const VkExtent2D render_area = framebuffer->RenderArea();
|
|
||||||
const VkRenderPassBeginInfo renderpass_bi{
|
|
||||||
.sType = VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO,
|
|
||||||
.pNext = nullptr,
|
|
||||||
.renderPass = render_pass,
|
|
||||||
.framebuffer = framebuffer_handle,
|
|
||||||
.renderArea{
|
|
||||||
.offset{},
|
|
||||||
.extent = render_area,
|
|
||||||
},
|
|
||||||
.clearValueCount = 0,
|
|
||||||
.pClearValues = nullptr,
|
|
||||||
};
|
|
||||||
cmdbuf.BeginRenderPass(renderpass_bi, VK_SUBPASS_CONTENTS_INLINE);
|
|
||||||
}
|
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
BlitImageHelper::BlitImageHelper(const Device& device_, Scheduler& scheduler_,
|
BlitImageHelper::BlitImageHelper(const Device& device_, Scheduler& scheduler_,
|
||||||
@@ -686,11 +639,14 @@ void BlitImageHelper::BlitColor(const Framebuffer* dst_framebuffer, VkImageView
|
|||||||
};
|
};
|
||||||
const VkPipelineLayout layout = *one_texture_pipeline_layout;
|
const VkPipelineLayout layout = *one_texture_pipeline_layout;
|
||||||
const VkPipeline pipeline = FindOrEmplaceColorPipeline(key);
|
const VkPipeline pipeline = FindOrEmplaceColorPipeline(key);
|
||||||
scheduler.RequestOutsideRenderPassOperationContext();
|
const auto attachments =
|
||||||
scheduler.Record([this, dst_framebuffer, src_image_view, src_image, src_sampler, dst_region,
|
std::span(dst_framebuffer->Images()).first(dst_framebuffer->NumImages());
|
||||||
src_region, src_size, pipeline, layout](vk::CommandBuffer cmdbuf) {
|
if (std::ranges::find(attachments, src_image) != attachments.end()) {
|
||||||
TransitionImageLayout(cmdbuf, src_image, VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL);
|
scheduler.RequestOutsideRenderPassOperationContext();
|
||||||
BeginRenderPass(cmdbuf, dst_framebuffer);
|
}
|
||||||
|
scheduler.RequestRenderpass(dst_framebuffer);
|
||||||
|
scheduler.Record([this, src_image_view, src_sampler, dst_region, src_region, src_size,
|
||||||
|
pipeline, layout](vk::CommandBuffer cmdbuf) {
|
||||||
const VkDescriptorSet descriptor_set = one_texture_descriptor_allocator.Commit();
|
const VkDescriptorSet descriptor_set = one_texture_descriptor_allocator.Commit();
|
||||||
UpdateOneTextureDescriptorSet(device, descriptor_set, src_sampler, src_image_view);
|
UpdateOneTextureDescriptorSet(device, descriptor_set, src_sampler, src_image_view);
|
||||||
cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
|
cmdbuf.BindPipeline(VK_PIPELINE_BIND_POINT_GRAPHICS, pipeline);
|
||||||
@@ -698,8 +654,8 @@ void BlitImageHelper::BlitColor(const Framebuffer* dst_framebuffer, VkImageView
|
|||||||
nullptr);
|
nullptr);
|
||||||
BindBlitState(cmdbuf, layout, dst_region, src_region, src_size);
|
BindBlitState(cmdbuf, layout, dst_region, src_region, src_size);
|
||||||
cmdbuf.Draw(3, 1, 0, 0);
|
cmdbuf.Draw(3, 1, 0, 0);
|
||||||
cmdbuf.EndRenderPass();
|
|
||||||
});
|
});
|
||||||
|
scheduler.InvalidateState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void BlitImageHelper::BlitImpl(const Framebuffer* dst_framebuffer,
|
void BlitImageHelper::BlitImpl(const Framebuffer* dst_framebuffer,
|
||||||
|
|||||||
@@ -421,8 +421,9 @@ void RasterizerVulkan::DrawTexture() {
|
|||||||
.y = ScaleSrc(draw_texture_state.src_y1)}};
|
.y = ScaleSrc(draw_texture_state.src_y1)}};
|
||||||
Extent3D src_size = {static_cast<u32>(ScaleSrc(texture.size.width)),
|
Extent3D src_size = {static_cast<u32>(ScaleSrc(texture.size.width)),
|
||||||
static_cast<u32>(ScaleSrc(texture.size.height)), texture.size.depth};
|
static_cast<u32>(ScaleSrc(texture.size.height)), texture.size.depth};
|
||||||
blit_image.BlitColor(framebuffer, texture.RenderTarget(), texture.ImageHandle(),
|
blit_image.BlitColor(framebuffer, texture.Handle(Shader::TextureType::Color2D),
|
||||||
sampler->Handle(), dst_region, src_region, src_size);
|
texture.ImageHandle(), sampler->Handle(), dst_region, src_region,
|
||||||
|
src_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void RasterizerVulkan::Clear(u32 layer_count) {
|
void RasterizerVulkan::Clear(u32 layer_count) {
|
||||||
|
|||||||
@@ -1719,10 +1719,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src,
|
|||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
||||||
.srcAccessMask = 0,
|
.srcAccessMask = 0,
|
||||||
.dstStageMask = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT |
|
.dstStageMask = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE_TRANSFER,
|
||||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT |
|
|
||||||
VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT |
|
|
||||||
VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
|
||||||
.dstAccessMask = 0,
|
.dstAccessMask = 0,
|
||||||
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
|
||||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
@@ -1736,16 +1733,8 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src,
|
|||||||
.pNext = nullptr,
|
.pNext = nullptr,
|
||||||
.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
.srcStageMask = VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
||||||
.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT,
|
.srcAccessMask = VK_ACCESS_2_TRANSFER_WRITE_BIT,
|
||||||
.dstStageMask = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT |
|
.dstStageMask = vk::PIPELINE_STAGE_GRAPHICS_COMPUTE_TRANSFER,
|
||||||
VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT |
|
.dstAccessMask = VK_ACCESS_2_MEMORY_READ_BIT | VK_ACCESS_2_MEMORY_WRITE_BIT,
|
||||||
VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT |
|
|
||||||
VK_PIPELINE_STAGE_2_TRANSFER_BIT,
|
|
||||||
.dstAccessMask = VK_ACCESS_2_SHADER_READ_BIT | VK_ACCESS_2_SHADER_WRITE_BIT |
|
|
||||||
VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT |
|
|
||||||
VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT |
|
|
||||||
VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT |
|
|
||||||
VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT |
|
|
||||||
VK_ACCESS_2_TRANSFER_READ_BIT | VK_ACCESS_2_TRANSFER_WRITE_BIT,
|
|
||||||
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
.oldLayout = VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
|
||||||
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
.newLayout = VK_IMAGE_LAYOUT_GENERAL,
|
||||||
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
.srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED,
|
||||||
|
|||||||
Reference in New Issue
Block a user