| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- /*
- * Copyright (c) Contributors to the Open 3D Engine Project.
- * For complete copyright and license terms please see the LICENSE at the root of this distribution.
- *
- * SPDX-License-Identifier: Apache-2.0 OR MIT
- *
- */
- #include "RHITestFixture.h"
- #include <Atom/RHI/BufferProperty.h>
- namespace UnitTest
- {
- using namespace AZ;
- class BufferPropertyTests
- : public RHITestFixture
- {
- public:
- BufferPropertyTests()
- : RHITestFixture()
- {}
- void SetUp() override
- {
- RHITestFixture::SetUp();
- m_bufferDescriptor.m_byteCount = 2 * 1024;
- }
- protected:
- RHI::BufferProperty<int> m_property;
- RHI::BufferDescriptor m_bufferDescriptor;
- };
- TEST_F(BufferPropertyTests, TestNoop)
- {
- RHI::BufferProperty<double> noopProp;
- }
- TEST_F(BufferPropertyTests, TestInitialization)
- {
- EXPECT_FALSE(m_property.IsInitialized());
- m_property.Init(m_bufferDescriptor);
- EXPECT_TRUE(m_property.IsInitialized());
- }
- TEST_F(BufferPropertyTests, TesNoInit)
- {
- EXPECT_FALSE(m_property.IsInitialized());
- auto range = RHI::BufferSubresourceRange(m_bufferDescriptor);
- AZ_TEST_START_TRACE_SUPPRESSION;
- m_property.Set(range, 1337);
- auto overlapInterval = m_property.Get(range);
- AZ_TEST_STOP_TRACE_SUPPRESSION(2);
- }
- TEST_F(BufferPropertyTests, TestFullRange)
- {
- auto range = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(range, 1337);
- auto overlapInterval = m_property.Get(range);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, range);
- EXPECT_EQ(resultRange.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestFullRangeOver)
- {
- auto range = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(range, 1337);
- auto newRange = range;
- newRange.m_byteSize += 1024;
- auto overlapInterval = m_property.Get(newRange);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, range);
- EXPECT_EQ(resultRange.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestSetPartialRange)
- {
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- auto range = fullRange;
- range.m_byteOffset += 1;
- range.m_byteSize -= 1;
- m_property.Set(range, 1337);
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, range);
- EXPECT_EQ(resultRange.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestGetPartialRange)
- {
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(fullRange, 1337);
- auto range = fullRange;
- range.m_byteOffset += 1;
- range.m_byteSize -= 1;
- auto overlapInterval = m_property.Get(range);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, range);
- EXPECT_EQ(resultRange.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestMerge)
- {
- m_property.Init(m_bufferDescriptor);
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- auto range1 = fullRange;
- range1.m_byteSize = range1.m_byteSize / 2;
- m_property.Set(range1, 1337);
- auto range2 = fullRange;
- range2.m_byteOffset = range1.m_byteOffset + range1.m_byteSize;
- range2.m_byteSize = m_bufferDescriptor.m_byteCount - range2.m_byteOffset;
- m_property.Set(range2, 1337);
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, fullRange);
- EXPECT_EQ(resultRange.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestNoMergeDifferentProperty)
- {
- m_property.Init(m_bufferDescriptor);
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- auto range1 = fullRange;
- range1.m_byteSize = range1.m_byteSize / 2;
- m_property.Set(range1, 1337);
- auto range2 = fullRange;
- range2.m_byteOffset = range1.m_byteOffset + range1.m_byteSize;
- range2.m_byteSize = m_bufferDescriptor.m_byteCount - range2.m_byteOffset;
- m_property.Set(range2, 1338);
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 2);
- const auto& resultRange1 = overlapInterval.front();
- EXPECT_EQ(resultRange1.m_range, range1);
- EXPECT_EQ(resultRange1.m_property, 1337);
- const auto& resultRange2 = overlapInterval.back();
- EXPECT_EQ(resultRange2.m_range, range2);
- EXPECT_EQ(resultRange2.m_property, 1338);
- }
- TEST_F(BufferPropertyTests, TestNoMergeNoContinous)
- {
- m_property.Init(m_bufferDescriptor);
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- auto range1 = fullRange;
- range1.m_byteSize = range1.m_byteSize / 2;
- m_property.Set(range1, 1337);
- auto range2 = fullRange;
- range2.m_byteOffset = range1.m_byteSize + 2;
- range2.m_byteSize = m_bufferDescriptor.m_byteCount - range2.m_byteOffset;
- m_property.Set(range2, 1337);
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 2);
- const auto& resultRange1 = overlapInterval.front();
- EXPECT_EQ(resultRange1.m_range, range1);
- EXPECT_EQ(resultRange1.m_property, 1337);
- const auto& resultRange2 = overlapInterval.back();
- EXPECT_EQ(resultRange2.m_range, range2);
- EXPECT_EQ(resultRange2.m_property, 1337);
- }
- TEST_F(BufferPropertyTests, TestNoOverlap)
- {
- auto range1 = RHI::BufferSubresourceRange(m_bufferDescriptor);
- range1.m_byteOffset = m_bufferDescriptor.m_byteCount / 2;
- range1.m_byteSize = m_bufferDescriptor.m_byteCount - range1.m_byteOffset;
- m_property.Init(m_bufferDescriptor);
- m_property.Set(range1, 1337);
- auto range2 = range1;
- range2.m_byteOffset = 0;
- range2.m_byteSize = range1.m_byteOffset - 1;
- auto overlapInterval = m_property.Get(range2);
- EXPECT_TRUE(overlapInterval.empty());
- }
- TEST_F(BufferPropertyTests, TestMergeDifferentProperty)
- {
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(fullRange, 1337);
- auto range1 = fullRange;
- range1.m_byteSize = fullRange.m_byteSize / 2;
- m_property.Set(range1, 1338);
- auto range2 = fullRange;
- range2.m_byteOffset = range1.m_byteOffset + range1.m_byteSize;
- m_property.Set(range2, 1338);
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 1);
- const auto& resultRange = overlapInterval.front();
- EXPECT_EQ(resultRange.m_range, fullRange);
- EXPECT_EQ(resultRange.m_property, 1338);
- }
- TEST_F(BufferPropertyTests, TestPartialMergeDifferentProperty)
- {
- auto fullRange = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(fullRange, 1337);
- auto range1 = fullRange;
- range1.m_byteSize = 1;
- m_property.Set(range1, 1338);
- auto range2 = fullRange;
- range2.m_byteOffset = fullRange.m_byteSize - 1;
- range2.m_byteSize = fullRange.m_byteSize - range2.m_byteOffset;
- m_property.Set(range2, 1338);
- auto newRange = fullRange;
- newRange.m_byteOffset = range1.m_byteSize;
- newRange.m_byteSize = range2.m_byteOffset - newRange.m_byteOffset;
- auto overlapInterval = m_property.Get(fullRange);
- EXPECT_EQ(overlapInterval.size(), 3);
- const auto& resultRange1 = overlapInterval[0];
- const auto& resultRange2 = overlapInterval[1];
- const auto& resultRange3 = overlapInterval[2];
- EXPECT_EQ(resultRange1.m_range, range1);
- EXPECT_EQ(resultRange1.m_property, 1338);
- EXPECT_EQ(resultRange2.m_range, newRange);
- EXPECT_EQ(resultRange2.m_property, 1337);
- EXPECT_EQ(resultRange3.m_range, range2);
- EXPECT_EQ(resultRange3.m_property, 1338);
- }
- TEST_F(BufferPropertyTests, TestReset)
- {
- auto range = RHI::BufferSubresourceRange(m_bufferDescriptor);
- m_property.Init(m_bufferDescriptor);
- m_property.Set(range, 1337);
- auto overlapInterval = m_property.Get(range);
- EXPECT_FALSE(overlapInterval.empty());
- m_property.Reset();
- overlapInterval = m_property.Get(range);
- EXPECT_TRUE(overlapInterval.empty());
- }
- }
|