diff options
| author | 2023-07-15 22:59:04 +0300 | |
|---|---|---|
| committer | 2023-07-15 23:09:58 +0300 | |
| commit | 4347dd26c6cef497b84b9ca662e3990bef14925b (patch) | |
| tree | 4573808d01264230104b18b4c1283b3b0c60ab9c /src/video_core/buffer_cache | |
| parent | file_sys/content_archive: Detect compressed NCAs (#11047) (diff) | |
| download | yuzu-4347dd26c6cef497b84b9ca662e3990bef14925b.tar.gz yuzu-4347dd26c6cef497b84b9ca662e3990bef14925b.tar.xz yuzu-4347dd26c6cef497b84b9ca662e3990bef14925b.zip | |
buffer_cache: Increase number of texture buffers
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 10 | ||||
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache_base.h | 2 |
2 files changed, 11 insertions, 1 deletions
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index 6ed4b78f2..f0f450edb 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -442,6 +442,11 @@ void BufferCache<P>::UnbindComputeStorageBuffers() { | |||
| 442 | template <class P> | 442 | template <class P> |
| 443 | void BufferCache<P>::BindComputeStorageBuffer(size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset, | 443 | void BufferCache<P>::BindComputeStorageBuffer(size_t ssbo_index, u32 cbuf_index, u32 cbuf_offset, |
| 444 | bool is_written) { | 444 | bool is_written) { |
| 445 | if (ssbo_index >= channel_state->compute_storage_buffers.size()) [[unlikely]] { | ||
| 446 | LOG_ERROR(HW_GPU, "Storage buffer index {} exceeds maximum storage buffer count", | ||
| 447 | ssbo_index); | ||
| 448 | return; | ||
| 449 | } | ||
| 445 | channel_state->enabled_compute_storage_buffers |= 1U << ssbo_index; | 450 | channel_state->enabled_compute_storage_buffers |= 1U << ssbo_index; |
| 446 | channel_state->written_compute_storage_buffers |= (is_written ? 1U : 0U) << ssbo_index; | 451 | channel_state->written_compute_storage_buffers |= (is_written ? 1U : 0U) << ssbo_index; |
| 447 | 452 | ||
| @@ -464,6 +469,11 @@ void BufferCache<P>::UnbindComputeTextureBuffers() { | |||
| 464 | template <class P> | 469 | template <class P> |
| 465 | void BufferCache<P>::BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, | 470 | void BufferCache<P>::BindComputeTextureBuffer(size_t tbo_index, GPUVAddr gpu_addr, u32 size, |
| 466 | PixelFormat format, bool is_written, bool is_image) { | 471 | PixelFormat format, bool is_written, bool is_image) { |
| 472 | if (tbo_index >= channel_state->compute_texture_buffers.size()) [[unlikely]] { | ||
| 473 | LOG_ERROR(HW_GPU, "Texture buffer index {} exceeds maximum texture buffer count", | ||
| 474 | tbo_index); | ||
| 475 | return; | ||
| 476 | } | ||
| 467 | channel_state->enabled_compute_texture_buffers |= 1U << tbo_index; | 477 | channel_state->enabled_compute_texture_buffers |= 1U << tbo_index; |
| 468 | channel_state->written_compute_texture_buffers |= (is_written ? 1U : 0U) << tbo_index; | 478 | channel_state->written_compute_texture_buffers |= (is_written ? 1U : 0U) << tbo_index; |
| 469 | if constexpr (SEPARATE_IMAGE_BUFFERS_BINDINGS) { | 479 | if constexpr (SEPARATE_IMAGE_BUFFERS_BINDINGS) { |
diff --git a/src/video_core/buffer_cache/buffer_cache_base.h b/src/video_core/buffer_cache/buffer_cache_base.h index 460fc7551..0b7135d49 100644 --- a/src/video_core/buffer_cache/buffer_cache_base.h +++ b/src/video_core/buffer_cache/buffer_cache_base.h | |||
| @@ -67,7 +67,7 @@ constexpr u32 NUM_TRANSFORM_FEEDBACK_BUFFERS = 4; | |||
| 67 | constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18; | 67 | constexpr u32 NUM_GRAPHICS_UNIFORM_BUFFERS = 18; |
| 68 | constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8; | 68 | constexpr u32 NUM_COMPUTE_UNIFORM_BUFFERS = 8; |
| 69 | constexpr u32 NUM_STORAGE_BUFFERS = 16; | 69 | constexpr u32 NUM_STORAGE_BUFFERS = 16; |
| 70 | constexpr u32 NUM_TEXTURE_BUFFERS = 16; | 70 | constexpr u32 NUM_TEXTURE_BUFFERS = 32; |
| 71 | constexpr u32 NUM_STAGES = 5; | 71 | constexpr u32 NUM_STAGES = 5; |
| 72 | 72 | ||
| 73 | using UniformBufferSizes = std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>; | 73 | using UniformBufferSizes = std::array<std::array<u32, NUM_GRAPHICS_UNIFORM_BUFFERS>, NUM_STAGES>; |