mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-12-16 16:37:08 +00:00
Remove explicit usage transition from the API and validation
This removes the following for both Buffer and Texture: - The builder's SetInitialUsage - The object's FreezeUsage and TransitionUsage methods - The CommandBuffer Transition<Object>Usage methods All samples and tests are simplified as a result. This also obsoletes the UsageValidationTest which is removed. Some validation was dependent on "current usage" and hasn't been reintroduced for implicit transitions yet: - Buffers can be used while mapped - Swapchain textures can be used after they have been presented. Validation for these will involve collecting all the resources used by a command buffer and will be done in a follow-up patch.
This commit is contained in:
committed by
Corentin Wallez
parent
d2312e8138
commit
d8c068fb4f
@@ -54,7 +54,6 @@ list(APPEND UNITTEST_SOURCES
|
||||
${VALIDATION_TESTS_DIR}/PushConstantsValidationTests.cpp
|
||||
${VALIDATION_TESTS_DIR}/RenderPassDescriptorValidationTests.cpp
|
||||
${VALIDATION_TESTS_DIR}/RenderPipelineValidationTests.cpp
|
||||
${VALIDATION_TESTS_DIR}/UsageValidationTests.cpp
|
||||
${VALIDATION_TESTS_DIR}/VertexBufferValidationTests.cpp
|
||||
${VALIDATION_TESTS_DIR}/ValidationTest.cpp
|
||||
${VALIDATION_TESTS_DIR}/ValidationTest.h
|
||||
|
||||
@@ -212,8 +212,6 @@ std::ostringstream& NXTTest::AddBufferExpectation(const char* file, int line, co
|
||||
// We need to enqueue the copy immediately because by the time we resolve the expectation,
|
||||
// the buffer might have been modified.
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(source, nxt::BufferUsageBit::TransferSrc)
|
||||
.TransitionBufferUsage(readback.buffer, nxt::BufferUsageBit::TransferDst)
|
||||
.CopyBufferToBuffer(source, offset, readback.buffer, readback.offset, size)
|
||||
.GetResult();
|
||||
|
||||
@@ -244,8 +242,6 @@ std::ostringstream& NXTTest::AddTextureExpectation(const char* file, int line, c
|
||||
// We need to enqueue the copy immediately because by the time we resolve the expectation,
|
||||
// the texture might have been modified.
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionTextureUsage(source, nxt::TextureUsageBit::TransferSrc)
|
||||
.TransitionBufferUsage(readback.buffer, nxt::BufferUsageBit::TransferDst)
|
||||
.CopyTextureToBuffer(source, x, y, 0, width, height, 1, level, readback.buffer, readback.offset, rowPitch)
|
||||
.GetResult();
|
||||
|
||||
@@ -276,7 +272,6 @@ void NXTTest::WaitABit() {
|
||||
void NXTTest::SwapBuffersForCapture() {
|
||||
// Insert a frame boundary for API capture tools.
|
||||
nxt::Texture backBuffer = swapchain.GetNextTexture();
|
||||
backBuffer.TransitionUsage(nxt::TextureUsageBit::Present);
|
||||
swapchain.Present(backBuffer);
|
||||
}
|
||||
|
||||
@@ -295,7 +290,6 @@ NXTTest::ReadbackReservation NXTTest::ReserveReadback(uint32_t readbackSize) {
|
||||
slot.buffer = device.CreateBufferBuilder()
|
||||
.SetSize(readbackSize)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
ReadbackReservation reservation;
|
||||
@@ -316,7 +310,6 @@ void NXTTest::MapSlotsSynchronously() {
|
||||
auto userdata = new MapReadUserdata{this, i};
|
||||
|
||||
auto& slot = mReadbackSlots[i];
|
||||
slot.buffer.TransitionUsage(nxt::BufferUsageBit::MapRead);
|
||||
slot.buffer.MapReadAsync(0, slot.bufferSize, SlotMapReadCallback, static_cast<nxt::CallbackUserdata>(reinterpret_cast<uintptr_t>(userdata)));
|
||||
}
|
||||
|
||||
|
||||
@@ -25,7 +25,6 @@ TEST_P(BasicTests, BufferSetSubData) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t value = 187;
|
||||
|
||||
@@ -95,7 +95,7 @@ class BlendStateTest : public NXTTest {
|
||||
|
||||
uint32_t bufferSize = static_cast<uint32_t>(4 * N * sizeof(float));
|
||||
|
||||
nxt::Buffer buffer = utils::CreateFrozenBufferFromData(device, &data, bufferSize, nxt::BufferUsageBit::Uniform);
|
||||
nxt::Buffer buffer = utils::CreateBufferFromData(device, &data, bufferSize, nxt::BufferUsageBit::Uniform);
|
||||
|
||||
nxt::BufferView view = buffer.CreateBufferViewBuilder()
|
||||
.SetExtent(0, bufferSize)
|
||||
@@ -110,8 +110,6 @@ class BlendStateTest : public NXTTest {
|
||||
|
||||
// Test that after drawing a triangle with the base color, and then the given triangle spec, the color is as expected
|
||||
void DoSingleSourceTest(RGBA8 base, const TriangleSpec& triangle, const RGBA8& expected) {
|
||||
renderPass.color.TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.BeginRenderPass(renderPass.renderPassInfo)
|
||||
// First use the base pipeline to draw a triangle with no blending
|
||||
@@ -700,7 +698,6 @@ TEST_P(BlendStateTest, IndependentBlendState) {
|
||||
.SetFormat(nxt::TextureFormat::R8G8B8A8Unorm)
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment | nxt::TextureUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
renderTargetViews[i] = renderTargets[i].CreateTextureViewBuilder().GetResult();
|
||||
}
|
||||
@@ -789,11 +786,6 @@ TEST_P(BlendStateTest, IndependentBlendState) {
|
||||
RGBA8 expected2 = color2;
|
||||
RGBA8 expected3 = min(color3, base);
|
||||
|
||||
renderTargets[0].TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
renderTargets[1].TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
renderTargets[2].TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
renderTargets[3].TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.BeginRenderPass(renderpass)
|
||||
.SetRenderPipeline(basePipeline)
|
||||
|
||||
@@ -46,13 +46,11 @@ TEST_P(BufferMapReadTests, SmallReadAtZero) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(1)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t myData = 187;
|
||||
buffer.SetSubData(0, sizeof(myData), &myData);
|
||||
|
||||
buffer.TransitionUsage(nxt::BufferUsageBit::MapRead);
|
||||
const void* mappedData = MapReadAsyncAndWait(buffer, 0, 1);
|
||||
ASSERT_EQ(myData, *reinterpret_cast<const uint8_t*>(mappedData));
|
||||
|
||||
@@ -64,13 +62,11 @@ TEST_P(BufferMapReadTests, SmallReadAtOffset) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4000)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t myData = 234;
|
||||
buffer.SetSubData(2048, sizeof(myData), &myData);
|
||||
|
||||
buffer.TransitionUsage(nxt::BufferUsageBit::MapRead);
|
||||
const void* mappedData = MapReadAsyncAndWait(buffer, 2048, 4);
|
||||
ASSERT_EQ(myData, *reinterpret_cast<const uint8_t*>(mappedData));
|
||||
|
||||
@@ -82,13 +78,11 @@ TEST_P(BufferMapReadTests, SmallReadAtUnalignedOffset) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4000)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t myData = 213;
|
||||
buffer.SetSubData(3, 1, &myData);
|
||||
|
||||
buffer.TransitionUsage(nxt::BufferUsageBit::MapRead);
|
||||
const void* mappedData = MapReadAsyncAndWait(buffer, 3, 1);
|
||||
ASSERT_EQ(myData, *reinterpret_cast<const uint8_t*>(mappedData));
|
||||
|
||||
@@ -106,12 +100,10 @@ TEST_P(BufferMapReadTests, LargeRead) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(static_cast<uint32_t>(kDataSize * sizeof(uint32_t)))
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
buffer.SetSubData(0, kDataSize * sizeof(uint32_t), reinterpret_cast<uint8_t*>(myData.data()));
|
||||
|
||||
buffer.TransitionUsage(nxt::BufferUsageBit::MapRead);
|
||||
const void* mappedData = MapReadAsyncAndWait(buffer, 0, static_cast<uint32_t>(kDataSize * sizeof(uint32_t)));
|
||||
ASSERT_EQ(0, memcmp(mappedData, myData.data(), kDataSize * sizeof(uint32_t)));
|
||||
|
||||
@@ -150,7 +142,6 @@ TEST_P(BufferMapWriteTests, SmallWriteAtZero) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapWrite | nxt::BufferUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::MapWrite)
|
||||
.GetResult();
|
||||
|
||||
uint32_t myData = 2934875;
|
||||
@@ -166,7 +157,6 @@ TEST_P(BufferMapWriteTests, SmallWriteAtOffset) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4000)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapWrite | nxt::BufferUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::MapWrite)
|
||||
.GetResult();
|
||||
|
||||
uint32_t myData = 2934875;
|
||||
@@ -188,7 +178,6 @@ TEST_P(BufferMapWriteTests, LargeWrite) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(static_cast<uint32_t>(kDataSize * sizeof(uint32_t)))
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapWrite | nxt::BufferUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::MapWrite)
|
||||
.GetResult();
|
||||
|
||||
void* mappedData = MapWriteAsyncAndWait(buffer, 0, kDataSize * sizeof(uint32_t));
|
||||
@@ -208,7 +197,6 @@ TEST_P(BufferSetSubDataTests, SmallDataAtZero) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(1)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t value = 171;
|
||||
@@ -222,7 +210,6 @@ TEST_P(BufferSetSubDataTests, SmallDataAtOffset) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(4000)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
constexpr uint32_t kOffset = 2000;
|
||||
@@ -246,7 +233,6 @@ TEST_P(BufferSetSubDataTests, ManySetSubData) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(kSize)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
std::vector<uint32_t> expectedData;
|
||||
@@ -265,7 +251,6 @@ TEST_P(BufferSetSubDataTests, LargeSetSubData) {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(kSize)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
std::vector<uint32_t> expectedData;
|
||||
|
||||
@@ -48,7 +48,6 @@ void ComputeCopyStorageBufferTests::BasicTest(const char* shader) {
|
||||
.SetSize(kNumUints * sizeof(uint32_t))
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Storage | nxt::BufferUsageBit::TransferSrc |
|
||||
nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
std::array<uint32_t, kNumUints> expected;
|
||||
for (uint32_t i = 0; i < kNumUints; ++i) {
|
||||
@@ -65,7 +64,6 @@ void ComputeCopyStorageBufferTests::BasicTest(const char* shader) {
|
||||
.SetSize(kNumUints * sizeof(uint32_t))
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Storage | nxt::BufferUsageBit::TransferSrc |
|
||||
nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
std::array<uint32_t, kNumUints> zero{};
|
||||
dst.SetSubData(0, sizeof(zero), reinterpret_cast<const uint8_t*>(zero.data()));
|
||||
@@ -80,8 +78,6 @@ void ComputeCopyStorageBufferTests::BasicTest(const char* shader) {
|
||||
.SetBufferViews(1, 1, &dstView)
|
||||
.GetResult();
|
||||
auto commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(src, nxt::BufferUsageBit::Storage)
|
||||
.TransitionBufferUsage(dst, nxt::BufferUsageBit::Storage)
|
||||
.BeginComputePass()
|
||||
.SetComputePipeline(pipeline)
|
||||
.SetBindGroup(0, bindGroup)
|
||||
|
||||
@@ -89,12 +89,11 @@ class CopyTests_T2B : public CopyTests {
|
||||
// Create an upload buffer and use it to populate the `level` mip of the texture
|
||||
std::vector<RGBA8> textureData(texelCount);
|
||||
FillTextureData(width, height, rowPitch / kBytesPerTexel, textureData.data());
|
||||
nxt::Buffer uploadBuffer = utils::CreateFrozenBufferFromData(device, textureData.data(), static_cast<uint32_t>(sizeof(RGBA8) * textureData.size()), nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Buffer uploadBuffer = utils::CreateBufferFromData(device, textureData.data(), static_cast<uint32_t>(sizeof(RGBA8) * textureData.size()), nxt::BufferUsageBit::TransferSrc);
|
||||
|
||||
nxt::CommandBuffer commands[2];
|
||||
|
||||
commands[0] = device.CreateCommandBufferBuilder()
|
||||
.TransitionTextureUsage(texture, nxt::TextureUsageBit::TransferDst)
|
||||
.CopyBufferToTexture(uploadBuffer, 0, rowPitch, texture, 0, 0, 0, width, height, 1, textureSpec.level)
|
||||
.GetResult();
|
||||
|
||||
@@ -104,15 +103,12 @@ class CopyTests_T2B : public CopyTests {
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(bufferSpec.size)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
std::vector<RGBA8> emptyData(bufferSpec.size / kBytesPerTexel);
|
||||
buffer.SetSubData(0, static_cast<uint32_t>(emptyData.size() * sizeof(RGBA8)), reinterpret_cast<const uint8_t*>(emptyData.data()));
|
||||
|
||||
// Copy the region [(`x`, `y`), (`x + copyWidth, `y + copyWidth`)] from the `level` mip into the buffer at the specified `offset` and `rowPitch`
|
||||
commands[1] = device.CreateCommandBufferBuilder()
|
||||
.TransitionTextureUsage(texture, nxt::TextureUsageBit::TransferSrc)
|
||||
.TransitionBufferUsage(buffer, nxt::BufferUsageBit::TransferDst)
|
||||
.CopyTextureToBuffer(texture, textureSpec.x, textureSpec.y, 0, textureSpec.copyWidth, textureSpec.copyHeight, 1, textureSpec.level, buffer, bufferSpec.offset, bufferSpec.rowPitch)
|
||||
.GetResult();
|
||||
|
||||
@@ -154,7 +150,6 @@ protected:
|
||||
nxt::Buffer buffer = device.CreateBufferBuilder()
|
||||
.SetSize(bufferSpec.size)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
std::vector<RGBA8> bufferData(bufferSpec.size / kBytesPerTexel);
|
||||
FillBufferData(bufferData.data(), bufferData.size());
|
||||
@@ -182,18 +177,15 @@ protected:
|
||||
uint32_t texelCount = texelsPerRow * (height - 1) + width;
|
||||
|
||||
std::vector<RGBA8> emptyData(texelCount);
|
||||
nxt::Buffer uploadBuffer = utils::CreateFrozenBufferFromData(device, emptyData.data(), static_cast<uint32_t>(sizeof(RGBA8) * emptyData.size()), nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Buffer uploadBuffer = utils::CreateBufferFromData(device, emptyData.data(), static_cast<uint32_t>(sizeof(RGBA8) * emptyData.size()), nxt::BufferUsageBit::TransferSrc);
|
||||
|
||||
commands[0] = device.CreateCommandBufferBuilder()
|
||||
.TransitionTextureUsage(texture, nxt::TextureUsageBit::TransferDst)
|
||||
.CopyBufferToTexture(uploadBuffer, 0, rowPitch, texture, 0, 0, 0, width, height, 1, textureSpec.level)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
// Copy to the region [(`x`, `y`), (`x + copyWidth, `y + copyWidth`)] at the `level` mip from the buffer at the specified `offset` and `rowPitch`
|
||||
commands[1] = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(buffer, nxt::BufferUsageBit::TransferSrc)
|
||||
.TransitionTextureUsage(texture, nxt::TextureUsageBit::TransferDst)
|
||||
.CopyBufferToTexture(buffer, bufferSpec.offset, bufferSpec.rowPitch, texture, textureSpec.x, textureSpec.y, 0, textureSpec.copyWidth, textureSpec.copyHeight, 1, textureSpec.level)
|
||||
.GetResult();
|
||||
|
||||
|
||||
@@ -30,7 +30,6 @@ class DepthStencilStateTest : public NXTTest {
|
||||
.SetFormat(nxt::TextureFormat::R8G8B8A8Unorm)
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment | nxt::TextureUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
|
||||
renderTargetView = renderTarget.CreateTextureViewBuilder().GetResult();
|
||||
@@ -41,7 +40,6 @@ class DepthStencilStateTest : public NXTTest {
|
||||
.SetFormat(nxt::TextureFormat::D32FloatS8Uint)
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.SetInitialUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
|
||||
depthTextureView = depthTexture.CreateTextureViewBuilder().GetResult();
|
||||
@@ -193,7 +191,6 @@ class DepthStencilStateTest : public NXTTest {
|
||||
float depth;
|
||||
};
|
||||
|
||||
renderTarget.TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
builder.BeginRenderPass(renderpass);
|
||||
|
||||
for (size_t i = 0; i < testParams.size(); ++i) {
|
||||
@@ -204,7 +201,7 @@ class DepthStencilStateTest : public NXTTest {
|
||||
test.depth,
|
||||
};
|
||||
// Upload a buffer for each triangle's depth and color data
|
||||
nxt::Buffer buffer = utils::CreateFrozenBufferFromData(device, &data, sizeof(TriangleData), nxt::BufferUsageBit::Uniform);
|
||||
nxt::Buffer buffer = utils::CreateBufferFromData(device, &data, sizeof(TriangleData), nxt::BufferUsageBit::Uniform);
|
||||
|
||||
nxt::BufferView view = buffer.CreateBufferViewBuilder()
|
||||
.SetExtent(0, sizeof(TriangleData))
|
||||
|
||||
@@ -55,13 +55,13 @@ class DrawElementsTest : public NXTTest {
|
||||
.SetInputState(inputState)
|
||||
.GetResult();
|
||||
|
||||
vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
-1.0f, -1.0f, 0.0f, 1.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f,
|
||||
-1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, -1.0f, 0.0f, 1.0f
|
||||
});
|
||||
indexBuffer = utils::CreateFrozenBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
indexBuffer = utils::CreateBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
0, 1, 2, 0, 3, 1
|
||||
});
|
||||
}
|
||||
|
||||
@@ -66,14 +66,14 @@ class IndexFormatTest : public NXTTest {
|
||||
TEST_P(IndexFormatTest, Uint32) {
|
||||
nxt::RenderPipeline pipeline = MakeTestPipeline(nxt::IndexFormat::Uint32);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
-1.0f, 1.0f, 0.0f, 1.0f, // Note Vertices[0] = Vertices[1]
|
||||
-1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f
|
||||
});
|
||||
// If this is interpreted as Uint16, then it would be 0, 1, 0, ... and would draw nothing.
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
1, 2, 3
|
||||
});
|
||||
|
||||
@@ -96,13 +96,13 @@ TEST_P(IndexFormatTest, Uint32) {
|
||||
TEST_P(IndexFormatTest, Uint16) {
|
||||
nxt::RenderPipeline pipeline = MakeTestPipeline(nxt::IndexFormat::Uint16);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
-1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f
|
||||
});
|
||||
// If this is interpreted as uint32, it will have index 1 and 2 be both 0 and render nothing
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint16_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint16_t>(device, nxt::BufferUsageBit::Index, {
|
||||
1, 2, 0, 0, 0, 0
|
||||
});
|
||||
|
||||
@@ -137,14 +137,14 @@ TEST_P(IndexFormatTest, Uint16) {
|
||||
TEST_P(IndexFormatTest, Uint32PrimitiveRestart) {
|
||||
nxt::RenderPipeline pipeline = MakeTestPipeline(nxt::IndexFormat::Uint32);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
0.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 0.0f, 0.0f, 1.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f,
|
||||
0.0f, -1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f,
|
||||
});
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
0, 1, 2, 0xFFFFFFFFu, 3, 4, 2,
|
||||
});
|
||||
|
||||
@@ -169,14 +169,14 @@ TEST_P(IndexFormatTest, Uint32PrimitiveRestart) {
|
||||
TEST_P(IndexFormatTest, Uint16PrimitiveRestart) {
|
||||
nxt::RenderPipeline pipeline = MakeTestPipeline(nxt::IndexFormat::Uint16);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
0.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 0.0f, 0.0f, 1.0f,
|
||||
0.0f, 0.0f, 0.0f, 1.0f,
|
||||
0.0f, -1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f,
|
||||
});
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint16_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint16_t>(device, nxt::BufferUsageBit::Index, {
|
||||
0, 1, 2, 0xFFFFu, 3, 4, 2,
|
||||
});
|
||||
|
||||
@@ -209,14 +209,14 @@ TEST_P(IndexFormatTest, ChangePipelineAfterSetIndexBuffer) {
|
||||
nxt::RenderPipeline pipeline32 = MakeTestPipeline(nxt::IndexFormat::Uint32);
|
||||
nxt::RenderPipeline pipeline16 = MakeTestPipeline(nxt::IndexFormat::Uint16);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
-1.0f, 1.0f, 0.0f, 1.0f, // Note Vertices[0] = Vertices[1]
|
||||
-1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f
|
||||
});
|
||||
// If this is interpreted as Uint16, then it would be 0, 1, 0, ... and would draw nothing.
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
1, 2, 3
|
||||
});
|
||||
|
||||
@@ -244,12 +244,12 @@ TEST_P(IndexFormatTest, ChangePipelineAfterSetIndexBuffer) {
|
||||
TEST_P(IndexFormatTest, DISABLED_SetIndexBufferBeforeSetPipeline) {
|
||||
nxt::RenderPipeline pipeline = MakeTestPipeline(nxt::IndexFormat::Uint32);
|
||||
|
||||
nxt::Buffer vertexBuffer = utils::CreateFrozenBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
nxt::Buffer vertexBuffer = utils::CreateBufferFromData<float>(device, nxt::BufferUsageBit::Vertex, {
|
||||
-1.0f, 1.0f, 0.0f, 1.0f,
|
||||
1.0f, 1.0f, 0.0f, 1.0f,
|
||||
-1.0f, -1.0f, 0.0f, 1.0f
|
||||
});
|
||||
nxt::Buffer indexBuffer = utils::CreateFrozenBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
nxt::Buffer indexBuffer = utils::CreateBufferFromData<uint32_t>(device, nxt::BufferUsageBit::Index, {
|
||||
0, 1, 2
|
||||
});
|
||||
|
||||
|
||||
@@ -155,7 +155,7 @@ class InputStateTest : public NXTTest {
|
||||
|
||||
template<typename T>
|
||||
nxt::Buffer MakeVertexBuffer(std::vector<T> data) {
|
||||
return utils::CreateFrozenBufferFromData(device, data.data(), static_cast<uint32_t>(data.size() * sizeof(T)), nxt::BufferUsageBit::Vertex);
|
||||
return utils::CreateBufferFromData(device, data.data(), static_cast<uint32_t>(data.size() * sizeof(T)), nxt::BufferUsageBit::Vertex);
|
||||
}
|
||||
|
||||
struct DrawVertexBuffer {
|
||||
@@ -168,7 +168,6 @@ class InputStateTest : public NXTTest {
|
||||
|
||||
nxt::CommandBufferBuilder builder = device.CreateCommandBufferBuilder();
|
||||
|
||||
renderPass.color.TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
builder.BeginRenderPass(renderPass.renderPassInfo)
|
||||
.SetRenderPipeline(pipeline);
|
||||
|
||||
|
||||
@@ -169,7 +169,7 @@ class PrimitiveTopologyTest : public NXTTest {
|
||||
.SetInput(0, 4 * sizeof(float), nxt::InputStepMode::Vertex)
|
||||
.GetResult();
|
||||
|
||||
vertexBuffer = utils::CreateFrozenBufferFromData(device, kVertices, sizeof(kVertices), nxt::BufferUsageBit::Vertex);
|
||||
vertexBuffer = utils::CreateBufferFromData(device, kVertices, sizeof(kVertices), nxt::BufferUsageBit::Vertex);
|
||||
}
|
||||
|
||||
struct LocationSpec {
|
||||
@@ -193,7 +193,6 @@ class PrimitiveTopologyTest : public NXTTest {
|
||||
.SetPrimitiveTopology(primitiveTopology)
|
||||
.GetResult();
|
||||
|
||||
renderPass.color.TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
static const uint32_t zeroOffset = 0;
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.BeginRenderPass(renderPass.renderPassInfo)
|
||||
|
||||
@@ -33,7 +33,6 @@ class PushConstantTest: public NXTTest {
|
||||
nxt::Buffer buf1 = device.CreateBufferBuilder()
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Storage | nxt::BufferUsageBit::TransferSrc | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
uint32_t one = 1;
|
||||
buf1.SetSubData(0, sizeof(one), reinterpret_cast<uint8_t*>(&one));
|
||||
@@ -42,7 +41,6 @@ class PushConstantTest: public NXTTest {
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Storage)
|
||||
.GetResult();
|
||||
buf2.FreezeUsage(nxt::BufferUsageBit::Storage);
|
||||
|
||||
nxt::ShaderStageBit kAllStages = nxt::ShaderStageBit::Compute | nxt::ShaderStageBit::Fragment | nxt::ShaderStageBit::Vertex;
|
||||
constexpr nxt::ShaderStageBit kNoStages{};
|
||||
@@ -213,7 +211,6 @@ TEST_P(PushConstantTest, ComputePassDefaultsToZero) {
|
||||
|
||||
uint32_t notZero = 42;
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(binding.resultBuffer, nxt::BufferUsageBit::Storage)
|
||||
.BeginComputePass()
|
||||
// Test compute push constants are set to zero by default.
|
||||
.SetComputePipeline(pipeline)
|
||||
@@ -273,7 +270,6 @@ TEST_P(PushConstantTest, VariousConstantTypes) {
|
||||
|
||||
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(binding.resultBuffer, nxt::BufferUsageBit::Storage)
|
||||
.BeginComputePass()
|
||||
.SetPushConstants(nxt::ShaderStageBit::Compute, 0, 3, reinterpret_cast<uint32_t*>(&values))
|
||||
.SetComputePipeline(pipeline)
|
||||
@@ -300,8 +296,6 @@ TEST_P(PushConstantTest, InheritThroughPipelineLayoutChange) {
|
||||
uint32_t one = 1;
|
||||
uint32_t two = 2;
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(binding1.resultBuffer, nxt::BufferUsageBit::Storage)
|
||||
.TransitionBufferUsage(binding2.resultBuffer, nxt::BufferUsageBit::Storage)
|
||||
.BeginComputePass()
|
||||
// Set Push constant before there is a pipeline set
|
||||
.SetPushConstants(nxt::ShaderStageBit::Compute, 0, 1, &one)
|
||||
@@ -335,7 +329,6 @@ TEST_P(PushConstantTest, SetAllConstantsToNonZero) {
|
||||
nxt::ComputePipeline pipeline = MakeTestComputePipeline(binding.layout, spec);
|
||||
|
||||
nxt::CommandBuffer commands = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(binding.resultBuffer, nxt::BufferUsageBit::Storage)
|
||||
.BeginComputePass()
|
||||
.SetPushConstants(nxt::ShaderStageBit::Compute, 0, kMaxPushConstants, &values[0])
|
||||
.SetComputePipeline(pipeline)
|
||||
|
||||
@@ -61,7 +61,6 @@ class RenderPassLoadOpTests : public NXTTest {
|
||||
.SetFormat(nxt::TextureFormat::R8G8B8A8Unorm)
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment | nxt::TextureUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
|
||||
renderTargetView = renderTarget.CreateTextureViewBuilder().GetResult();
|
||||
|
||||
@@ -41,7 +41,6 @@ protected:
|
||||
void SetUp() override {
|
||||
NXTTest::SetUp();
|
||||
mRenderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||
mRenderPass.color.TransitionUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
|
||||
mBindGroupLayout = utils::MakeBindGroupLayout(
|
||||
device, {
|
||||
@@ -97,14 +96,12 @@ protected:
|
||||
data[0] = data[rowPixels + 1] = black;
|
||||
data[1] = data[rowPixels] = white;
|
||||
|
||||
nxt::Buffer stagingBuffer = utils::CreateFrozenBufferFromData(device, data, sizeof(data), nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Buffer stagingBuffer = utils::CreateBufferFromData(device, data, sizeof(data), nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::CommandBuffer copy = device.CreateCommandBufferBuilder()
|
||||
.TransitionTextureUsage(texture, nxt::TextureUsageBit::TransferDst)
|
||||
.CopyBufferToTexture(stagingBuffer, 0, 256, texture, 0, 0, 0, 2, 2, 1, 0)
|
||||
.GetResult();
|
||||
|
||||
queue.Submit(1, ©);
|
||||
texture.FreezeUsage(nxt::TextureUsageBit::Sampled);
|
||||
mTextureView = texture.CreateTextureViewBuilder().GetResult();
|
||||
}
|
||||
|
||||
|
||||
@@ -483,8 +483,8 @@ TEST_F(WireTests, CallsSkippedAfterBuilderError) {
|
||||
nxtBuffer buffer = nxtBufferBuilderGetResult(bufferBuilder); // Hey look an error!
|
||||
|
||||
// These calls will be skipped because of the error
|
||||
nxtBufferTransitionUsage(buffer, NXT_BUFFER_USAGE_BIT_UNIFORM);
|
||||
nxtCommandBufferBuilderTransitionBufferUsage(cmdBufBuilder, buffer, NXT_BUFFER_USAGE_BIT_UNIFORM);
|
||||
nxtBufferSetSubData(buffer, 0, 0, nullptr);
|
||||
nxtCommandBufferBuilderSetIndexBuffer(cmdBufBuilder, buffer, 0);
|
||||
nxtCommandBufferBuilderGetResult(cmdBufBuilder);
|
||||
|
||||
nxtCommandBufferBuilder apiCmdBufBuilder = api.GetNewCommandBufferBuilder();
|
||||
@@ -502,8 +502,8 @@ TEST_F(WireTests, CallsSkippedAfterBuilderError) {
|
||||
return nullptr;
|
||||
}));
|
||||
|
||||
EXPECT_CALL(api, BufferTransitionUsage(_, _)).Times(0);
|
||||
EXPECT_CALL(api, CommandBufferBuilderTransitionBufferUsage(_, _, _)).Times(0);
|
||||
EXPECT_CALL(api, BufferSetSubData(_, _, _, _)).Times(0);
|
||||
EXPECT_CALL(api, CommandBufferBuilderSetIndexBuffer(_, _, _)).Times(0);
|
||||
EXPECT_CALL(api, CommandBufferBuilderGetResult(_)).Times(0);
|
||||
|
||||
FlushClient();
|
||||
|
||||
@@ -26,7 +26,6 @@ TEST_F(BindGroupValidationTest, BufferViewOffset) {
|
||||
|
||||
auto buffer = device.CreateBufferBuilder()
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetSize(512)
|
||||
.GetResult();
|
||||
|
||||
|
||||
@@ -46,21 +46,18 @@ class BufferValidationTest : public ValidationTest {
|
||||
return device.CreateBufferBuilder()
|
||||
.SetSize(size)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::MapRead)
|
||||
.GetResult();
|
||||
}
|
||||
nxt::Buffer CreateMapWriteBuffer(uint32_t size) {
|
||||
return device.CreateBufferBuilder()
|
||||
.SetSize(size)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapWrite)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::MapWrite)
|
||||
.GetResult();
|
||||
}
|
||||
nxt::Buffer CreateSetSubDataBuffer(uint32_t size) {
|
||||
return device.CreateBufferBuilder()
|
||||
.SetSize(size)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
@@ -86,15 +83,6 @@ class BufferValidationTest : public ValidationTest {
|
||||
// Test case where creation should succeed
|
||||
TEST_F(BufferValidationTest, CreationSuccess) {
|
||||
// Success
|
||||
{
|
||||
nxt::Buffer buf = AssertWillBeSuccess(device.CreateBufferBuilder())
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Uniform)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
// Success, when no initial usage is set
|
||||
{
|
||||
nxt::Buffer buf = AssertWillBeSuccess(device.CreateBufferBuilder())
|
||||
.SetSize(4)
|
||||
@@ -111,7 +99,6 @@ TEST_F(BufferValidationTest, CreationDuplicates) {
|
||||
.SetSize(4)
|
||||
.SetSize(3)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Uniform)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
@@ -121,28 +108,8 @@ TEST_F(BufferValidationTest, CreationDuplicates) {
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Vertex)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Uniform)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
// When initial usage is specified multiple times
|
||||
{
|
||||
nxt::Buffer buf = AssertWillBeError(device.CreateBufferBuilder())
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform | nxt::BufferUsageBit::Vertex)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Vertex)
|
||||
.GetResult();
|
||||
}
|
||||
}
|
||||
|
||||
// Test failure when the initial usage isn't a subset of the allowed usage
|
||||
TEST_F(BufferValidationTest, CreationInitialNotSubsetOfAllowed) {
|
||||
nxt::Buffer buf = AssertWillBeError(device.CreateBufferBuilder())
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Uniform)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Vertex)
|
||||
.GetResult();
|
||||
}
|
||||
|
||||
// Test failure when required properties are missing
|
||||
@@ -251,8 +218,7 @@ TEST_F(BufferValidationTest, MapWriteOutOfRange) {
|
||||
TEST_F(BufferValidationTest, MapReadWrongUsage) {
|
||||
nxt::Buffer buf = device.CreateBufferBuilder()
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapRead | nxt::BufferUsageBit::TransferDst)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
nxt::CallbackUserdata userdata = 40600;
|
||||
@@ -266,8 +232,7 @@ TEST_F(BufferValidationTest, MapReadWrongUsage) {
|
||||
TEST_F(BufferValidationTest, MapWriteWrongUsage) {
|
||||
nxt::Buffer buf = device.CreateBufferBuilder()
|
||||
.SetSize(4)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::MapWrite | nxt::BufferUsageBit::TransferSrc)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferSrc)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferSrc)
|
||||
.GetResult();
|
||||
|
||||
nxt::CallbackUserdata userdata = 40600;
|
||||
@@ -505,8 +470,7 @@ TEST_F(BufferValidationTest, SetSubDataOutOfBounds) {
|
||||
TEST_F(BufferValidationTest, SetSubDataWrongUsage) {
|
||||
nxt::Buffer buf = device.CreateBufferBuilder()
|
||||
.SetSize(1)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferDst | nxt::BufferUsageBit::Vertex)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::Vertex)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Vertex)
|
||||
.GetResult();
|
||||
|
||||
uint8_t foo = 0;
|
||||
|
||||
@@ -23,11 +23,10 @@ class CopyCommandTest : public ValidationTest {
|
||||
.SetSize(size)
|
||||
.SetAllowedUsage(usage)
|
||||
.GetResult();
|
||||
buf.FreezeUsage(usage);
|
||||
return buf;
|
||||
}
|
||||
|
||||
nxt::Texture CreateFrozen2DTexture(uint32_t width, uint32_t height, uint32_t levels,
|
||||
nxt::Texture Create2DTexture(uint32_t width, uint32_t height, uint32_t levels,
|
||||
nxt::TextureFormat format, nxt::TextureUsageBit usage) {
|
||||
nxt::Texture tex = AssertWillBeSuccess(device.CreateTextureBuilder())
|
||||
.SetDimension(nxt::TextureDimension::e2D)
|
||||
@@ -36,7 +35,6 @@ class CopyCommandTest : public ValidationTest {
|
||||
.SetMipLevels(levels)
|
||||
.SetAllowedUsage(usage)
|
||||
.GetResult();
|
||||
tex.FreezeUsage(usage);
|
||||
return tex;
|
||||
}
|
||||
|
||||
@@ -123,7 +121,7 @@ class CopyCommandTest_B2T : public CopyCommandTest {
|
||||
TEST_F(CopyCommandTest_B2T, Success) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Buffer source = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// Different copies, including some that touch the OOB condition
|
||||
@@ -169,7 +167,7 @@ TEST_F(CopyCommandTest_B2T, Success) {
|
||||
TEST_F(CopyCommandTest_B2T, OutOfBoundsOnBuffer) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Buffer source = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// OOB on the buffer because we copy too many pixels
|
||||
@@ -209,7 +207,7 @@ TEST_F(CopyCommandTest_B2T, OutOfBoundsOnBuffer) {
|
||||
TEST_F(CopyCommandTest_B2T, OutOfBoundsOnTexture) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Buffer source = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// OOB on the texture because x + width overflows
|
||||
@@ -244,7 +242,7 @@ TEST_F(CopyCommandTest_B2T, OutOfBoundsOnTexture) {
|
||||
// Test that we force Z=0 and Depth=1 on copies to 2D textures
|
||||
TEST_F(CopyCommandTest_B2T, ZDepthConstraintFor2DTextures) {
|
||||
nxt::Buffer source = CreateFrozenBuffer(16 * 4, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// Z=1 on an empty copy still errors
|
||||
@@ -266,9 +264,9 @@ TEST_F(CopyCommandTest_B2T, ZDepthConstraintFor2DTextures) {
|
||||
TEST_F(CopyCommandTest_B2T, IncorrectUsage) {
|
||||
nxt::Buffer source = CreateFrozenBuffer(16 * 4, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Buffer vertex = CreateFrozenBuffer(16 * 4, nxt::BufferUsageBit::Vertex);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
nxt::Texture sampled = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture sampled = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::Sampled);
|
||||
|
||||
// Incorrect source usage
|
||||
@@ -289,7 +287,7 @@ TEST_F(CopyCommandTest_B2T, IncorrectUsage) {
|
||||
TEST_F(CopyCommandTest_B2T, IncorrectRowPitch) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(128, 16, 1);
|
||||
nxt::Buffer source = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// Default row pitch is not 256-byte aligned
|
||||
@@ -318,7 +316,7 @@ TEST_F(CopyCommandTest_B2T, IncorrectRowPitch) {
|
||||
TEST_F(CopyCommandTest_B2T, IncorrectBufferOffset) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Buffer source = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
nxt::Texture destination = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture destination = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
|
||||
// Correct usage
|
||||
@@ -351,7 +349,7 @@ class CopyCommandTest_T2B : public CopyCommandTest {
|
||||
// Test a successfull T2B copy
|
||||
TEST_F(CopyCommandTest_T2B, Success) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
|
||||
@@ -397,7 +395,7 @@ TEST_F(CopyCommandTest_T2B, Success) {
|
||||
// Test OOB conditions on the texture
|
||||
TEST_F(CopyCommandTest_T2B, OutOfBoundsOnTexture) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
|
||||
@@ -433,7 +431,7 @@ TEST_F(CopyCommandTest_T2B, OutOfBoundsOnTexture) {
|
||||
// Test OOB conditions on the buffer
|
||||
TEST_F(CopyCommandTest_T2B, OutOfBoundsOnBuffer) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
|
||||
@@ -473,7 +471,7 @@ TEST_F(CopyCommandTest_T2B, OutOfBoundsOnBuffer) {
|
||||
// Test that we force Z=0 and Depth=1 on copies from to 2D textures
|
||||
TEST_F(CopyCommandTest_T2B, ZDepthConstraintFor2DTextures) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
|
||||
@@ -495,9 +493,9 @@ TEST_F(CopyCommandTest_T2B, ZDepthConstraintFor2DTextures) {
|
||||
// Test T2B copies with incorrect buffer usage
|
||||
TEST_F(CopyCommandTest_T2B, IncorrectUsage) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(4, 4, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Texture sampled = CreateFrozen2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture sampled = Create2DTexture(16, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::Sampled);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
nxt::Buffer vertex = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::Vertex);
|
||||
@@ -519,7 +517,7 @@ TEST_F(CopyCommandTest_T2B, IncorrectUsage) {
|
||||
|
||||
TEST_F(CopyCommandTest_T2B, IncorrectRowPitch) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(128, 16, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferDst);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferSrc);
|
||||
|
||||
@@ -548,7 +546,7 @@ TEST_F(CopyCommandTest_T2B, IncorrectRowPitch) {
|
||||
// Test T2B copies with incorrect buffer offset usage
|
||||
TEST_F(CopyCommandTest_T2B, IncorrectBufferOffset) {
|
||||
uint32_t bufferSize = BufferSizeForTextureCopy(128, 16, 1);
|
||||
nxt::Texture source = CreateFrozen2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::Texture source = Create2DTexture(128, 16, 5, nxt::TextureFormat::R8G8B8A8Unorm,
|
||||
nxt::TextureUsageBit::TransferSrc);
|
||||
nxt::Buffer destination = CreateFrozenBuffer(bufferSize, nxt::BufferUsageBit::TransferDst);
|
||||
|
||||
|
||||
@@ -28,7 +28,6 @@ nxt::TextureView Create2DAttachment(nxt::Device& device, uint32_t width, uint32_
|
||||
.SetFormat(format)
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.SetInitialUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
|
||||
return attachment.CreateTextureViewBuilder()
|
||||
|
||||
@@ -1,56 +0,0 @@
|
||||
// Copyright 2017 The NXT Authors
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
#include "tests/unittests/validation/ValidationTest.h"
|
||||
|
||||
#include <gmock/gmock.h>
|
||||
|
||||
using namespace testing;
|
||||
|
||||
class UsageValidationTest : public ValidationTest {
|
||||
protected:
|
||||
nxt::Queue queue;
|
||||
|
||||
private:
|
||||
void SetUp() override {
|
||||
ValidationTest::SetUp();
|
||||
queue = device.CreateQueue();
|
||||
}
|
||||
};
|
||||
|
||||
// Test that command buffer submit changes buffer usage
|
||||
TEST_F(UsageValidationTest, UsageAfterCommandBuffer) {
|
||||
// TODO(kainino@chromium.org): This needs to be tested on every backend.
|
||||
// Should we make an end2end test that tests this as well?
|
||||
|
||||
nxt::Buffer buf = device.CreateBufferBuilder()
|
||||
.SetSize(1)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::TransferDst | nxt::BufferUsageBit::Vertex)
|
||||
.SetInitialUsage(nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
|
||||
uint8_t foo = 0;
|
||||
buf.SetSubData(0, sizeof(foo), &foo);
|
||||
|
||||
buf.TransitionUsage(nxt::BufferUsageBit::Vertex);
|
||||
ASSERT_DEVICE_ERROR(buf.SetSubData(0, sizeof(foo), &foo));
|
||||
|
||||
nxt::CommandBuffer cmdbuf = device.CreateCommandBufferBuilder()
|
||||
.TransitionBufferUsage(buf, nxt::BufferUsageBit::TransferDst)
|
||||
.GetResult();
|
||||
queue.Submit(1, &cmdbuf);
|
||||
// buf should be in TransferDst usage
|
||||
|
||||
buf.SetSubData(0, sizeof(foo), &foo);
|
||||
}
|
||||
@@ -77,7 +77,6 @@ nxt::RenderPassDescriptor ValidationTest::CreateSimpleRenderPass() {
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
colorBuffer.FreezeUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
auto colorView = colorBuffer.CreateTextureViewBuilder()
|
||||
.GetResult();
|
||||
|
||||
@@ -126,7 +125,6 @@ ValidationTest::DummyRenderPass ValidationTest::CreateDummyRenderPass() {
|
||||
.SetMipLevels(1)
|
||||
.SetAllowedUsage(nxt::TextureUsageBit::OutputAttachment)
|
||||
.GetResult();
|
||||
dummy.attachment.FreezeUsage(nxt::TextureUsageBit::OutputAttachment);
|
||||
|
||||
nxt::TextureView view = AssertWillBeSuccess(dummy.attachment.CreateTextureViewBuilder()).GetResult();
|
||||
|
||||
|
||||
@@ -41,7 +41,6 @@ class VertexBufferValidationTest : public ValidationTest {
|
||||
.SetSize(256)
|
||||
.SetAllowedUsage(nxt::BufferUsageBit::Vertex)
|
||||
.GetResult();
|
||||
buffer.FreezeUsage(nxt::BufferUsageBit::Vertex);
|
||||
}
|
||||
return buffers;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user