|
|
@@ -60,6 +60,27 @@ std::array<T, 6> MakeQuadIndices(u32 quad, u32 first) {
|
|
|
}
|
|
|
return indices;
|
|
|
}
|
|
|
+
|
|
|
+vk::Buffer CreateBuffer(const Device& device, u64 size) {
|
|
|
+ VkBufferUsageFlags flags =
|
|
|
+ VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
|
|
|
+ VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT |
|
|
|
+ VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_STORAGE_BUFFER_BIT |
|
|
|
+ VK_BUFFER_USAGE_INDEX_BUFFER_BIT | VK_BUFFER_USAGE_VERTEX_BUFFER_BIT;
|
|
|
+ if (device.IsExtTransformFeedbackSupported()) {
|
|
|
+ flags |= VK_BUFFER_USAGE_TRANSFORM_FEEDBACK_BUFFER_BIT_EXT;
|
|
|
+ }
|
|
|
+ return device.GetLogical().CreateBuffer({
|
|
|
+ .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
|
|
+ .pNext = nullptr,
|
|
|
+ .flags = 0,
|
|
|
+ .size = size,
|
|
|
+ .usage = flags,
|
|
|
+ .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
|
|
+ .queueFamilyIndexCount = 0,
|
|
|
+ .pQueueFamilyIndices = nullptr,
|
|
|
+ });
|
|
|
+}
|
|
|
} // Anonymous namespace
|
|
|
|
|
|
Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
|
|
|
@@ -68,21 +89,7 @@ Buffer::Buffer(BufferCacheRuntime&, VideoCommon::NullBufferParams null_params)
|
|
|
Buffer::Buffer(BufferCacheRuntime& runtime, VideoCore::RasterizerInterface& rasterizer_,
|
|
|
VAddr cpu_addr_, u64 size_bytes_)
|
|
|
: VideoCommon::BufferBase<VideoCore::RasterizerInterface>(rasterizer_, cpu_addr_, size_bytes_),
|
|
|
- device{&runtime.device},
|
|
|
- buffer{device->GetLogical().CreateBuffer({
|
|
|
- .sType = VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO,
|
|
|
- .pNext = nullptr,
|
|
|
- .flags = 0,
|
|
|
- .size = SizeBytes(),
|
|
|
- .usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT |
|
|
|
- VK_BUFFER_USAGE_UNIFORM_TEXEL_BUFFER_BIT |
|
|
|
- VK_BUFFER_USAGE_STORAGE_TEXEL_BUFFER_BIT | VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT |
|
|
|
- VK_BUFFER_USAGE_STORAGE_BUFFER_BIT | VK_BUFFER_USAGE_INDEX_BUFFER_BIT |
|
|
|
- VK_BUFFER_USAGE_VERTEX_BUFFER_BIT,
|
|
|
- .sharingMode = VK_SHARING_MODE_EXCLUSIVE,
|
|
|
- .queueFamilyIndexCount = 0,
|
|
|
- .pQueueFamilyIndices = nullptr,
|
|
|
- })},
|
|
|
+ device{&runtime.device}, buffer{CreateBuffer(*device, SizeBytes())},
|
|
|
commit{runtime.memory_allocator.Commit(buffer, MemoryUsage::DeviceLocal)} {
|
|
|
if (runtime.device.HasDebuggingToolAttached()) {
|
|
|
buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str());
|