diff options
| author | 2023-06-20 09:55:23 -0400 | |
|---|---|---|
| committer | 2023-06-20 09:55:23 -0400 | |
| commit | f1e12e3b08e3375eadebfb2594833e4bc7b27247 (patch) | |
| tree | 51e903cc56d910e8c0b25224ba5fd48436aa5c15 | |
| parent | Merge pull request #10835 from lat9nq/intel-restrict-compute-disable (diff) | |
| parent | video_core: add samples check when find render target (diff) | |
| download | yuzu-f1e12e3b08e3375eadebfb2594833e4bc7b27247.tar.gz yuzu-f1e12e3b08e3375eadebfb2594833e4bc7b27247.tar.xz yuzu-f1e12e3b08e3375eadebfb2594833e4bc7b27247.zip | |
Merge pull request #10818 from vonchenplus/render_target_samples
video_core: add samples check when find render target
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 22 | ||||
| -rw-r--r-- | src/video_core/texture_cache/texture_cache_base.h | 10 |
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 | ||
| 302 | template <class P> | 302 | template <class P> |
| 303 | bool TextureCache<P>::RescaleRenderTargets(bool is_clear) { | 303 | bool 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 | ||
| 1680 | template <class P> | 1680 | template <class P> |
| 1681 | ImageViewId TextureCache<P>::FindColorBuffer(size_t index, bool is_clear) { | 1681 | ImageViewId 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 | ||
| 1698 | template <class P> | 1698 | template <class P> |
| 1699 | ImageViewId TextureCache<P>::FindDepthBuffer(bool is_clear) { | 1699 | ImageViewId 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 | ||
| 1712 | template <class P> | 1712 | template <class P> |
| 1713 | ImageViewId TextureCache<P>::FindRenderTargetView(const ImageInfo& info, GPUVAddr gpu_addr, | 1713 | ImageViewId 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> |