Texture cache: Only force flush the dma downloads
This commit is contained in:
		| @@ -288,7 +288,7 @@ void MaxwellDMA::CopyPitchToBlockLinear() { | ||||
|     write_buffer.resize_destructive(dst_size); | ||||
|  | ||||
|     memory_manager.ReadBlock(regs.offset_in, read_buffer.data(), src_size); | ||||
|     memory_manager.ReadBlock(regs.offset_out, write_buffer.data(), dst_size); | ||||
|     memory_manager.ReadBlockUnsafe(regs.offset_out, write_buffer.data(), dst_size); | ||||
|  | ||||
|     // If the input is linear and the output is tiled, swizzle the input and copy it over. | ||||
|     SwizzleSubrect(write_buffer, read_buffer, bytes_per_pixel, width, height, depth, x_offset, | ||||
|   | ||||
| @@ -1304,7 +1304,7 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info, | ||||
|                                        const Tegra::DMA::BufferOperand& buffer_operand, | ||||
|                                        const Tegra::DMA::ImageOperand& image_operand) { | ||||
|     std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; | ||||
|     const auto image_id = texture_cache.DmaImageId(image_operand); | ||||
|     const auto image_id = texture_cache.DmaImageId(image_operand, IS_IMAGE_UPLOAD); | ||||
|     if (image_id == VideoCommon::NULL_IMAGE_ID) { | ||||
|         return false; | ||||
|     } | ||||
|   | ||||
| @@ -793,7 +793,7 @@ bool AccelerateDMA::DmaBufferImageCopy(const Tegra::DMA::ImageCopy& copy_info, | ||||
|                                        const Tegra::DMA::BufferOperand& buffer_operand, | ||||
|                                        const Tegra::DMA::ImageOperand& image_operand) { | ||||
|     std::scoped_lock lock{buffer_cache.mutex, texture_cache.mutex}; | ||||
|     const auto image_id = texture_cache.DmaImageId(image_operand); | ||||
|     const auto image_id = texture_cache.DmaImageId(image_operand, IS_IMAGE_UPLOAD); | ||||
|     if (image_id == VideoCommon::NULL_IMAGE_ID) { | ||||
|         return false; | ||||
|     } | ||||
|   | ||||
| @@ -811,7 +811,7 @@ void TextureCache<P>::PopAsyncFlushes() { | ||||
| } | ||||
|  | ||||
| template <class P> | ||||
| ImageId TextureCache<P>::DmaImageId(const Tegra::DMA::ImageOperand& operand) { | ||||
| ImageId TextureCache<P>::DmaImageId(const Tegra::DMA::ImageOperand& operand, bool is_upload) { | ||||
|     const ImageInfo dst_info(operand); | ||||
|     const ImageId dst_id = FindDMAImage(dst_info, operand.address); | ||||
|     if (!dst_id) { | ||||
| @@ -822,7 +822,7 @@ ImageId TextureCache<P>::DmaImageId(const Tegra::DMA::ImageOperand& operand) { | ||||
|         // No need to waste time on an image that's synced with guest | ||||
|         return NULL_IMAGE_ID; | ||||
|     } | ||||
|     if (!image.info.dma_downloaded) { | ||||
|     if (!is_upload && !image.info.dma_downloaded) { | ||||
|         // Force a full sync. | ||||
|         image.info.dma_downloaded = true; | ||||
|         return NULL_IMAGE_ID; | ||||
|   | ||||
| @@ -207,7 +207,7 @@ public: | ||||
|     /// Pop asynchronous downloads | ||||
|     void PopAsyncFlushes(); | ||||
|  | ||||
|     [[nodiscard]] ImageId DmaImageId(const Tegra::DMA::ImageOperand& operand); | ||||
|     [[nodiscard]] ImageId DmaImageId(const Tegra::DMA::ImageOperand& operand, bool is_upload); | ||||
|  | ||||
|     [[nodiscard]] std::pair<Image*, BufferImageCopy> DmaBufferImageCopy( | ||||
|         const Tegra::DMA::ImageCopy& copy_info, const Tegra::DMA::BufferOperand& buffer_operand, | ||||
|   | ||||
		Reference in New Issue
	
	Block a user