mirror of
https://github.com/encounter/dawn-cmake.git
synced 2025-08-10 14:09:07 +00:00
Updates BindGroupLayoutEntry to allow for the newly split-up descriptors that define each binding type in it's own member (buffer, texture, etc.) The previous style of descriptor is still supported but is deprecated. For the sake of keeping the scope reasonable, this change does not alter the BindingInfo structure that's used internally by the various backends. That will come as a followup. Bug: dawn:527 Change-Id: I2f301f5f36fa2ce7ff15126ac90dc4c19d5e32ca Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/34921 Commit-Queue: Brandon Jones <bajones@chromium.org> Reviewed-by: Corentin Wallez <cwallez@chromium.org>
76 lines
3.0 KiB
C++
76 lines
3.0 KiB
C++
// Copyright 2020 The Dawn Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
#include "common/Constants.h"
|
|
#include "tests/DawnTest.h"
|
|
|
|
#include <vector>
|
|
|
|
class PipelineLayoutTests : public DawnTest {};
|
|
|
|
// Test creating a PipelineLayout with multiple BGLs where the first BGL uses the max number of
|
|
// dynamic buffers. This is a regression test for crbug.com/dawn/449 which would overflow when
|
|
// dynamic offset bindings were at max. Test is successful if the pipeline layout is created
|
|
// without error.
|
|
TEST_P(PipelineLayoutTests, DynamicBuffersOverflow) {
|
|
// Create the first bind group layout which uses max number of dynamic buffers bindings.
|
|
wgpu::BindGroupLayout bglA;
|
|
{
|
|
std::vector<wgpu::BindGroupLayoutEntry> entries;
|
|
for (uint32_t i = 0; i < kMaxDynamicStorageBuffersPerPipelineLayout; i++) {
|
|
wgpu::BindGroupLayoutEntry entry;
|
|
entry.binding = i;
|
|
entry.visibility = wgpu::ShaderStage::Compute;
|
|
entry.buffer.type = wgpu::BufferBindingType::Storage;
|
|
entry.buffer.hasDynamicOffset = true;
|
|
|
|
entries.push_back(entry);
|
|
}
|
|
|
|
wgpu::BindGroupLayoutDescriptor descriptor;
|
|
descriptor.entryCount = static_cast<uint32_t>(entries.size());
|
|
descriptor.entries = entries.data();
|
|
bglA = device.CreateBindGroupLayout(&descriptor);
|
|
}
|
|
|
|
// Create the second bind group layout that has one non-dynamic buffer binding.
|
|
// It is in the fragment stage to avoid the max per-stage storage buffer limit.
|
|
wgpu::BindGroupLayout bglB;
|
|
{
|
|
wgpu::BindGroupLayoutDescriptor descriptor;
|
|
wgpu::BindGroupLayoutEntry entry;
|
|
entry.binding = 0;
|
|
entry.visibility = wgpu::ShaderStage::Fragment;
|
|
entry.buffer.type = wgpu::BufferBindingType::Storage;
|
|
|
|
descriptor.entryCount = 1;
|
|
descriptor.entries = &entry;
|
|
bglB = device.CreateBindGroupLayout(&descriptor);
|
|
}
|
|
|
|
// Create a pipeline layout using both bind group layouts.
|
|
wgpu::PipelineLayoutDescriptor descriptor;
|
|
std::vector<wgpu::BindGroupLayout> bindgroupLayouts = {bglA, bglB};
|
|
descriptor.bindGroupLayoutCount = bindgroupLayouts.size();
|
|
descriptor.bindGroupLayouts = bindgroupLayouts.data();
|
|
device.CreatePipelineLayout(&descriptor);
|
|
}
|
|
|
|
DAWN_INSTANTIATE_TEST(PipelineLayoutTests,
|
|
D3D12Backend(),
|
|
MetalBackend(),
|
|
OpenGLBackend(),
|
|
OpenGLESBackend(),
|
|
VulkanBackend());
|