[Vulkan] Untextured ImmediateDrawer, [D3D12] Small refactoring
This commit is contained in:
67
src/xenia/ui/vulkan/vulkan_upload_buffer_pool.h
Normal file
67
src/xenia/ui/vulkan/vulkan_upload_buffer_pool.h
Normal file
@@ -0,0 +1,67 @@
|
||||
/**
|
||||
******************************************************************************
|
||||
* Xenia : Xbox 360 Emulator Research Project *
|
||||
******************************************************************************
|
||||
* Copyright 2020 Ben Vanik. All rights reserved. *
|
||||
* Released under the BSD license - see LICENSE in the root for more details. *
|
||||
******************************************************************************
|
||||
*/
|
||||
|
||||
#ifndef XENIA_UI_VULKAN_VULKAN_UPLOAD_BUFFER_POOL_H_
|
||||
#define XENIA_UI_VULKAN_VULKAN_UPLOAD_BUFFER_POOL_H_
|
||||
|
||||
#include "xenia/ui/graphics_upload_buffer_pool.h"
|
||||
#include "xenia/ui/vulkan/vulkan_provider.h"
|
||||
|
||||
namespace xe {
|
||||
namespace ui {
|
||||
namespace vulkan {
|
||||
|
||||
class VulkanUploadBufferPool : public GraphicsUploadBufferPool {
|
||||
public:
|
||||
VulkanUploadBufferPool(const VulkanProvider& provider,
|
||||
VkBufferUsageFlags usage,
|
||||
size_t page_size = kDefaultPageSize);
|
||||
|
||||
uint8_t* Request(uint64_t submission_index, size_t size, size_t alignment,
|
||||
VkBuffer& buffer_out, VkDeviceSize& offset_out);
|
||||
uint8_t* RequestPartial(uint64_t submission_index, size_t size,
|
||||
size_t alignment, VkBuffer& buffer_out,
|
||||
VkDeviceSize& offset_out, VkDeviceSize& size_out);
|
||||
|
||||
protected:
|
||||
Page* CreatePageImplementation() override;
|
||||
|
||||
void FlushPageWrites(Page* page, size_t offset, size_t size) override;
|
||||
|
||||
private:
|
||||
struct VulkanPage : public Page {
|
||||
// Takes ownership of the buffer and its memory and mapping.
|
||||
VulkanPage(const VulkanProvider& provider, VkBuffer buffer,
|
||||
VkDeviceMemory memory, void* mapping)
|
||||
: provider_(provider),
|
||||
buffer_(buffer),
|
||||
memory_(memory),
|
||||
mapping_(mapping) {}
|
||||
~VulkanPage() override;
|
||||
const VulkanProvider& provider_;
|
||||
VkBuffer buffer_;
|
||||
VkDeviceMemory memory_;
|
||||
void* mapping_;
|
||||
};
|
||||
|
||||
const VulkanProvider& provider_;
|
||||
|
||||
VkDeviceSize allocation_size_;
|
||||
static constexpr uint32_t kMemoryTypeUnknown = UINT32_MAX;
|
||||
static constexpr uint32_t kMemoryTypeUnavailable = kMemoryTypeUnknown - 1;
|
||||
uint32_t memory_type_ = UINT32_MAX;
|
||||
|
||||
VkBufferUsageFlags usage_;
|
||||
};
|
||||
|
||||
} // namespace vulkan
|
||||
} // namespace ui
|
||||
} // namespace xe
|
||||
|
||||
#endif // XENIA_UI_VULKAN_VULKAN_UPLOAD_BUFFER_POOL_H_
|
||||
Reference in New Issue
Block a user