compose_features.go RawHistoryFolder
1package vulkan
2
3import (
4 "unsafe"
5
6 vk "github.com/bnema/purego-vulkan/vulkan"
7)
8
9// VkPhysicalDeviceDescriptorIndexingFeatures is absent from the bindings.
10// Its layout and sType are defined by Vulkan 1.2 (vulkan_core.h).
11const descriptorIndexingFeaturesType vk.StructureType = 1000161001
12
13type descriptorIndexingFeatures struct {
14 SType vk.StructureType
15 Next unsafe.Pointer
16 ShaderInputAttachmentArrayDynamicIndexing vk.Bool32
17 ShaderUniformTexelBufferArrayDynamicIndexing vk.Bool32
18 ShaderStorageTexelBufferArrayDynamicIndexing vk.Bool32
19 ShaderUniformBufferArrayNonUniformIndexing vk.Bool32
20 ShaderSampledImageArrayNonUniformIndexing vk.Bool32
21 ShaderStorageBufferArrayNonUniformIndexing vk.Bool32
22 ShaderStorageImageArrayNonUniformIndexing vk.Bool32
23 ShaderInputAttachmentArrayNonUniformIndexing vk.Bool32
24 ShaderUniformTexelBufferArrayNonUniformIndexing vk.Bool32
25 ShaderStorageTexelBufferArrayNonUniformIndexing vk.Bool32
26 DescriptorBindingUniformBufferUpdateAfterBind vk.Bool32
27 DescriptorBindingSampledImageUpdateAfterBind vk.Bool32
28 DescriptorBindingStorageImageUpdateAfterBind vk.Bool32
29 DescriptorBindingStorageBufferUpdateAfterBind vk.Bool32
30 DescriptorBindingUniformTexelBufferUpdateAfterBind vk.Bool32
31 DescriptorBindingStorageTexelBufferUpdateAfterBind vk.Bool32
32 DescriptorBindingUpdateUnusedWhilePending vk.Bool32
33 DescriptorBindingPartiallyBound vk.Bool32
34 DescriptorBindingVariableDescriptorCount vk.Bool32
35 RuntimeDescriptorArray vk.Bool32
36}
37
38// composeResourceLimit counts both image planes and the instance SSBO.
39// No update-after-bind/partially-bound features are needed: tables are
40// completely initialized and updated only after their frame-slot fence.
41func composeResourceLimit(l vk.PhysicalDeviceLimits) uint32 {
42 if l.MaxDescriptorSetStorageBuffers <= 1 || l.MaxPerStageResources == 0 {
43 return 0
44 }
45 return min(uint32(maxComposeResources),
46 l.MaxPerStageDescriptorSamplers/2, l.MaxDescriptorSetSamplers/2,
47 l.MaxPerStageDescriptorSampledImages/2, l.MaxDescriptorSetSampledImages/2,
48 l.MaxPerStageDescriptorStorageBuffers, l.MaxDescriptorSetStorageBuffers-1,
49 (l.MaxPerStageResources-1)/3)
50}