Divide Framework 0.1
A free and open-source 3D Framework under heavy development
Loading...
Searching...
No Matches
ShaderBuffer.cpp
Go to the documentation of this file.
1
2
5
6namespace Divide {
7
9 switch ( usage )
10 {
12
16
20 };
21
22 return sizeof(U32);
23}
24
26 : GUIDWrapper()
27 , GraphicsResource(context, Type::SHADER_BUFFER, getGUID(), _ID(descriptor._name.c_str()))
28 , RingBufferSeparateWrite(descriptor._ringBufferLength, descriptor._separateReadWrite)
29 , _alignmentRequirement(AlignmentRequirement(descriptor._bufferParams._flags._usageType))
30 , _name(descriptor._name)
31 , _params(descriptor._bufferParams)
32{
34 assert(descriptor._bufferParams._elementSize * descriptor._bufferParams._elementCount > 0 && "ShaderBuffer::Create error: Invalid buffer size!");
36}
37
39 return clearBytes(
40 {
43 });
44}
45
47 return writeBytes(
48 {
51 },
52 data);
53}
54
55void ShaderBuffer::readData(const BufferRange range, const std::pair<bufferPtr, size_t> outData) {
57 {
60 },
61 outData);
62}
63
64void ShaderBuffer::readBytes(BufferRange range, std::pair<bufferPtr, size_t> outData) {
66
67 DIVIDE_ASSERT(range._length > 0u &&
70 range._startOffset == Util::GetAlignmentCorrected(range._startOffset, _alignmentRequirement));
71
72 range._startOffset += getStartOffset(true);
73 readBytesInternal(range, outData);
74 _lastReadFrame = GFXDevice::FrameCount();
75}
76
78 return writeBytes(range, nullptr);
79}
80
83
84 DIVIDE_ASSERT(range._length > 0 &&
86 range._startOffset == Util::GetAlignmentCorrected(range._startOffset, _alignmentRequirement));
87
88 range._startOffset += getStartOffset(false);
90
91 return writeBytesInternal(range, data);
92}
93
95{
97}
98
100{
102}
103
104} //namespace Divide
#define DIVIDE_ASSERT(...)
#define DIVIDE_UNEXPECTED_CALL()
#define PROFILE_SCOPE_AUTO(CATEGORY)
Definition: Profiler.h:87
Rough around the edges Adapter pattern abstracting the actual rendering API and access to the GPU.
Definition: GFXDevice.h:215
static const DeviceInformation & GetDeviceInformation() noexcept
Definition: GFXDevice.inl:158
static U64 FrameCount() noexcept
Definition: GFXDevice.h:340
Utility class that adds basic GUID management to objects.
Definition: GUIDWrapper.h:44
virtual void readBytesInternal(BufferRange range, std::pair< bufferPtr, size_t > outData)=0
BufferUpdateFrequency getUpdateFrequency() const noexcept
void readBytes(BufferRange range, std::pair< bufferPtr, size_t > outData)
FORCE_INLINE BufferUsageType getUsage() const noexcept
Definition: ShaderBuffer.h:72
static size_t AlignmentRequirement(BufferUsageType usage) noexcept
Definition: ShaderBuffer.cpp:8
BufferLock clearBytes(BufferRange range)
BufferUpdateUsage getUpdateUsage() const noexcept
BufferLock writeBytes(BufferRange range, const bufferPtr data)
void readData(BufferRange range, std::pair< bufferPtr, size_t > outData)
BufferLock writeData(BufferRange range, const bufferPtr data)
FORCE_INLINE size_t getStartOffset(const bool read) const noexcept
Definition: ShaderBuffer.h:69
ShaderBuffer(GFXDevice &context, const ShaderBufferDescriptor &descriptor)
virtual BufferLock writeBytesInternal(BufferRange range, const bufferPtr data)=0
BufferParams _params
Definition: ShaderBuffer.h:92
FORCE_INLINE BufferLock clearData()
Definition: ShaderBuffer.h:75
constexpr Optick::Category::Type Graphics
Definition: Profiler.h:60
FORCE_INLINE size_t GetAlignmentCorrected(const size_t value, const size_t alignment) noexcept
Definition: MathHelper.inl:783
Handle console commands that start with a forward slash.
Definition: AIProcessor.cpp:7
BufferUpdateFrequency
constexpr U64 _ID(const char *const str, const U64 value=val_64_const) noexcept
uint32_t U32
void * bufferPtr
BufferUpdateUsage _updateUsage
Definition: BufferParams.h:40
BufferUsageType _usageType
Definition: BufferParams.h:41
BufferUpdateFrequency _updateFrequency
Definition: BufferParams.h:39
size_t _elementSize
Buffer primitive size in bytes.
Definition: BufferParams.h:50
BufferFlags _flags
Definition: BufferParams.h:48