diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index f24de9a38..565b99254 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h | |||
| @@ -1137,8 +1137,11 @@ typename TextureCache<P>::BlitImages TextureCache<P>::GetBlitImages( | |||
| 1137 | } while (has_deleted_images); | 1137 | } while (has_deleted_images); |
| 1138 | if (GetFormatType(dst_info.format) != SurfaceType::ColorTexture) { | 1138 | if (GetFormatType(dst_info.format) != SurfaceType::ColorTexture) { |
| 1139 | // Make sure the images are depth and/or stencil textures. | 1139 | // Make sure the images are depth and/or stencil textures. |
| 1140 | src_id = FindOrInsertImage(src_info, src_addr, RelaxedOptions{}); | 1140 | do { |
| 1141 | dst_id = FindOrInsertImage(dst_info, dst_addr, RelaxedOptions{}); | 1141 | has_deleted_images = false; |
| 1142 | src_id = FindOrInsertImage(src_info, src_addr, RelaxedOptions{}); | ||
| 1143 | dst_id = FindOrInsertImage(dst_info, dst_addr, RelaxedOptions{}); | ||
| 1144 | } while (has_deleted_images); | ||
| 1142 | } | 1145 | } |
| 1143 | return BlitImages{ | 1146 | return BlitImages{ |
| 1144 | .dst_id = dst_id, | 1147 | .dst_id = dst_id, |
| @@ -1196,7 +1199,14 @@ template <class P> | |||
| 1196 | ImageViewId TextureCache<P>::FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr, | 1199 | ImageViewId TextureCache<P>::FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr, |
| 1197 | bool is_clear) { | 1200 | bool is_clear) { |
| 1198 | const auto options = is_clear ? RelaxedOptions::Samples : RelaxedOptions{}; | 1201 | const auto options = is_clear ? RelaxedOptions::Samples : RelaxedOptions{}; |
| 1199 | const ImageId image_id = FindOrInsertImage(info, gpu_addr, options); | 1202 | ImageId image_id{}; |
| 1203 | bool delete_state = has_deleted_images; | ||
| 1204 | do { | ||
| 1205 | has_deleted_images = false; | ||
| 1206 | image_id = FindOrInsertImage(info, gpu_addr, options); | ||
| 1207 | delete_state |= has_deleted_images; | ||
| 1208 | } while (has_deleted_images); | ||
| 1209 | has_deleted_images = delete_state; | ||
| 1200 | if (!image_id) { | 1210 | if (!image_id) { |
| 1201 | return NULL_IMAGE_VIEW_ID; | 1211 | return NULL_IMAGE_VIEW_ID; |
| 1202 | } | 1212 | } |