mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-11 14:39:13 +00:00
Deprecate size=0 for default in setIndexBuffer and setVertexBuffer
For size parameter in setIndexBuffer and setVertexBuffer, use wgpu::kWholeSize rather than 0 to indicate using the default size, i.e. remaining buffer size after offset. Using size=0 is still avaliable but will cause a deprecation warning. Bug: dawn:1058 Change-Id: I4c4f6ca6fc7346c225815bdcd607fed110ce2b9a Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/65020 Commit-Queue: Zhaoming Jiang <zhaoming.jiang@intel.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
This commit is contained in:
parent
8411a12ab1
commit
2be4b8483c
@ -1533,7 +1533,7 @@
|
|||||||
{"name": "slot", "type": "uint32_t"},
|
{"name": "slot", "type": "uint32_t"},
|
||||||
{"name": "buffer", "type": "buffer"},
|
{"name": "buffer", "type": "buffer"},
|
||||||
{"name": "offset", "type": "uint64_t", "default": "0"},
|
{"name": "offset", "type": "uint64_t", "default": "0"},
|
||||||
{"name": "size", "type": "uint64_t", "default": "0"}
|
{"name": "size", "type": "uint64_t", "default": "WGPU_WHOLE_SIZE"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1542,7 +1542,7 @@
|
|||||||
{"name": "buffer", "type": "buffer"},
|
{"name": "buffer", "type": "buffer"},
|
||||||
{"name": "format", "type": "index format"},
|
{"name": "format", "type": "index format"},
|
||||||
{"name": "offset", "type": "uint64_t", "default": "0"},
|
{"name": "offset", "type": "uint64_t", "default": "0"},
|
||||||
{"name": "size", "type": "uint64_t", "default": "0"}
|
{"name": "size", "type": "uint64_t", "default": "WGPU_WHOLE_SIZE"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1724,7 +1724,7 @@
|
|||||||
{"name": "slot", "type": "uint32_t"},
|
{"name": "slot", "type": "uint32_t"},
|
||||||
{"name": "buffer", "type": "buffer"},
|
{"name": "buffer", "type": "buffer"},
|
||||||
{"name": "offset", "type": "uint64_t", "default": "0"},
|
{"name": "offset", "type": "uint64_t", "default": "0"},
|
||||||
{"name": "size", "type": "uint64_t", "default": "0"}
|
{"name": "size", "type": "uint64_t", "default": "WGPU_WHOLE_SIZE"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -1733,7 +1733,7 @@
|
|||||||
{"name": "buffer", "type": "buffer"},
|
{"name": "buffer", "type": "buffer"},
|
||||||
{"name": "format", "type": "index format"},
|
{"name": "format", "type": "index format"},
|
||||||
{"name": "offset", "type": "uint64_t", "default": "0"},
|
{"name": "offset", "type": "uint64_t", "default": "0"},
|
||||||
{"name": "size", "type": "uint64_t", "default": "0"}
|
{"name": "size", "type": "uint64_t", "default": "WGPU_WHOLE_SIZE"}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -231,7 +231,17 @@ namespace dawn_native {
|
|||||||
}
|
}
|
||||||
uint64_t remainingSize = bufferSize - offset;
|
uint64_t remainingSize = bufferSize - offset;
|
||||||
|
|
||||||
|
// Temporarily treat 0 as undefined for size, and give a warning
|
||||||
|
// TODO(dawn:1058): Remove this if block
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
|
size = wgpu::kWholeSize;
|
||||||
|
GetDevice()->EmitDeprecationWarning(
|
||||||
|
"Using size=0 to indicate default binding size for setIndexBuffer "
|
||||||
|
"is deprecated. In the future it will result in a zero-size binding. "
|
||||||
|
"Use `undefined` (wgpu::kWholeSize) or just omit the parameter instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == wgpu::kWholeSize) {
|
||||||
size = remainingSize;
|
size = remainingSize;
|
||||||
} else {
|
} else {
|
||||||
if (size > remainingSize) {
|
if (size > remainingSize) {
|
||||||
@ -239,7 +249,8 @@ namespace dawn_native {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (size == 0) {
|
if (size == wgpu::kWholeSize) {
|
||||||
|
DAWN_ASSERT(buffer->GetSize() >= offset);
|
||||||
size = buffer->GetSize() - offset;
|
size = buffer->GetSize() - offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -282,7 +293,17 @@ namespace dawn_native {
|
|||||||
}
|
}
|
||||||
uint64_t remainingSize = bufferSize - offset;
|
uint64_t remainingSize = bufferSize - offset;
|
||||||
|
|
||||||
|
// Temporarily treat 0 as undefined for size, and give a warning
|
||||||
|
// TODO(dawn:1058): Remove this if block
|
||||||
if (size == 0) {
|
if (size == 0) {
|
||||||
|
size = wgpu::kWholeSize;
|
||||||
|
GetDevice()->EmitDeprecationWarning(
|
||||||
|
"Using size=0 to indicate default binding size for setVertexBuffer "
|
||||||
|
"is deprecated. In the future it will result in a zero-size binding. "
|
||||||
|
"Use `undefined` (wgpu::kWholeSize) or just omit the parameter instead.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if (size == wgpu::kWholeSize) {
|
||||||
size = remainingSize;
|
size = remainingSize;
|
||||||
} else {
|
} else {
|
||||||
if (size > remainingSize) {
|
if (size > remainingSize) {
|
||||||
@ -290,7 +311,8 @@ namespace dawn_native {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (size == 0) {
|
if (size == wgpu::kWholeSize) {
|
||||||
|
DAWN_ASSERT(buffer->GetSize() >= offset);
|
||||||
size = buffer->GetSize() - offset;
|
size = buffer->GetSize() - offset;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -34,6 +34,43 @@ class DeprecationTests : public DawnTest {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Test that using size=0 to indicate default size in setVertexBuffer and setIndexBuffer is
|
||||||
|
// deprecated.
|
||||||
|
TEST_P(DeprecationTests, SetBufferWithZeroSizeAsDefault) {
|
||||||
|
wgpu::BufferDescriptor bufferDesc;
|
||||||
|
bufferDesc.size = 128;
|
||||||
|
bufferDesc.usage = wgpu::BufferUsage::Index | wgpu::BufferUsage::Vertex;
|
||||||
|
wgpu::Buffer buffer = device.CreateBuffer(&bufferDesc);
|
||||||
|
|
||||||
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, 1, 1);
|
||||||
|
wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||||
|
wgpu::RenderPassEncoder pass;
|
||||||
|
|
||||||
|
{
|
||||||
|
// Control case, use wgpu::kWholeSize to indicate default size.
|
||||||
|
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, wgpu::kWholeSize);
|
||||||
|
pass.SetVertexBuffer(0, buffer, 0, wgpu::kWholeSize);
|
||||||
|
pass.EndPass();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Control case, omitting size parameter to indicate default size.
|
||||||
|
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0);
|
||||||
|
pass.SetVertexBuffer(0, buffer, 0);
|
||||||
|
pass.EndPass();
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Error case, use 0 to indicate default size will cause deprecated warning.
|
||||||
|
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
|
EXPECT_DEPRECATION_WARNING(pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 0));
|
||||||
|
EXPECT_DEPRECATION_WARNING(pass.SetVertexBuffer(0, buffer, 0, 0));
|
||||||
|
pass.EndPass();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
DAWN_INSTANTIATE_TEST(DeprecationTests,
|
DAWN_INSTANTIATE_TEST(DeprecationTests,
|
||||||
D3D12Backend(),
|
D3D12Backend(),
|
||||||
MetalBackend(),
|
MetalBackend(),
|
||||||
|
@ -28,9 +28,9 @@ namespace {
|
|||||||
// Parameters for testing index buffer
|
// Parameters for testing index buffer
|
||||||
struct IndexBufferParams {
|
struct IndexBufferParams {
|
||||||
wgpu::IndexFormat indexFormat;
|
wgpu::IndexFormat indexFormat;
|
||||||
uint32_t indexBufferSize; // Size for creating index buffer
|
uint64_t indexBufferSize; // Size for creating index buffer
|
||||||
uint32_t indexBufferOffsetForEncoder; // Offset for SetIndexBuffer in encoder
|
uint64_t indexBufferOffsetForEncoder; // Offset for SetIndexBuffer in encoder
|
||||||
uint32_t indexBufferSizeForEncoder; // Size for SetIndexBuffer in encoder
|
uint64_t indexBufferSizeForEncoder; // Size for SetIndexBuffer in encoder
|
||||||
uint32_t maxValidIndexNumber; // max number of {indexCount + firstIndex} for this set
|
uint32_t maxValidIndexNumber; // max number of {indexCount + firstIndex} for this set
|
||||||
// of parameters
|
// of parameters
|
||||||
};
|
};
|
||||||
@ -38,9 +38,9 @@ namespace {
|
|||||||
// Parameters for testing vertex-step-mode and instance-step-mode vertex buffer
|
// Parameters for testing vertex-step-mode and instance-step-mode vertex buffer
|
||||||
struct VertexBufferParams {
|
struct VertexBufferParams {
|
||||||
uint32_t bufferStride;
|
uint32_t bufferStride;
|
||||||
uint32_t bufferSize; // Size for creating vertex buffer
|
uint64_t bufferSize; // Size for creating vertex buffer
|
||||||
uint32_t bufferOffsetForEncoder; // Offset for SetVertexBuffer in encoder
|
uint64_t bufferOffsetForEncoder; // Offset for SetVertexBuffer in encoder
|
||||||
uint32_t bufferSizeForEncoder; // Size for SetVertexBuffer in encoder
|
uint64_t bufferSizeForEncoder; // Size for SetVertexBuffer in encoder
|
||||||
uint32_t maxValidAccessNumber; // max number of valid access time for this set of
|
uint32_t maxValidAccessNumber; // max number of valid access time for this set of
|
||||||
// parameters, i.e. {vertexCount + firstVertex} for
|
// parameters, i.e. {vertexCount + firstVertex} for
|
||||||
// vertex-step-mode, and {instanceCount + firstInstance}
|
// vertex-step-mode, and {instanceCount + firstInstance}
|
||||||
@ -52,7 +52,7 @@ namespace {
|
|||||||
const wgpu::Buffer buffer;
|
const wgpu::Buffer buffer;
|
||||||
wgpu::IndexFormat indexFormat;
|
wgpu::IndexFormat indexFormat;
|
||||||
uint64_t offset = 0;
|
uint64_t offset = 0;
|
||||||
uint64_t size = 0;
|
uint64_t size = wgpu::kWholeSize;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Parameters for setVertexBuffer
|
// Parameters for setVertexBuffer
|
||||||
@ -60,7 +60,7 @@ namespace {
|
|||||||
uint32_t slot;
|
uint32_t slot;
|
||||||
const wgpu::Buffer buffer;
|
const wgpu::Buffer buffer;
|
||||||
uint64_t offset = 0;
|
uint64_t offset = 0;
|
||||||
uint64_t size = 0;
|
uint64_t size = wgpu::kWholeSize;
|
||||||
};
|
};
|
||||||
using VertexBufferList = std::vector<VertexBufferSpec>;
|
using VertexBufferList = std::vector<VertexBufferSpec>;
|
||||||
|
|
||||||
@ -273,14 +273,16 @@ namespace {
|
|||||||
// Parameters list for index buffer. Should cover all IndexFormat, and the zero/non-zero
|
// Parameters list for index buffer. Should cover all IndexFormat, and the zero/non-zero
|
||||||
// offset and size case in SetIndexBuffer
|
// offset and size case in SetIndexBuffer
|
||||||
const std::vector<IndexBufferParams> kIndexParamsList = {
|
const std::vector<IndexBufferParams> kIndexParamsList = {
|
||||||
{wgpu::IndexFormat::Uint32, 12 * sizeof(uint32_t), 0, 0, 12},
|
{wgpu::IndexFormat::Uint32, 12 * sizeof(uint32_t), 0, wgpu::kWholeSize, 12},
|
||||||
{wgpu::IndexFormat::Uint32, 13 * sizeof(uint32_t), sizeof(uint32_t), 0, 12},
|
{wgpu::IndexFormat::Uint32, 13 * sizeof(uint32_t), sizeof(uint32_t), wgpu::kWholeSize,
|
||||||
|
12},
|
||||||
{wgpu::IndexFormat::Uint32, 13 * sizeof(uint32_t), 0, 12 * sizeof(uint32_t), 12},
|
{wgpu::IndexFormat::Uint32, 13 * sizeof(uint32_t), 0, 12 * sizeof(uint32_t), 12},
|
||||||
{wgpu::IndexFormat::Uint32, 14 * sizeof(uint32_t), sizeof(uint32_t),
|
{wgpu::IndexFormat::Uint32, 14 * sizeof(uint32_t), sizeof(uint32_t),
|
||||||
12 * sizeof(uint32_t), 12},
|
12 * sizeof(uint32_t), 12},
|
||||||
|
|
||||||
{wgpu::IndexFormat::Uint16, 12 * sizeof(uint16_t), 0, 0, 12},
|
{wgpu::IndexFormat::Uint16, 12 * sizeof(uint16_t), 0, wgpu::kWholeSize, 12},
|
||||||
{wgpu::IndexFormat::Uint16, 13 * sizeof(uint16_t), sizeof(uint16_t), 0, 12},
|
{wgpu::IndexFormat::Uint16, 13 * sizeof(uint16_t), sizeof(uint16_t), wgpu::kWholeSize,
|
||||||
|
12},
|
||||||
{wgpu::IndexFormat::Uint16, 13 * sizeof(uint16_t), 0, 12 * sizeof(uint16_t), 12},
|
{wgpu::IndexFormat::Uint16, 13 * sizeof(uint16_t), 0, 12 * sizeof(uint16_t), 12},
|
||||||
{wgpu::IndexFormat::Uint16, 14 * sizeof(uint16_t), sizeof(uint16_t),
|
{wgpu::IndexFormat::Uint16, 14 * sizeof(uint16_t), sizeof(uint16_t),
|
||||||
12 * sizeof(uint16_t), 12},
|
12 * sizeof(uint16_t), 12},
|
||||||
@ -289,18 +291,19 @@ namespace {
|
|||||||
// stride, buffer size, SetVertexBuffer size and offset.
|
// stride, buffer size, SetVertexBuffer size and offset.
|
||||||
const std::vector<VertexBufferParams> kVertexParamsList = {
|
const std::vector<VertexBufferParams> kVertexParamsList = {
|
||||||
// For stride = kFloat32x4Stride
|
// For stride = kFloat32x4Stride
|
||||||
{kFloat32x4Stride, 3 * kFloat32x4Stride, 0, 0, 3},
|
{kFloat32x4Stride, 3 * kFloat32x4Stride, 0, wgpu::kWholeSize, 3},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{kFloat32x4Stride, 4 * kFloat32x4Stride, kFloat32x4Stride, 0, 3},
|
{kFloat32x4Stride, 4 * kFloat32x4Stride, kFloat32x4Stride, wgpu::kWholeSize, 3},
|
||||||
// Non-zero size
|
// Non-default size
|
||||||
{kFloat32x4Stride, 4 * kFloat32x4Stride, 0, 3 * kFloat32x4Stride, 3},
|
{kFloat32x4Stride, 4 * kFloat32x4Stride, 0, 3 * kFloat32x4Stride, 3},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{kFloat32x4Stride, 5 * kFloat32x4Stride, kFloat32x4Stride, 3 * kFloat32x4Stride, 3},
|
{kFloat32x4Stride, 5 * kFloat32x4Stride, kFloat32x4Stride, 3 * kFloat32x4Stride, 3},
|
||||||
// For stride = 2 * kFloat32x4Stride
|
// For stride = 2 * kFloat32x4Stride
|
||||||
{(2 * kFloat32x4Stride), 3 * (2 * kFloat32x4Stride), 0, 0, 3},
|
{(2 * kFloat32x4Stride), 3 * (2 * kFloat32x4Stride), 0, wgpu::kWholeSize, 3},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{(2 * kFloat32x4Stride), 4 * (2 * kFloat32x4Stride), (2 * kFloat32x4Stride), 0, 3},
|
{(2 * kFloat32x4Stride), 4 * (2 * kFloat32x4Stride), (2 * kFloat32x4Stride),
|
||||||
// Non-zero size
|
wgpu::kWholeSize, 3},
|
||||||
|
// Non-default size
|
||||||
{(2 * kFloat32x4Stride), 4 * (2 * kFloat32x4Stride), 0, 3 * (2 * kFloat32x4Stride), 3},
|
{(2 * kFloat32x4Stride), 4 * (2 * kFloat32x4Stride), 0, 3 * (2 * kFloat32x4Stride), 3},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{(2 * kFloat32x4Stride), 5 * (2 * kFloat32x4Stride), (2 * kFloat32x4Stride),
|
{(2 * kFloat32x4Stride), 5 * (2 * kFloat32x4Stride), (2 * kFloat32x4Stride),
|
||||||
@ -309,18 +312,19 @@ namespace {
|
|||||||
// Parameters list for instance-step-mode buffer.
|
// Parameters list for instance-step-mode buffer.
|
||||||
const std::vector<VertexBufferParams> kInstanceParamsList = {
|
const std::vector<VertexBufferParams> kInstanceParamsList = {
|
||||||
// For stride = kFloat32x2Stride
|
// For stride = kFloat32x2Stride
|
||||||
{kFloat32x2Stride, 5 * kFloat32x2Stride, 0, 0, 5},
|
{kFloat32x2Stride, 5 * kFloat32x2Stride, 0, wgpu::kWholeSize, 5},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{kFloat32x2Stride, 6 * kFloat32x2Stride, kFloat32x2Stride, 0, 5},
|
{kFloat32x2Stride, 6 * kFloat32x2Stride, kFloat32x2Stride, wgpu::kWholeSize, 5},
|
||||||
// Non-zero size
|
// Non-default size
|
||||||
{kFloat32x2Stride, 6 * kFloat32x2Stride, 0, 5 * kFloat32x2Stride, 5},
|
{kFloat32x2Stride, 6 * kFloat32x2Stride, 0, 5 * kFloat32x2Stride, 5},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{kFloat32x2Stride, 7 * kFloat32x2Stride, kFloat32x2Stride, 5 * kFloat32x2Stride, 5},
|
{kFloat32x2Stride, 7 * kFloat32x2Stride, kFloat32x2Stride, 5 * kFloat32x2Stride, 5},
|
||||||
// For stride = 3 * kFloat32x2Stride
|
// For stride = 3 * kFloat32x2Stride
|
||||||
{(3 * kFloat32x2Stride), 5 * (3 * kFloat32x2Stride), 0, 0, 5},
|
{(3 * kFloat32x2Stride), 5 * (3 * kFloat32x2Stride), 0, wgpu::kWholeSize, 5},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{(3 * kFloat32x2Stride), 6 * (3 * kFloat32x2Stride), (3 * kFloat32x2Stride), 0, 5},
|
{(3 * kFloat32x2Stride), 6 * (3 * kFloat32x2Stride), (3 * kFloat32x2Stride),
|
||||||
// Non-zero size
|
wgpu::kWholeSize, 5},
|
||||||
|
// Non-default size
|
||||||
{(3 * kFloat32x2Stride), 6 * (3 * kFloat32x2Stride), 0, 5 * (3 * kFloat32x2Stride), 5},
|
{(3 * kFloat32x2Stride), 6 * (3 * kFloat32x2Stride), 0, 5 * (3 * kFloat32x2Stride), 5},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{(3 * kFloat32x2Stride), 7 * (3 * kFloat32x2Stride), (3 * kFloat32x2Stride),
|
{(3 * kFloat32x2Stride), 7 * (3 * kFloat32x2Stride), (3 * kFloat32x2Stride),
|
||||||
@ -338,8 +342,20 @@ namespace {
|
|||||||
|
|
||||||
wgpu::Buffer vertexBuffer = CreateBuffer(3 * kFloat32x4Stride);
|
wgpu::Buffer vertexBuffer = CreateBuffer(3 * kFloat32x4Stride);
|
||||||
|
|
||||||
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, 0}};
|
{
|
||||||
TestRenderPassDraw(pipeline, vertexBufferList, 3, 1, 0, 0, true);
|
// Implicit size
|
||||||
|
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, wgpu::kWholeSize}};
|
||||||
|
TestRenderPassDraw(pipeline, vertexBufferList, 3, 1, 0, 0, true);
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
// Explicit zero size
|
||||||
|
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, 0}};
|
||||||
|
// size=0 used as default size is deprecated but still avaliable.
|
||||||
|
// TODO(dawn:1058): Change the expectation when size=0 special case is removed.
|
||||||
|
EXPECT_DEPRECATION_WARNING(
|
||||||
|
TestRenderPassDraw(pipeline, vertexBufferList, 3, 1, 0, 0, true));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Verify vertex buffer OOB for non-instanced Draw are caught in command encoder
|
// Verify vertex buffer OOB for non-instanced Draw are caught in command encoder
|
||||||
@ -419,7 +435,7 @@ namespace {
|
|||||||
|
|
||||||
// Build vertex buffer for 3 vertices
|
// Build vertex buffer for 3 vertices
|
||||||
wgpu::Buffer vertexBuffer = CreateBuffer(3 * kFloat32x4Stride);
|
wgpu::Buffer vertexBuffer = CreateBuffer(3 * kFloat32x4Stride);
|
||||||
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, 0}};
|
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, wgpu::kWholeSize}};
|
||||||
|
|
||||||
IndexBufferDesc indexBufferDesc = {indexBuffer, wgpu::IndexFormat::Uint32};
|
IndexBufferDesc indexBufferDesc = {indexBuffer, wgpu::IndexFormat::Uint32};
|
||||||
|
|
||||||
@ -440,8 +456,8 @@ namespace {
|
|||||||
// Build vertex buffer for 5 instances
|
// Build vertex buffer for 5 instances
|
||||||
wgpu::Buffer instanceBuffer = CreateBuffer(5 * kFloat32x2Stride);
|
wgpu::Buffer instanceBuffer = CreateBuffer(5 * kFloat32x2Stride);
|
||||||
|
|
||||||
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, 0},
|
VertexBufferList vertexBufferList = {{0, vertexBuffer, 0, wgpu::kWholeSize},
|
||||||
{1, instanceBuffer, 0, 0}};
|
{1, instanceBuffer, 0, wgpu::kWholeSize}};
|
||||||
|
|
||||||
IndexBufferDesc indexBufferDesc = {indexBuffer, params.indexFormat,
|
IndexBufferDesc indexBufferDesc = {indexBuffer, params.indexFormat,
|
||||||
params.indexBufferOffsetForEncoder,
|
params.indexBufferOffsetForEncoder,
|
||||||
@ -528,33 +544,33 @@ namespace {
|
|||||||
// indicate that such buffer parameter will cause OOB.
|
// indicate that such buffer parameter will cause OOB.
|
||||||
const std::vector<VertexBufferParams> kVertexParamsListForZeroStride = {
|
const std::vector<VertexBufferParams> kVertexParamsListForZeroStride = {
|
||||||
// Control case
|
// Control case
|
||||||
{0, 28, 0, 0, 1},
|
{0, 28, 0, wgpu::kWholeSize, 1},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{0, 28, 4, 0, 0},
|
{0, 28, 4, wgpu::kWholeSize, 0},
|
||||||
{0, 28, 28, 0, 0},
|
{0, 28, 28, wgpu::kWholeSize, 0},
|
||||||
// Non-zero size
|
// Non-default size
|
||||||
{0, 28, 0, 28, 1},
|
{0, 28, 0, 28, 1},
|
||||||
{0, 28, 0, 27, 0},
|
{0, 28, 0, 27, 0},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{0, 32, 4, 28, 1},
|
{0, 32, 4, 28, 1},
|
||||||
{0, 31, 4, 27, 0},
|
{0, 31, 4, 27, 0},
|
||||||
{0, 31, 4, 0, 0},
|
{0, 31, 4, wgpu::kWholeSize, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
const std::vector<VertexBufferParams> kInstanceParamsListForZeroStride = {
|
const std::vector<VertexBufferParams> kInstanceParamsListForZeroStride = {
|
||||||
// Control case
|
// Control case
|
||||||
{0, 20, 0, 0, 1},
|
{0, 20, 0, wgpu::kWholeSize, 1},
|
||||||
// Non-zero offset
|
// Non-zero offset
|
||||||
{0, 24, 4, 0, 1},
|
{0, 24, 4, wgpu::kWholeSize, 1},
|
||||||
{0, 20, 4, 0, 0},
|
{0, 23, 4, wgpu::kWholeSize, 0},
|
||||||
{0, 20, 20, 0, 0},
|
{0, 20, 4, wgpu::kWholeSize, 0},
|
||||||
// Non-zero size
|
{0, 20, 20, wgpu::kWholeSize, 0},
|
||||||
|
// Non-default size
|
||||||
{0, 21, 0, 20, 1},
|
{0, 21, 0, 20, 1},
|
||||||
{0, 20, 0, 19, 0},
|
{0, 20, 0, 19, 0},
|
||||||
// Non-zero offset and size
|
// Non-zero offset and size
|
||||||
{0, 30, 4, 20, 1},
|
{0, 30, 4, 20, 1},
|
||||||
{0, 30, 4, 19, 0},
|
{0, 30, 4, 19, 0},
|
||||||
{0, 23, 4, 0, 0},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// Build a pipeline that require a vertex step mode vertex buffer no smaller than 28 bytes
|
// Build a pipeline that require a vertex step mode vertex buffer no smaller than 28 bytes
|
||||||
@ -617,10 +633,10 @@ namespace {
|
|||||||
wgpu::RenderPipeline pipeline = CreateBasicRenderPipelineWithInstance();
|
wgpu::RenderPipeline pipeline = CreateBasicRenderPipelineWithInstance();
|
||||||
|
|
||||||
// Set to vertexBuffer3 and instanceBuffer5 at last
|
// Set to vertexBuffer3 and instanceBuffer5 at last
|
||||||
VertexBufferList vertexBufferList = {{0, vertexBuffer2, 0, 0},
|
VertexBufferList vertexBufferList = {{0, vertexBuffer2, 0, wgpu::kWholeSize},
|
||||||
{1, instanceBuffer4, 0, 0},
|
{1, instanceBuffer4, 0, wgpu::kWholeSize},
|
||||||
{1, instanceBuffer5, 0, 0},
|
{1, instanceBuffer5, 0, wgpu::kWholeSize},
|
||||||
{0, vertexBuffer3, 0, 0}};
|
{0, vertexBuffer3, 0, wgpu::kWholeSize}};
|
||||||
|
|
||||||
// For Draw, the max vertexCount is 3 and the max instanceCount is 5
|
// For Draw, the max vertexCount is 3 and the max instanceCount is 5
|
||||||
TestRenderPassDraw(pipeline, vertexBufferList, 3, 5, 0, 0, true);
|
TestRenderPassDraw(pipeline, vertexBufferList, 3, 5, 0, 0, true);
|
||||||
@ -633,10 +649,10 @@ namespace {
|
|||||||
6, 0, 0, 0, false);
|
6, 0, 0, 0, false);
|
||||||
|
|
||||||
// Set to vertexBuffer2 and instanceBuffer4 at last
|
// Set to vertexBuffer2 and instanceBuffer4 at last
|
||||||
vertexBufferList = VertexBufferList{{0, vertexBuffer3, 0, 0},
|
vertexBufferList = VertexBufferList{{0, vertexBuffer3, 0, wgpu::kWholeSize},
|
||||||
{1, instanceBuffer5, 0, 0},
|
{1, instanceBuffer5, 0, wgpu::kWholeSize},
|
||||||
{0, vertexBuffer2, 0, 0},
|
{0, vertexBuffer2, 0, wgpu::kWholeSize},
|
||||||
{1, instanceBuffer4, 0, 0}};
|
{1, instanceBuffer4, 0, wgpu::kWholeSize}};
|
||||||
|
|
||||||
// For Draw, the max vertexCount is 2 and the max instanceCount is 4
|
// For Draw, the max vertexCount is 2 and the max instanceCount is 4
|
||||||
TestRenderPassDraw(pipeline, vertexBufferList, 2, 4, 0, 0, true);
|
TestRenderPassDraw(pipeline, vertexBufferList, 2, 4, 0, 0, true);
|
||||||
@ -653,8 +669,6 @@ namespace {
|
|||||||
{
|
{
|
||||||
wgpu::RenderPipeline pipeline = CreateBasicRenderPipeline();
|
wgpu::RenderPipeline pipeline = CreateBasicRenderPipeline();
|
||||||
|
|
||||||
VertexBufferList vertexBufferList = {{0, vertexBuffer3, 0, 0}};
|
|
||||||
|
|
||||||
{
|
{
|
||||||
wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder encoder = device.CreateCommandEncoder();
|
||||||
wgpu::RenderPassEncoder renderPassEncoder =
|
wgpu::RenderPassEncoder renderPassEncoder =
|
||||||
@ -665,7 +679,7 @@ namespace {
|
|||||||
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
||||||
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
||||||
|
|
||||||
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3, 0, 0);
|
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
|
||||||
// It should be ok to draw 12 index
|
// It should be ok to draw 12 index
|
||||||
renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
|
renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
|
||||||
renderPassEncoder.EndPass();
|
renderPassEncoder.EndPass();
|
||||||
@ -684,7 +698,7 @@ namespace {
|
|||||||
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
||||||
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
||||||
|
|
||||||
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3, 0, 0);
|
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
|
||||||
// It should be index buffer OOB to draw 13 index
|
// It should be index buffer OOB to draw 13 index
|
||||||
renderPassEncoder.DrawIndexed(13, 1, 0, 0, 0);
|
renderPassEncoder.DrawIndexed(13, 1, 0, 0, 0);
|
||||||
renderPassEncoder.EndPass();
|
renderPassEncoder.EndPass();
|
||||||
@ -703,7 +717,7 @@ namespace {
|
|||||||
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
||||||
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
||||||
|
|
||||||
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3, 0, 0);
|
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
|
||||||
// It should be ok to draw 11 index
|
// It should be ok to draw 11 index
|
||||||
renderPassEncoder.DrawIndexed(11, 1, 0, 0, 0);
|
renderPassEncoder.DrawIndexed(11, 1, 0, 0, 0);
|
||||||
renderPassEncoder.EndPass();
|
renderPassEncoder.EndPass();
|
||||||
@ -722,7 +736,7 @@ namespace {
|
|||||||
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer12, indexFormat);
|
||||||
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
renderPassEncoder.SetIndexBuffer(indexBuffer11, indexFormat);
|
||||||
|
|
||||||
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3, 0, 0);
|
renderPassEncoder.SetVertexBuffer(0, vertexBuffer3);
|
||||||
// It should be index buffer OOB to draw 12 index
|
// It should be index buffer OOB to draw 12 index
|
||||||
renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
|
renderPassEncoder.DrawIndexed(12, 1, 0, 0, 0);
|
||||||
renderPassEncoder.EndPass();
|
renderPassEncoder.EndPass();
|
||||||
|
@ -73,11 +73,11 @@ TEST_F(IndexBufferValidationTest, IndexBufferOffsetOOBValidation) {
|
|||||||
// Explicit size
|
// Explicit size
|
||||||
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 256);
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 256);
|
||||||
// Implicit size
|
// Implicit size
|
||||||
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 0);
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, wgpu::kWholeSize);
|
||||||
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256 - 4, 0);
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256 - 4, wgpu::kWholeSize);
|
||||||
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, 0);
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, wgpu::kWholeSize);
|
||||||
// Implicit size of zero
|
// Implicit size of zero
|
||||||
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256, 0);
|
pass.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256, wgpu::kWholeSize);
|
||||||
pass.EndPass();
|
pass.EndPass();
|
||||||
encoder.Finish();
|
encoder.Finish();
|
||||||
}
|
}
|
||||||
@ -110,11 +110,11 @@ TEST_F(IndexBufferValidationTest, IndexBufferOffsetOOBValidation) {
|
|||||||
// Explicit size
|
// Explicit size
|
||||||
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 256);
|
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 256);
|
||||||
// Implicit size
|
// Implicit size
|
||||||
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, 0);
|
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 0, wgpu::kWholeSize);
|
||||||
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256 - 4, 0);
|
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256 - 4, wgpu::kWholeSize);
|
||||||
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, 0);
|
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 4, wgpu::kWholeSize);
|
||||||
// Implicit size of zero
|
// Implicit size of zero
|
||||||
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256, 0);
|
encoder.SetIndexBuffer(buffer, wgpu::IndexFormat::Uint32, 256, wgpu::kWholeSize);
|
||||||
encoder.Finish();
|
encoder.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,11 +228,11 @@ TEST_F(VertexBufferValidationTest, VertexBufferOffsetOOBValidation) {
|
|||||||
// Explicit size
|
// Explicit size
|
||||||
pass.SetVertexBuffer(0, buffer, 0, 256);
|
pass.SetVertexBuffer(0, buffer, 0, 256);
|
||||||
// Implicit size
|
// Implicit size
|
||||||
pass.SetVertexBuffer(0, buffer, 0, 0);
|
pass.SetVertexBuffer(0, buffer, 0, wgpu::kWholeSize);
|
||||||
pass.SetVertexBuffer(0, buffer, 256 - 4, 0);
|
pass.SetVertexBuffer(0, buffer, 256 - 4, wgpu::kWholeSize);
|
||||||
pass.SetVertexBuffer(0, buffer, 4, 0);
|
pass.SetVertexBuffer(0, buffer, 4, wgpu::kWholeSize);
|
||||||
// Implicit size of zero
|
// Implicit size of zero
|
||||||
pass.SetVertexBuffer(0, buffer, 256, 0);
|
pass.SetVertexBuffer(0, buffer, 256, wgpu::kWholeSize);
|
||||||
pass.EndPass();
|
pass.EndPass();
|
||||||
encoder.Finish();
|
encoder.Finish();
|
||||||
}
|
}
|
||||||
@ -265,11 +265,11 @@ TEST_F(VertexBufferValidationTest, VertexBufferOffsetOOBValidation) {
|
|||||||
// Explicit size
|
// Explicit size
|
||||||
encoder.SetVertexBuffer(0, buffer, 0, 256);
|
encoder.SetVertexBuffer(0, buffer, 0, 256);
|
||||||
// Implicit size
|
// Implicit size
|
||||||
encoder.SetVertexBuffer(0, buffer, 0, 0);
|
encoder.SetVertexBuffer(0, buffer, 0, wgpu::kWholeSize);
|
||||||
encoder.SetVertexBuffer(0, buffer, 256 - 4, 0);
|
encoder.SetVertexBuffer(0, buffer, 256 - 4, wgpu::kWholeSize);
|
||||||
encoder.SetVertexBuffer(0, buffer, 4, 0);
|
encoder.SetVertexBuffer(0, buffer, 4, wgpu::kWholeSize);
|
||||||
// Implicit size of zero
|
// Implicit size of zero
|
||||||
encoder.SetVertexBuffer(0, buffer, 256, 0);
|
encoder.SetVertexBuffer(0, buffer, 256, wgpu::kWholeSize);
|
||||||
encoder.Finish();
|
encoder.Finish();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user