VTK  9.7.20260915
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 <string>
10#include <vector>
11
12#include <initializer_list>
13
14VTK_ABI_NAMESPACE_BEGIN
15class VTKRENDERINGWEBGPU_NO_EXPORT vtkWebGPUBindGroupLayoutInternals
16{
17public:
18 // Helpers to make creating bind group layouts look nicer:
19 //
20 // vtkWebGPUBindGroupLayoutInternals::MakeBindGroupLayout(device, {
21 // {0, WGPUShaderStage_Vertex, WGPUBufferBindingType_Uniform},
22 // {1, WGPUShaderStage_Fragment, WGPUSamplerBindingType_Filtering},
23 // {3, WGPUShaderStage_Fragment, WGPUTextureSampleType_Float}
24 // });
25 struct LayoutEntryInitializationHelper : WGPUBindGroupLayoutEntry
26 {
27 // for buffers
28 LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility,
29 WGPUBufferBindingType bufferType, bool bufferHasDynamicOffset = false,
30 uint64_t bufferMinBindingSize = 0);
31 // for samplers
33 uint32_t entryBinding, WGPUShaderStage entryVisibility, WGPUSamplerBindingType samplerType);
34 // for texture
35 LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility,
36 WGPUTextureSampleType textureSampleType,
37 WGPUTextureViewDimension viewDimension = WGPUTextureViewDimension_2D,
38 bool textureMultisampled = false);
39 // for storage buffers
40 LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility,
41 WGPUStorageTextureAccess storageTextureAccess, WGPUTextureFormat format,
42 WGPUTextureViewDimension viewDimension = WGPUTextureViewDimension_2D);
43
44 LayoutEntryInitializationHelper(const WGPUBindGroupLayoutEntry& entry);
45 };
46
48
52 static WGPUBindGroupLayout MakeBindGroupLayout(const WGPUDevice& device,
53 std::initializer_list<LayoutEntryInitializationHelper> entriesInitializer,
54 std::string label = "");
55
56 static WGPUBindGroupLayout MakeBindGroupLayout(const WGPUDevice& device,
57 const std::vector<WGPUBindGroupLayoutEntry>& entries, std::string label = "");
59};
60VTK_ABI_NAMESPACE_END
61
62#endif
63// VTK-HeaderTest-Exclude: vtkWebGPUBindGroupLayoutInternals.h
static WGPUBindGroupLayout MakeBindGroupLayout(const WGPUDevice &device, std::initializer_list< LayoutEntryInitializationHelper > entriesInitializer, std::string label="")
Creates the bind group layout from a list of bind group layout entries.
static WGPUBindGroupLayout MakeBindGroupLayout(const WGPUDevice &device, const std::vector< WGPUBindGroupLayoutEntry > &entries, std::string label="")
Creates the bind group layout from a list of bind group layout entries.
LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility, WGPUStorageTextureAccess storageTextureAccess, WGPUTextureFormat format, WGPUTextureViewDimension viewDimension=WGPUTextureViewDimension_2D)
LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility, WGPUSamplerBindingType samplerType)
LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility, WGPUTextureSampleType textureSampleType, WGPUTextureViewDimension viewDimension=WGPUTextureViewDimension_2D, bool textureMultisampled=false)
LayoutEntryInitializationHelper(const WGPUBindGroupLayoutEntry &entry)
LayoutEntryInitializationHelper(uint32_t entryBinding, WGPUShaderStage entryVisibility, WGPUBufferBindingType bufferType, bool bufferHasDynamicOffset=false, uint64_t bufferMinBindingSize=0)