|
|
@ -52,6 +52,9 @@ vk::ImageType SurfaceTargetToImage(SurfaceTarget target) { |
|
|
return vk::ImageType::e2D; |
|
|
return vk::ImageType::e2D; |
|
|
case SurfaceTarget::Texture3D: |
|
|
case SurfaceTarget::Texture3D: |
|
|
return vk::ImageType::e3D; |
|
|
return vk::ImageType::e3D; |
|
|
|
|
|
case SurfaceTarget::TextureBuffer: |
|
|
|
|
|
UNREACHABLE(); |
|
|
|
|
|
return {}; |
|
|
} |
|
|
} |
|
|
UNREACHABLE_MSG("Unknown texture target={}", static_cast<u32>(target)); |
|
|
UNREACHABLE_MSG("Unknown texture target={}", static_cast<u32>(target)); |
|
|
return {}; |
|
|
return {}; |
|
|
@ -273,7 +276,6 @@ void CachedSurface::UploadImage(const std::vector<u8>& staging_buffer) { |
|
|
|
|
|
|
|
|
for (u32 level = 0; level < params.num_levels; ++level) { |
|
|
for (u32 level = 0; level < params.num_levels; ++level) { |
|
|
vk::BufferImageCopy copy = GetBufferImageCopy(level); |
|
|
vk::BufferImageCopy copy = GetBufferImageCopy(level); |
|
|
const auto& dld = device.GetDispatchLoader(); |
|
|
|
|
|
if (image->GetAspectMask() == |
|
|
if (image->GetAspectMask() == |
|
|
(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil)) { |
|
|
(vk::ImageAspectFlagBits::eDepth | vk::ImageAspectFlagBits::eStencil)) { |
|
|
vk::BufferImageCopy depth = copy; |
|
|
vk::BufferImageCopy depth = copy; |
|
|
@ -422,7 +424,6 @@ void VKTextureCache::ImageCopy(Surface& src_surface, Surface& dst_surface, |
|
|
dst_base_layer, num_layers, copy_params.dest_level, 1, vk::PipelineStageFlagBits::eTransfer, |
|
|
dst_base_layer, num_layers, copy_params.dest_level, 1, vk::PipelineStageFlagBits::eTransfer, |
|
|
vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eTransferDstOptimal); |
|
|
vk::AccessFlagBits::eTransferWrite, vk::ImageLayout::eTransferDstOptimal); |
|
|
|
|
|
|
|
|
const auto& dld{device.GetDispatchLoader()}; |
|
|
|
|
|
const vk::ImageSubresourceLayers src_subresource( |
|
|
const vk::ImageSubresourceLayers src_subresource( |
|
|
src_surface->GetAspectMask(), copy_params.source_level, copy_params.source_z, num_layers); |
|
|
src_surface->GetAspectMask(), copy_params.source_level, copy_params.source_z, num_layers); |
|
|
const vk::ImageSubresourceLayers dst_subresource( |
|
|
const vk::ImageSubresourceLayers dst_subresource( |
|
|
@ -458,7 +459,6 @@ void VKTextureCache::ImageBlit(View& src_view, View& dst_view, |
|
|
dst_view->GetImageSubresourceLayers(), {dst_top_left, dst_bot_right}); |
|
|
dst_view->GetImageSubresourceLayers(), {dst_top_left, dst_bot_right}); |
|
|
const bool is_linear = copy_config.filter == Tegra::Engines::Fermi2D::Filter::Linear; |
|
|
const bool is_linear = copy_config.filter == Tegra::Engines::Fermi2D::Filter::Linear; |
|
|
|
|
|
|
|
|
const auto& dld{device.GetDispatchLoader()}; |
|
|
|
|
|
scheduler.Record([src_image = src_view->GetImage(), dst_image = dst_view->GetImage(), blit, |
|
|
scheduler.Record([src_image = src_view->GetImage(), dst_image = dst_view->GetImage(), blit, |
|
|
is_linear](auto cmdbuf, auto& dld) { |
|
|
is_linear](auto cmdbuf, auto& dld) { |
|
|
cmdbuf.blitImage(src_image, vk::ImageLayout::eTransferSrcOptimal, dst_image, |
|
|
cmdbuf.blitImage(src_image, vk::ImageLayout::eTransferSrcOptimal, dst_image, |
|
|
|