Fix byte alignment issue for index/vertex buffers (#3110)

* Fix byte alignment issue for index/vertex buffers
* Remove default alignment value when getting dynamic buffer

Signed-off-by: abrmich <abrmich@amazon.com>
This commit is contained in:
michabr
2021-08-13 13:31:46 -07:00
committed by GitHub
parent 7d4022fbdf
commit cd5081a7c3
5 changed files with 9 additions and 9 deletions
@@ -196,7 +196,7 @@ namespace AZ
{
const size_t sourceByteSize = source.size() * sizeof(AuxGeomIndex);
RHI::Ptr<RPI::DynamicBuffer> dynamicBuffer = RPI::DynamicDrawInterface::Get()->GetDynamicBuffer(static_cast<uint32_t>(sourceByteSize));
RHI::Ptr<RPI::DynamicBuffer> dynamicBuffer = RPI::DynamicDrawInterface::Get()->GetDynamicBuffer(static_cast<uint32_t>(sourceByteSize), RHI::Alignment::InputAssembly);
if (!dynamicBuffer)
{
AZ_WarningOnce("AuxGeom", false, "Failed to allocate dynamic buffer of size %d.", sourceByteSize);
@@ -211,7 +211,7 @@ namespace AZ
{
const size_t sourceByteSize = source.size() * sizeof(AuxGeomDynamicVertex);
RHI::Ptr<RPI::DynamicBuffer> dynamicBuffer = RPI::DynamicDrawInterface::Get()->GetDynamicBuffer(static_cast<uint32_t>(sourceByteSize));
RHI::Ptr<RPI::DynamicBuffer> dynamicBuffer = RPI::DynamicDrawInterface::Get()->GetDynamicBuffer(static_cast<uint32_t>(sourceByteSize), RHI::Alignment::InputAssembly);
if (!dynamicBuffer)
{
AZ_WarningOnce("AuxGeom", false, "Failed to allocate dynamic buffer of size %d.", sourceByteSize);
@@ -25,8 +25,8 @@ namespace AZ
//! DynamicBuffers are allocated by DynamicBufferAllocator. Check the description of DynamicBufferAllocator class for detail.
//! The typical usage:
//! // For every frame
//! auto buffer = DynamicDrawInterface::Get()->GetDynamicBuffer(size);
//! if (buffer) // the buffer could be empty if the allocation failed.e
//! auto buffer = DynamicDrawInterface::Get()->GetDynamicBuffer(size, RHI::Alignment::InputAssembly);
//! if (buffer) // the buffer could be empty if the allocation failed.
//! {
//! // write data to the buffer
//! buffer->Write(data, size);
@@ -54,7 +54,7 @@ namespace AZ
//! Get a DynamicBuffer from DynamicDrawSystem.
//! The returned buffer will be invalidated every time the RPISystem's RenderTick is called
virtual RHI::Ptr<DynamicBuffer> GetDynamicBuffer(uint32_t size, uint32_t alignment = 1) = 0;
virtual RHI::Ptr<DynamicBuffer> GetDynamicBuffer(uint32_t size, uint32_t alignment) = 0;
//! Draw a geometry to a scene with a given material
virtual void DrawGeometry(Data::Instance<Material> material, const GeometryData& geometry, ScenePtr scene) = 0;
@@ -32,7 +32,7 @@ namespace AZ
// DynamicDrawInterface overrides...
RHI::Ptr<DynamicDrawContext> CreateDynamicDrawContext() override;
RHI::Ptr<DynamicBuffer> GetDynamicBuffer(uint32_t size, uint32_t alignment = 1) override;
RHI::Ptr<DynamicBuffer> GetDynamicBuffer(uint32_t size, uint32_t alignment) override;
void DrawGeometry(Data::Instance<Material> material, const GeometryData& geometry, ScenePtr scene) override;
void AddDrawPacket(Scene* scene, AZStd::unique_ptr<const RHI::DrawPacket> drawPacket) override;
AZStd::vector<RHI::DrawListView> GetDrawListsForPass(const RasterPass* pass) override;
@@ -474,10 +474,10 @@ namespace AZ
// Get dynamic buffers for vertex and index buffer. Skip draw if failed to allocate buffers
uint32_t vertexDataSize = vertexCount * m_perVertexDataSize;
RHI::Ptr<DynamicBuffer> vertexBuffer;
vertexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(vertexDataSize);
vertexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(vertexDataSize, RHI::Alignment::InputAssembly);
uint32_t indexDataSize = indexCount * RHI::GetIndexFormatSize(indexFormat);
RHI::Ptr<DynamicBuffer> indexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(indexDataSize);
RHI::Ptr<DynamicBuffer> indexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(indexDataSize, RHI::Alignment::InputAssembly);
if (indexBuffer == nullptr || vertexBuffer == nullptr)
{
@@ -572,7 +572,7 @@ namespace AZ
// Get dynamic buffers for vertex and index buffer. Skip draw if failed to allocate buffers
uint32_t vertexDataSize = vertexCount * m_perVertexDataSize;
RHI::Ptr<DynamicBuffer> vertexBuffer;
vertexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(vertexDataSize);
vertexBuffer = DynamicDrawInterface::Get()->GetDynamicBuffer(vertexDataSize, RHI::Alignment::InputAssembly);
if (vertexBuffer == nullptr)
{