mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-05 12:46:11 +00:00
Update SetBindGroup dynamic offsets to uint32_t
In WebGPU these are uint32_t because Vulkan accepts at most a 32-bit unsigned integer. Bug: dawn:22 Change-Id: Ia61cd710f80c19135ac215a9a93ef9a8f683bac2 Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/12942 Reviewed-by: Kai Ninomiya <kainino@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Austin Eng <enga@chromium.org>
This commit is contained in:
parent
c5e06a5d9f
commit
314fd3513d
@ -396,7 +396,7 @@
|
|||||||
{"name": "group index", "type": "uint32_t"},
|
{"name": "group index", "type": "uint32_t"},
|
||||||
{"name": "group", "type": "bind group"},
|
{"name": "group", "type": "bind group"},
|
||||||
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
||||||
{"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
{"name": "dynamic offsets", "type": "uint32_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -834,7 +834,7 @@
|
|||||||
{"name": "group index", "type": "uint32_t"},
|
{"name": "group index", "type": "uint32_t"},
|
||||||
{"name": "group", "type": "bind group"},
|
{"name": "group", "type": "bind group"},
|
||||||
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
||||||
{"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
{"name": "dynamic offsets", "type": "uint32_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -980,7 +980,7 @@
|
|||||||
{"name": "group index", "type": "uint32_t"},
|
{"name": "group index", "type": "uint32_t"},
|
||||||
{"name": "group", "type": "bind group"},
|
{"name": "group", "type": "bind group"},
|
||||||
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
{"name": "dynamic offset count", "type": "uint32_t", "default": "0"},
|
||||||
{"name": "dynamic offsets", "type": "uint64_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
{"name": "dynamic offsets", "type": "uint32_t", "annotation": "const*", "length": "dynamic offset count", "optional": true}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -159,7 +159,7 @@ void frame() {
|
|||||||
pass.SetPipeline(pipeline);
|
pass.SetPipeline(pipeline);
|
||||||
|
|
||||||
for (size_t i = 0; i < kNumTriangles; i++) {
|
for (size_t i = 0; i < kNumTriangles; i++) {
|
||||||
uint64_t offset = i * sizeof(ShaderData);
|
uint32_t offset = i * sizeof(ShaderData);
|
||||||
pass.SetBindGroup(0, bindGroup, 1, &offset);
|
pass.SetBindGroup(0, bindGroup, 1, &offset);
|
||||||
pass.Draw(3, 1, 0, 0);
|
pass.Draw(3, 1, 0, 0);
|
||||||
}
|
}
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
namespace dawn_native {
|
namespace dawn_native {
|
||||||
|
|
||||||
// Extends BindGroupTrackerBase to also keep track of resources that need a usage transition.
|
// Extends BindGroupTrackerBase to also keep track of resources that need a usage transition.
|
||||||
template <bool CanInheritBindGroups, typename DynamicOffset = uint64_t>
|
template <bool CanInheritBindGroups, typename DynamicOffset>
|
||||||
class BindGroupAndStorageBarrierTrackerBase
|
class BindGroupAndStorageBarrierTrackerBase
|
||||||
: public BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset> {
|
: public BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset> {
|
||||||
using Base = BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset>;
|
using Base = BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset>;
|
||||||
@ -33,7 +33,7 @@ namespace dawn_native {
|
|||||||
void OnSetBindGroup(uint32_t index,
|
void OnSetBindGroup(uint32_t index,
|
||||||
BindGroupBase* bindGroup,
|
BindGroupBase* bindGroup,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
uint64_t* dynamicOffsets) {
|
uint32_t* dynamicOffsets) {
|
||||||
if (this->mBindGroups[index] != bindGroup) {
|
if (this->mBindGroups[index] != bindGroup) {
|
||||||
mBuffers[index] = {};
|
mBuffers[index] = {};
|
||||||
mBuffersNeedingBarrier[index] = {};
|
mBuffersNeedingBarrier[index] = {};
|
||||||
|
@ -29,13 +29,13 @@ namespace dawn_native {
|
|||||||
// pipeline state or it changes.
|
// pipeline state or it changes.
|
||||||
// |DynamicOffset| is a template parameter because offsets in Vulkan are uint32_t but uint64_t
|
// |DynamicOffset| is a template parameter because offsets in Vulkan are uint32_t but uint64_t
|
||||||
// in other backends.
|
// in other backends.
|
||||||
template <bool CanInheritBindGroups, typename DynamicOffset = uint64_t>
|
template <bool CanInheritBindGroups, typename DynamicOffset>
|
||||||
class BindGroupTrackerBase {
|
class BindGroupTrackerBase {
|
||||||
public:
|
public:
|
||||||
void OnSetBindGroup(uint32_t index,
|
void OnSetBindGroup(uint32_t index,
|
||||||
BindGroupBase* bindGroup,
|
BindGroupBase* bindGroup,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
uint64_t* dynamicOffsets) {
|
uint32_t* dynamicOffsets) {
|
||||||
ASSERT(index < kMaxBindGroups);
|
ASSERT(index < kMaxBindGroups);
|
||||||
|
|
||||||
if (mBindGroupLayoutsMask[index]) {
|
if (mBindGroupLayoutsMask[index]) {
|
||||||
@ -113,21 +113,20 @@ namespace dawn_native {
|
|||||||
PipelineLayoutBase* mLastAppliedPipelineLayout = nullptr;
|
PipelineLayoutBase* mLastAppliedPipelineLayout = nullptr;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// Vulkan backend use uint32_t as dynamic offsets type, it is not correct.
|
// We have two overloads here because offsets in Vulkan are uint32_t but uint64_t
|
||||||
// Vulkan should use VkDeviceSize. Dawn vulkan backend has to handle this.
|
// in other backends.
|
||||||
static void SetDynamicOffsets(uint32_t* data,
|
static void SetDynamicOffsets(uint64_t* data,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
uint64_t* dynamicOffsets) {
|
uint32_t* dynamicOffsets) {
|
||||||
for (uint32_t i = 0; i < dynamicOffsetCount; ++i) {
|
for (uint32_t i = 0; i < dynamicOffsetCount; ++i) {
|
||||||
ASSERT(dynamicOffsets[i] <= std::numeric_limits<uint32_t>::max());
|
data[i] = static_cast<uint64_t>(dynamicOffsets[i]);
|
||||||
data[i] = static_cast<uint32_t>(dynamicOffsets[i]);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void SetDynamicOffsets(uint64_t* data,
|
static void SetDynamicOffsets(uint32_t* data,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
uint64_t* dynamicOffsets) {
|
uint32_t* dynamicOffsets) {
|
||||||
memcpy(data, dynamicOffsets, sizeof(uint64_t) * dynamicOffsetCount);
|
memcpy(data, dynamicOffsets, sizeof(uint32_t) * dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -122,7 +122,7 @@ namespace dawn_native {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackBindGroupResourceUsage(cmd->group.Get(), usageTracker);
|
TrackBindGroupResourceUsage(cmd->group.Get(), usageTracker);
|
||||||
@ -339,7 +339,7 @@ namespace dawn_native {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
TrackBindGroupResourceUsage(cmd->group.Get(), &usageTracker);
|
TrackBindGroupResourceUsage(cmd->group.Get(), &usageTracker);
|
||||||
|
@ -136,7 +136,7 @@ namespace dawn_native {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
cmd->~SetBindGroupCmd();
|
cmd->~SetBindGroupCmd();
|
||||||
} break;
|
} break;
|
||||||
|
@ -73,7 +73,7 @@ namespace dawn_native {
|
|||||||
void ProgrammablePassEncoder::SetBindGroup(uint32_t groupIndex,
|
void ProgrammablePassEncoder::SetBindGroup(uint32_t groupIndex,
|
||||||
BindGroupBase* group,
|
BindGroupBase* group,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
const uint64_t* dynamicOffsets) {
|
const uint32_t* dynamicOffsets) {
|
||||||
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
||||||
DAWN_TRY(GetDevice()->ValidateObject(group));
|
DAWN_TRY(GetDevice()->ValidateObject(group));
|
||||||
|
|
||||||
@ -111,8 +111,8 @@ namespace dawn_native {
|
|||||||
cmd->group = group;
|
cmd->group = group;
|
||||||
cmd->dynamicOffsetCount = dynamicOffsetCount;
|
cmd->dynamicOffsetCount = dynamicOffsetCount;
|
||||||
if (dynamicOffsetCount > 0) {
|
if (dynamicOffsetCount > 0) {
|
||||||
uint64_t* offsets = allocator->AllocateData<uint64_t>(cmd->dynamicOffsetCount);
|
uint32_t* offsets = allocator->AllocateData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
memcpy(offsets, dynamicOffsets, dynamicOffsetCount * sizeof(uint64_t));
|
memcpy(offsets, dynamicOffsets, dynamicOffsetCount * sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
return {};
|
return {};
|
||||||
|
@ -38,7 +38,7 @@ namespace dawn_native {
|
|||||||
void SetBindGroup(uint32_t groupIndex,
|
void SetBindGroup(uint32_t groupIndex,
|
||||||
BindGroupBase* group,
|
BindGroupBase* group,
|
||||||
uint32_t dynamicOffsetCount,
|
uint32_t dynamicOffsetCount,
|
||||||
const uint64_t* dynamicOffsets);
|
const uint32_t* dynamicOffsets);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
// Construct an "error" programmable pass encoder.
|
// Construct an "error" programmable pass encoder.
|
||||||
|
@ -73,7 +73,7 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
|
|
||||||
} // anonymous namespace
|
} // anonymous namespace
|
||||||
|
|
||||||
class BindGroupStateTracker : public BindGroupAndStorageBarrierTrackerBase<false> {
|
class BindGroupStateTracker : public BindGroupAndStorageBarrierTrackerBase<false, uint64_t> {
|
||||||
public:
|
public:
|
||||||
BindGroupStateTracker(Device* device)
|
BindGroupStateTracker(Device* device)
|
||||||
: BindGroupAndStorageBarrierTrackerBase(), mDevice(device) {
|
: BindGroupAndStorageBarrierTrackerBase(), mDevice(device) {
|
||||||
@ -493,7 +493,7 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||||
BindGroup* group = ToBackend(cmd->group.Get());
|
BindGroup* group = ToBackend(cmd->group.Get());
|
||||||
if (cmd->dynamicOffsetCount) {
|
if (cmd->dynamicOffsetCount) {
|
||||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
bindingTracker->TrackSetBindGroup(group, cmd->index, indexInSubmit);
|
bindingTracker->TrackSetBindGroup(group, cmd->index, indexInSubmit);
|
||||||
} break;
|
} break;
|
||||||
@ -860,10 +860,10 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||||
BindGroup* group = ToBackend(cmd->group.Get());
|
BindGroup* group = ToBackend(cmd->group.Get());
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
|
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = mCommands.NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = mCommands.NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindingTracker->OnSetBindGroup(cmd->index, group, cmd->dynamicOffsetCount,
|
bindingTracker->OnSetBindGroup(cmd->index, group, cmd->dynamicOffsetCount,
|
||||||
@ -1154,10 +1154,10 @@ namespace dawn_native { namespace d3d12 {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||||
BindGroup* group = ToBackend(cmd->group.Get());
|
BindGroup* group = ToBackend(cmd->group.Get());
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
|
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = iter->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = iter->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindingTracker->OnSetBindGroup(cmd->index, group, cmd->dynamicOffsetCount,
|
bindingTracker->OnSetBindGroup(cmd->index, group, cmd->dynamicOffsetCount,
|
||||||
|
@ -394,7 +394,7 @@ namespace dawn_native { namespace metal {
|
|||||||
// pipeline state.
|
// pipeline state.
|
||||||
// Bind groups may be inherited because bind groups are packed in the buffer /
|
// Bind groups may be inherited because bind groups are packed in the buffer /
|
||||||
// texture tables in contiguous order.
|
// texture tables in contiguous order.
|
||||||
class BindGroupTracker : public BindGroupTrackerBase<true> {
|
class BindGroupTracker : public BindGroupTrackerBase<true, uint64_t> {
|
||||||
public:
|
public:
|
||||||
explicit BindGroupTracker(StorageBufferLengthTracker* lengthTracker)
|
explicit BindGroupTracker(StorageBufferLengthTracker* lengthTracker)
|
||||||
: BindGroupTrackerBase(), mLengthTracker(lengthTracker) {
|
: BindGroupTrackerBase(), mLengthTracker(lengthTracker) {
|
||||||
@ -764,9 +764,9 @@ namespace dawn_native { namespace metal {
|
|||||||
|
|
||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = mCommands.NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = mCommands.NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindGroups.OnSetBindGroup(cmd->index, ToBackend(cmd->group.Get()),
|
bindGroups.OnSetBindGroup(cmd->index, ToBackend(cmd->group.Get()),
|
||||||
@ -1026,9 +1026,9 @@ namespace dawn_native { namespace metal {
|
|||||||
|
|
||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = iter->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = iter->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
bindGroups.OnSetBindGroup(cmd->index, ToBackend(cmd->group.Get()),
|
bindGroups.OnSetBindGroup(cmd->index, ToBackend(cmd->group.Get()),
|
||||||
|
@ -210,7 +210,7 @@ namespace dawn_native { namespace opengl {
|
|||||||
RenderPipelineBase* mLastPipeline = nullptr;
|
RenderPipelineBase* mLastPipeline = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BindGroupTracker : public BindGroupTrackerBase<false> {
|
class BindGroupTracker : public BindGroupTrackerBase<false, uint64_t> {
|
||||||
public:
|
public:
|
||||||
void OnSetPipeline(RenderPipeline* pipeline) {
|
void OnSetPipeline(RenderPipeline* pipeline) {
|
||||||
BindGroupTrackerBase::OnSetPipeline(pipeline);
|
BindGroupTrackerBase::OnSetPipeline(pipeline);
|
||||||
@ -666,9 +666,9 @@ namespace dawn_native { namespace opengl {
|
|||||||
|
|
||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = mCommands.NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = mCommands.NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
bindGroupTracker.OnSetBindGroup(cmd->index, cmd->group.Get(),
|
bindGroupTracker.OnSetBindGroup(cmd->index, cmd->group.Get(),
|
||||||
cmd->dynamicOffsetCount, dynamicOffsets);
|
cmd->dynamicOffsetCount, dynamicOffsets);
|
||||||
@ -954,9 +954,9 @@ namespace dawn_native { namespace opengl {
|
|||||||
|
|
||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = iter->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = iter->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
bindGroupTracker.OnSetBindGroup(cmd->index, cmd->group.Get(),
|
bindGroupTracker.OnSetBindGroup(cmd->index, cmd->group.Get(),
|
||||||
cmd->dynamicOffsetCount, dynamicOffsets);
|
cmd->dynamicOffsetCount, dynamicOffsets);
|
||||||
|
@ -645,9 +645,9 @@ namespace dawn_native { namespace vulkan {
|
|||||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||||
|
|
||||||
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = mCommands.NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = mCommands.NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
descriptorSets.OnSetBindGroup(cmd->index, bindGroup, cmd->dynamicOffsetCount,
|
descriptorSets.OnSetBindGroup(cmd->index, bindGroup, cmd->dynamicOffsetCount,
|
||||||
@ -850,9 +850,9 @@ namespace dawn_native { namespace vulkan {
|
|||||||
case Command::SetBindGroup: {
|
case Command::SetBindGroup: {
|
||||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||||
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
||||||
uint64_t* dynamicOffsets = nullptr;
|
uint32_t* dynamicOffsets = nullptr;
|
||||||
if (cmd->dynamicOffsetCount > 0) {
|
if (cmd->dynamicOffsetCount > 0) {
|
||||||
dynamicOffsets = iter->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
dynamicOffsets = iter->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
descriptorSets.OnSetBindGroup(cmd->index, bindGroup, cmd->dynamicOffsetCount,
|
descriptorSets.OnSetBindGroup(cmd->index, bindGroup, cmd->dynamicOffsetCount,
|
||||||
|
@ -571,7 +571,7 @@ TEST_P(BindGroupTests, SetDynamicBindGroupBeforePipeline) {
|
|||||||
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
|
|
||||||
// Set the first dynamic bind group.
|
// Set the first dynamic bind group.
|
||||||
uint64_t dynamicOffset = 0;
|
uint32_t dynamicOffset = 0;
|
||||||
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
||||||
|
|
||||||
// Set the second dynamic bind group.
|
// Set the second dynamic bind group.
|
||||||
@ -645,7 +645,7 @@ TEST_P(BindGroupTests, BindGroupsPersistAfterPipelineChange) {
|
|||||||
|
|
||||||
// Set the first bind group at a dynamic offset.
|
// Set the first bind group at a dynamic offset.
|
||||||
// This bind group matches the slot in the pipeline layout.
|
// This bind group matches the slot in the pipeline layout.
|
||||||
uint64_t dynamicOffset = 0;
|
uint32_t dynamicOffset = 0;
|
||||||
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
||||||
|
|
||||||
// Set the second bind group at a dynamic offset.
|
// Set the second bind group at a dynamic offset.
|
||||||
@ -740,7 +740,7 @@ TEST_P(BindGroupTests, DrawThenChangePipelineAndBindGroup) {
|
|||||||
pass.SetPipeline(pipeline0);
|
pass.SetPipeline(pipeline0);
|
||||||
|
|
||||||
// Set the first bind group to color0 in the dynamic uniform buffer.
|
// Set the first bind group to color0 in the dynamic uniform buffer.
|
||||||
uint64_t dynamicOffset = 0;
|
uint32_t dynamicOffset = 0;
|
||||||
pass.SetBindGroup(0, uniformBindGroup, 1, &dynamicOffset);
|
pass.SetBindGroup(0, uniformBindGroup, 1, &dynamicOffset);
|
||||||
|
|
||||||
// Set the first bind group to color1 in the dynamic uniform buffer.
|
// Set the first bind group to color1 in the dynamic uniform buffer.
|
||||||
|
@ -216,7 +216,7 @@ TEST_P(DynamicBufferOffsetTests, BasicRenderPipeline) {
|
|||||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
std::array<uint64_t, 2> offsets = {0, 0};
|
std::array<uint32_t, 2> offsets = {0, 0};
|
||||||
wgpu::RenderPassEncoder renderPassEncoder =
|
wgpu::RenderPassEncoder renderPassEncoder =
|
||||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
renderPassEncoder.SetPipeline(pipeline);
|
renderPassEncoder.SetPipeline(pipeline);
|
||||||
@ -237,7 +237,7 @@ TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsRenderPipeline) {
|
|||||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
wgpu::RenderPassEncoder renderPassEncoder =
|
wgpu::RenderPassEncoder renderPassEncoder =
|
||||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
@ -258,7 +258,7 @@ TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsRenderPipeline) {
|
|||||||
TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
|
TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
|
||||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||||
|
|
||||||
std::array<uint64_t, 2> offsets = {0, 0};
|
std::array<uint32_t, 2> offsets = {0, 0};
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
||||||
@ -277,7 +277,7 @@ TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
|
|||||||
TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsComputePipeline) {
|
TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsComputePipeline) {
|
||||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||||
|
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
@ -303,7 +303,7 @@ TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsRenderPipeline) {
|
|||||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
wgpu::RenderPassEncoder renderPassEncoder =
|
wgpu::RenderPassEncoder renderPassEncoder =
|
||||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
@ -332,7 +332,7 @@ TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsComputePipeline) {
|
|||||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||||
wgpu::ComputePipeline testPipeline = CreateComputePipeline(true);
|
wgpu::ComputePipeline testPipeline = CreateComputePipeline(true);
|
||||||
|
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
@ -360,9 +360,9 @@ TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffestsMultipleTimesRenderPipeline
|
|||||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
std::array<uint64_t, 2> testOffsets = {0, 0};
|
std::array<uint32_t, 2> testOffsets = {0, 0};
|
||||||
|
|
||||||
wgpu::RenderPassEncoder renderPassEncoder =
|
wgpu::RenderPassEncoder renderPassEncoder =
|
||||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||||
@ -384,9 +384,9 @@ TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffestsMultipleTimesRenderPipeline
|
|||||||
TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffsetsMultipleTimesComputePipeline) {
|
TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffsetsMultipleTimesComputePipeline) {
|
||||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||||
|
|
||||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||||
kMinDynamicBufferOffsetAlignment};
|
kMinDynamicBufferOffsetAlignment};
|
||||||
std::array<uint64_t, 2> testOffsets = {0, 0};
|
std::array<uint32_t, 2> testOffsets = {0, 0};
|
||||||
|
|
||||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||||
wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
||||||
|
@ -541,7 +541,7 @@ void DrawCallPerf::RecordRenderCommands(Encoder pass) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case BindGroup::Dynamic: {
|
case BindGroup::Dynamic: {
|
||||||
uint64_t dynamicOffset = static_cast<uint64_t>(i * mAlignedUniformSize);
|
uint32_t dynamicOffset = static_cast<uint32_t>(i * mAlignedUniformSize);
|
||||||
pass.SetBindGroup(uniformBindGroupIndex, mUniformBindGroups[0], 1, &dynamicOffset);
|
pass.SetBindGroup(uniformBindGroupIndex, mUniformBindGroups[0], 1, &dynamicOffset);
|
||||||
} break;
|
} break;
|
||||||
|
|
||||||
|
@ -693,7 +693,7 @@ class SetBindGroupValidationTest : public ValidationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TestRenderPassBindGroup(wgpu::BindGroup bindGroup,
|
void TestRenderPassBindGroup(wgpu::BindGroup bindGroup,
|
||||||
uint64_t* offsets,
|
uint32_t* offsets,
|
||||||
uint32_t count,
|
uint32_t count,
|
||||||
bool expectation) {
|
bool expectation) {
|
||||||
wgpu::RenderPipeline renderPipeline = CreateRenderPipeline();
|
wgpu::RenderPipeline renderPipeline = CreateRenderPipeline();
|
||||||
@ -713,7 +713,7 @@ class SetBindGroupValidationTest : public ValidationTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void TestComputePassBindGroup(wgpu::BindGroup bindGroup,
|
void TestComputePassBindGroup(wgpu::BindGroup bindGroup,
|
||||||
uint64_t* offsets,
|
uint32_t* offsets,
|
||||||
uint32_t count,
|
uint32_t count,
|
||||||
bool expectation) {
|
bool expectation) {
|
||||||
wgpu::ComputePipeline computePipeline = CreateComputePipeline();
|
wgpu::ComputePipeline computePipeline = CreateComputePipeline();
|
||||||
@ -741,7 +741,7 @@ TEST_F(SetBindGroupValidationTest, Basic) {
|
|||||||
device, mBindGroupLayout,
|
device, mBindGroupLayout,
|
||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
|
|
||||||
std::array<uint64_t, 2> offsets = {256, 0};
|
std::array<uint32_t, 2> offsets = {256, 0};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, true);
|
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, true);
|
||||||
|
|
||||||
@ -758,7 +758,7 @@ TEST_F(SetBindGroupValidationTest, DynamicOffsetsMismatch) {
|
|||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
|
|
||||||
// Number of offsets mismatch.
|
// Number of offsets mismatch.
|
||||||
std::array<uint64_t, 1> mismatchOffsets = {0};
|
std::array<uint32_t, 1> mismatchOffsets = {0};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, mismatchOffsets.data(), 1, false);
|
TestRenderPassBindGroup(bindGroup, mismatchOffsets.data(), 1, false);
|
||||||
|
|
||||||
@ -775,7 +775,7 @@ TEST_F(SetBindGroupValidationTest, DynamicOffsetsNotAligned) {
|
|||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
|
|
||||||
// Dynamic offsets are not aligned.
|
// Dynamic offsets are not aligned.
|
||||||
std::array<uint64_t, 2> notAlignedOffsets = {1, 2};
|
std::array<uint32_t, 2> notAlignedOffsets = {1, 2};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, notAlignedOffsets.data(), 2, false);
|
TestRenderPassBindGroup(bindGroup, notAlignedOffsets.data(), 2, false);
|
||||||
|
|
||||||
@ -792,7 +792,7 @@ TEST_F(SetBindGroupValidationTest, OffsetOutOfBoundDynamicUniformBuffer) {
|
|||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
|
|
||||||
// Dynamic offset + offset is larger than buffer size.
|
// Dynamic offset + offset is larger than buffer size.
|
||||||
std::array<uint64_t, 2> overFlowOffsets = {1024, 0};
|
std::array<uint32_t, 2> overFlowOffsets = {1024, 0};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, overFlowOffsets.data(), 2, false);
|
TestRenderPassBindGroup(bindGroup, overFlowOffsets.data(), 2, false);
|
||||||
|
|
||||||
@ -809,7 +809,7 @@ TEST_F(SetBindGroupValidationTest, OffsetOutOfBoundDynamicStorageBuffer) {
|
|||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
|
|
||||||
// Dynamic offset + offset is larger than buffer size.
|
// Dynamic offset + offset is larger than buffer size.
|
||||||
std::array<uint64_t, 2> overFlowOffsets = {0, 1024};
|
std::array<uint32_t, 2> overFlowOffsets = {0, 1024};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, overFlowOffsets.data(), 2, false);
|
TestRenderPassBindGroup(bindGroup, overFlowOffsets.data(), 2, false);
|
||||||
|
|
||||||
@ -827,7 +827,7 @@ TEST_F(SetBindGroupValidationTest, BindingSizeOutOfBoundDynamicUniformBuffer) {
|
|||||||
|
|
||||||
// Dynamic offset + offset isn't larger than buffer size.
|
// Dynamic offset + offset isn't larger than buffer size.
|
||||||
// But with binding size, it will trigger OOB error.
|
// But with binding size, it will trigger OOB error.
|
||||||
std::array<uint64_t, 2> offsets = {512, 0};
|
std::array<uint32_t, 2> offsets = {512, 0};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, false);
|
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, false);
|
||||||
|
|
||||||
@ -843,7 +843,7 @@ TEST_F(SetBindGroupValidationTest, BindingSizeOutOfBoundDynamicStorageBuffer) {
|
|||||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||||
// Dynamic offset + offset isn't larger than buffer size.
|
// Dynamic offset + offset isn't larger than buffer size.
|
||||||
// But with binding size, it will trigger OOB error.
|
// But with binding size, it will trigger OOB error.
|
||||||
std::array<uint64_t, 2> offsets = {0, 512};
|
std::array<uint32_t, 2> offsets = {0, 512};
|
||||||
|
|
||||||
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, false);
|
TestRenderPassBindGroup(bindGroup, offsets.data(), 2, false);
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ TEST_F(WireArgumentTests, ValueArrayArgument) {
|
|||||||
WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
|
WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, nullptr);
|
||||||
WGPUComputePassEncoder pass = wgpuCommandEncoderBeginComputePass(encoder, nullptr);
|
WGPUComputePassEncoder pass = wgpuCommandEncoderBeginComputePass(encoder, nullptr);
|
||||||
|
|
||||||
std::array<uint64_t, 4> testOffsets = {0, 42, 0xDEAD'BEEF'DEAD'BEEFu, 0xFFFF'FFFF'FFFF'FFFFu};
|
std::array<uint32_t, 4> testOffsets = {0, 42, 0xDEAD'BEEFu, 0xFFFF'FFFFu};
|
||||||
wgpuComputePassEncoderSetBindGroup(pass, 0, bindGroup, testOffsets.size(), testOffsets.data());
|
wgpuComputePassEncoderSetBindGroup(pass, 0, bindGroup, testOffsets.size(), testOffsets.data());
|
||||||
|
|
||||||
WGPUCommandEncoder apiEncoder = api.GetNewCommandEncoder();
|
WGPUCommandEncoder apiEncoder = api.GetNewCommandEncoder();
|
||||||
@ -82,7 +82,7 @@ TEST_F(WireArgumentTests, ValueArrayArgument) {
|
|||||||
|
|
||||||
EXPECT_CALL(api, ComputePassEncoderSetBindGroup(
|
EXPECT_CALL(api, ComputePassEncoderSetBindGroup(
|
||||||
apiPass, 0, apiBindGroup, testOffsets.size(),
|
apiPass, 0, apiBindGroup, testOffsets.size(),
|
||||||
MatchesLambda([testOffsets](const uint64_t* offsets) -> bool {
|
MatchesLambda([testOffsets](const uint32_t* offsets) -> bool {
|
||||||
for (size_t i = 0; i < testOffsets.size(); i++) {
|
for (size_t i = 0; i < testOffsets.size(); i++) {
|
||||||
if (offsets[i] != testOffsets[i]) {
|
if (offsets[i] != testOffsets[i]) {
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user