2017-10-10 23:32:13 +02:00
|
|
|
#pragma once
|
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
#include "dxvk_memory.h"
|
2017-10-10 23:32:13 +02:00
|
|
|
#include "dxvk_resource.h"
|
|
|
|
|
|
|
|
namespace dxvk {
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief Buffer create info
|
|
|
|
*
|
|
|
|
* The properties of a buffer that are
|
|
|
|
* passed to \ref DxvkDevice::createBuffer
|
|
|
|
*/
|
|
|
|
struct DxvkBufferCreateInfo {
|
|
|
|
|
|
|
|
/// Size of the buffer, in bytes
|
2017-10-15 14:36:41 +02:00
|
|
|
VkDeviceSize size;
|
|
|
|
|
|
|
|
/// Buffer usage flags
|
|
|
|
VkBufferUsageFlags usage;
|
2017-10-10 23:32:13 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* \brief DXVK buffer
|
|
|
|
*
|
2017-10-15 14:36:41 +02:00
|
|
|
* A simple buffer resource that stores
|
|
|
|
* linear data. Can be mapped to host
|
|
|
|
* memory.
|
2017-10-10 23:32:13 +02:00
|
|
|
*/
|
|
|
|
class DxvkBuffer : public DxvkResource {
|
|
|
|
|
|
|
|
public:
|
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
DxvkBuffer(
|
|
|
|
const Rc<vk::DeviceFn>& vkd,
|
|
|
|
const DxvkBufferCreateInfo& createInfo,
|
|
|
|
DxvkMemoryAllocator& memAlloc,
|
|
|
|
VkMemoryPropertyFlags memFlags);
|
|
|
|
~DxvkBuffer();
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
/**
|
|
|
|
* \brief Buffer handle
|
|
|
|
* \returns Buffer handle
|
|
|
|
*/
|
|
|
|
VkBuffer handle() const {
|
|
|
|
return m_buffer;
|
|
|
|
}
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
/**
|
|
|
|
* \brief Buffer properties
|
|
|
|
* \returns Buffer properties
|
|
|
|
*/
|
|
|
|
const DxvkBufferCreateInfo& info() const {
|
|
|
|
return m_info;
|
|
|
|
}
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
/**
|
|
|
|
* \brief Map pointer
|
|
|
|
*
|
|
|
|
* If the buffer has been created on a host-visible
|
|
|
|
* memory type, the buffer memory is mapped and can
|
|
|
|
* be accessed by the host.
|
|
|
|
* \returns Pointer to mapped memory region
|
|
|
|
*/
|
|
|
|
void* mapPtr() const {
|
|
|
|
return m_memory.mapPtr();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
2017-10-10 23:32:13 +02:00
|
|
|
|
2017-10-15 14:36:41 +02:00
|
|
|
Rc<vk::DeviceFn> m_vkd;
|
|
|
|
DxvkBufferCreateInfo m_info;
|
|
|
|
DxvkMemory m_memory;
|
|
|
|
VkBuffer m_buffer = VK_NULL_HANDLE;
|
2017-10-10 23:32:13 +02:00
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|