summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/video_core/texture_cache/texture_cache.h22
-rw-r--r--src/video_core/texture_cache/texture_cache_base.h10
2 files changed, 14 insertions, 18 deletions
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h
index 4027d860b..d25339c8c 100644
--- a/src/video_core/texture_cache/texture_cache.h
+++ b/src/video_core/texture_cache/texture_cache.h
@@ -300,7 +300,7 @@ void TextureCache<P>::SynchronizeComputeDescriptors() {
300} 300}
301 301
302template <class P> 302template <class P>
303bool TextureCache<P>::RescaleRenderTargets(bool is_clear) { 303bool TextureCache<P>::RescaleRenderTargets() {
304 auto& flags = maxwell3d->dirty.flags; 304 auto& flags = maxwell3d->dirty.flags;
305 u32 scale_rating = 0; 305 u32 scale_rating = 0;
306 bool rescaled = false; 306 bool rescaled = false;
@@ -338,13 +338,13 @@ bool TextureCache<P>::RescaleRenderTargets(bool is_clear) {
338 ImageViewId& color_buffer_id = render_targets.color_buffer_ids[index]; 338 ImageViewId& color_buffer_id = render_targets.color_buffer_ids[index];
339 if (flags[Dirty::ColorBuffer0 + index] || force) { 339 if (flags[Dirty::ColorBuffer0 + index] || force) {
340 flags[Dirty::ColorBuffer0 + index] = false; 340 flags[Dirty::ColorBuffer0 + index] = false;
341 BindRenderTarget(&color_buffer_id, FindColorBuffer(index, is_clear)); 341 BindRenderTarget(&color_buffer_id, FindColorBuffer(index));
342 } 342 }
343 check_rescale(color_buffer_id, tmp_color_images[index]); 343 check_rescale(color_buffer_id, tmp_color_images[index]);
344 } 344 }
345 if (flags[Dirty::ZetaBuffer] || force) { 345 if (flags[Dirty::ZetaBuffer] || force) {
346 flags[Dirty::ZetaBuffer] = false; 346 flags[Dirty::ZetaBuffer] = false;
347 BindRenderTarget(&render_targets.depth_buffer_id, FindDepthBuffer(is_clear)); 347 BindRenderTarget(&render_targets.depth_buffer_id, FindDepthBuffer());
348 } 348 }
349 check_rescale(render_targets.depth_buffer_id, tmp_depth_image); 349 check_rescale(render_targets.depth_buffer_id, tmp_depth_image);
350 350
@@ -409,7 +409,7 @@ void TextureCache<P>::UpdateRenderTargets(bool is_clear) {
409 return; 409 return;
410 } 410 }
411 411
412 const bool rescaled = RescaleRenderTargets(is_clear); 412 const bool rescaled = RescaleRenderTargets();
413 if (is_rescaling != rescaled) { 413 if (is_rescaling != rescaled) {
414 flags[Dirty::RescaleViewports] = true; 414 flags[Dirty::RescaleViewports] = true;
415 flags[Dirty::RescaleScissors] = true; 415 flags[Dirty::RescaleScissors] = true;
@@ -1678,7 +1678,7 @@ SamplerId TextureCache<P>::FindSampler(const TSCEntry& config) {
1678} 1678}
1679 1679
1680template <class P> 1680template <class P>
1681ImageViewId TextureCache<P>::FindColorBuffer(size_t index, bool is_clear) { 1681ImageViewId TextureCache<P>::FindColorBuffer(size_t index) {
1682 const auto& regs = maxwell3d->regs; 1682 const auto& regs = maxwell3d->regs;
1683 if (index >= regs.rt_control.count) { 1683 if (index >= regs.rt_control.count) {
1684 return ImageViewId{}; 1684 return ImageViewId{};
@@ -1692,11 +1692,11 @@ ImageViewId TextureCache<P>::FindColorBuffer(size_t index, bool is_clear) {
1692 return ImageViewId{}; 1692 return ImageViewId{};
1693 } 1693 }
1694 const ImageInfo info(regs.rt[index], regs.anti_alias_samples_mode); 1694 const ImageInfo info(regs.rt[index], regs.anti_alias_samples_mode);
1695 return FindRenderTargetView(info, gpu_addr, is_clear); 1695 return FindRenderTargetView(info, gpu_addr);
1696} 1696}
1697 1697
1698template <class P> 1698template <class P>
1699ImageViewId TextureCache<P>::FindDepthBuffer(bool is_clear) { 1699ImageViewId TextureCache<P>::FindDepthBuffer() {
1700 const auto& regs = maxwell3d->regs; 1700 const auto& regs = maxwell3d->regs;
1701 if (!regs.zeta_enable) { 1701 if (!regs.zeta_enable) {
1702 return ImageViewId{}; 1702 return ImageViewId{};
@@ -1706,18 +1706,16 @@ ImageViewId TextureCache<P>::FindDepthBuffer(bool is_clear) {
1706 return ImageViewId{}; 1706 return ImageViewId{};
1707 } 1707 }
1708 const ImageInfo info(regs.zeta, regs.zeta_size, regs.anti_alias_samples_mode); 1708 const ImageInfo info(regs.zeta, regs.zeta_size, regs.anti_alias_samples_mode);
1709 return FindRenderTargetView(info, gpu_addr, is_clear); 1709 return FindRenderTargetView(info, gpu_addr);
1710} 1710}
1711 1711
1712template <class P> 1712template <class P>
1713ImageViewId TextureCache<P>::FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr, 1713ImageViewId TextureCache<P>::FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr) {
1714 bool is_clear) {
1715 const auto options = is_clear ? RelaxedOptions::Samples : RelaxedOptions{};
1716 ImageId image_id{}; 1714 ImageId image_id{};
1717 bool delete_state = has_deleted_images; 1715 bool delete_state = has_deleted_images;
1718 do { 1716 do {
1719 has_deleted_images = false; 1717 has_deleted_images = false;
1720 image_id = FindOrInsertImage(info, gpu_addr, options); 1718 image_id = FindOrInsertImage(info, gpu_addr);
1721 delete_state |= has_deleted_images; 1719 delete_state |= has_deleted_images;
1722 } while (has_deleted_images); 1720 } while (has_deleted_images);
1723 has_deleted_images = delete_state; 1721 has_deleted_images = delete_state;
diff --git a/src/video_core/texture_cache/texture_cache_base.h b/src/video_core/texture_cache/texture_cache_base.h
index d96ddea9d..44232b961 100644
--- a/src/video_core/texture_cache/texture_cache_base.h
+++ b/src/video_core/texture_cache/texture_cache_base.h
@@ -178,9 +178,8 @@ public:
178 void SynchronizeComputeDescriptors(); 178 void SynchronizeComputeDescriptors();
179 179
180 /// Updates the Render Targets if they can be rescaled 180 /// Updates the Render Targets if they can be rescaled
181 /// @param is_clear True when the render targets are being used for clears
182 /// @retval True if the Render Targets have been rescaled. 181 /// @retval True if the Render Targets have been rescaled.
183 bool RescaleRenderTargets(bool is_clear); 182 bool RescaleRenderTargets();
184 183
185 /// Update bound render targets and upload memory if necessary 184 /// Update bound render targets and upload memory if necessary
186 /// @param is_clear True when the render targets are being used for clears 185 /// @param is_clear True when the render targets are being used for clears
@@ -336,14 +335,13 @@ private:
336 [[nodiscard]] SamplerId FindSampler(const TSCEntry& config); 335 [[nodiscard]] SamplerId FindSampler(const TSCEntry& config);
337 336
338 /// Find or create an image view for the given color buffer index 337 /// Find or create an image view for the given color buffer index
339 [[nodiscard]] ImageViewId FindColorBuffer(size_t index, bool is_clear); 338 [[nodiscard]] ImageViewId FindColorBuffer(size_t index);
340 339
341 /// Find or create an image view for the depth buffer 340 /// Find or create an image view for the depth buffer
342 [[nodiscard]] ImageViewId FindDepthBuffer(bool is_clear); 341 [[nodiscard]] ImageViewId FindDepthBuffer();
343 342
344 /// Find or create a view for a render target with the given image parameters 343 /// Find or create a view for a render target with the given image parameters
345 [[nodiscard]] ImageViewId FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr, 344 [[nodiscard]] ImageViewId FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr);
346 bool is_clear);
347 345
348 /// Iterates over all the images in a region calling func 346 /// Iterates over all the images in a region calling func
349 template <typename Func> 347 template <typename Func>