diff options
| author | 2020-06-15 22:29:32 -0300 | |
|---|---|---|
| committer | 2020-06-15 22:29:32 -0300 | |
| commit | 0bd9bc7201568f1c1f6f0a0c425cff6229ffc597 (patch) | |
| tree | 7a398409a2e8a03a4bf5246ac5bda06a6d7ef823 /src/video_core/renderer_vulkan | |
| parent | Merge pull request #4085 from ReinUsesLisp/gcc-times (diff) | |
| parent | buffer_cache: Avoid passing references of shared pointers and misc style changes (diff) | |
| download | yuzu-0bd9bc7201568f1c1f6f0a0c425cff6229ffc597.tar.gz yuzu-0bd9bc7201568f1c1f6f0a0c425cff6229ffc597.tar.xz yuzu-0bd9bc7201568f1c1f6f0a0c425cff6229ffc597.zip | |
Merge pull request #4066 from ReinUsesLisp/shared-ptr-buf
buffer_cache: Avoid passing references of shared pointers and misc style changes
Diffstat (limited to 'src/video_core/renderer_vulkan')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_buffer_cache.cpp | 22 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_buffer_cache.h | 16 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_stream_buffer.h | 2 |
3 files changed, 16 insertions, 24 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp index 5f33d9e40..1fde38328 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp | |||
| @@ -37,8 +37,8 @@ std::unique_ptr<VKStreamBuffer> CreateStreamBuffer(const VKDevice& device, VKSch | |||
| 37 | 37 | ||
| 38 | } // Anonymous namespace | 38 | } // Anonymous namespace |
| 39 | 39 | ||
| 40 | CachedBufferBlock::CachedBufferBlock(const VKDevice& device, VKMemoryManager& memory_manager, | 40 | Buffer::Buffer(const VKDevice& device, VKMemoryManager& memory_manager, VAddr cpu_addr, |
| 41 | VAddr cpu_addr, std::size_t size) | 41 | std::size_t size) |
| 42 | : VideoCommon::BufferBlock{cpu_addr, size} { | 42 | : VideoCommon::BufferBlock{cpu_addr, size} { |
| 43 | VkBufferCreateInfo ci; | 43 | VkBufferCreateInfo ci; |
| 44 | ci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; | 44 | ci.sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO; |
| @@ -54,7 +54,7 @@ CachedBufferBlock::CachedBufferBlock(const VKDevice& device, VKMemoryManager& me | |||
| 54 | buffer.commit = memory_manager.Commit(buffer.handle, false); | 54 | buffer.commit = memory_manager.Commit(buffer.handle, false); |
| 55 | } | 55 | } |
| 56 | 56 | ||
| 57 | CachedBufferBlock::~CachedBufferBlock() = default; | 57 | Buffer::~Buffer() = default; |
| 58 | 58 | ||
| 59 | VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer, Core::System& system, | 59 | VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer, Core::System& system, |
| 60 | const VKDevice& device, VKMemoryManager& memory_manager, | 60 | const VKDevice& device, VKMemoryManager& memory_manager, |
| @@ -67,12 +67,8 @@ VKBufferCache::VKBufferCache(VideoCore::RasterizerInterface& rasterizer, Core::S | |||
| 67 | 67 | ||
| 68 | VKBufferCache::~VKBufferCache() = default; | 68 | VKBufferCache::~VKBufferCache() = default; |
| 69 | 69 | ||
| 70 | Buffer VKBufferCache::CreateBlock(VAddr cpu_addr, std::size_t size) { | 70 | std::shared_ptr<Buffer> VKBufferCache::CreateBlock(VAddr cpu_addr, std::size_t size) { |
| 71 | return std::make_shared<CachedBufferBlock>(device, memory_manager, cpu_addr, size); | 71 | return std::make_shared<Buffer>(device, memory_manager, cpu_addr, size); |
| 72 | } | ||
| 73 | |||
| 74 | VkBuffer VKBufferCache::ToHandle(const Buffer& buffer) { | ||
| 75 | return buffer->GetHandle(); | ||
| 76 | } | 72 | } |
| 77 | 73 | ||
| 78 | VkBuffer VKBufferCache::GetEmptyBuffer(std::size_t size) { | 74 | VkBuffer VKBufferCache::GetEmptyBuffer(std::size_t size) { |
| @@ -91,7 +87,7 @@ void VKBufferCache::UploadBlockData(const Buffer& buffer, std::size_t offset, st | |||
| 91 | std::memcpy(staging.commit->Map(size), data, size); | 87 | std::memcpy(staging.commit->Map(size), data, size); |
| 92 | 88 | ||
| 93 | scheduler.RequestOutsideRenderPassOperationContext(); | 89 | scheduler.RequestOutsideRenderPassOperationContext(); |
| 94 | scheduler.Record([staging = *staging.handle, buffer = buffer->GetHandle(), offset, | 90 | scheduler.Record([staging = *staging.handle, buffer = buffer.Handle(), offset, |
| 95 | size](vk::CommandBuffer cmdbuf) { | 91 | size](vk::CommandBuffer cmdbuf) { |
| 96 | cmdbuf.CopyBuffer(staging, buffer, VkBufferCopy{0, offset, size}); | 92 | cmdbuf.CopyBuffer(staging, buffer, VkBufferCopy{0, offset, size}); |
| 97 | 93 | ||
| @@ -114,7 +110,7 @@ void VKBufferCache::DownloadBlockData(const Buffer& buffer, std::size_t offset, | |||
| 114 | u8* data) { | 110 | u8* data) { |
| 115 | const auto& staging = staging_pool.GetUnusedBuffer(size, true); | 111 | const auto& staging = staging_pool.GetUnusedBuffer(size, true); |
| 116 | scheduler.RequestOutsideRenderPassOperationContext(); | 112 | scheduler.RequestOutsideRenderPassOperationContext(); |
| 117 | scheduler.Record([staging = *staging.handle, buffer = buffer->GetHandle(), offset, | 113 | scheduler.Record([staging = *staging.handle, buffer = buffer.Handle(), offset, |
| 118 | size](vk::CommandBuffer cmdbuf) { | 114 | size](vk::CommandBuffer cmdbuf) { |
| 119 | VkBufferMemoryBarrier barrier; | 115 | VkBufferMemoryBarrier barrier; |
| 120 | barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; | 116 | barrier.sType = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER; |
| @@ -141,8 +137,8 @@ void VKBufferCache::DownloadBlockData(const Buffer& buffer, std::size_t offset, | |||
| 141 | void VKBufferCache::CopyBlock(const Buffer& src, const Buffer& dst, std::size_t src_offset, | 137 | void VKBufferCache::CopyBlock(const Buffer& src, const Buffer& dst, std::size_t src_offset, |
| 142 | std::size_t dst_offset, std::size_t size) { | 138 | std::size_t dst_offset, std::size_t size) { |
| 143 | scheduler.RequestOutsideRenderPassOperationContext(); | 139 | scheduler.RequestOutsideRenderPassOperationContext(); |
| 144 | scheduler.Record([src_buffer = src->GetHandle(), dst_buffer = dst->GetHandle(), src_offset, | 140 | scheduler.Record([src_buffer = src.Handle(), dst_buffer = dst.Handle(), src_offset, dst_offset, |
| 145 | dst_offset, size](vk::CommandBuffer cmdbuf) { | 141 | size](vk::CommandBuffer cmdbuf) { |
| 146 | cmdbuf.CopyBuffer(src_buffer, dst_buffer, VkBufferCopy{src_offset, dst_offset, size}); | 142 | cmdbuf.CopyBuffer(src_buffer, dst_buffer, VkBufferCopy{src_offset, dst_offset, size}); |
| 147 | 143 | ||
| 148 | std::array<VkBufferMemoryBarrier, 2> barriers; | 144 | std::array<VkBufferMemoryBarrier, 2> barriers; |
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h index 65cb3c8ad..9ebbef835 100644 --- a/src/video_core/renderer_vulkan/vk_buffer_cache.h +++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h | |||
| @@ -23,13 +23,13 @@ class VKDevice; | |||
| 23 | class VKMemoryManager; | 23 | class VKMemoryManager; |
| 24 | class VKScheduler; | 24 | class VKScheduler; |
| 25 | 25 | ||
| 26 | class CachedBufferBlock final : public VideoCommon::BufferBlock { | 26 | class Buffer final : public VideoCommon::BufferBlock { |
| 27 | public: | 27 | public: |
| 28 | explicit CachedBufferBlock(const VKDevice& device, VKMemoryManager& memory_manager, | 28 | explicit Buffer(const VKDevice& device, VKMemoryManager& memory_manager, VAddr cpu_addr, |
| 29 | VAddr cpu_addr, std::size_t size); | 29 | std::size_t size); |
| 30 | ~CachedBufferBlock(); | 30 | ~Buffer(); |
| 31 | 31 | ||
| 32 | VkBuffer GetHandle() const { | 32 | VkBuffer Handle() const { |
| 33 | return *buffer.handle; | 33 | return *buffer.handle; |
| 34 | } | 34 | } |
| 35 | 35 | ||
| @@ -37,8 +37,6 @@ private: | |||
| 37 | VKBuffer buffer; | 37 | VKBuffer buffer; |
| 38 | }; | 38 | }; |
| 39 | 39 | ||
| 40 | using Buffer = std::shared_ptr<CachedBufferBlock>; | ||
| 41 | |||
| 42 | class VKBufferCache final : public VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer> { | 40 | class VKBufferCache final : public VideoCommon::BufferCache<Buffer, VkBuffer, VKStreamBuffer> { |
| 43 | public: | 41 | public: |
| 44 | explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer, Core::System& system, | 42 | explicit VKBufferCache(VideoCore::RasterizerInterface& rasterizer, Core::System& system, |
| @@ -49,9 +47,7 @@ public: | |||
| 49 | VkBuffer GetEmptyBuffer(std::size_t size) override; | 47 | VkBuffer GetEmptyBuffer(std::size_t size) override; |
| 50 | 48 | ||
| 51 | protected: | 49 | protected: |
| 52 | VkBuffer ToHandle(const Buffer& buffer) override; | 50 | std::shared_ptr<Buffer> CreateBlock(VAddr cpu_addr, std::size_t size) override; |
| 53 | |||
| 54 | Buffer CreateBlock(VAddr cpu_addr, std::size_t size) override; | ||
| 55 | 51 | ||
| 56 | void UploadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, | 52 | void UploadBlockData(const Buffer& buffer, std::size_t offset, std::size_t size, |
| 57 | const u8* data) override; | 53 | const u8* data) override; |
diff --git a/src/video_core/renderer_vulkan/vk_stream_buffer.h b/src/video_core/renderer_vulkan/vk_stream_buffer.h index dfddf7ad6..c765c60a0 100644 --- a/src/video_core/renderer_vulkan/vk_stream_buffer.h +++ b/src/video_core/renderer_vulkan/vk_stream_buffer.h | |||
| @@ -35,7 +35,7 @@ public: | |||
| 35 | /// Ensures that "size" bytes of memory are available to the GPU, potentially recording a copy. | 35 | /// Ensures that "size" bytes of memory are available to the GPU, potentially recording a copy. |
| 36 | void Unmap(u64 size); | 36 | void Unmap(u64 size); |
| 37 | 37 | ||
| 38 | VkBuffer GetHandle() const { | 38 | VkBuffer Handle() const { |
| 39 | return *buffer; | 39 | return *buffer; |
| 40 | } | 40 | } |
| 41 | 41 | ||