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:
@@ -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)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user