mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-07-05 04:36:02 +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", "type": "bind group"},
|
||||
{"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", "type": "bind group"},
|
||||
{"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", "type": "bind group"},
|
||||
{"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);
|
||||
|
||||
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.Draw(3, 1, 0, 0);
|
||||
}
|
||||
|
@ -22,7 +22,7 @@
|
||||
namespace dawn_native {
|
||||
|
||||
// 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
|
||||
: public BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset> {
|
||||
using Base = BindGroupTrackerBase<CanInheritBindGroups, DynamicOffset>;
|
||||
@ -33,7 +33,7 @@ namespace dawn_native {
|
||||
void OnSetBindGroup(uint32_t index,
|
||||
BindGroupBase* bindGroup,
|
||||
uint32_t dynamicOffsetCount,
|
||||
uint64_t* dynamicOffsets) {
|
||||
uint32_t* dynamicOffsets) {
|
||||
if (this->mBindGroups[index] != bindGroup) {
|
||||
mBuffers[index] = {};
|
||||
mBuffersNeedingBarrier[index] = {};
|
||||
|
@ -29,13 +29,13 @@ namespace dawn_native {
|
||||
// pipeline state or it changes.
|
||||
// |DynamicOffset| is a template parameter because offsets in Vulkan are uint32_t but uint64_t
|
||||
// in other backends.
|
||||
template <bool CanInheritBindGroups, typename DynamicOffset = uint64_t>
|
||||
template <bool CanInheritBindGroups, typename DynamicOffset>
|
||||
class BindGroupTrackerBase {
|
||||
public:
|
||||
void OnSetBindGroup(uint32_t index,
|
||||
BindGroupBase* bindGroup,
|
||||
uint32_t dynamicOffsetCount,
|
||||
uint64_t* dynamicOffsets) {
|
||||
uint32_t* dynamicOffsets) {
|
||||
ASSERT(index < kMaxBindGroups);
|
||||
|
||||
if (mBindGroupLayoutsMask[index]) {
|
||||
@ -113,21 +113,20 @@ namespace dawn_native {
|
||||
PipelineLayoutBase* mLastAppliedPipelineLayout = nullptr;
|
||||
|
||||
private:
|
||||
// Vulkan backend use uint32_t as dynamic offsets type, it is not correct.
|
||||
// Vulkan should use VkDeviceSize. Dawn vulkan backend has to handle this.
|
||||
static void SetDynamicOffsets(uint32_t* data,
|
||||
// We have two overloads here because offsets in Vulkan are uint32_t but uint64_t
|
||||
// in other backends.
|
||||
static void SetDynamicOffsets(uint64_t* data,
|
||||
uint32_t dynamicOffsetCount,
|
||||
uint64_t* dynamicOffsets) {
|
||||
uint32_t* dynamicOffsets) {
|
||||
for (uint32_t i = 0; i < dynamicOffsetCount; ++i) {
|
||||
ASSERT(dynamicOffsets[i] <= std::numeric_limits<uint32_t>::max());
|
||||
data[i] = static_cast<uint32_t>(dynamicOffsets[i]);
|
||||
data[i] = static_cast<uint64_t>(dynamicOffsets[i]);
|
||||
}
|
||||
}
|
||||
|
||||
static void SetDynamicOffsets(uint64_t* data,
|
||||
static void SetDynamicOffsets(uint32_t* data,
|
||||
uint32_t dynamicOffsetCount,
|
||||
uint64_t* dynamicOffsets) {
|
||||
memcpy(data, dynamicOffsets, sizeof(uint64_t) * dynamicOffsetCount);
|
||||
uint32_t* dynamicOffsets) {
|
||||
memcpy(data, dynamicOffsets, sizeof(uint32_t) * dynamicOffsetCount);
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -122,7 +122,7 @@ namespace dawn_native {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||
if (cmd->dynamicOffsetCount > 0) {
|
||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
||||
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||
}
|
||||
|
||||
TrackBindGroupResourceUsage(cmd->group.Get(), usageTracker);
|
||||
@ -339,7 +339,7 @@ namespace dawn_native {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||
if (cmd->dynamicOffsetCount > 0) {
|
||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
||||
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||
}
|
||||
|
||||
TrackBindGroupResourceUsage(cmd->group.Get(), &usageTracker);
|
||||
|
@ -136,7 +136,7 @@ namespace dawn_native {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||
if (cmd->dynamicOffsetCount > 0) {
|
||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
||||
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||
}
|
||||
cmd->~SetBindGroupCmd();
|
||||
} break;
|
||||
|
@ -73,7 +73,7 @@ namespace dawn_native {
|
||||
void ProgrammablePassEncoder::SetBindGroup(uint32_t groupIndex,
|
||||
BindGroupBase* group,
|
||||
uint32_t dynamicOffsetCount,
|
||||
const uint64_t* dynamicOffsets) {
|
||||
const uint32_t* dynamicOffsets) {
|
||||
mEncodingContext->TryEncode(this, [&](CommandAllocator* allocator) -> MaybeError {
|
||||
DAWN_TRY(GetDevice()->ValidateObject(group));
|
||||
|
||||
@ -111,8 +111,8 @@ namespace dawn_native {
|
||||
cmd->group = group;
|
||||
cmd->dynamicOffsetCount = dynamicOffsetCount;
|
||||
if (dynamicOffsetCount > 0) {
|
||||
uint64_t* offsets = allocator->AllocateData<uint64_t>(cmd->dynamicOffsetCount);
|
||||
memcpy(offsets, dynamicOffsets, dynamicOffsetCount * sizeof(uint64_t));
|
||||
uint32_t* offsets = allocator->AllocateData<uint32_t>(cmd->dynamicOffsetCount);
|
||||
memcpy(offsets, dynamicOffsets, dynamicOffsetCount * sizeof(uint32_t));
|
||||
}
|
||||
|
||||
return {};
|
||||
|
@ -38,7 +38,7 @@ namespace dawn_native {
|
||||
void SetBindGroup(uint32_t groupIndex,
|
||||
BindGroupBase* group,
|
||||
uint32_t dynamicOffsetCount,
|
||||
const uint64_t* dynamicOffsets);
|
||||
const uint32_t* dynamicOffsets);
|
||||
|
||||
protected:
|
||||
// Construct an "error" programmable pass encoder.
|
||||
|
@ -73,7 +73,7 @@ namespace dawn_native { namespace d3d12 {
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
class BindGroupStateTracker : public BindGroupAndStorageBarrierTrackerBase<false> {
|
||||
class BindGroupStateTracker : public BindGroupAndStorageBarrierTrackerBase<false, uint64_t> {
|
||||
public:
|
||||
BindGroupStateTracker(Device* device)
|
||||
: BindGroupAndStorageBarrierTrackerBase(), mDevice(device) {
|
||||
@ -493,7 +493,7 @@ namespace dawn_native { namespace d3d12 {
|
||||
SetBindGroupCmd* cmd = commands->NextCommand<SetBindGroupCmd>();
|
||||
BindGroup* group = ToBackend(cmd->group.Get());
|
||||
if (cmd->dynamicOffsetCount) {
|
||||
commands->NextData<uint64_t>(cmd->dynamicOffsetCount);
|
||||
commands->NextData<uint32_t>(cmd->dynamicOffsetCount);
|
||||
}
|
||||
bindingTracker->TrackSetBindGroup(group, cmd->index, indexInSubmit);
|
||||
} break;
|
||||
@ -860,10 +860,10 @@ namespace dawn_native { namespace d3d12 {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||
BindGroup* group = ToBackend(cmd->group.Get());
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
|
||||
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,
|
||||
@ -1154,10 +1154,10 @@ namespace dawn_native { namespace d3d12 {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||
BindGroup* group = ToBackend(cmd->group.Get());
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
|
||||
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,
|
||||
|
@ -394,7 +394,7 @@ namespace dawn_native { namespace metal {
|
||||
// pipeline state.
|
||||
// Bind groups may be inherited because bind groups are packed in the buffer /
|
||||
// texture tables in contiguous order.
|
||||
class BindGroupTracker : public BindGroupTrackerBase<true> {
|
||||
class BindGroupTracker : public BindGroupTrackerBase<true, uint64_t> {
|
||||
public:
|
||||
explicit BindGroupTracker(StorageBufferLengthTracker* lengthTracker)
|
||||
: BindGroupTrackerBase(), mLengthTracker(lengthTracker) {
|
||||
@ -764,9 +764,9 @@ namespace dawn_native { namespace metal {
|
||||
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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()),
|
||||
@ -1026,9 +1026,9 @@ namespace dawn_native { namespace metal {
|
||||
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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()),
|
||||
|
@ -210,7 +210,7 @@ namespace dawn_native { namespace opengl {
|
||||
RenderPipelineBase* mLastPipeline = nullptr;
|
||||
};
|
||||
|
||||
class BindGroupTracker : public BindGroupTrackerBase<false> {
|
||||
class BindGroupTracker : public BindGroupTrackerBase<false, uint64_t> {
|
||||
public:
|
||||
void OnSetPipeline(RenderPipeline* pipeline) {
|
||||
BindGroupTrackerBase::OnSetPipeline(pipeline);
|
||||
@ -666,9 +666,9 @@ namespace dawn_native { namespace opengl {
|
||||
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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(),
|
||||
cmd->dynamicOffsetCount, dynamicOffsets);
|
||||
@ -954,9 +954,9 @@ namespace dawn_native { namespace opengl {
|
||||
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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(),
|
||||
cmd->dynamicOffsetCount, dynamicOffsets);
|
||||
|
@ -645,9 +645,9 @@ namespace dawn_native { namespace vulkan {
|
||||
SetBindGroupCmd* cmd = mCommands.NextCommand<SetBindGroupCmd>();
|
||||
|
||||
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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,
|
||||
@ -850,9 +850,9 @@ namespace dawn_native { namespace vulkan {
|
||||
case Command::SetBindGroup: {
|
||||
SetBindGroupCmd* cmd = iter->NextCommand<SetBindGroupCmd>();
|
||||
BindGroup* bindGroup = ToBackend(cmd->group.Get());
|
||||
uint64_t* dynamicOffsets = nullptr;
|
||||
uint32_t* dynamicOffsets = nullptr;
|
||||
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,
|
||||
|
@ -571,7 +571,7 @@ TEST_P(BindGroupTests, SetDynamicBindGroupBeforePipeline) {
|
||||
wgpu::RenderPassEncoder pass = encoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||
|
||||
// Set the first dynamic bind group.
|
||||
uint64_t dynamicOffset = 0;
|
||||
uint32_t dynamicOffset = 0;
|
||||
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
||||
|
||||
// Set the second dynamic bind group.
|
||||
@ -645,7 +645,7 @@ TEST_P(BindGroupTests, BindGroupsPersistAfterPipelineChange) {
|
||||
|
||||
// Set the first bind group at a dynamic offset.
|
||||
// This bind group matches the slot in the pipeline layout.
|
||||
uint64_t dynamicOffset = 0;
|
||||
uint32_t dynamicOffset = 0;
|
||||
pass.SetBindGroup(0, bindGroup, 1, &dynamicOffset);
|
||||
|
||||
// Set the second bind group at a dynamic offset.
|
||||
@ -740,7 +740,7 @@ TEST_P(BindGroupTests, DrawThenChangePipelineAndBindGroup) {
|
||||
pass.SetPipeline(pipeline0);
|
||||
|
||||
// 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);
|
||||
|
||||
// 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);
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
std::array<uint64_t, 2> offsets = {0, 0};
|
||||
std::array<uint32_t, 2> offsets = {0, 0};
|
||||
wgpu::RenderPassEncoder renderPassEncoder =
|
||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||
renderPassEncoder.SetPipeline(pipeline);
|
||||
@ -237,7 +237,7 @@ TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsRenderPipeline) {
|
||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
wgpu::RenderPassEncoder renderPassEncoder =
|
||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||
@ -258,7 +258,7 @@ TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsRenderPipeline) {
|
||||
TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
|
||||
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::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
||||
@ -277,7 +277,7 @@ TEST_P(DynamicBufferOffsetTests, BasicComputePipeline) {
|
||||
TEST_P(DynamicBufferOffsetTests, SetDynamicOffestsComputePipeline) {
|
||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
@ -303,7 +303,7 @@ TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsRenderPipeline) {
|
||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
wgpu::RenderPassEncoder renderPassEncoder =
|
||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||
@ -332,7 +332,7 @@ TEST_P(DynamicBufferOffsetTests, InheritDynamicOffestsComputePipeline) {
|
||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||
wgpu::ComputePipeline testPipeline = CreateComputePipeline(true);
|
||||
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
@ -360,9 +360,9 @@ TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffestsMultipleTimesRenderPipeline
|
||||
utils::BasicRenderPass renderPass = utils::CreateBasicRenderPass(device, kRTSize, kRTSize);
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
std::array<uint64_t, 2> testOffsets = {0, 0};
|
||||
std::array<uint32_t, 2> testOffsets = {0, 0};
|
||||
|
||||
wgpu::RenderPassEncoder renderPassEncoder =
|
||||
commandEncoder.BeginRenderPass(&renderPass.renderPassInfo);
|
||||
@ -384,9 +384,9 @@ TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffestsMultipleTimesRenderPipeline
|
||||
TEST_P(DynamicBufferOffsetTests, UpdateDynamicOffsetsMultipleTimesComputePipeline) {
|
||||
wgpu::ComputePipeline pipeline = CreateComputePipeline();
|
||||
|
||||
std::array<uint64_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
std::array<uint32_t, 2> offsets = {kMinDynamicBufferOffsetAlignment,
|
||||
kMinDynamicBufferOffsetAlignment};
|
||||
std::array<uint64_t, 2> testOffsets = {0, 0};
|
||||
std::array<uint32_t, 2> testOffsets = {0, 0};
|
||||
|
||||
wgpu::CommandEncoder commandEncoder = device.CreateCommandEncoder();
|
||||
wgpu::ComputePassEncoder computePassEncoder = commandEncoder.BeginComputePass();
|
||||
|
@ -541,7 +541,7 @@ void DrawCallPerf::RecordRenderCommands(Encoder pass) {
|
||||
break;
|
||||
|
||||
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);
|
||||
} break;
|
||||
|
||||
|
@ -693,7 +693,7 @@ class SetBindGroupValidationTest : public ValidationTest {
|
||||
}
|
||||
|
||||
void TestRenderPassBindGroup(wgpu::BindGroup bindGroup,
|
||||
uint64_t* offsets,
|
||||
uint32_t* offsets,
|
||||
uint32_t count,
|
||||
bool expectation) {
|
||||
wgpu::RenderPipeline renderPipeline = CreateRenderPipeline();
|
||||
@ -713,7 +713,7 @@ class SetBindGroupValidationTest : public ValidationTest {
|
||||
}
|
||||
|
||||
void TestComputePassBindGroup(wgpu::BindGroup bindGroup,
|
||||
uint64_t* offsets,
|
||||
uint32_t* offsets,
|
||||
uint32_t count,
|
||||
bool expectation) {
|
||||
wgpu::ComputePipeline computePipeline = CreateComputePipeline();
|
||||
@ -741,7 +741,7 @@ TEST_F(SetBindGroupValidationTest, Basic) {
|
||||
device, mBindGroupLayout,
|
||||
{{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);
|
||||
|
||||
@ -758,7 +758,7 @@ TEST_F(SetBindGroupValidationTest, DynamicOffsetsMismatch) {
|
||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||
|
||||
// Number of offsets mismatch.
|
||||
std::array<uint64_t, 1> mismatchOffsets = {0};
|
||||
std::array<uint32_t, 1> mismatchOffsets = {0};
|
||||
|
||||
TestRenderPassBindGroup(bindGroup, mismatchOffsets.data(), 1, false);
|
||||
|
||||
@ -775,7 +775,7 @@ TEST_F(SetBindGroupValidationTest, DynamicOffsetsNotAligned) {
|
||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||
|
||||
// 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);
|
||||
|
||||
@ -792,7 +792,7 @@ TEST_F(SetBindGroupValidationTest, OffsetOutOfBoundDynamicUniformBuffer) {
|
||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||
|
||||
// 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);
|
||||
|
||||
@ -809,7 +809,7 @@ TEST_F(SetBindGroupValidationTest, OffsetOutOfBoundDynamicStorageBuffer) {
|
||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||
|
||||
// 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);
|
||||
|
||||
@ -827,7 +827,7 @@ TEST_F(SetBindGroupValidationTest, BindingSizeOutOfBoundDynamicUniformBuffer) {
|
||||
|
||||
// Dynamic offset + offset isn't larger than buffer size.
|
||||
// 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);
|
||||
|
||||
@ -843,7 +843,7 @@ TEST_F(SetBindGroupValidationTest, BindingSizeOutOfBoundDynamicStorageBuffer) {
|
||||
{{0, uniformBuffer, 0, kBindingSize}, {1, storageBuffer, 0, kBindingSize}});
|
||||
// Dynamic offset + offset isn't larger than buffer size.
|
||||
// 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);
|
||||
|
||||
|
@ -71,7 +71,7 @@ TEST_F(WireArgumentTests, ValueArrayArgument) {
|
||||
WGPUCommandEncoder encoder = wgpuDeviceCreateCommandEncoder(device, 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());
|
||||
|
||||
WGPUCommandEncoder apiEncoder = api.GetNewCommandEncoder();
|
||||
@ -82,7 +82,7 @@ TEST_F(WireArgumentTests, ValueArrayArgument) {
|
||||
|
||||
EXPECT_CALL(api, ComputePassEncoderSetBindGroup(
|
||||
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++) {
|
||||
if (offsets[i] != testOffsets[i]) {
|
||||
return false;
|
||||
|
Loading…
x
Reference in New Issue
Block a user