VTK  9.4.20250207
vtkWebGPUBindGroupLayoutInternals.h
Go to the documentation of this file.
1// SPDX-FileCopyrightText: Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
2// SPDX-License-Identifier: BSD-3-Clause
3#ifndef vtkWebGPUBindGroupLayoutInternals_h
4#define vtkWebGPUBindGroupLayoutInternals_h
5
6#include "vtkRenderingWebGPUModule.h"
7#include "vtk_wgpu.h"
8
9#include <initializer_list>
10
11VTK_ABI_NAMESPACE_BEGIN
12class VTKRENDERINGWEBGPU_NO_EXPORT vtkWebGPUBindGroupLayoutInternals
13{
14public:
15 // Helpers to make creating bind group layouts look nicer:
16 //
17 // vtkWebGPUBindGroupLayoutInternals::MakeBindGroupLayout(device, {
18 // {0, wgpu::ShaderStage::Vertex, wgpu::BufferBindingType::Uniform},
19 // {1, wgpu::ShaderStage::Fragment, wgpu::SamplerBindingType::Filtering},
20 // {3, wgpu::ShaderStage::Fragment, wgpu::TextureSampleType::Float}
21 // });
22 struct LayoutEntryInitializationHelper : wgpu::BindGroupLayoutEntry
23 {
24 // for buffers
25 LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility,
26 wgpu::BufferBindingType bufferType, bool bufferHasDynamicOffset = false,
27 uint64_t bufferMinBindingSize = 0);
28 // for samplers
29 LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility,
30 wgpu::SamplerBindingType samplerType);
31 // for texture
32 LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility,
33 wgpu::TextureSampleType textureSampleType,
34 wgpu::TextureViewDimension viewDimension = wgpu::TextureViewDimension::e2D,
35 bool textureMultisampled = false);
36 // for storage buffers
37 LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility,
38 wgpu::StorageTextureAccess storageTextureAccess, wgpu::TextureFormat format,
39 wgpu::TextureViewDimension viewDimension = wgpu::TextureViewDimension::e2D);
40
41 LayoutEntryInitializationHelper(const wgpu::BindGroupLayoutEntry& entry);
42 };
43
47 static wgpu::BindGroupLayout MakeBindGroupLayout(const wgpu::Device& device,
48 std::initializer_list<LayoutEntryInitializationHelper> entriesInitializer,
49 std::string label = "");
50
54 static wgpu::BindGroupLayout MakeBindGroupLayout(const wgpu::Device& device,
55 const std::vector<wgpu::BindGroupLayoutEntry>& entries, std::string label = "");
56};
57VTK_ABI_NAMESPACE_END
58
59#endif
60// VTK-HeaderTest-Exclude: vtkWebGPUBindGroupLayoutInternals.h
static wgpu::BindGroupLayout MakeBindGroupLayout(const wgpu::Device &device, const std::vector< wgpu::BindGroupLayoutEntry > &entries, std::string label="")
Creates the bind group layout from a list of bind group layout entries.
static wgpu::BindGroupLayout MakeBindGroupLayout(const wgpu::Device &device, std::initializer_list< LayoutEntryInitializationHelper > entriesInitializer, std::string label="")
Creates the bind group layout from a list of bind group layout entries.
LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility, wgpu::TextureSampleType textureSampleType, wgpu::TextureViewDimension viewDimension=wgpu::TextureViewDimension::e2D, bool textureMultisampled=false)
LayoutEntryInitializationHelper(const wgpu::BindGroupLayoutEntry &entry)
LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility, wgpu::StorageTextureAccess storageTextureAccess, wgpu::TextureFormat format, wgpu::TextureViewDimension viewDimension=wgpu::TextureViewDimension::e2D)
LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility, wgpu::BufferBindingType bufferType, bool bufferHasDynamicOffset=false, uint64_t bufferMinBindingSize=0)
LayoutEntryInitializationHelper(uint32_t entryBinding, wgpu::ShaderStage entryVisibility, wgpu::SamplerBindingType samplerType)