@ -108,7 +108,7 @@ void TextureCache<P>::RunGarbageCollector() {
}
if ( must_download ) {
auto map = runtime . DownloadStagingBuffer ( image . unswizzled_size_bytes ) ;
const auto copies = FullDownloadCopies ( image . info ) ;
const auto copies = FixSmallVectorADL ( F ullDownloadCopies ( image . info ) ) ;
image . DownloadMemory ( map , copies ) ;
runtime . Finish ( ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , map . mapped_span ,
@ -564,7 +564,7 @@ void TextureCache<P>::DownloadMemory(DAddr cpu_addr, size_t size) {
for ( const ImageId image_id : images ) {
Image & image = slot_images [ image_id ] ;
auto map = runtime . DownloadStagingBuffer ( image . unswizzled_size_bytes ) ;
const auto copies = FullDownloadCopies ( image . info ) ;
const auto copies = FixSmallVectorADL ( F ullDownloadCopies ( image . info ) ) ;
image . DownloadMemory ( map , copies ) ;
runtime . Finish ( ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , map . mapped_span ,
@ -829,7 +829,7 @@ void TextureCache<P>::CommitAsyncFlushes() {
for ( const PendingDownload & download_info : download_ids ) {
if ( download_info . is_swizzle ) {
Image & image = slot_images [ download_info . object_id ] ;
const auto copies = FullDownloadCopies ( image . info ) ;
const auto copies = FixSmallVectorADL ( F ullDownloadCopies ( image . info ) ) ;
image . DownloadMemory ( download_map , copies ) ;
download_map . offset + = Common : : AlignUp ( image . unswizzled_size_bytes , 64 ) ;
}
@ -862,12 +862,11 @@ void TextureCache<P>::PopAsyncFlushes() {
auto & download_buffer = download_map [ download_info . async_buffer_id ] ;
if ( download_info . is_swizzle ) {
const ImageBase & image = slot_images [ download_info . object_id ] ;
const auto copies = FullDownloadCopies ( image . info ) ;
const auto copies = FixSmallVectorADL ( F ullDownloadCopies ( image . info ) ) ;
download_buffer . offset - = Common : : AlignUp ( image . unswizzled_size_bytes , 64 ) ;
std : : span < u8 > download_span =
download_buffer . mapped_span . subspan ( download_buffer . offset ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , download_span ,
swizzle_data_buffer ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , download_span , swizzle_data_buffer ) ;
} else {
const BufferDownload & buffer_info = slot_buffer_downloads [ download_info . object_id ] ;
std : : span < u8 > download_span =
@ -901,7 +900,7 @@ void TextureCache<P>::PopAsyncFlushes() {
continue ;
}
Image & image = slot_images [ download_info . object_id ] ;
const auto copies = FullDownloadCopies ( image . info ) ;
const auto copies = FixSmallVectorADL ( F ullDownloadCopies ( image . info ) ) ;
image . DownloadMemory ( download_map , copies ) ;
download_map . offset + = image . unswizzled_size_bytes ;
}
@ -914,9 +913,8 @@ void TextureCache<P>::PopAsyncFlushes() {
continue ;
}
const ImageBase & image = slot_images [ download_info . object_id ] ;
const auto copies = FullDownloadCopies ( image . info ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , download_span ,
swizzle_data_buffer ) ;
const auto copies = FixSmallVectorADL ( FullDownloadCopies ( image . info ) ) ;
SwizzleImage ( * gpu_memory , image . gpu_addr , image . info , copies , download_span , swizzle_data_buffer ) ;
download_map . offset + = image . unswizzled_size_bytes ;
download_span = download_span . subspan ( image . unswizzled_size_bytes ) ;
}
@ -1082,22 +1080,19 @@ void TextureCache<P>::UploadImageContents(Image& image, StagingBuffer& staging)
gpu_memory - > ReadBlock ( gpu_addr , mapped_span . data ( ) , mapped_span . size_bytes ( ) ,
VideoCommon : : CacheType : : NoTextureCache ) ;
const auto uploads = FullUploadSwizzles ( image . info ) ;
runtime . AccelerateImageUpload ( image , staging , uploads ) ;
runtime . AccelerateImageUpload ( image , staging , FixSmallVectorADL ( uploads ) ) ;
return ;
}
Tegra : : Memory : : GpuGuestMemory < u8 , Tegra : : Memory : : GuestMemoryFlags : : UnsafeRead > swizzle_data (
* gpu_memory , gpu_addr , image . guest_size_bytes , & swizzle_data_buffer ) ;
if ( True ( image . flags & ImageFlagBits : : Converted ) ) {
unswizzle_data_buffer . resize_destructive ( image . unswizzled_size_bytes ) ;
auto copies =
UnswizzleImage ( * gpu_memory , gpu_addr , image . info , swizzle_data , unswizzle_data_buffer ) ;
auto copies = FixSmallVectorADL ( UnswizzleImage ( * gpu_memory , gpu_addr , image . info , swizzle_data , unswizzle_data_buffer ) ) ;
ConvertImage ( unswizzle_data_buffer , image . info , mapped_span , copies ) ;
image . UploadMemory ( staging , copies ) ;
} else {
const auto copies =
UnswizzleImage ( * gpu_memory , gpu_addr , image . info , swizzle_data , mapped_span ) ;
const auto copies = FixSmallVectorADL ( UnswizzleImage ( * gpu_memory , gpu_addr , image . info , swizzle_data , mapped_span ) ) ;
image . UploadMemory ( staging , copies ) ;
}
}
@ -1329,7 +1324,7 @@ void TextureCache<P>::TickAsyncDecode() {
auto staging = runtime . UploadStagingBuffer ( MapSizeBytes ( image ) ) ;
std : : memcpy ( staging . mapped_span . data ( ) , async_decode - > decoded_data . data ( ) ,
async_decode - > decoded_data . size ( ) ) ;
image . UploadMemory ( staging , async_decode - > copies ) ;
image . UploadMemory ( staging , FixSmallVectorADL ( async_decode - > copies ) ) ;
image . flags & = ~ ImageFlagBits : : IsDecoding ;
has_uploads = true ;
i = async_decodes . erase ( i ) ;
@ -1576,9 +1571,9 @@ ImageId TextureCache<P>::JoinImages(const ImageInfo& info, GPUVAddr gpu_addr, DA
const u32 down_shift = can_rescale ? resolution . down_shift : 0 ;
auto copies = MakeShrinkImageCopies ( new_info , overlap . info , base , up_scale , down_shift ) ;
if ( overlap . info . num_samples ! = new_image . info . num_samples ) {
runtime . CopyImageMSAA ( new_image , overlap , std : : move ( copies ) ) ;
runtime . CopyImageMSAA ( new_image , overlap , FixSmallVectorADL ( copies ) ) ;
} else {
runtime . CopyImage ( new_image , overlap , std : : move ( copies ) ) ;
runtime . CopyImage ( new_image , overlap , FixSmallVectorADL ( copies ) ) ;
}
new_image . modification_tick = overlap . modification_tick ;
}