#include "dawn/native/vulkan/BufferVk.h"
#include <algorithm>
#include <cstring>
#include <limits>
#include <memory>
#include <utility>
#include <vector>
#include "dawn/common/GPUInfo.h"
#include "dawn/native/ChainUtils.h"
#include "dawn/native/CommandBuffer.h"
#include "dawn/native/PhysicalDevice.h"
#include "dawn/native/Queue.h"
#include "dawn/native/vulkan/DeviceVk.h"
#include "dawn/native/vulkan/FencedDeleter.h"
#include "dawn/native/vulkan/QueueVk.h"
#include "dawn/native/vulkan/ResourceHeapVk.h"
#include "dawn/native/vulkan/ResourceMemoryAllocatorVk.h"
#include "dawn/native/vulkan/UtilsVulkan.h"
#include "dawn/native/vulkan/VulkanError.h"
#include "partition_alloc/pointers/raw_ptr.h"
namespace dawn::native::vulkan {
namespace {
VkBufferUsageFlags VulkanBufferUsage(wgpu::BufferUsage usage) { … }
VkPipelineStageFlags VulkanPipelineStage(wgpu::BufferUsage usage, wgpu::ShaderStage shaderStage) { … }
VkAccessFlags VulkanAccessFlags(wgpu::BufferUsage usage) { … }
}
ResultOrError<Ref<Buffer>> Buffer::Create(Device* device,
const UnpackedPtr<BufferDescriptor>& descriptor) { … }
MaybeError Buffer::Initialize(bool mappedAtCreation) { … }
MaybeError Buffer::InitializeHostMapped(const BufferHostMappedPointer* hostMappedDesc) { … }
Buffer::~Buffer() = default;
VkBuffer Buffer::GetHandle() const { … }
void Buffer::TransitionUsageNow(CommandRecordingContext* recordingContext,
wgpu::BufferUsage usage,
wgpu::ShaderStage shaderStage) { … }
bool Buffer::TrackUsageAndGetResourceBarrier(CommandRecordingContext* recordingContext,
wgpu::BufferUsage usage,
wgpu::ShaderStage shaderStage,
VkBufferMemoryBarrier* barrier,
VkPipelineStageFlags* srcStages,
VkPipelineStageFlags* dstStages) { … }
bool Buffer::IsCPUWritableAtCreation() const { … }
MaybeError Buffer::MapAtCreationImpl() { … }
MaybeError Buffer::MapAsyncImpl(wgpu::MapMode mode, size_t offset, size_t size) { … }
void Buffer::UnmapImpl() { … }
void* Buffer::GetMappedPointer() { … }
MaybeError Buffer::UploadData(uint64_t bufferOffset, const void* data, size_t size) { … }
void Buffer::DestroyImpl() { … }
bool Buffer::EnsureDataInitialized(CommandRecordingContext* recordingContext) { … }
bool Buffer::EnsureDataInitializedAsDestination(CommandRecordingContext* recordingContext,
uint64_t offset,
uint64_t size) { … }
bool Buffer::EnsureDataInitializedAsDestination(CommandRecordingContext* recordingContext,
const CopyTextureToBufferCmd* copy) { … }
void Buffer::TransitionMappableBuffersEagerly(const VulkanFunctions& fn,
CommandRecordingContext* recordingContext,
const absl::flat_hash_set<Ref<Buffer>>& buffers) { … }
void Buffer::SetLabelImpl() { … }
void Buffer::InitializeToZero(CommandRecordingContext* recordingContext) { … }
void Buffer::ClearBuffer(CommandRecordingContext* recordingContext,
uint32_t clearValue,
uint64_t offset,
uint64_t size) { … }
}