mirror of
https://github.com/citra-emu/citra.git
synced 2024-11-22 23:20:06 +00:00
vk_texture_runtime: Use the highest-priority representation of a surface
Starting from the provided index, search for the first non-null handle.
This commit is contained in:
parent
8f791c0863
commit
a2aee70b86
@ -387,7 +387,7 @@ void TextureRuntime::ClearTextureWithRenderpass(Surface& surface,
|
|||||||
.aspect = surface.Aspect(),
|
.aspect = surface.Aspect(),
|
||||||
.pipeline_flags = surface.PipelineStageFlags(),
|
.pipeline_flags = surface.PipelineStageFlags(),
|
||||||
.src_access = surface.AccessFlags(),
|
.src_access = surface.AccessFlags(),
|
||||||
.src_image = surface.GetSampleCount() > 1 ? surface.Image(3) : surface.Image(),
|
.src_image = surface.Image(),
|
||||||
};
|
};
|
||||||
|
|
||||||
scheduler.Record([params, is_color, clear, render_pass,
|
scheduler.Record([params, is_color, clear, render_pass,
|
||||||
@ -467,8 +467,8 @@ bool TextureRuntime::CopyTextures(Surface& source, Surface& dest,
|
|||||||
.pipeline_flags = source.PipelineStageFlags() | dest.PipelineStageFlags(),
|
.pipeline_flags = source.PipelineStageFlags() | dest.PipelineStageFlags(),
|
||||||
.src_access = source.AccessFlags(),
|
.src_access = source.AccessFlags(),
|
||||||
.dst_access = dest.AccessFlags(),
|
.dst_access = dest.AccessFlags(),
|
||||||
.src_image = (source.GetSampleCount() > 1) ? source.Image(3) : source.Image(),
|
.src_image = source.Image(),
|
||||||
.dst_image = (dest.GetSampleCount() > 1) ? dest.Image(3) : dest.Image(),
|
.dst_image = dest.Image(),
|
||||||
};
|
};
|
||||||
|
|
||||||
scheduler.Record([params, copy](vk::CommandBuffer cmdbuf) {
|
scheduler.Record([params, copy](vk::CommandBuffer cmdbuf) {
|
||||||
@ -572,8 +572,8 @@ bool TextureRuntime::BlitTextures(Surface& source, Surface& dest,
|
|||||||
.pipeline_flags = source.PipelineStageFlags() | dest.PipelineStageFlags(),
|
.pipeline_flags = source.PipelineStageFlags() | dest.PipelineStageFlags(),
|
||||||
.src_access = source.AccessFlags(),
|
.src_access = source.AccessFlags(),
|
||||||
.dst_access = dest.AccessFlags(),
|
.dst_access = dest.AccessFlags(),
|
||||||
.src_image = source.Image(),
|
.src_image = source.Image(1),
|
||||||
.dst_image = dest.Image(),
|
.dst_image = dest.Image(1),
|
||||||
};
|
};
|
||||||
|
|
||||||
scheduler.Record([params, blit](vk::CommandBuffer cmdbuf) {
|
scheduler.Record([params, blit](vk::CommandBuffer cmdbuf) {
|
||||||
@ -1175,11 +1175,10 @@ vk::PipelineStageFlags Surface::PipelineStageFlags() const noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
vk::Image Surface::Image(u32 index) const noexcept {
|
vk::Image Surface::Image(u32 index) const noexcept {
|
||||||
const vk::Image image = handles[index].image;
|
|
||||||
if (!image) {
|
const auto it = std::find_if(handles.crend() - index - 1, handles.crend(),
|
||||||
return handles[0].image;
|
[](const Handle& handle) -> bool { return handle.image; });
|
||||||
}
|
return it->image;
|
||||||
return image;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
vk::ImageView Surface::CopyImageView() noexcept {
|
vk::ImageView Surface::CopyImageView() noexcept {
|
||||||
|
@ -123,7 +123,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Returns the image at index, otherwise the base image
|
/// Returns the image at index, otherwise the base image
|
||||||
vk::Image Image(u32 index = 1) const noexcept;
|
vk::Image Image(u32 index = 3) const noexcept;
|
||||||
|
|
||||||
/// Returns the image view at index, otherwise the base view
|
/// Returns the image view at index, otherwise the base view
|
||||||
vk::ImageView ImageView(u32 index = 1) const noexcept;
|
vk::ImageView ImageView(u32 index = 1) const noexcept;
|
||||||
|
Loading…
Reference in New Issue
Block a user