[{"data":1,"prerenderedAt":11621},["ShallowReactive",2],{"mQzjIb7noW":3,"VyF3Mmj32r":10229,"N9m89Rcq0G":10408},{"title":4,"description":5,"body":6,"_type":10228,"_id":4},"VK_EXT_descriptor_buffer.proposal","This document outlines a proposal to make the management of descriptor memory more explicit, allowing descriptors to be present in buffer memory, allowing the data and memory to be managed alongside other buffer objects.",{"type":7,"children":8,"toc":10181},"root",[9,16,23,28,50,55,80,86,91,120,157,162,167,172,211,216,221,227,234,239,252,270,275,280,322,358,372,379,399,404,410,415,433,438,444,449,462,467,480,485,490,495,501,506,511,517,531,726,731,736,847,852,857,862,893,906,1394,1399,1413,1418,1439,1452,1464,1526,1577,1583,1588,1616,1660,1666,1679,1707,1713,1718,1927,1932,1952,1971,1976,2026,2044,2056,2069,2074,2094,2121,2126,2175,2211,2216,2361,2384,2396,2406,2494,2563,2569,2574,2607,2620,2668,2687,2728,2733,2746,2751,2779,2799,2831,2843,2849,2854,2859,2969,2974,3709,3714,3783,3825,3848,3854,3859,3941,3984,3990,3995,4404,4789,4801,4862,4884,4890,4895,4901,4906,5061,5066,5317,5322,5328,5342,5347,5353,5358,5432,5464,5469,5474,5480,5492,5497,5502,5520,5545,5550,5570,5582,5588,5593,5598,5609,5629,5648,5654,5659,5692,9791,9797,9803,9808,9813,9819,9824,9830,9842,9864,9869,9875,9880,9886,9891,9910,9915,9921,9933,9939,9972,9994,10020,10026,10046,10052,10057,10063,10068,10074,10079,10085,10098,10129,10134,10140,10145,10151,10156,10162,10175],{"type":10,"tag":11,"props":12,"children":13},"element","p",{},[14],{"type":15,"value":5},"text",{"type":10,"tag":17,"props":18,"children":20},"h2",{"id":19},"_problem_statement",[21],{"type":15,"value":22},"Problem Statement",{"type":10,"tag":11,"props":24,"children":25},{},[26],{"type":15,"value":27},"With more “bindless” models of descriptor management, applications are ever increasing the number of descriptors that end up in descriptor sets.\nManaging allocations this large, and ensuring they end up in device local memory for fast access, is becoming an increasingly awkward problem to manage in the driver.\nDevelopers moving to Vulkan are starting to hit bottlenecks that they simply don’t encounter on other platforms.",{"type":10,"tag":11,"props":29,"children":30},{},[31,33,39,41,48],{"type":15,"value":32},"In other scenarios, making sure descriptors ",{"type":10,"tag":34,"props":35,"children":36},"em",{},[37],{"type":15,"value":38},"do not",{"type":15,"value":40}," end up in device memory is important.\nCopying descriptors in Vulkan is considered rather esoteric, but it is a fairly common strategy in other APIs and implementing a similar style in Vulkan can lead to problems.\nThere is no hint to let an implementation know that a descriptor set will only be used for purposes of copying (i.e. staging buffer).\nIf a descriptor set is mapped to device local memory (BAR) or uncached memory, reading from the descriptor set on the host can have a catastrophic effect on performance.\nOn top of this, some applications rely on being able to copy several tens of thousand individual descriptors every frame.\nThe overhead to set up this many calls to ",{"type":10,"tag":42,"props":43,"children":45},"code",{"className":44},[],[46],{"type":15,"value":47},"vkUpdateDescriptorSets",{"type":15,"value":49}," is not ideal.",{"type":10,"tag":11,"props":51,"children":52},{},[53],{"type":15,"value":54},"In contrast to this, developers are managing uploads for other large resources (e.g. images, buffers) in application code and generally doing a good job of it – typically this is not identified as a problem area.\nDevelopers approaching Vulkan are often confused by the way in which descriptor pools work - and several have made requests to manage things more explicitly.\nThe key things that we’ve had requests for are (relevant Vulkan issues in brackets):",{"type":10,"tag":56,"props":57,"children":58},"ul",{},[59,65,70,75],{"type":10,"tag":60,"props":61,"children":62},"li",{},[63],{"type":15,"value":64},"Explicit allocation management",{"type":10,"tag":60,"props":66,"children":67},{},[68],{"type":15,"value":69},"Better mapping to DirectX 12",{"type":10,"tag":60,"props":71,"children":72},{},[73],{"type":15,"value":74},"Host-only descriptor pools",{"type":10,"tag":60,"props":76,"children":77},{},[78],{"type":15,"value":79},"GPU descriptor updates",{"type":10,"tag":17,"props":81,"children":83},{"id":82},"_solution_space",[84],{"type":15,"value":85},"Solution Space",{"type":10,"tag":11,"props":87,"children":88},{},[89],{"type":15,"value":90},"There are several more-or-less invasive options that could work here:",{"type":10,"tag":92,"props":93,"children":94},"ol",{},[95,100,105,110,115],{"type":10,"tag":60,"props":96,"children":97},{},[98],{"type":15,"value":99},"Add relevant flags and other information to descriptor pools",{"type":10,"tag":60,"props":101,"children":102},{},[103],{"type":15,"value":104},"Like 1, but enable memory binding for descriptor pools",{"type":10,"tag":60,"props":106,"children":107},{},[108],{"type":15,"value":109},"Bypass descriptor pools, and allow direct creation and memory binding for descriptor sets",{"type":10,"tag":60,"props":111,"children":112},{},[113],{"type":15,"value":114},"Bypass descriptor sets, and use descriptor set layouts in buffers",{"type":10,"tag":60,"props":116,"children":117},{},[118],{"type":15,"value":119},"Bypass descriptor set layouts, and use blobs of memory in buffers that shaders access with explicit layouts",{"type":10,"tag":11,"props":121,"children":122},{},[123,132,134,140,142,148,150,155],{"type":10,"tag":124,"props":125,"children":129},"a",{"href":126,"rel":127},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_VALVE_mutable_descriptor_type.html",[128],"nofollow",[130],{"type":15,"value":131},"VK_VALVE_mutable_descriptor_type",{"type":15,"value":133}," includes support for option 1,\nthrough the use of ",{"type":10,"tag":42,"props":135,"children":137},{"className":136},[],[138],{"type":15,"value":139},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_HOST_ONLY_POOL_BIT_VALVE",{"type":15,"value":141}," and ",{"type":10,"tag":42,"props":143,"children":145},{"className":144},[],[146],{"type":15,"value":147},"VK_DESCRIPTOR_POOL_CREATE_HOST_ONLY_BIT_VALVE",{"type":15,"value":149},".\nHowever, this does not fully solve the problem of memory management since we can only ",{"type":10,"tag":34,"props":151,"children":152},{},[153],{"type":15,"value":154},"avoid",{"type":15,"value":156}," allocating device memory for descriptors.\nBeing able to control where shader-accessible descriptors are allocated is still unavailable to applications.",{"type":10,"tag":11,"props":158,"children":159},{},[160],{"type":15,"value":161},"Option 2 attempts to redefine what a descriptor pool is, and it would seem like a very awkward abstraction.\nThe whole point of the descriptor pool is to allocate and manage memory on the behalf of the application.",{"type":10,"tag":11,"props":163,"children":164},{},[165],{"type":15,"value":166},"Option 3 and 4 are similarly invasive, but move descriptor pools out of the way, making things a lot clearer.\nThe major downside to this is that it potentially blocks out older implementations; however this is likely the same set of implementations that wouldn’t see a benefit from this proposal anyway (i.e. “non-bindless\" hardware).",{"type":10,"tag":11,"props":168,"children":169},{},[170],{"type":15,"value":171},"Option 4 has the advantage of having a smaller surface area than option 3 and allows applications to use existing buffer management functions in both Vulkan and in their own code.\nBeing able to use buffers directly means that applications are in control of where the memory is allocated and can control if memory is:",{"type":10,"tag":56,"props":173,"children":174},{},[175,180,201,206],{"type":10,"tag":60,"props":176,"children":177},{},[178],{"type":15,"value":179},"Host-only (plain malloc)",{"type":10,"tag":60,"props":181,"children":182},{},[183,185,191,193,199],{"type":15,"value":184},"Host-only but shader-visible (",{"type":10,"tag":42,"props":186,"children":188},{"className":187},[],[189],{"type":15,"value":190},"VkDeviceMemory",{"type":15,"value":192}," with ",{"type":10,"tag":42,"props":194,"children":196},{"className":195},[],[197],{"type":15,"value":198},"HOST_VISIBLE_BIT",{"type":15,"value":200},")",{"type":10,"tag":60,"props":202,"children":203},{},[204],{"type":15,"value":205},"Device local and shader-visible (resizable BAR on discrete GPUs, unified memory on integrated)",{"type":10,"tag":60,"props":207,"children":208},{},[209],{"type":15,"value":210},"Device local only (GPU copies descriptors)",{"type":10,"tag":11,"props":212,"children":213},{},[214],{"type":15,"value":215},"Option 5 is more invasive than Option 4 and requires shader-side changes.",{"type":10,"tag":11,"props":217,"children":218},{},[219],{"type":15,"value":220},"In order to keep the required changes in this extension to the API only, the extra steps in Option 5 are deferred to a future planned extension, and this proposal focuses on Option 4.",{"type":10,"tag":17,"props":222,"children":224},{"id":223},"_proposal",[225],{"type":15,"value":226},"Proposal",{"type":10,"tag":228,"props":229,"children":231},"h3",{"id":230},"_modeling_a_descriptor_set_as_memory",[232],{"type":15,"value":233},"Modeling a descriptor set as memory",{"type":10,"tag":11,"props":235,"children":236},{},[237],{"type":15,"value":238},"Descriptors in Vulkan as it stands are generally considered quite abstract.\nThey do not have a size, and when creating descriptor pools it is only specified how many descriptors can be allocated.",{"type":10,"tag":11,"props":240,"children":241},{},[242,244,250],{"type":15,"value":243},"This abstraction is removed by the proposal and it assumes that a ",{"type":10,"tag":42,"props":245,"children":247},{"className":246},[],[248],{"type":15,"value":249},"VkDescriptorSetLayout",{"type":15,"value":251}," can be expressed as a list of binding points with a known:",{"type":10,"tag":56,"props":253,"children":254},{},[255,260,265],{"type":10,"tag":60,"props":256,"children":257},{},[258],{"type":15,"value":259},"Byte offset",{"type":10,"tag":60,"props":261,"children":262},{},[263],{"type":15,"value":264},"Element size",{"type":10,"tag":60,"props":266,"children":267},{},[268],{"type":15,"value":269},"Number of elements tightly packed",{"type":10,"tag":11,"props":271,"children":272},{},[273],{"type":15,"value":274},"The element size depends on the descriptor type and is a property of the physical device.",{"type":10,"tag":11,"props":276,"children":277},{},[278],{"type":15,"value":279},"Implementations are free to control the byte offset, and so can freely repack descriptors for optimal memory access.\nFor exact control over byte offsets for different descriptors, descriptor indexing should be used, since arrays have guaranteed packing.",{"type":10,"tag":11,"props":281,"children":282},{},[283,285,291,293,299,300,305,307,313,314,320],{"type":15,"value":284},"If we think in terms of ",{"type":10,"tag":42,"props":286,"children":288},{"className":287},[],[289],{"type":15,"value":290},"VkDescriptorPool",{"type":15,"value":292}," with this model, an implementation of that could be something like an arena allocator where size is derived from the descriptor counts,\nand a ",{"type":10,"tag":42,"props":294,"children":296},{"className":295},[],[297],{"type":15,"value":298},"VkDescriptorSet",{"type":15,"value":192},{"type":10,"tag":42,"props":301,"children":303},{"className":302},[],[304],{"type":15,"value":249},{"type":15,"value":306}," just allocates a certain number of bytes from the pool.\nThis is essentially the same model as ",{"type":10,"tag":42,"props":308,"children":310},{"className":309},[],[311],{"type":15,"value":312},"VkBuffer",{"type":15,"value":141},{"type":10,"tag":42,"props":315,"children":317},{"className":316},[],[318],{"type":15,"value":319},"VkImage",{"type":15,"value":321}," allocation.",{"type":10,"tag":11,"props":323,"children":324},{},[325,327,333,335,341,343,349,350,356],{"type":15,"value":326},"When we call ",{"type":10,"tag":42,"props":328,"children":330},{"className":329},[],[331],{"type":15,"value":332},"vkCmdBindDescriptorSets",{"type":15,"value":334},", what we are really doing is binding a buffer of a certain size.\nThe shader compiler looks at ",{"type":10,"tag":42,"props":336,"children":338},{"className":337},[],[339],{"type":15,"value":340},"VkPipelineLayout",{"type":15,"value":342}," and based on the ",{"type":10,"tag":42,"props":344,"children":346},{"className":345},[],[347],{"type":15,"value":348},"DescriptorSet",{"type":15,"value":141},{"type":10,"tag":42,"props":351,"children":353},{"className":352},[],[354],{"type":15,"value":355},"Binding",{"type":15,"value":357}," decorations, it can look up that a descriptor can be read from the bound descriptor set at a specific offset.",{"type":10,"tag":11,"props":359,"children":360},{},[361,363,370],{"type":15,"value":362},"As ",{"type":10,"tag":124,"props":364,"children":367},{"href":365,"rel":366},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_descriptor_indexing.html",[128],[368],{"type":15,"value":369},"VK_EXT_descriptor_indexing",{"type":15,"value":371}," is required, its descriptor limits apply.",{"type":10,"tag":373,"props":374,"children":376},"h4",{"id":375},"_next_level_update_after_bind",[377],{"type":15,"value":378},"Next level update-after-bind",{"type":10,"tag":11,"props":380,"children":381},{},[382,384,390,391,397],{"type":15,"value":383},"With descriptor being modeled as buffer memory, we remove all pretense of the implementation being able to consume descriptors when recording the command buffer.\nIn the Vulkan 1.0 descriptor model, descriptors must be valid when descriptor sets are bound and remain valid, which means implementations are free to consume the descriptors, repack them, and so on if they desire.\nWith descriptor indexing, the ",{"type":10,"tag":42,"props":385,"children":387},{"className":386},[],[388],{"type":15,"value":389},"UPDATE_AFTER_BIND_BIT",{"type":15,"value":141},{"type":10,"tag":42,"props":392,"children":394},{"className":393},[],[395],{"type":15,"value":396},"PARTIALLY_BOUND_BIT",{"type":15,"value":398}," flags imply a buffer like model where descriptors must not be consumed unless dynamically used by shaders.\nWith descriptor buffers, this model is implied and it is not allowed to specify a descriptor set layout being both update-after-bind and descriptor buffer capable.",{"type":10,"tag":11,"props":400,"children":401},{},[402],{"type":15,"value":403},"As descriptors can be updated in the GPU timeline, descriptor buffers go a bit further than update-after-bind.\nIn the existing update-after-bind model, descriptors can only be consumed correctly if they were written before queue submits.",{"type":10,"tag":373,"props":405,"children":407},{"id":406},"_dropping_support_for_abstract_descriptor_types",[408],{"type":15,"value":409},"Dropping support for abstract descriptor types",{"type":10,"tag":11,"props":411,"children":412},{},[413],{"type":15,"value":414},"Some descriptor types are a bit more abstract in nature. Dynamic uniform buffers and dynamic storage buffers for example have a component to them that does not consume descriptor memory, but function more like push constants.\nDescriptor types which cannot be expressed in terms of descriptors in memory are not supported with descriptor buffers,\nbut rapidly changing descriptors can be replaced with existing alternatives such as:",{"type":10,"tag":56,"props":416,"children":417},{},[418,423,428],{"type":10,"tag":60,"props":419,"children":420},{},[421],{"type":15,"value":422},"Push constants",{"type":10,"tag":60,"props":424,"children":425},{},[426],{"type":15,"value":427},"Place buffer device address in push constants",{"type":10,"tag":60,"props":429,"children":430},{},[431],{"type":15,"value":432},"Push descriptors",{"type":10,"tag":11,"props":434,"children":435},{},[436],{"type":15,"value":437},"Update-after-bind has similar restrictions already.",{"type":10,"tag":373,"props":439,"children":441},{"id":440},"_one_buffer_many_offsets",[442],{"type":15,"value":443},"One buffer, many offsets",{"type":10,"tag":11,"props":445,"children":446},{},[447],{"type":15,"value":448},"While binding descriptor sets as memory is possible on a wide range of hardware, descriptors are still considered \"special\" memory by many implementations, and it may not be possible to bind many different buffers at the same time.\nSome possible restrictions can be:",{"type":10,"tag":56,"props":450,"children":451},{},[452,457],{"type":10,"tag":60,"props":453,"children":454},{},[455],{"type":15,"value":456},"Limited address space for descriptors",{"type":10,"tag":60,"props":458,"children":459},{},[460],{"type":15,"value":461},"Descriptor sets are accessed with offset from one or more base pointers",{"type":10,"tag":11,"props":463,"children":464},{},[465],{"type":15,"value":466},"In Vulkan, applications are guaranteed at least 4 descriptor sets, but many implementations go beyond this.\nAt the same time, it might not be possible to bind that many different descriptor buffers.",{"type":10,"tag":11,"props":468,"children":469},{},[470,472,478],{"type":15,"value":471},"In D3D12 for example, this problem manifests itself as ",{"type":10,"tag":42,"props":473,"children":475},{"className":474},[],[476],{"type":15,"value":477},"ID3D12GraphicsCommandList::SetDescriptorHeaps()",{"type":15,"value":479},".",{"type":10,"tag":11,"props":481,"children":482},{},[483],{"type":15,"value":484},"Similarly, this extension will work on a model where applications allocate large descriptor buffers, and bind those buffers to the command buffer.\nFrom there, descriptor sets are expressed as offsets into the bound buffers.",{"type":10,"tag":11,"props":486,"children":487},{},[488],{"type":15,"value":489},"It is expected that changing a descriptor buffer binding is a fairly heavy operation on some implementations and should be avoided.\nChanging offsets however, is very efficient.",{"type":10,"tag":11,"props":491,"children":492},{},[493],{"type":15,"value":494},"A limited address space can be expressed with special memory types that allocate from a dedicated address space region.",{"type":10,"tag":373,"props":496,"children":498},{"id":497},"_no_mixing_and_matching_descriptor_buffers_and_older_model",[499],{"type":15,"value":500},"No mixing and matching descriptor buffers and older model",{"type":10,"tag":11,"props":502,"children":503},{},[504],{"type":15,"value":505},"The implication of descriptor buffers is that applications will now take more control over which descriptor buffers are bound to a command buffer.\nWithout descriptor buffers, this is something implementations were able to hide from applications, so it is not possible to mix and match these models in one draw or dispatch.\nIt is possible to mix and match the two models in different draw or dispatches, but it is equivalent to changing the descriptor buffer bindings and should be avoided if possible.",{"type":10,"tag":11,"props":507,"children":508},{},[509],{"type":15,"value":510},"In terms of state invalidation, whenever a descriptor buffer offset is bound, it invalidates all bindings for descriptor sets and vice versa.",{"type":10,"tag":228,"props":512,"children":514},{"id":513},"_putting_descriptors_in_memory",[515],{"type":15,"value":516},"Putting Descriptors in Memory",{"type":10,"tag":11,"props":518,"children":519},{},[520,522,529],{"type":15,"value":521},"This extension introduces new commands to put shader-accessible descriptors directly in memory.\nProperties of descriptor set layouts may vary based on enabled device features, so new device-level functions are added to query the properties of layouts.\nThese calls are invariant across the lifetime of the device, and between ",{"type":10,"tag":124,"props":523,"children":526},{"href":524,"rel":525},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDevice.html",[128],[527],{"type":15,"value":528},"VkDevice",{"type":15,"value":530}," objects created from the same physical device(s), with the same creation parameters.",{"type":10,"tag":532,"props":533,"children":538},"pre",{"className":534,"code":535,"language":536,"meta":537,"style":537},"language-c shiki shiki-themes github-light-default github-dark-default","void vkGetDescriptorSetLayoutSizeEXT(\n VkDevice device,\n VkDescriptorSetLayout layout,\n VkDeviceSize* pLayoutSizeInBytes);\n\nvoid vkGetDescriptorSetLayoutBindingOffsetEXT(\n VkDevice device,\n VkDescriptorSetLayout layout,\n uint32_t binding,\n VkDeviceSize* pOffset);\n","c","",[539],{"type":10,"tag":42,"props":540,"children":541},{"__ignoreMap":537},[542,566,586,604,628,638,655,671,687,705],{"type":10,"tag":543,"props":544,"children":547},"span",{"class":545,"line":546},"line",1,[548,554,560],{"type":10,"tag":543,"props":549,"children":551},{"style":550},"--shiki-default:#CF222E;--shiki-dark:#FF7B72",[552],{"type":15,"value":553},"void",{"type":10,"tag":543,"props":555,"children":557},{"style":556},"--shiki-default:#8250DF;--shiki-dark:#D2A8FF",[558],{"type":15,"value":559}," vkGetDescriptorSetLayoutSizeEXT",{"type":10,"tag":543,"props":561,"children":563},{"style":562},"--shiki-default:#1F2328;--shiki-dark:#E6EDF3",[564],{"type":15,"value":565},"(\n",{"type":10,"tag":543,"props":567,"children":569},{"class":545,"line":568},2,[570,575,581],{"type":10,"tag":543,"props":571,"children":572},{"style":562},[573],{"type":15,"value":574}," VkDevice ",{"type":10,"tag":543,"props":576,"children":578},{"style":577},"--shiki-default:#953800;--shiki-dark:#FFA657",[579],{"type":15,"value":580},"device",{"type":10,"tag":543,"props":582,"children":583},{"style":562},[584],{"type":15,"value":585},",\n",{"type":10,"tag":543,"props":587,"children":589},{"class":545,"line":588},3,[590,595,600],{"type":10,"tag":543,"props":591,"children":592},{"style":562},[593],{"type":15,"value":594}," VkDescriptorSetLayout ",{"type":10,"tag":543,"props":596,"children":597},{"style":577},[598],{"type":15,"value":599},"layout",{"type":10,"tag":543,"props":601,"children":602},{"style":562},[603],{"type":15,"value":585},{"type":10,"tag":543,"props":605,"children":607},{"class":545,"line":606},4,[608,613,618,623],{"type":10,"tag":543,"props":609,"children":610},{"style":562},[611],{"type":15,"value":612}," VkDeviceSize",{"type":10,"tag":543,"props":614,"children":615},{"style":550},[616],{"type":15,"value":617},"*",{"type":10,"tag":543,"props":619,"children":620},{"style":577},[621],{"type":15,"value":622}," pLayoutSizeInBytes",{"type":10,"tag":543,"props":624,"children":625},{"style":562},[626],{"type":15,"value":627},");\n",{"type":10,"tag":543,"props":629,"children":631},{"class":545,"line":630},5,[632],{"type":10,"tag":543,"props":633,"children":635},{"emptyLinePlaceholder":634},true,[636],{"type":15,"value":637},"\n",{"type":10,"tag":543,"props":639,"children":641},{"class":545,"line":640},6,[642,646,651],{"type":10,"tag":543,"props":643,"children":644},{"style":550},[645],{"type":15,"value":553},{"type":10,"tag":543,"props":647,"children":648},{"style":556},[649],{"type":15,"value":650}," vkGetDescriptorSetLayoutBindingOffsetEXT",{"type":10,"tag":543,"props":652,"children":653},{"style":562},[654],{"type":15,"value":565},{"type":10,"tag":543,"props":656,"children":658},{"class":545,"line":657},7,[659,663,667],{"type":10,"tag":543,"props":660,"children":661},{"style":562},[662],{"type":15,"value":574},{"type":10,"tag":543,"props":664,"children":665},{"style":577},[666],{"type":15,"value":580},{"type":10,"tag":543,"props":668,"children":669},{"style":562},[670],{"type":15,"value":585},{"type":10,"tag":543,"props":672,"children":674},{"class":545,"line":673},8,[675,679,683],{"type":10,"tag":543,"props":676,"children":677},{"style":562},[678],{"type":15,"value":594},{"type":10,"tag":543,"props":680,"children":681},{"style":577},[682],{"type":15,"value":599},{"type":10,"tag":543,"props":684,"children":685},{"style":562},[686],{"type":15,"value":585},{"type":10,"tag":543,"props":688,"children":690},{"class":545,"line":689},9,[691,696,701],{"type":10,"tag":543,"props":692,"children":693},{"style":550},[694],{"type":15,"value":695}," uint32_t",{"type":10,"tag":543,"props":697,"children":698},{"style":577},[699],{"type":15,"value":700}," binding",{"type":10,"tag":543,"props":702,"children":703},{"style":562},[704],{"type":15,"value":585},{"type":10,"tag":543,"props":706,"children":708},{"class":545,"line":707},10,[709,713,717,722],{"type":10,"tag":543,"props":710,"children":711},{"style":562},[712],{"type":15,"value":612},{"type":10,"tag":543,"props":714,"children":715},{"style":550},[716],{"type":15,"value":617},{"type":10,"tag":543,"props":718,"children":719},{"style":577},[720],{"type":15,"value":721}," pOffset",{"type":10,"tag":543,"props":723,"children":724},{"style":562},[725],{"type":15,"value":627},{"type":10,"tag":11,"props":727,"children":728},{},[729],{"type":15,"value":730},"Applications are responsible for writing data into memory, but the application does not control the memory location directly – descriptor set layouts dictate where each descriptor lives, so that the shader interface continues to work as-is with set and binding numbers.",{"type":10,"tag":11,"props":732,"children":733},{},[734],{"type":15,"value":735},"The size and offset of descriptors is exposed to applications, so they know how to copy it into memory.\nThis is important since applications are free to copy descriptors on the device itself.",{"type":10,"tag":11,"props":737,"children":738},{},[739,741,747,749,755,756,762,763,769,770,776,777,783,784,790,791,797,798,804,805,811,812,818,819,825,826,832,833,839,840,846],{"type":15,"value":740},"The sizes for different descriptor types are defined in the properties: ",{"type":10,"tag":42,"props":742,"children":744},{"className":743},[],[745],{"type":15,"value":746},"samplerDescriptorSize",{"type":15,"value":748},", ",{"type":10,"tag":42,"props":750,"children":752},{"className":751},[],[753],{"type":15,"value":754},"combinedImageSamplerDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":757,"children":759},{"className":758},[],[760],{"type":15,"value":761},"sampledImageDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":764,"children":766},{"className":765},[],[767],{"type":15,"value":768},"storageImageDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":771,"children":773},{"className":772},[],[774],{"type":15,"value":775},"uniformTexelBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":778,"children":780},{"className":779},[],[781],{"type":15,"value":782},"robustUniformTexelBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":785,"children":787},{"className":786},[],[788],{"type":15,"value":789},"storageTexelBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":792,"children":794},{"className":793},[],[795],{"type":15,"value":796},"robustStorageTexelBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":799,"children":801},{"className":800},[],[802],{"type":15,"value":803},"uniformBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":806,"children":808},{"className":807},[],[809],{"type":15,"value":810},"robustUniformBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":813,"children":815},{"className":814},[],[816],{"type":15,"value":817},"storageBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":820,"children":822},{"className":821},[],[823],{"type":15,"value":824},"robustStorageBufferDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":827,"children":829},{"className":828},[],[830],{"type":15,"value":831},"inputAttachmentDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":834,"children":836},{"className":835},[],[837],{"type":15,"value":838},"accelerationStructureDescriptorSize",{"type":15,"value":748},{"type":10,"tag":42,"props":841,"children":843},{"className":842},[],[844],{"type":15,"value":845},"combinedImageSamplerDensityMapDescriptorSize",{"type":15,"value":479},{"type":10,"tag":11,"props":848,"children":849},{},[850],{"type":15,"value":851},"Descriptor arrays have guaranteed packing, such that each element of an array for a given binding has an offset from that binding’s base offset equal to the size of the descriptor multiplied by the array offset.\nBindings can be moved around as the driver sees fit, but variable-sized descriptor arrays must be packed at the end.",{"type":10,"tag":11,"props":853,"children":854},{},[855],{"type":15,"value":856},"For use cases where layouts contain a variable-sized descriptor count, the size returned reflects the upper bound described in the descriptor set layout.\nThe size required for a descriptor set layout with a variable size descriptor array can be obtained by adding the product of the number of descriptors that are actually used and the size of the descriptor.",{"type":10,"tag":11,"props":858,"children":859},{},[860],{"type":15,"value":861},"Descriptor set layouts used for this purpose must be created with a new create flag:",{"type":10,"tag":532,"props":863,"children":865},{"className":534,"code":864,"language":536,"meta":537,"style":537},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00000010\n",[866],{"type":10,"tag":42,"props":867,"children":868},{"__ignoreMap":537},[869],{"type":10,"tag":543,"props":870,"children":871},{"class":545,"line":546},[872,877,882,887],{"type":10,"tag":543,"props":873,"children":874},{"style":562},[875],{"type":15,"value":876},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":878,"children":879},{"style":550},[880],{"type":15,"value":881},"=",{"type":10,"tag":543,"props":883,"children":884},{"style":550},[885],{"type":15,"value":886}," 0x",{"type":10,"tag":543,"props":888,"children":890},{"style":889},"--shiki-default:#0550AE;--shiki-dark:#79C0FF",[891],{"type":15,"value":892},"00000010\n",{"type":10,"tag":11,"props":894,"children":895},{},[896,898,904],{"type":15,"value":897},"Layouts created with this flag must not be used to create a ",{"type":10,"tag":124,"props":899,"children":902},{"href":900,"rel":901},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorSet.html",[128],[903],{"type":15,"value":298},{"type":15,"value":905}," and must not include dynamic uniform buffers or dynamic storage buffers.\nApplications can achieve the same dynamic offsetting by either updating a descriptor buffer, using push constants, or by using push descriptors.\nThe blob of memory corresponding to a descriptor is obtained from resource views directly.\nHow applications get that data into device memory is entirely up to them, but the offset must match that obtained from the layout.",{"type":10,"tag":532,"props":907,"children":909},{"className":534,"code":908,"language":536,"meta":537,"style":537},"typedef struct VkDescriptorAddressInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkDeviceAddress address;\n VkDeviceSize range;\n VkFormat format;\n} VkDescriptorAddressInfoEXT;\n\ntypedef union VkDescriptorDataEXT {\n const VkSampler* pSampler;\n const VkDescriptorImageInfo* pCombinedImageSampler;\n const VkDescriptorImageInfo* pInputAttachmentImage;\n const VkDescriptorImageInfo* pSampledImage;\n const VkDescriptorImageInfo* pStorageImage;\n const VkDescriptorAddressInfoEXT* pUniformTexelBuffer;\n const VkDescriptorAddressInfoEXT* pStorageTexelBuffer;\n const VkDescriptorAddressInfoEXT* pUniformBuffer;\n const VkDescriptorAddressInfoEXT* pStorageBuffer;\n VkDeviceAddress accelerationStructure;\n} VkDescriptorDataEXT;\n\ntypedef struct VkDescriptorGetInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkDescriptorType type;\n VkDescriptorDataEXT data;\n} VkDescriptorGetInfoEXT;\n\nvoid vkGetDescriptorEXT(\n VkDevice device\n const VkDescriptorGetInfoEXT* pCreateInfo,\n size_t dataSize,\n void* pDescriptor);\n",[910],{"type":10,"tag":42,"props":911,"children":912},{"__ignoreMap":537},[913,931,939,957,965,973,981,989,996,1013,1034,1056,1077,1098,1119,1141,1162,1183,1204,1213,1222,1230,1247,1255,1271,1280,1289,1298,1306,1323,1332,1358,1376],{"type":10,"tag":543,"props":914,"children":915},{"class":545,"line":546},[916,921,926],{"type":10,"tag":543,"props":917,"children":918},{"style":550},[919],{"type":15,"value":920},"typedef",{"type":10,"tag":543,"props":922,"children":923},{"style":550},[924],{"type":15,"value":925}," struct",{"type":10,"tag":543,"props":927,"children":928},{"style":562},[929],{"type":15,"value":930}," VkDescriptorAddressInfoEXT {\n",{"type":10,"tag":543,"props":932,"children":933},{"class":545,"line":568},[934],{"type":10,"tag":543,"props":935,"children":936},{"style":562},[937],{"type":15,"value":938}," VkStructureType sType;\n",{"type":10,"tag":543,"props":940,"children":941},{"class":545,"line":588},[942,947,952],{"type":10,"tag":543,"props":943,"children":944},{"style":550},[945],{"type":15,"value":946}," const",{"type":10,"tag":543,"props":948,"children":949},{"style":550},[950],{"type":15,"value":951}," void*",{"type":10,"tag":543,"props":953,"children":954},{"style":562},[955],{"type":15,"value":956}," pNext;\n",{"type":10,"tag":543,"props":958,"children":959},{"class":545,"line":606},[960],{"type":10,"tag":543,"props":961,"children":962},{"style":562},[963],{"type":15,"value":964}," VkDeviceAddress address;\n",{"type":10,"tag":543,"props":966,"children":967},{"class":545,"line":630},[968],{"type":10,"tag":543,"props":969,"children":970},{"style":562},[971],{"type":15,"value":972}," VkDeviceSize range;\n",{"type":10,"tag":543,"props":974,"children":975},{"class":545,"line":640},[976],{"type":10,"tag":543,"props":977,"children":978},{"style":562},[979],{"type":15,"value":980}," VkFormat format;\n",{"type":10,"tag":543,"props":982,"children":983},{"class":545,"line":657},[984],{"type":10,"tag":543,"props":985,"children":986},{"style":562},[987],{"type":15,"value":988},"} VkDescriptorAddressInfoEXT;\n",{"type":10,"tag":543,"props":990,"children":991},{"class":545,"line":673},[992],{"type":10,"tag":543,"props":993,"children":994},{"emptyLinePlaceholder":634},[995],{"type":15,"value":637},{"type":10,"tag":543,"props":997,"children":998},{"class":545,"line":689},[999,1003,1008],{"type":10,"tag":543,"props":1000,"children":1001},{"style":550},[1002],{"type":15,"value":920},{"type":10,"tag":543,"props":1004,"children":1005},{"style":550},[1006],{"type":15,"value":1007}," union",{"type":10,"tag":543,"props":1009,"children":1010},{"style":562},[1011],{"type":15,"value":1012}," VkDescriptorDataEXT {\n",{"type":10,"tag":543,"props":1014,"children":1015},{"class":545,"line":707},[1016,1020,1025,1029],{"type":10,"tag":543,"props":1017,"children":1018},{"style":550},[1019],{"type":15,"value":946},{"type":10,"tag":543,"props":1021,"children":1022},{"style":562},[1023],{"type":15,"value":1024}," VkSampler",{"type":10,"tag":543,"props":1026,"children":1027},{"style":550},[1028],{"type":15,"value":617},{"type":10,"tag":543,"props":1030,"children":1031},{"style":562},[1032],{"type":15,"value":1033}," pSampler;\n",{"type":10,"tag":543,"props":1035,"children":1037},{"class":545,"line":1036},11,[1038,1042,1047,1051],{"type":10,"tag":543,"props":1039,"children":1040},{"style":550},[1041],{"type":15,"value":946},{"type":10,"tag":543,"props":1043,"children":1044},{"style":562},[1045],{"type":15,"value":1046}," VkDescriptorImageInfo",{"type":10,"tag":543,"props":1048,"children":1049},{"style":550},[1050],{"type":15,"value":617},{"type":10,"tag":543,"props":1052,"children":1053},{"style":562},[1054],{"type":15,"value":1055}," pCombinedImageSampler;\n",{"type":10,"tag":543,"props":1057,"children":1059},{"class":545,"line":1058},12,[1060,1064,1068,1072],{"type":10,"tag":543,"props":1061,"children":1062},{"style":550},[1063],{"type":15,"value":946},{"type":10,"tag":543,"props":1065,"children":1066},{"style":562},[1067],{"type":15,"value":1046},{"type":10,"tag":543,"props":1069,"children":1070},{"style":550},[1071],{"type":15,"value":617},{"type":10,"tag":543,"props":1073,"children":1074},{"style":562},[1075],{"type":15,"value":1076}," pInputAttachmentImage;\n",{"type":10,"tag":543,"props":1078,"children":1080},{"class":545,"line":1079},13,[1081,1085,1089,1093],{"type":10,"tag":543,"props":1082,"children":1083},{"style":550},[1084],{"type":15,"value":946},{"type":10,"tag":543,"props":1086,"children":1087},{"style":562},[1088],{"type":15,"value":1046},{"type":10,"tag":543,"props":1090,"children":1091},{"style":550},[1092],{"type":15,"value":617},{"type":10,"tag":543,"props":1094,"children":1095},{"style":562},[1096],{"type":15,"value":1097}," pSampledImage;\n",{"type":10,"tag":543,"props":1099,"children":1101},{"class":545,"line":1100},14,[1102,1106,1110,1114],{"type":10,"tag":543,"props":1103,"children":1104},{"style":550},[1105],{"type":15,"value":946},{"type":10,"tag":543,"props":1107,"children":1108},{"style":562},[1109],{"type":15,"value":1046},{"type":10,"tag":543,"props":1111,"children":1112},{"style":550},[1113],{"type":15,"value":617},{"type":10,"tag":543,"props":1115,"children":1116},{"style":562},[1117],{"type":15,"value":1118}," pStorageImage;\n",{"type":10,"tag":543,"props":1120,"children":1122},{"class":545,"line":1121},15,[1123,1127,1132,1136],{"type":10,"tag":543,"props":1124,"children":1125},{"style":550},[1126],{"type":15,"value":946},{"type":10,"tag":543,"props":1128,"children":1129},{"style":562},[1130],{"type":15,"value":1131}," VkDescriptorAddressInfoEXT",{"type":10,"tag":543,"props":1133,"children":1134},{"style":550},[1135],{"type":15,"value":617},{"type":10,"tag":543,"props":1137,"children":1138},{"style":562},[1139],{"type":15,"value":1140}," pUniformTexelBuffer;\n",{"type":10,"tag":543,"props":1142,"children":1144},{"class":545,"line":1143},16,[1145,1149,1153,1157],{"type":10,"tag":543,"props":1146,"children":1147},{"style":550},[1148],{"type":15,"value":946},{"type":10,"tag":543,"props":1150,"children":1151},{"style":562},[1152],{"type":15,"value":1131},{"type":10,"tag":543,"props":1154,"children":1155},{"style":550},[1156],{"type":15,"value":617},{"type":10,"tag":543,"props":1158,"children":1159},{"style":562},[1160],{"type":15,"value":1161}," pStorageTexelBuffer;\n",{"type":10,"tag":543,"props":1163,"children":1165},{"class":545,"line":1164},17,[1166,1170,1174,1178],{"type":10,"tag":543,"props":1167,"children":1168},{"style":550},[1169],{"type":15,"value":946},{"type":10,"tag":543,"props":1171,"children":1172},{"style":562},[1173],{"type":15,"value":1131},{"type":10,"tag":543,"props":1175,"children":1176},{"style":550},[1177],{"type":15,"value":617},{"type":10,"tag":543,"props":1179,"children":1180},{"style":562},[1181],{"type":15,"value":1182}," pUniformBuffer;\n",{"type":10,"tag":543,"props":1184,"children":1186},{"class":545,"line":1185},18,[1187,1191,1195,1199],{"type":10,"tag":543,"props":1188,"children":1189},{"style":550},[1190],{"type":15,"value":946},{"type":10,"tag":543,"props":1192,"children":1193},{"style":562},[1194],{"type":15,"value":1131},{"type":10,"tag":543,"props":1196,"children":1197},{"style":550},[1198],{"type":15,"value":617},{"type":10,"tag":543,"props":1200,"children":1201},{"style":562},[1202],{"type":15,"value":1203}," pStorageBuffer;\n",{"type":10,"tag":543,"props":1205,"children":1207},{"class":545,"line":1206},19,[1208],{"type":10,"tag":543,"props":1209,"children":1210},{"style":562},[1211],{"type":15,"value":1212}," VkDeviceAddress accelerationStructure;\n",{"type":10,"tag":543,"props":1214,"children":1216},{"class":545,"line":1215},20,[1217],{"type":10,"tag":543,"props":1218,"children":1219},{"style":562},[1220],{"type":15,"value":1221},"} VkDescriptorDataEXT;\n",{"type":10,"tag":543,"props":1223,"children":1225},{"class":545,"line":1224},21,[1226],{"type":10,"tag":543,"props":1227,"children":1228},{"emptyLinePlaceholder":634},[1229],{"type":15,"value":637},{"type":10,"tag":543,"props":1231,"children":1233},{"class":545,"line":1232},22,[1234,1238,1242],{"type":10,"tag":543,"props":1235,"children":1236},{"style":550},[1237],{"type":15,"value":920},{"type":10,"tag":543,"props":1239,"children":1240},{"style":550},[1241],{"type":15,"value":925},{"type":10,"tag":543,"props":1243,"children":1244},{"style":562},[1245],{"type":15,"value":1246}," VkDescriptorGetInfoEXT {\n",{"type":10,"tag":543,"props":1248,"children":1250},{"class":545,"line":1249},23,[1251],{"type":10,"tag":543,"props":1252,"children":1253},{"style":562},[1254],{"type":15,"value":938},{"type":10,"tag":543,"props":1256,"children":1258},{"class":545,"line":1257},24,[1259,1263,1267],{"type":10,"tag":543,"props":1260,"children":1261},{"style":550},[1262],{"type":15,"value":946},{"type":10,"tag":543,"props":1264,"children":1265},{"style":550},[1266],{"type":15,"value":951},{"type":10,"tag":543,"props":1268,"children":1269},{"style":562},[1270],{"type":15,"value":956},{"type":10,"tag":543,"props":1272,"children":1274},{"class":545,"line":1273},25,[1275],{"type":10,"tag":543,"props":1276,"children":1277},{"style":562},[1278],{"type":15,"value":1279}," VkDescriptorType type;\n",{"type":10,"tag":543,"props":1281,"children":1283},{"class":545,"line":1282},26,[1284],{"type":10,"tag":543,"props":1285,"children":1286},{"style":562},[1287],{"type":15,"value":1288}," VkDescriptorDataEXT data;\n",{"type":10,"tag":543,"props":1290,"children":1292},{"class":545,"line":1291},27,[1293],{"type":10,"tag":543,"props":1294,"children":1295},{"style":562},[1296],{"type":15,"value":1297},"} VkDescriptorGetInfoEXT;\n",{"type":10,"tag":543,"props":1299,"children":1301},{"class":545,"line":1300},28,[1302],{"type":10,"tag":543,"props":1303,"children":1304},{"emptyLinePlaceholder":634},[1305],{"type":15,"value":637},{"type":10,"tag":543,"props":1307,"children":1309},{"class":545,"line":1308},29,[1310,1314,1319],{"type":10,"tag":543,"props":1311,"children":1312},{"style":550},[1313],{"type":15,"value":553},{"type":10,"tag":543,"props":1315,"children":1316},{"style":556},[1317],{"type":15,"value":1318}," vkGetDescriptorEXT",{"type":10,"tag":543,"props":1320,"children":1321},{"style":562},[1322],{"type":15,"value":565},{"type":10,"tag":543,"props":1324,"children":1326},{"class":545,"line":1325},30,[1327],{"type":10,"tag":543,"props":1328,"children":1329},{"style":562},[1330],{"type":15,"value":1331}," VkDevice device\n",{"type":10,"tag":543,"props":1333,"children":1335},{"class":545,"line":1334},31,[1336,1340,1345,1349,1354],{"type":10,"tag":543,"props":1337,"children":1338},{"style":550},[1339],{"type":15,"value":946},{"type":10,"tag":543,"props":1341,"children":1342},{"style":562},[1343],{"type":15,"value":1344}," VkDescriptorGetInfoEXT",{"type":10,"tag":543,"props":1346,"children":1347},{"style":550},[1348],{"type":15,"value":617},{"type":10,"tag":543,"props":1350,"children":1351},{"style":577},[1352],{"type":15,"value":1353}," pCreateInfo",{"type":10,"tag":543,"props":1355,"children":1356},{"style":562},[1357],{"type":15,"value":585},{"type":10,"tag":543,"props":1359,"children":1361},{"class":545,"line":1360},32,[1362,1367,1372],{"type":10,"tag":543,"props":1363,"children":1364},{"style":550},[1365],{"type":15,"value":1366}," size_t",{"type":10,"tag":543,"props":1368,"children":1369},{"style":577},[1370],{"type":15,"value":1371}," dataSize",{"type":10,"tag":543,"props":1373,"children":1374},{"style":562},[1375],{"type":15,"value":585},{"type":10,"tag":543,"props":1377,"children":1379},{"class":545,"line":1378},33,[1380,1385,1390],{"type":10,"tag":543,"props":1381,"children":1382},{"style":550},[1383],{"type":15,"value":1384}," void*",{"type":10,"tag":543,"props":1386,"children":1387},{"style":577},[1388],{"type":15,"value":1389}," pDescriptor",{"type":10,"tag":543,"props":1391,"children":1392},{"style":562},[1393],{"type":15,"value":627},{"type":10,"tag":11,"props":1395,"children":1396},{},[1397],{"type":15,"value":1398},"These APIs extract raw descriptor blob data from objects. The data obtained from these calls can be freely copied around.\nNote that these calls do not know anything about descriptor set layouts. It is the application’s responsibility to write descriptors to a suitable location.",{"type":10,"tag":11,"props":1400,"children":1401},{},[1402,1404,1411],{"type":15,"value":1403},"A notable change here is that there is no longer any need for ",{"type":10,"tag":124,"props":1405,"children":1408},{"href":1406,"rel":1407},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkBufferView.html",[128],[1409],{"type":15,"value":1410},"VkBufferView",{"type":15,"value":1412}," objects.\nTexel buffers are built from buffer device addresses and format instead.\nThis improvement is motivated by DX12 portability.\nIn some use cases, texel buffers are linearly allocated and having to create and manage a large number of unique view objects is problematic.\nWith descriptor buffers, this style of API is now feasible in Vulkan.",{"type":10,"tag":11,"props":1414,"children":1415},{},[1416],{"type":15,"value":1417},"A similar improvement is that uniform buffers and storage buffer also take buffer device addresses.",{"type":10,"tag":11,"props":1419,"children":1420},{},[1421,1423,1429,1431,1437],{"type":15,"value":1422},"Acceleration structure descriptors are also built from device addresses, or handles retrieved from ",{"type":10,"tag":42,"props":1424,"children":1426},{"className":1425},[],[1427],{"type":15,"value":1428},"vkGetAccelerationStructureHandleNV",{"type":15,"value":1430}," when using ",{"type":10,"tag":42,"props":1432,"children":1434},{"className":1433},[],[1435],{"type":15,"value":1436},"VkAccelerationStructureNV",{"type":15,"value":1438}," objects.",{"type":10,"tag":11,"props":1440,"children":1441},{},[1442,1444,1450],{"type":15,"value":1443},"Inline uniform buffers do not have a descriptor data getter API associated with them.\nInstead, the descriptor data is copied directly into the buffer offset obtained by ",{"type":10,"tag":42,"props":1445,"children":1447},{"className":1446},[],[1448],{"type":15,"value":1449},"vkGetDescriptorSetLayoutBindingOffsetEXT",{"type":15,"value":1451},".\nAs the name suggests, inline uniform buffers are embedded into the descriptor set itself.",{"type":10,"tag":11,"props":1453,"children":1454},{},[1455,1457,1463],{"type":15,"value":1456},"As descriptors are now in regular memory, drivers cannot hide copies of immutable samplers that end up in descriptor sets from the application.\nAs such, applications are required to provide these samplers as if they were not provided immutably.\nThese samplers must have identical parameters to the immutable samplers in the descriptor set layout.\nAlternatively, applications can use dedicated descriptor sets for immutable samplers that do not require app-managed memory, by ",{"type":10,"tag":124,"props":1458,"children":1460},{"href":1459},"/404#_embedded_immutable_samplers",[1461],{"type":15,"value":1462},"embedding them in a special descriptor set",{"type":15,"value":479},{"type":10,"tag":11,"props":1465,"children":1466},{},[1467,1469,1475,1477,1483,1485,1492,1494,1500,1502,1508,1510,1516,1518,1524],{"type":15,"value":1468},"If the ",{"type":10,"tag":42,"props":1470,"children":1472},{"className":1471},[],[1473],{"type":15,"value":1474},"descriptorBufferImageLayoutIgnored",{"type":15,"value":1476}," feature is enabled, the ",{"type":10,"tag":42,"props":1478,"children":1480},{"className":1479},[],[1481],{"type":15,"value":1482},"imageLayout",{"type":15,"value":1484}," in ",{"type":10,"tag":124,"props":1486,"children":1489},{"href":1487,"rel":1488},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkDescriptorImageInfo.html",[128],[1490],{"type":15,"value":1491},"VkDescriptorImageInfo",{"type":15,"value":1493}," is ignored, otherwise it specifies the layout that the descriptor will be used with.\n",{"type":10,"tag":42,"props":1495,"children":1497},{"className":1496},[],[1498],{"type":15,"value":1499},"type",{"type":15,"value":1501}," must not be ",{"type":10,"tag":42,"props":1503,"children":1505},{"className":1504},[],[1506],{"type":15,"value":1507},"VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC",{"type":15,"value":1509}," or ",{"type":10,"tag":42,"props":1511,"children":1513},{"className":1512},[],[1514],{"type":15,"value":1515},"VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC",{"type":15,"value":1517},".\n'format' in ",{"type":10,"tag":42,"props":1519,"children":1521},{"className":1520},[],[1522],{"type":15,"value":1523},"VkDescriptorAddressInfoEXT",{"type":15,"value":1525}," is ignored for non-texel buffers.",{"type":10,"tag":11,"props":1527,"children":1528},{},[1529,1531,1537,1539,1545,1547,1553,1555,1560,1562,1568,1570,1575],{"type":15,"value":1530},"The ",{"type":10,"tag":42,"props":1532,"children":1534},{"className":1533},[],[1535],{"type":15,"value":1536},"combinedImageSamplerDescriptorSingleArray",{"type":15,"value":1538}," property indicates that the implementation does not require an array of ",{"type":10,"tag":42,"props":1540,"children":1542},{"className":1541},[],[1543],{"type":15,"value":1544},"VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER",{"type":15,"value":1546}," descriptors to be written into a descriptor buffer as an array of image descriptors, immediately followed by an array of sampler descriptors. If ",{"type":10,"tag":42,"props":1548,"children":1550},{"className":1549},[],[1551],{"type":15,"value":1552},"VK_FALSE",{"type":15,"value":1554},", applications are expected to write the first ",{"type":10,"tag":42,"props":1556,"children":1558},{"className":1557},[],[1559],{"type":15,"value":761},{"type":15,"value":1561}," bytes of the data returned through ",{"type":10,"tag":42,"props":1563,"children":1565},{"className":1564},[],[1566],{"type":15,"value":1567},"pDescriptor",{"type":15,"value":1569}," to the first array, and the remaining ",{"type":10,"tag":42,"props":1571,"children":1573},{"className":1572},[],[1574],{"type":15,"value":746},{"type":15,"value":1576}," bytes of the data to the second array.\nOn these implementations, variable descriptor counts of combined image samplers may be supported, but it is not useful as the descriptor set size must assume the upper bound.",{"type":10,"tag":373,"props":1578,"children":1580},{"id":1579},"_embedded_immutable_samplers",[1581],{"type":15,"value":1582},"Embedded Immutable Samplers",{"type":10,"tag":11,"props":1584,"children":1585},{},[1586],{"type":15,"value":1587},"Immutable samplers can be embedded into descriptor layouts, allowing them to be bound without disturbing descriptor buffer bindings or requiring device memory backing.\nDescriptor set layouts must be created with a new flag for this purpose:",{"type":10,"tag":532,"props":1589,"children":1591},{"className":534,"code":1590,"language":536,"meta":537,"style":537},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT = 0x00000020\n",[1592],{"type":10,"tag":42,"props":1593,"children":1594},{"__ignoreMap":537},[1595],{"type":10,"tag":543,"props":1596,"children":1597},{"class":545,"line":546},[1598,1603,1607,1611],{"type":10,"tag":543,"props":1599,"children":1600},{"style":562},[1601],{"type":15,"value":1602},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT ",{"type":10,"tag":543,"props":1604,"children":1605},{"style":550},[1606],{"type":15,"value":881},{"type":10,"tag":543,"props":1608,"children":1609},{"style":550},[1610],{"type":15,"value":886},{"type":10,"tag":543,"props":1612,"children":1613},{"style":889},[1614],{"type":15,"value":1615},"00000020\n",{"type":10,"tag":11,"props":1617,"children":1618},{},[1619,1621,1627,1629,1635,1637,1643,1644,1650,1652,1658],{"type":15,"value":1620},"When this flag is used, this set layout can only contain descriptor bindings with a ",{"type":10,"tag":42,"props":1622,"children":1624},{"className":1623},[],[1625],{"type":15,"value":1626},"descriptorType",{"type":15,"value":1628}," of ",{"type":10,"tag":42,"props":1630,"children":1632},{"className":1631},[],[1633],{"type":15,"value":1634},"VK_DESCRIPTOR_TYPE_SAMPLER",{"type":15,"value":1636},", a ",{"type":10,"tag":42,"props":1638,"children":1640},{"className":1639},[],[1641],{"type":15,"value":1642},"descriptorCount",{"type":15,"value":1628},{"type":10,"tag":42,"props":1645,"children":1647},{"className":1646},[],[1648],{"type":15,"value":1649},"1",{"type":15,"value":1651}," (i.e. not arrayed), and a valid ",{"type":10,"tag":42,"props":1653,"children":1655},{"className":1654},[],[1656],{"type":15,"value":1657},"VkSampler used in `pImmutableSamplers",{"type":15,"value":1659},".\nNote that arrays of immutable samplers are not supported, as implementations typically need these in memory to allow dynamic indexing - whereas no device memory is directly associated with these sets.",{"type":10,"tag":228,"props":1661,"children":1663},{"id":1662},"_pipeline_creation",[1664],{"type":15,"value":1665},"Pipeline creation",{"type":10,"tag":11,"props":1667,"children":1668},{},[1669,1671,1677],{"type":15,"value":1670},"To use pipelines with descriptor buffers a new ",{"type":10,"tag":42,"props":1672,"children":1674},{"className":1673},[],[1675],{"type":15,"value":1676},"VkPipelineCreateFlag",{"type":15,"value":1678}," must be used:",{"type":10,"tag":532,"props":1680,"children":1682},{"className":534,"code":1681,"language":536,"meta":537,"style":537},"VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT = 0x20000000\n",[1683],{"type":10,"tag":42,"props":1684,"children":1685},{"__ignoreMap":537},[1686],{"type":10,"tag":543,"props":1687,"children":1688},{"class":545,"line":546},[1689,1694,1698,1702],{"type":10,"tag":543,"props":1690,"children":1691},{"style":562},[1692],{"type":15,"value":1693},"VK_PIPELINE_CREATE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":1695,"children":1696},{"style":550},[1697],{"type":15,"value":881},{"type":10,"tag":543,"props":1699,"children":1700},{"style":550},[1701],{"type":15,"value":886},{"type":10,"tag":543,"props":1703,"children":1704},{"style":889},[1705],{"type":15,"value":1706},"20000000\n",{"type":10,"tag":228,"props":1708,"children":1710},{"id":1709},"_descriptor_binding",[1711],{"type":15,"value":1712},"Descriptor Binding",{"type":10,"tag":11,"props":1714,"children":1715},{},[1716],{"type":15,"value":1717},"Descriptor buffers are bound to the command buffer directly (similar to vertex buffers).",{"type":10,"tag":532,"props":1719,"children":1721},{"className":534,"code":1720,"language":536,"meta":537,"style":537},"typedef struct VkDescriptorBufferBindingPushDescriptorBufferHandleEXT {\n VkStructureType sType;\n const void* pNext;\n VkBuffer buffer;\n} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT;\n\ntypedef struct VkDescriptorBufferBindingInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkDeviceAddress address;\n VkBufferUsageFlags usage;\n} VkDescriptorBufferBindingInfoEXT;\n\nvkCmdBindDescriptorBuffersEXT(\n VkCommandBuffer commandBuffer,\n uint32_t bufferCount,\n const VkDescriptorBufferBindingInfoEXT* pBindingInfos);\n",[1722],{"type":10,"tag":42,"props":1723,"children":1724},{"__ignoreMap":537},[1725,1741,1749,1765,1773,1781,1788,1804,1811,1826,1834,1842,1850,1857,1869,1886,1902],{"type":10,"tag":543,"props":1726,"children":1727},{"class":545,"line":546},[1728,1732,1736],{"type":10,"tag":543,"props":1729,"children":1730},{"style":550},[1731],{"type":15,"value":920},{"type":10,"tag":543,"props":1733,"children":1734},{"style":550},[1735],{"type":15,"value":925},{"type":10,"tag":543,"props":1737,"children":1738},{"style":562},[1739],{"type":15,"value":1740}," VkDescriptorBufferBindingPushDescriptorBufferHandleEXT {\n",{"type":10,"tag":543,"props":1742,"children":1743},{"class":545,"line":568},[1744],{"type":10,"tag":543,"props":1745,"children":1746},{"style":562},[1747],{"type":15,"value":1748}," VkStructureType sType;\n",{"type":10,"tag":543,"props":1750,"children":1751},{"class":545,"line":588},[1752,1756,1760],{"type":10,"tag":543,"props":1753,"children":1754},{"style":550},[1755],{"type":15,"value":946},{"type":10,"tag":543,"props":1757,"children":1758},{"style":550},[1759],{"type":15,"value":951},{"type":10,"tag":543,"props":1761,"children":1762},{"style":562},[1763],{"type":15,"value":1764}," pNext;\n",{"type":10,"tag":543,"props":1766,"children":1767},{"class":545,"line":606},[1768],{"type":10,"tag":543,"props":1769,"children":1770},{"style":562},[1771],{"type":15,"value":1772}," VkBuffer buffer;\n",{"type":10,"tag":543,"props":1774,"children":1775},{"class":545,"line":630},[1776],{"type":10,"tag":543,"props":1777,"children":1778},{"style":562},[1779],{"type":15,"value":1780},"} VkDescriptorBufferBindingPushDescriptorBufferHandleEXT;\n",{"type":10,"tag":543,"props":1782,"children":1783},{"class":545,"line":640},[1784],{"type":10,"tag":543,"props":1785,"children":1786},{"emptyLinePlaceholder":634},[1787],{"type":15,"value":637},{"type":10,"tag":543,"props":1789,"children":1790},{"class":545,"line":657},[1791,1795,1799],{"type":10,"tag":543,"props":1792,"children":1793},{"style":550},[1794],{"type":15,"value":920},{"type":10,"tag":543,"props":1796,"children":1797},{"style":550},[1798],{"type":15,"value":925},{"type":10,"tag":543,"props":1800,"children":1801},{"style":562},[1802],{"type":15,"value":1803}," VkDescriptorBufferBindingInfoEXT {\n",{"type":10,"tag":543,"props":1805,"children":1806},{"class":545,"line":673},[1807],{"type":10,"tag":543,"props":1808,"children":1809},{"style":562},[1810],{"type":15,"value":1748},{"type":10,"tag":543,"props":1812,"children":1813},{"class":545,"line":689},[1814,1818,1822],{"type":10,"tag":543,"props":1815,"children":1816},{"style":550},[1817],{"type":15,"value":946},{"type":10,"tag":543,"props":1819,"children":1820},{"style":550},[1821],{"type":15,"value":951},{"type":10,"tag":543,"props":1823,"children":1824},{"style":562},[1825],{"type":15,"value":1764},{"type":10,"tag":543,"props":1827,"children":1828},{"class":545,"line":707},[1829],{"type":10,"tag":543,"props":1830,"children":1831},{"style":562},[1832],{"type":15,"value":1833}," VkDeviceAddress address;\n",{"type":10,"tag":543,"props":1835,"children":1836},{"class":545,"line":1036},[1837],{"type":10,"tag":543,"props":1838,"children":1839},{"style":562},[1840],{"type":15,"value":1841}," VkBufferUsageFlags usage;\n",{"type":10,"tag":543,"props":1843,"children":1844},{"class":545,"line":1058},[1845],{"type":10,"tag":543,"props":1846,"children":1847},{"style":562},[1848],{"type":15,"value":1849},"} VkDescriptorBufferBindingInfoEXT;\n",{"type":10,"tag":543,"props":1851,"children":1852},{"class":545,"line":1079},[1853],{"type":10,"tag":543,"props":1854,"children":1855},{"emptyLinePlaceholder":634},[1856],{"type":15,"value":637},{"type":10,"tag":543,"props":1858,"children":1859},{"class":545,"line":1100},[1860,1865],{"type":10,"tag":543,"props":1861,"children":1862},{"style":556},[1863],{"type":15,"value":1864},"vkCmdBindDescriptorBuffersEXT",{"type":10,"tag":543,"props":1866,"children":1867},{"style":562},[1868],{"type":15,"value":565},{"type":10,"tag":543,"props":1870,"children":1871},{"class":545,"line":1121},[1872,1877,1882],{"type":10,"tag":543,"props":1873,"children":1874},{"style":562},[1875],{"type":15,"value":1876}," VkCommandBuffer ",{"type":10,"tag":543,"props":1878,"children":1879},{"style":577},[1880],{"type":15,"value":1881},"commandBuffer",{"type":10,"tag":543,"props":1883,"children":1884},{"style":562},[1885],{"type":15,"value":585},{"type":10,"tag":543,"props":1887,"children":1888},{"class":545,"line":1143},[1889,1893,1898],{"type":10,"tag":543,"props":1890,"children":1891},{"style":550},[1892],{"type":15,"value":695},{"type":10,"tag":543,"props":1894,"children":1895},{"style":577},[1896],{"type":15,"value":1897}," bufferCount",{"type":10,"tag":543,"props":1899,"children":1900},{"style":562},[1901],{"type":15,"value":585},{"type":10,"tag":543,"props":1903,"children":1904},{"class":545,"line":1164},[1905,1909,1914,1918,1923],{"type":10,"tag":543,"props":1906,"children":1907},{"style":550},[1908],{"type":15,"value":946},{"type":10,"tag":543,"props":1910,"children":1911},{"style":562},[1912],{"type":15,"value":1913}," VkDescriptorBufferBindingInfoEXT",{"type":10,"tag":543,"props":1915,"children":1916},{"style":550},[1917],{"type":15,"value":617},{"type":10,"tag":543,"props":1919,"children":1920},{"style":577},[1921],{"type":15,"value":1922}," pBindingInfos",{"type":10,"tag":543,"props":1924,"children":1925},{"style":562},[1926],{"type":15,"value":627},{"type":10,"tag":11,"props":1928,"children":1929},{},[1930],{"type":15,"value":1931},"Unlike binding descriptor sets, there’s no invalidating going on with this binding – a buffer remains bound and is interpreted by a pipeline in the manner the pipeline expects, irrespective of what layout was used to construct the buffer for each set.",{"type":10,"tag":11,"props":1933,"children":1934},{},[1935,1937,1943,1945,1951],{"type":15,"value":1936},"There must be no more than ",{"type":10,"tag":42,"props":1938,"children":1940},{"className":1939},[],[1941],{"type":15,"value":1942},"maxSamplerDescriptorBufferBindings",{"type":15,"value":1944}," descriptor buffers containing sampler descriptor data bound.\nSuch buffers must be created with ",{"type":10,"tag":42,"props":1946,"children":1948},{"className":1947},[],[1949],{"type":15,"value":1950},"VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT",{"type":15,"value":479},{"type":10,"tag":11,"props":1953,"children":1954},{},[1955,1956,1962,1964,1970],{"type":15,"value":1936},{"type":10,"tag":42,"props":1957,"children":1959},{"className":1958},[],[1960],{"type":15,"value":1961},"maxResourceDescriptorBufferBindings",{"type":15,"value":1963}," descriptor buffers containing resource descriptors bound.\nSuch buffers must be bound with ",{"type":10,"tag":42,"props":1965,"children":1967},{"className":1966},[],[1968],{"type":15,"value":1969},"VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT",{"type":15,"value":479},{"type":10,"tag":11,"props":1972,"children":1973},{},[1974],{"type":15,"value":1975},"If a buffer contains both usage flags, it counts once against both limits.",{"type":10,"tag":11,"props":1977,"children":1978},{},[1979,1980,1986,1988,1993,1995,2001,2003,2009,2011,2017,2019,2025],{"type":15,"value":1468},{"type":10,"tag":42,"props":1981,"children":1983},{"className":1982},[],[1984],{"type":15,"value":1985},"bufferlessPushDescriptors",{"type":15,"value":1987}," property is ",{"type":10,"tag":42,"props":1989,"children":1991},{"className":1990},[],[1992],{"type":15,"value":1552},{"type":15,"value":1994}," and a buffer contains the ",{"type":10,"tag":42,"props":1996,"children":1998},{"className":1997},[],[1999],{"type":15,"value":2000},"VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT",{"type":15,"value":2002}," usage flag, a ",{"type":10,"tag":42,"props":2004,"children":2006},{"className":2005},[],[2007],{"type":15,"value":2008},"VkDescriptorBufferBindingPushDescriptorBufferHandleEXT",{"type":15,"value":2010}," structure must be added to the ",{"type":10,"tag":42,"props":2012,"children":2014},{"className":2013},[],[2015],{"type":15,"value":2016},"pNext",{"type":15,"value":2018}," chain of ",{"type":10,"tag":42,"props":2020,"children":2022},{"className":2021},[],[2023],{"type":15,"value":2024},"VkDescriptorBufferBindingInfoEXT",{"type":15,"value":479},{"type":10,"tag":11,"props":2027,"children":2028},{},[2029,2035,2037,2043],{"type":10,"tag":42,"props":2030,"children":2032},{"className":2031},[],[2033],{"type":15,"value":2034},"bufferCount",{"type":15,"value":2036}," must be less than or equal to ",{"type":10,"tag":42,"props":2038,"children":2040},{"className":2039},[],[2041],{"type":15,"value":2042},"maxDescriptorBufferBindings",{"type":15,"value":479},{"type":10,"tag":11,"props":2045,"children":2046},{},[2047,2049,2054],{"type":15,"value":2048},"Any previously bound buffers at binding points greater than or equal to ",{"type":10,"tag":42,"props":2050,"children":2052},{"className":2051},[],[2053],{"type":15,"value":2034},{"type":15,"value":2055}," are unbound.",{"type":10,"tag":11,"props":2057,"children":2058},{},[2059,2061,2067],{"type":15,"value":2060},"Each entry in ",{"type":10,"tag":42,"props":2062,"children":2064},{"className":2063},[],[2065],{"type":15,"value":2066},"pBindingInfos",{"type":15,"value":2068}," contains the device address of a descriptor buffer and the usage flags that the buffer was created with.",{"type":10,"tag":11,"props":2070,"children":2071},{},[2072],{"type":15,"value":2073},"Changing buffers may be an expensive operation and should be done infrequently (if ever).",{"type":10,"tag":11,"props":2075,"children":2076},{},[2077,2079,2085,2087,2093],{"type":15,"value":2078},"The maximum available range of each binding to a shader is ",{"type":10,"tag":42,"props":2080,"children":2082},{"className":2081},[],[2083],{"type":15,"value":2084},"maxSamplerDescriptorBufferRange",{"type":15,"value":2086}," and/or ",{"type":10,"tag":42,"props":2088,"children":2090},{"className":2089},[],[2091],{"type":15,"value":2092},"maxResourceDescriptorBufferRange",{"type":15,"value":479},{"type":10,"tag":11,"props":2095,"children":2096},{},[2097,2098,2104,2105,2111,2113,2119],{"type":15,"value":1530},{"type":10,"tag":42,"props":2099,"children":2101},{"className":2100},[],[2102],{"type":15,"value":2103},"samplerDescriptorBufferAddressSpaceSize",{"type":15,"value":748},{"type":10,"tag":42,"props":2106,"children":2108},{"className":2107},[],[2109],{"type":15,"value":2110},"resourceDescriptorBufferAddressSpaceSize",{"type":15,"value":2112},", and ",{"type":10,"tag":42,"props":2114,"children":2116},{"className":2115},[],[2117],{"type":15,"value":2118},"descriptorBufferAddressSpaceSize",{"type":15,"value":2120}," properties\ngive the upper bound for the total amount of address space used for descriptor buffers.",{"type":10,"tag":11,"props":2122,"children":2123},{},[2124],{"type":15,"value":2125},"Buffers used for this purpose need to be created with a new usage flags:",{"type":10,"tag":532,"props":2127,"children":2129},{"className":534,"code":2128,"language":536,"meta":537,"style":537},"VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT = 0x00200000\nVK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT = 0x00400000\n",[2130],{"type":10,"tag":42,"props":2131,"children":2132},{"__ignoreMap":537},[2133,2154],{"type":10,"tag":543,"props":2134,"children":2135},{"class":545,"line":546},[2136,2141,2145,2149],{"type":10,"tag":543,"props":2137,"children":2138},{"style":562},[2139],{"type":15,"value":2140},"VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":2142,"children":2143},{"style":550},[2144],{"type":15,"value":881},{"type":10,"tag":543,"props":2146,"children":2147},{"style":550},[2148],{"type":15,"value":886},{"type":10,"tag":543,"props":2150,"children":2151},{"style":889},[2152],{"type":15,"value":2153},"00200000\n",{"type":10,"tag":543,"props":2155,"children":2156},{"class":545,"line":568},[2157,2162,2166,2170],{"type":10,"tag":543,"props":2158,"children":2159},{"style":562},[2160],{"type":15,"value":2161},"VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":2163,"children":2164},{"style":550},[2165],{"type":15,"value":881},{"type":10,"tag":543,"props":2167,"children":2168},{"style":550},[2169],{"type":15,"value":886},{"type":10,"tag":543,"props":2171,"children":2172},{"style":889},[2173],{"type":15,"value":2174},"00400000\n",{"type":10,"tag":11,"props":2176,"children":2177},{},[2178,2183,2185,2190,2192,2197,2199,2204,2205,2210],{"type":10,"tag":42,"props":2179,"children":2181},{"className":2180},[],[2182],{"type":15,"value":1950},{"type":15,"value":2184}," specifies that the buffer will be used to contain sampler descriptors when bound as a descriptor buffer.\n",{"type":10,"tag":42,"props":2186,"children":2188},{"className":2187},[],[2189],{"type":15,"value":1969},{"type":15,"value":2191}," specifies that the buffer will be used to contain resource descriptors, i.e. non-sampler descriptors, when bound as a descriptor buffer.\nBuffers containing ",{"type":10,"tag":42,"props":2193,"children":2195},{"className":2194},[],[2196],{"type":15,"value":1544},{"type":15,"value":2198}," descriptors must have been created with both ",{"type":10,"tag":42,"props":2200,"children":2202},{"className":2201},[],[2203],{"type":15,"value":1950},{"type":15,"value":141},{"type":10,"tag":42,"props":2206,"children":2208},{"className":2207},[],[2209],{"type":15,"value":1969},{"type":15,"value":479},{"type":10,"tag":11,"props":2212,"children":2213},{},[2214],{"type":15,"value":2215},"Each descriptor set is associated with a buffer and an offset into that buffer which can be set by:",{"type":10,"tag":532,"props":2217,"children":2219},{"className":534,"code":2218,"language":536,"meta":537,"style":537},"vkCmdSetDescriptorBufferOffsetsEXT(\n VkCommandBuffer commandBuffer,\n VkPipelineBindPoint pipelineBindPoint,\n VkPipelineLayout layout,\n uint32_t firstSet,\n uint32_t setCount,\n const uint32_t* pBufferIndices,\n const VkDeviceSize* pOffsets);\n",[2220],{"type":10,"tag":42,"props":2221,"children":2222},{"__ignoreMap":537},[2223,2235,2250,2267,2283,2299,2315,2336],{"type":10,"tag":543,"props":2224,"children":2225},{"class":545,"line":546},[2226,2231],{"type":10,"tag":543,"props":2227,"children":2228},{"style":556},[2229],{"type":15,"value":2230},"vkCmdSetDescriptorBufferOffsetsEXT",{"type":10,"tag":543,"props":2232,"children":2233},{"style":562},[2234],{"type":15,"value":565},{"type":10,"tag":543,"props":2236,"children":2237},{"class":545,"line":568},[2238,2242,2246],{"type":10,"tag":543,"props":2239,"children":2240},{"style":562},[2241],{"type":15,"value":1876},{"type":10,"tag":543,"props":2243,"children":2244},{"style":577},[2245],{"type":15,"value":1881},{"type":10,"tag":543,"props":2247,"children":2248},{"style":562},[2249],{"type":15,"value":585},{"type":10,"tag":543,"props":2251,"children":2252},{"class":545,"line":588},[2253,2258,2263],{"type":10,"tag":543,"props":2254,"children":2255},{"style":562},[2256],{"type":15,"value":2257}," VkPipelineBindPoint ",{"type":10,"tag":543,"props":2259,"children":2260},{"style":577},[2261],{"type":15,"value":2262},"pipelineBindPoint",{"type":10,"tag":543,"props":2264,"children":2265},{"style":562},[2266],{"type":15,"value":585},{"type":10,"tag":543,"props":2268,"children":2269},{"class":545,"line":606},[2270,2275,2279],{"type":10,"tag":543,"props":2271,"children":2272},{"style":562},[2273],{"type":15,"value":2274}," VkPipelineLayout ",{"type":10,"tag":543,"props":2276,"children":2277},{"style":577},[2278],{"type":15,"value":599},{"type":10,"tag":543,"props":2280,"children":2281},{"style":562},[2282],{"type":15,"value":585},{"type":10,"tag":543,"props":2284,"children":2285},{"class":545,"line":630},[2286,2290,2295],{"type":10,"tag":543,"props":2287,"children":2288},{"style":550},[2289],{"type":15,"value":695},{"type":10,"tag":543,"props":2291,"children":2292},{"style":577},[2293],{"type":15,"value":2294}," firstSet",{"type":10,"tag":543,"props":2296,"children":2297},{"style":562},[2298],{"type":15,"value":585},{"type":10,"tag":543,"props":2300,"children":2301},{"class":545,"line":640},[2302,2306,2311],{"type":10,"tag":543,"props":2303,"children":2304},{"style":550},[2305],{"type":15,"value":695},{"type":10,"tag":543,"props":2307,"children":2308},{"style":577},[2309],{"type":15,"value":2310}," setCount",{"type":10,"tag":543,"props":2312,"children":2313},{"style":562},[2314],{"type":15,"value":585},{"type":10,"tag":543,"props":2316,"children":2317},{"class":545,"line":657},[2318,2322,2327,2332],{"type":10,"tag":543,"props":2319,"children":2320},{"style":550},[2321],{"type":15,"value":946},{"type":10,"tag":543,"props":2323,"children":2324},{"style":550},[2325],{"type":15,"value":2326}," uint32_t*",{"type":10,"tag":543,"props":2328,"children":2329},{"style":577},[2330],{"type":15,"value":2331}," pBufferIndices",{"type":10,"tag":543,"props":2333,"children":2334},{"style":562},[2335],{"type":15,"value":585},{"type":10,"tag":543,"props":2337,"children":2338},{"class":545,"line":673},[2339,2343,2348,2352,2357],{"type":10,"tag":543,"props":2340,"children":2341},{"style":550},[2342],{"type":15,"value":946},{"type":10,"tag":543,"props":2344,"children":2345},{"style":562},[2346],{"type":15,"value":2347}," VkDeviceSize",{"type":10,"tag":543,"props":2349,"children":2350},{"style":550},[2351],{"type":15,"value":617},{"type":10,"tag":543,"props":2353,"children":2354},{"style":577},[2355],{"type":15,"value":2356}," pOffsets",{"type":10,"tag":543,"props":2358,"children":2359},{"style":562},[2360],{"type":15,"value":627},{"type":10,"tag":11,"props":2362,"children":2363},{},[2364,2369,2371,2376,2378,2383],{"type":10,"tag":42,"props":2365,"children":2367},{"className":2366},[],[2368],{"type":15,"value":2230},{"type":15,"value":2370}," causes the sets numbered [firstSet.. firstSet+setCount-1] to use the bindings stored in the buffer bound at pBufferIndices[i] at an offset of pOffsets[i] for subsequent bound pipeline commands set by pipelineBindPoint. Any bindings that were previously applied via these sets, or calls to ",{"type":10,"tag":42,"props":2372,"children":2374},{"className":2373},[],[2375],{"type":15,"value":332},{"type":15,"value":2377},", are no longer valid. Calling vkCmdBindDescriptorSets invalidates bindings previously applied via ",{"type":10,"tag":42,"props":2379,"children":2381},{"className":2380},[],[2382],{"type":15,"value":2230},{"type":15,"value":479},{"type":10,"tag":11,"props":2385,"children":2386},{},[2387,2389,2395],{"type":15,"value":2388},"Setting offsets should be a cheap operation and can be performed frequently.\nThe offsets must be aligned to ",{"type":10,"tag":42,"props":2390,"children":2392},{"className":2391},[],[2393],{"type":15,"value":2394},"descriptorBufferOffsetAlignment",{"type":15,"value":479},{"type":10,"tag":11,"props":2397,"children":2398},{},[2399,2404],{"type":10,"tag":124,"props":2400,"children":2401},{"href":1459},[2402],{"type":15,"value":2403},"Embedded immutable samplers",{"type":15,"value":2405}," can be bound using:",{"type":10,"tag":532,"props":2407,"children":2409},{"className":534,"code":2408,"language":536,"meta":537,"style":537},"vkCmdBindDescriptorBufferEmbeddedSamplersEXT(\n VkCommandBuffer commandBuffer,\n VkPipelineBindPoint pipelineBindPoint,\n VkPipelineLayout layout,\n uint32_t set)\n);\n",[2410],{"type":10,"tag":42,"props":2411,"children":2412},{"__ignoreMap":537},[2413,2425,2440,2455,2470,2487],{"type":10,"tag":543,"props":2414,"children":2415},{"class":545,"line":546},[2416,2421],{"type":10,"tag":543,"props":2417,"children":2418},{"style":556},[2419],{"type":15,"value":2420},"vkCmdBindDescriptorBufferEmbeddedSamplersEXT",{"type":10,"tag":543,"props":2422,"children":2423},{"style":562},[2424],{"type":15,"value":565},{"type":10,"tag":543,"props":2426,"children":2427},{"class":545,"line":568},[2428,2432,2436],{"type":10,"tag":543,"props":2429,"children":2430},{"style":562},[2431],{"type":15,"value":1876},{"type":10,"tag":543,"props":2433,"children":2434},{"style":577},[2435],{"type":15,"value":1881},{"type":10,"tag":543,"props":2437,"children":2438},{"style":562},[2439],{"type":15,"value":585},{"type":10,"tag":543,"props":2441,"children":2442},{"class":545,"line":588},[2443,2447,2451],{"type":10,"tag":543,"props":2444,"children":2445},{"style":562},[2446],{"type":15,"value":2257},{"type":10,"tag":543,"props":2448,"children":2449},{"style":577},[2450],{"type":15,"value":2262},{"type":10,"tag":543,"props":2452,"children":2453},{"style":562},[2454],{"type":15,"value":585},{"type":10,"tag":543,"props":2456,"children":2457},{"class":545,"line":606},[2458,2462,2466],{"type":10,"tag":543,"props":2459,"children":2460},{"style":562},[2461],{"type":15,"value":2274},{"type":10,"tag":543,"props":2463,"children":2464},{"style":577},[2465],{"type":15,"value":599},{"type":10,"tag":543,"props":2467,"children":2468},{"style":562},[2469],{"type":15,"value":585},{"type":10,"tag":543,"props":2471,"children":2472},{"class":545,"line":630},[2473,2477,2482],{"type":10,"tag":543,"props":2474,"children":2475},{"style":550},[2476],{"type":15,"value":695},{"type":10,"tag":543,"props":2478,"children":2479},{"style":577},[2480],{"type":15,"value":2481}," set",{"type":10,"tag":543,"props":2483,"children":2484},{"style":562},[2485],{"type":15,"value":2486},")\n",{"type":10,"tag":543,"props":2488,"children":2489},{"class":545,"line":640},[2490],{"type":10,"tag":543,"props":2491,"children":2492},{"style":562},[2493],{"type":15,"value":627},{"type":10,"tag":11,"props":2495,"children":2496},{},[2497,2502,2504,2509,2511,2517,2519,2525,2527,2532,2534,2539,2540,2545,2547,2553,2555,2561],{"type":10,"tag":42,"props":2498,"children":2500},{"className":2499},[],[2501],{"type":15,"value":2420},{"type":15,"value":2503}," binds the embedded immutable samplers in ",{"type":10,"tag":42,"props":2505,"children":2507},{"className":2506},[],[2508],{"type":15,"value":599},{"type":15,"value":2510}," at set index ",{"type":10,"tag":42,"props":2512,"children":2514},{"className":2513},[],[2515],{"type":15,"value":2516},"set",{"type":15,"value":2518}," to the same set in the command buffer.\nSet bindings are invalidated in the same manner as they are for ",{"type":10,"tag":42,"props":2520,"children":2522},{"className":2521},[],[2523],{"type":15,"value":2524},"vkCmdSetDescriptorBufferOffsetEXT",{"type":15,"value":2526},".\nThe ",{"type":10,"tag":42,"props":2528,"children":2530},{"className":2529},[],[2531],{"type":15,"value":249},{"type":15,"value":2533}," at index ",{"type":10,"tag":42,"props":2535,"children":2537},{"className":2536},[],[2538],{"type":15,"value":2516},{"type":15,"value":1628},{"type":10,"tag":42,"props":2541,"children":2543},{"className":2542},[],[2544],{"type":15,"value":599},{"type":15,"value":2546}," must have been created with the ",{"type":10,"tag":42,"props":2548,"children":2550},{"className":2549},[],[2551],{"type":15,"value":2552},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT",{"type":15,"value":2554}," bit.\nThere must be no more than ",{"type":10,"tag":42,"props":2556,"children":2558},{"className":2557},[],[2559],{"type":15,"value":2560},"maxEmbeddedImmutableSamplerBindings",{"type":15,"value":2562}," embedded immutable sampler sets bound.\nLike DX12, there is a limit to how many unique embedded immutable samplers may be alive in a device at any one point. This limit is designed to match DX12.",{"type":10,"tag":228,"props":2564,"children":2566},{"id":2565},"_descriptor_updates",[2567],{"type":15,"value":2568},"Descriptor Updates",{"type":10,"tag":11,"props":2570,"children":2571},{},[2572],{"type":15,"value":2573},"As descriptors are just a blob of memory, descriptor updates can be performed by any operation on either the host or device that can access memory, enabling a form of GPU descriptor update.\nDescriptor buffer reads can be synchronized using a new access bit in the relevant shader stage:",{"type":10,"tag":532,"props":2575,"children":2577},{"className":534,"code":2576,"language":536,"meta":537,"style":537},"VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT = 0x20000000000ULL\n",[2578],{"type":10,"tag":42,"props":2579,"children":2580},{"__ignoreMap":537},[2581],{"type":10,"tag":543,"props":2582,"children":2583},{"class":545,"line":546},[2584,2589,2593,2597,2602],{"type":10,"tag":543,"props":2585,"children":2586},{"style":562},[2587],{"type":15,"value":2588},"VK_ACCESS_2_DESCRIPTOR_BUFFER_READ_BIT_EXT ",{"type":10,"tag":543,"props":2590,"children":2591},{"style":550},[2592],{"type":15,"value":881},{"type":10,"tag":543,"props":2594,"children":2595},{"style":550},[2596],{"type":15,"value":886},{"type":10,"tag":543,"props":2598,"children":2599},{"style":889},[2600],{"type":15,"value":2601},"20000000000",{"type":10,"tag":543,"props":2603,"children":2604},{"style":550},[2605],{"type":15,"value":2606},"ULL\n",{"type":10,"tag":11,"props":2608,"children":2609},{},[2610,2612,2618],{"type":15,"value":2611},"Note that host writes are implicitly made visible to all stages in ",{"type":10,"tag":42,"props":2613,"children":2615},{"className":2614},[],[2616],{"type":15,"value":2617},"vkQueueSubmit",{"type":15,"value":2619},", so this access flag is only relevant when performing GPU-side updates of descriptors.",{"type":10,"tag":11,"props":2621,"children":2622},{},[2623,2624,2630,2631,2636,2638,2644,2645,2651,2653,2658,2660,2666],{"type":15,"value":1468},{"type":10,"tag":42,"props":2625,"children":2627},{"className":2626},[],[2628],{"type":15,"value":2629},"allowSamplerImageViewPostSubmitCreation",{"type":15,"value":1987},{"type":10,"tag":42,"props":2632,"children":2634},{"className":2633},[],[2635],{"type":15,"value":1552},{"type":15,"value":2637}," there are special requirements for when descriptor data for ",{"type":10,"tag":42,"props":2639,"children":2641},{"className":2640},[],[2642],{"type":15,"value":2643},"VkSampler",{"type":15,"value":1509},{"type":10,"tag":42,"props":2646,"children":2648},{"className":2647},[],[2649],{"type":15,"value":2650},"VkImageView",{"type":15,"value":2652}," objects can be used.\nThose objects must have been created before any ",{"type":10,"tag":42,"props":2654,"children":2656},{"className":2655},[],[2657],{"type":15,"value":2617},{"type":15,"value":2659}," (or ",{"type":10,"tag":42,"props":2661,"children":2663},{"className":2662},[],[2664],{"type":15,"value":2665},"vkQueueSubmit2",{"type":15,"value":2667},") call that executes a command buffer which accesses descriptor data for them.",{"type":10,"tag":11,"props":2669,"children":2670},{},[2671,2673,2678,2680,2685],{"type":15,"value":2672},"For example, if ",{"type":10,"tag":42,"props":2674,"children":2676},{"className":2675},[],[2677],{"type":15,"value":2629},{"type":15,"value":2679}," is ",{"type":10,"tag":42,"props":2681,"children":2683},{"className":2682},[],[2684],{"type":15,"value":1552},{"type":15,"value":2686},", this is disallowed:",{"type":10,"tag":56,"props":2688,"children":2689},{},[2690,2703,2713,2723],{"type":10,"tag":60,"props":2691,"children":2692},{},[2693,2695,2701],{"type":15,"value":2694},"Call ",{"type":10,"tag":42,"props":2696,"children":2698},{"className":2697},[],[2699],{"type":15,"value":2700},"vkQueueSubmit()",{"type":15,"value":2702}," which is waiting for a timeline semaphore",{"type":10,"tag":60,"props":2704,"children":2705},{},[2706,2708],{"type":15,"value":2707},"Create a ",{"type":10,"tag":42,"props":2709,"children":2711},{"className":2710},[],[2712],{"type":15,"value":2650},{"type":10,"tag":60,"props":2714,"children":2715},{},[2716,2718],{"type":15,"value":2717},"Update the descriptor buffer used by the previous submission from the host using the descriptor data of the new ",{"type":10,"tag":42,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":15,"value":2650},{"type":10,"tag":60,"props":2724,"children":2725},{},[2726],{"type":15,"value":2727},"Signal the semaphore from the host",{"type":10,"tag":228,"props":2729,"children":2731},{"id":2730},"_push_descriptors",[2732],{"type":15,"value":432},{"type":10,"tag":11,"props":2734,"children":2735},{},[2736,2738,2744],{"type":15,"value":2737},"Support for descriptor buffers combined with push descriptors is supported if the ",{"type":10,"tag":42,"props":2739,"children":2741},{"className":2740},[],[2742],{"type":15,"value":2743},"descriptorBufferPushDescriptors",{"type":15,"value":2745}," feature bit is set.",{"type":10,"tag":11,"props":2747,"children":2748},{},[2749],{"type":15,"value":2750},"To support push descriptors on certain implementations, additional buffer usage flags are added:",{"type":10,"tag":532,"props":2752,"children":2754},{"className":534,"code":2753,"language":536,"meta":537,"style":537},"VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT = 0x04000000\n",[2755],{"type":10,"tag":42,"props":2756,"children":2757},{"__ignoreMap":537},[2758],{"type":10,"tag":543,"props":2759,"children":2760},{"class":545,"line":546},[2761,2766,2770,2774],{"type":10,"tag":543,"props":2762,"children":2763},{"style":562},[2764],{"type":15,"value":2765},"VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":2767,"children":2768},{"style":550},[2769],{"type":15,"value":881},{"type":10,"tag":543,"props":2771,"children":2772},{"style":550},[2773],{"type":15,"value":886},{"type":10,"tag":543,"props":2775,"children":2776},{"style":889},[2777],{"type":15,"value":2778},"04000000\n",{"type":10,"tag":11,"props":2780,"children":2781},{},[2782,2784,2790,2791,2797],{"type":15,"value":2783},"If the application desires to use push descriptors and descriptor buffers together,\na descriptor set layout must be declared with ",{"type":10,"tag":42,"props":2785,"children":2787},{"className":2786},[],[2788],{"type":15,"value":2789},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR",{"type":15,"value":141},{"type":10,"tag":42,"props":2792,"children":2794},{"className":2793},[],[2795],{"type":15,"value":2796},"VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT",{"type":15,"value":2798}," bits set.",{"type":10,"tag":11,"props":2800,"children":2801},{},[2802,2803,2808,2809,2814,2816,2822,2824,2829],{"type":15,"value":1468},{"type":10,"tag":42,"props":2804,"children":2806},{"className":2805},[],[2807],{"type":15,"value":1985},{"type":15,"value":1987},{"type":10,"tag":42,"props":2810,"children":2812},{"className":2811},[],[2813],{"type":15,"value":1552},{"type":15,"value":2815},", there are special requirements for using push descriptors with descriptor buffers.\n",{"type":10,"tag":42,"props":2817,"children":2819},{"className":2818},[],[2820],{"type":15,"value":2821},"VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT_EXT",{"type":15,"value":2823}," is a special buffer flag which is required for certain implementations in order for push descriptors to interoperate with descriptor buffers.\nWhen pushing descriptors using this kind of set layout, it is required that a descriptor buffer is bound to the command list with the ",{"type":10,"tag":42,"props":2825,"children":2827},{"className":2826},[],[2828],{"type":15,"value":2821},{"type":15,"value":2830}," usage flag.\nThe intention here is that implementation can reserve scratch space in descriptor buffers for the purposes of dealing with push descriptors.\nThe mechanics here are highly magical and implementation defined in nature and is considered too burdensome to expect that applications deal with it.",{"type":10,"tag":11,"props":2832,"children":2833},{},[2834,2836,2841],{"type":15,"value":2835},"Binding a buffer that was created with ",{"type":10,"tag":42,"props":2837,"children":2839},{"className":2838},[],[2840],{"type":15,"value":2821},{"type":15,"value":2842}," requires the application to record any current push descriptors again.",{"type":10,"tag":228,"props":2844,"children":2846},{"id":2845},"_capturereplay",[2847],{"type":15,"value":2848},"Capture/Replay",{"type":10,"tag":11,"props":2850,"children":2851},{},[2852],{"type":15,"value":2853},"When creating a resource with the capture/replay feature enabled, an opaque handle can be obtained which can be passed into creation calls in a future replay, causing descriptors to be created with the same data.",{"type":10,"tag":11,"props":2855,"children":2856},{},[2857],{"type":15,"value":2858},"New flags to be supplied when creating buffers, images, and samplers to be captured/replayed:",{"type":10,"tag":532,"props":2860,"children":2862},{"className":534,"code":2861,"language":536,"meta":537,"style":537},"VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000020\nVK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00010000\nVK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000004\nVK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008\nVK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT = 0x00000008\n",[2863],{"type":10,"tag":42,"props":2864,"children":2865},{"__ignoreMap":537},[2866,2886,2907,2928,2949],{"type":10,"tag":543,"props":2867,"children":2868},{"class":545,"line":546},[2869,2874,2878,2882],{"type":10,"tag":543,"props":2870,"children":2871},{"style":562},[2872],{"type":15,"value":2873},"VK_BUFFER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT ",{"type":10,"tag":543,"props":2875,"children":2876},{"style":550},[2877],{"type":15,"value":881},{"type":10,"tag":543,"props":2879,"children":2880},{"style":550},[2881],{"type":15,"value":886},{"type":10,"tag":543,"props":2883,"children":2884},{"style":889},[2885],{"type":15,"value":1615},{"type":10,"tag":543,"props":2887,"children":2888},{"class":545,"line":568},[2889,2894,2898,2902],{"type":10,"tag":543,"props":2890,"children":2891},{"style":562},[2892],{"type":15,"value":2893},"VK_IMAGE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT ",{"type":10,"tag":543,"props":2895,"children":2896},{"style":550},[2897],{"type":15,"value":881},{"type":10,"tag":543,"props":2899,"children":2900},{"style":550},[2901],{"type":15,"value":886},{"type":10,"tag":543,"props":2903,"children":2904},{"style":889},[2905],{"type":15,"value":2906},"00010000\n",{"type":10,"tag":543,"props":2908,"children":2909},{"class":545,"line":588},[2910,2915,2919,2923],{"type":10,"tag":543,"props":2911,"children":2912},{"style":562},[2913],{"type":15,"value":2914},"VK_IMAGE_VIEW_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT ",{"type":10,"tag":543,"props":2916,"children":2917},{"style":550},[2918],{"type":15,"value":881},{"type":10,"tag":543,"props":2920,"children":2921},{"style":550},[2922],{"type":15,"value":886},{"type":10,"tag":543,"props":2924,"children":2925},{"style":889},[2926],{"type":15,"value":2927},"00000004\n",{"type":10,"tag":543,"props":2929,"children":2930},{"class":545,"line":606},[2931,2936,2940,2944],{"type":10,"tag":543,"props":2932,"children":2933},{"style":562},[2934],{"type":15,"value":2935},"VK_SAMPLER_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT ",{"type":10,"tag":543,"props":2937,"children":2938},{"style":550},[2939],{"type":15,"value":881},{"type":10,"tag":543,"props":2941,"children":2942},{"style":550},[2943],{"type":15,"value":886},{"type":10,"tag":543,"props":2945,"children":2946},{"style":889},[2947],{"type":15,"value":2948},"00000008\n",{"type":10,"tag":543,"props":2950,"children":2951},{"class":545,"line":630},[2952,2957,2961,2965],{"type":10,"tag":543,"props":2953,"children":2954},{"style":562},[2955],{"type":15,"value":2956},"VK_ACCELERATION_STRUCTURE_CREATE_DESCRIPTOR_BUFFER_CAPTURE_REPLAY_BIT_EXT ",{"type":10,"tag":543,"props":2958,"children":2959},{"style":550},[2960],{"type":15,"value":881},{"type":10,"tag":543,"props":2962,"children":2963},{"style":550},[2964],{"type":15,"value":886},{"type":10,"tag":543,"props":2966,"children":2967},{"style":889},[2968],{"type":15,"value":2948},{"type":10,"tag":11,"props":2970,"children":2971},{},[2972],{"type":15,"value":2973},"There are separate commands to get opaque data for buffers, images, and samplers:",{"type":10,"tag":532,"props":2975,"children":2977},{"className":534,"code":2976,"language":536,"meta":537,"style":537},"VkResult vkGetBufferOpaqueCaptureDescriptorDataEXT(\n VkDevice device,\n const VkBufferCaptureDescriptorDataInfoEXT* pInfo,\n void* pData);\n\ntypedef struct VkBufferCaptureDescriptorDataInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkBuffer buffer;\n} VkBufferCaptureDescriptorDataInfoEXT;\n\nVkResult vkGetImageOpaqueCaptureDescriptorDataEXT(\n VkDevice device,\n const VkImageCaptureDescriptorDataInfoEXT* pInfo,\n void* pData);\n\ntypedef struct VkImageCaptureDescriptorDataInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkImage image;\n} VkImageCaptureDescriptorDataInfoEXT;\n\nVkResult vkGetImageViewOpaqueCaptureDescriptorDataEXT(\n VkDevice device,\n const VkImageViewCaptureDescriptorDataInfoEXT* pInfo,\n void* pData);\n\ntypedef struct VkImageViewCaptureDescriptorDataInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkImageView imageView;\n} VkImageViewCaptureDescriptorDataInfoEXT;\n\nVkResult vkGetSamplerOpaqueCaptureDescriptorDataEXT(\n VkDevice device,\n const VkSamplerCaptureDescriptorDataInfoEXT* pInfo,\n void* pData);\n\ntypedef struct VkSamplerCaptureDescriptorDataInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkSampler sampler;\n} VkSamplerCaptureDescriptorDataInfoEXT;\n\nVkResult vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT(\n VkDevice device,\n const VkAccelerationStructureCaptureDescriptorDataInfoEXT* pInfo,\n void* pData);\n\ntypedef struct VkAccelerationStructureCaptureDescriptorDataInfoEXT {\n VkStructureType sType;\n const void* pNext;\n VkAccelerationStructureKHR accelerationStructure;\n VkAccelerationStructureNV accelerationStructureNV;\n} VkAccelerationStructureCaptureDescriptorDataInfoEXT;\n",[2978],{"type":10,"tag":42,"props":2979,"children":2980},{"__ignoreMap":537},[2981,2998,3013,3038,3054,3061,3077,3085,3101,3109,3117,3124,3140,3156,3180,3196,3203,3219,3226,3241,3249,3257,3264,3280,3296,3320,3336,3343,3359,3366,3381,3389,3397,3404,3421,3438,3463,3480,3488,3505,3513,3529,3538,3547,3555,3572,3589,3614,3631,3639,3656,3665,3682,3691,3700],{"type":10,"tag":543,"props":2982,"children":2983},{"class":545,"line":546},[2984,2989,2994],{"type":10,"tag":543,"props":2985,"children":2986},{"style":562},[2987],{"type":15,"value":2988},"VkResult ",{"type":10,"tag":543,"props":2990,"children":2991},{"style":556},[2992],{"type":15,"value":2993},"vkGetBufferOpaqueCaptureDescriptorDataEXT",{"type":10,"tag":543,"props":2995,"children":2996},{"style":562},[2997],{"type":15,"value":565},{"type":10,"tag":543,"props":2999,"children":3000},{"class":545,"line":568},[3001,3005,3009],{"type":10,"tag":543,"props":3002,"children":3003},{"style":562},[3004],{"type":15,"value":574},{"type":10,"tag":543,"props":3006,"children":3007},{"style":577},[3008],{"type":15,"value":580},{"type":10,"tag":543,"props":3010,"children":3011},{"style":562},[3012],{"type":15,"value":585},{"type":10,"tag":543,"props":3014,"children":3015},{"class":545,"line":588},[3016,3020,3025,3029,3034],{"type":10,"tag":543,"props":3017,"children":3018},{"style":550},[3019],{"type":15,"value":946},{"type":10,"tag":543,"props":3021,"children":3022},{"style":562},[3023],{"type":15,"value":3024}," VkBufferCaptureDescriptorDataInfoEXT",{"type":10,"tag":543,"props":3026,"children":3027},{"style":550},[3028],{"type":15,"value":617},{"type":10,"tag":543,"props":3030,"children":3031},{"style":577},[3032],{"type":15,"value":3033}," pInfo",{"type":10,"tag":543,"props":3035,"children":3036},{"style":562},[3037],{"type":15,"value":585},{"type":10,"tag":543,"props":3039,"children":3040},{"class":545,"line":606},[3041,3045,3050],{"type":10,"tag":543,"props":3042,"children":3043},{"style":550},[3044],{"type":15,"value":1384},{"type":10,"tag":543,"props":3046,"children":3047},{"style":577},[3048],{"type":15,"value":3049}," pData",{"type":10,"tag":543,"props":3051,"children":3052},{"style":562},[3053],{"type":15,"value":627},{"type":10,"tag":543,"props":3055,"children":3056},{"class":545,"line":630},[3057],{"type":10,"tag":543,"props":3058,"children":3059},{"emptyLinePlaceholder":634},[3060],{"type":15,"value":637},{"type":10,"tag":543,"props":3062,"children":3063},{"class":545,"line":640},[3064,3068,3072],{"type":10,"tag":543,"props":3065,"children":3066},{"style":550},[3067],{"type":15,"value":920},{"type":10,"tag":543,"props":3069,"children":3070},{"style":550},[3071],{"type":15,"value":925},{"type":10,"tag":543,"props":3073,"children":3074},{"style":562},[3075],{"type":15,"value":3076}," VkBufferCaptureDescriptorDataInfoEXT {\n",{"type":10,"tag":543,"props":3078,"children":3079},{"class":545,"line":657},[3080],{"type":10,"tag":543,"props":3081,"children":3082},{"style":562},[3083],{"type":15,"value":3084}," VkStructureType sType;\n",{"type":10,"tag":543,"props":3086,"children":3087},{"class":545,"line":673},[3088,3092,3096],{"type":10,"tag":543,"props":3089,"children":3090},{"style":550},[3091],{"type":15,"value":946},{"type":10,"tag":543,"props":3093,"children":3094},{"style":550},[3095],{"type":15,"value":951},{"type":10,"tag":543,"props":3097,"children":3098},{"style":562},[3099],{"type":15,"value":3100}," pNext;\n",{"type":10,"tag":543,"props":3102,"children":3103},{"class":545,"line":689},[3104],{"type":10,"tag":543,"props":3105,"children":3106},{"style":562},[3107],{"type":15,"value":3108}," VkBuffer buffer;\n",{"type":10,"tag":543,"props":3110,"children":3111},{"class":545,"line":707},[3112],{"type":10,"tag":543,"props":3113,"children":3114},{"style":562},[3115],{"type":15,"value":3116},"} VkBufferCaptureDescriptorDataInfoEXT;\n",{"type":10,"tag":543,"props":3118,"children":3119},{"class":545,"line":1036},[3120],{"type":10,"tag":543,"props":3121,"children":3122},{"emptyLinePlaceholder":634},[3123],{"type":15,"value":637},{"type":10,"tag":543,"props":3125,"children":3126},{"class":545,"line":1058},[3127,3131,3136],{"type":10,"tag":543,"props":3128,"children":3129},{"style":562},[3130],{"type":15,"value":2988},{"type":10,"tag":543,"props":3132,"children":3133},{"style":556},[3134],{"type":15,"value":3135},"vkGetImageOpaqueCaptureDescriptorDataEXT",{"type":10,"tag":543,"props":3137,"children":3138},{"style":562},[3139],{"type":15,"value":565},{"type":10,"tag":543,"props":3141,"children":3142},{"class":545,"line":1079},[3143,3148,3152],{"type":10,"tag":543,"props":3144,"children":3145},{"style":562},[3146],{"type":15,"value":3147}," VkDevice ",{"type":10,"tag":543,"props":3149,"children":3150},{"style":577},[3151],{"type":15,"value":580},{"type":10,"tag":543,"props":3153,"children":3154},{"style":562},[3155],{"type":15,"value":585},{"type":10,"tag":543,"props":3157,"children":3158},{"class":545,"line":1100},[3159,3163,3168,3172,3176],{"type":10,"tag":543,"props":3160,"children":3161},{"style":550},[3162],{"type":15,"value":946},{"type":10,"tag":543,"props":3164,"children":3165},{"style":562},[3166],{"type":15,"value":3167}," VkImageCaptureDescriptorDataInfoEXT",{"type":10,"tag":543,"props":3169,"children":3170},{"style":550},[3171],{"type":15,"value":617},{"type":10,"tag":543,"props":3173,"children":3174},{"style":577},[3175],{"type":15,"value":3033},{"type":10,"tag":543,"props":3177,"children":3178},{"style":562},[3179],{"type":15,"value":585},{"type":10,"tag":543,"props":3181,"children":3182},{"class":545,"line":1121},[3183,3187,3192],{"type":10,"tag":543,"props":3184,"children":3185},{"style":550},[3186],{"type":15,"value":1384},{"type":10,"tag":543,"props":3188,"children":3189},{"style":577},[3190],{"type":15,"value":3191}," pData",{"type":10,"tag":543,"props":3193,"children":3194},{"style":562},[3195],{"type":15,"value":627},{"type":10,"tag":543,"props":3197,"children":3198},{"class":545,"line":1143},[3199],{"type":10,"tag":543,"props":3200,"children":3201},{"emptyLinePlaceholder":634},[3202],{"type":15,"value":637},{"type":10,"tag":543,"props":3204,"children":3205},{"class":545,"line":1164},[3206,3210,3214],{"type":10,"tag":543,"props":3207,"children":3208},{"style":550},[3209],{"type":15,"value":920},{"type":10,"tag":543,"props":3211,"children":3212},{"style":550},[3213],{"type":15,"value":925},{"type":10,"tag":543,"props":3215,"children":3216},{"style":562},[3217],{"type":15,"value":3218}," VkImageCaptureDescriptorDataInfoEXT {\n",{"type":10,"tag":543,"props":3220,"children":3221},{"class":545,"line":1185},[3222],{"type":10,"tag":543,"props":3223,"children":3224},{"style":562},[3225],{"type":15,"value":3084},{"type":10,"tag":543,"props":3227,"children":3228},{"class":545,"line":1206},[3229,3233,3237],{"type":10,"tag":543,"props":3230,"children":3231},{"style":550},[3232],{"type":15,"value":946},{"type":10,"tag":543,"props":3234,"children":3235},{"style":550},[3236],{"type":15,"value":951},{"type":10,"tag":543,"props":3238,"children":3239},{"style":562},[3240],{"type":15,"value":3100},{"type":10,"tag":543,"props":3242,"children":3243},{"class":545,"line":1215},[3244],{"type":10,"tag":543,"props":3245,"children":3246},{"style":562},[3247],{"type":15,"value":3248}," VkImage image;\n",{"type":10,"tag":543,"props":3250,"children":3251},{"class":545,"line":1224},[3252],{"type":10,"tag":543,"props":3253,"children":3254},{"style":562},[3255],{"type":15,"value":3256},"} VkImageCaptureDescriptorDataInfoEXT;\n",{"type":10,"tag":543,"props":3258,"children":3259},{"class":545,"line":1232},[3260],{"type":10,"tag":543,"props":3261,"children":3262},{"emptyLinePlaceholder":634},[3263],{"type":15,"value":637},{"type":10,"tag":543,"props":3265,"children":3266},{"class":545,"line":1249},[3267,3271,3276],{"type":10,"tag":543,"props":3268,"children":3269},{"style":562},[3270],{"type":15,"value":2988},{"type":10,"tag":543,"props":3272,"children":3273},{"style":556},[3274],{"type":15,"value":3275},"vkGetImageViewOpaqueCaptureDescriptorDataEXT",{"type":10,"tag":543,"props":3277,"children":3278},{"style":562},[3279],{"type":15,"value":565},{"type":10,"tag":543,"props":3281,"children":3282},{"class":545,"line":1257},[3283,3288,3292],{"type":10,"tag":543,"props":3284,"children":3285},{"style":562},[3286],{"type":15,"value":3287}," VkDevice ",{"type":10,"tag":543,"props":3289,"children":3290},{"style":577},[3291],{"type":15,"value":580},{"type":10,"tag":543,"props":3293,"children":3294},{"style":562},[3295],{"type":15,"value":585},{"type":10,"tag":543,"props":3297,"children":3298},{"class":545,"line":1273},[3299,3303,3308,3312,3316],{"type":10,"tag":543,"props":3300,"children":3301},{"style":550},[3302],{"type":15,"value":946},{"type":10,"tag":543,"props":3304,"children":3305},{"style":562},[3306],{"type":15,"value":3307}," VkImageViewCaptureDescriptorDataInfoEXT",{"type":10,"tag":543,"props":3309,"children":3310},{"style":550},[3311],{"type":15,"value":617},{"type":10,"tag":543,"props":3313,"children":3314},{"style":577},[3315],{"type":15,"value":3033},{"type":10,"tag":543,"props":3317,"children":3318},{"style":562},[3319],{"type":15,"value":585},{"type":10,"tag":543,"props":3321,"children":3322},{"class":545,"line":1282},[3323,3327,3332],{"type":10,"tag":543,"props":3324,"children":3325},{"style":550},[3326],{"type":15,"value":1384},{"type":10,"tag":543,"props":3328,"children":3329},{"style":577},[3330],{"type":15,"value":3331}," pData",{"type":10,"tag":543,"props":3333,"children":3334},{"style":562},[3335],{"type":15,"value":627},{"type":10,"tag":543,"props":3337,"children":3338},{"class":545,"line":1291},[3339],{"type":10,"tag":543,"props":3340,"children":3341},{"emptyLinePlaceholder":634},[3342],{"type":15,"value":637},{"type":10,"tag":543,"props":3344,"children":3345},{"class":545,"line":1300},[3346,3350,3354],{"type":10,"tag":543,"props":3347,"children":3348},{"style":550},[3349],{"type":15,"value":920},{"type":10,"tag":543,"props":3351,"children":3352},{"style":550},[3353],{"type":15,"value":925},{"type":10,"tag":543,"props":3355,"children":3356},{"style":562},[3357],{"type":15,"value":3358}," VkImageViewCaptureDescriptorDataInfoEXT {\n",{"type":10,"tag":543,"props":3360,"children":3361},{"class":545,"line":1308},[3362],{"type":10,"tag":543,"props":3363,"children":3364},{"style":562},[3365],{"type":15,"value":3084},{"type":10,"tag":543,"props":3367,"children":3368},{"class":545,"line":1325},[3369,3373,3377],{"type":10,"tag":543,"props":3370,"children":3371},{"style":550},[3372],{"type":15,"value":946},{"type":10,"tag":543,"props":3374,"children":3375},{"style":550},[3376],{"type":15,"value":951},{"type":10,"tag":543,"props":3378,"children":3379},{"style":562},[3380],{"type":15,"value":3100},{"type":10,"tag":543,"props":3382,"children":3383},{"class":545,"line":1334},[3384],{"type":10,"tag":543,"props":3385,"children":3386},{"style":562},[3387],{"type":15,"value":3388}," VkImageView imageView;\n",{"type":10,"tag":543,"props":3390,"children":3391},{"class":545,"line":1360},[3392],{"type":10,"tag":543,"props":3393,"children":3394},{"style":562},[3395],{"type":15,"value":3396},"} VkImageViewCaptureDescriptorDataInfoEXT;\n",{"type":10,"tag":543,"props":3398,"children":3399},{"class":545,"line":1378},[3400],{"type":10,"tag":543,"props":3401,"children":3402},{"emptyLinePlaceholder":634},[3403],{"type":15,"value":637},{"type":10,"tag":543,"props":3405,"children":3407},{"class":545,"line":3406},34,[3408,3412,3417],{"type":10,"tag":543,"props":3409,"children":3410},{"style":562},[3411],{"type":15,"value":2988},{"type":10,"tag":543,"props":3413,"children":3414},{"style":556},[3415],{"type":15,"value":3416},"vkGetSamplerOpaqueCaptureDescriptorDataEXT",{"type":10,"tag":543,"props":3418,"children":3419},{"style":562},[3420],{"type":15,"value":565},{"type":10,"tag":543,"props":3422,"children":3424},{"class":545,"line":3423},35,[3425,3430,3434],{"type":10,"tag":543,"props":3426,"children":3427},{"style":562},[3428],{"type":15,"value":3429}," VkDevice ",{"type":10,"tag":543,"props":3431,"children":3432},{"style":577},[3433],{"type":15,"value":580},{"type":10,"tag":543,"props":3435,"children":3436},{"style":562},[3437],{"type":15,"value":585},{"type":10,"tag":543,"props":3439,"children":3441},{"class":545,"line":3440},36,[3442,3446,3451,3455,3459],{"type":10,"tag":543,"props":3443,"children":3444},{"style":550},[3445],{"type":15,"value":946},{"type":10,"tag":543,"props":3447,"children":3448},{"style":562},[3449],{"type":15,"value":3450}," VkSamplerCaptureDescriptorDataInfoEXT",{"type":10,"tag":543,"props":3452,"children":3453},{"style":550},[3454],{"type":15,"value":617},{"type":10,"tag":543,"props":3456,"children":3457},{"style":577},[3458],{"type":15,"value":3033},{"type":10,"tag":543,"props":3460,"children":3461},{"style":562},[3462],{"type":15,"value":585},{"type":10,"tag":543,"props":3464,"children":3466},{"class":545,"line":3465},37,[3467,3471,3476],{"type":10,"tag":543,"props":3468,"children":3469},{"style":550},[3470],{"type":15,"value":1384},{"type":10,"tag":543,"props":3472,"children":3473},{"style":577},[3474],{"type":15,"value":3475}," pData",{"type":10,"tag":543,"props":3477,"children":3478},{"style":562},[3479],{"type":15,"value":627},{"type":10,"tag":543,"props":3481,"children":3483},{"class":545,"line":3482},38,[3484],{"type":10,"tag":543,"props":3485,"children":3486},{"emptyLinePlaceholder":634},[3487],{"type":15,"value":637},{"type":10,"tag":543,"props":3489,"children":3491},{"class":545,"line":3490},39,[3492,3496,3500],{"type":10,"tag":543,"props":3493,"children":3494},{"style":550},[3495],{"type":15,"value":920},{"type":10,"tag":543,"props":3497,"children":3498},{"style":550},[3499],{"type":15,"value":925},{"type":10,"tag":543,"props":3501,"children":3502},{"style":562},[3503],{"type":15,"value":3504}," VkSamplerCaptureDescriptorDataInfoEXT {\n",{"type":10,"tag":543,"props":3506,"children":3508},{"class":545,"line":3507},40,[3509],{"type":10,"tag":543,"props":3510,"children":3511},{"style":562},[3512],{"type":15,"value":3084},{"type":10,"tag":543,"props":3514,"children":3516},{"class":545,"line":3515},41,[3517,3521,3525],{"type":10,"tag":543,"props":3518,"children":3519},{"style":550},[3520],{"type":15,"value":946},{"type":10,"tag":543,"props":3522,"children":3523},{"style":550},[3524],{"type":15,"value":951},{"type":10,"tag":543,"props":3526,"children":3527},{"style":562},[3528],{"type":15,"value":3100},{"type":10,"tag":543,"props":3530,"children":3532},{"class":545,"line":3531},42,[3533],{"type":10,"tag":543,"props":3534,"children":3535},{"style":562},[3536],{"type":15,"value":3537}," VkSampler sampler;\n",{"type":10,"tag":543,"props":3539,"children":3541},{"class":545,"line":3540},43,[3542],{"type":10,"tag":543,"props":3543,"children":3544},{"style":562},[3545],{"type":15,"value":3546},"} VkSamplerCaptureDescriptorDataInfoEXT;\n",{"type":10,"tag":543,"props":3548,"children":3550},{"class":545,"line":3549},44,[3551],{"type":10,"tag":543,"props":3552,"children":3553},{"emptyLinePlaceholder":634},[3554],{"type":15,"value":637},{"type":10,"tag":543,"props":3556,"children":3558},{"class":545,"line":3557},45,[3559,3563,3568],{"type":10,"tag":543,"props":3560,"children":3561},{"style":562},[3562],{"type":15,"value":2988},{"type":10,"tag":543,"props":3564,"children":3565},{"style":556},[3566],{"type":15,"value":3567},"vkGetAccelerationStructureOpaqueCaptureDescriptorDataEXT",{"type":10,"tag":543,"props":3569,"children":3570},{"style":562},[3571],{"type":15,"value":565},{"type":10,"tag":543,"props":3573,"children":3575},{"class":545,"line":3574},46,[3576,3581,3585],{"type":10,"tag":543,"props":3577,"children":3578},{"style":562},[3579],{"type":15,"value":3580}," VkDevice ",{"type":10,"tag":543,"props":3582,"children":3583},{"style":577},[3584],{"type":15,"value":580},{"type":10,"tag":543,"props":3586,"children":3587},{"style":562},[3588],{"type":15,"value":585},{"type":10,"tag":543,"props":3590,"children":3592},{"class":545,"line":3591},47,[3593,3597,3602,3606,3610],{"type":10,"tag":543,"props":3594,"children":3595},{"style":550},[3596],{"type":15,"value":946},{"type":10,"tag":543,"props":3598,"children":3599},{"style":562},[3600],{"type":15,"value":3601}," VkAccelerationStructureCaptureDescriptorDataInfoEXT",{"type":10,"tag":543,"props":3603,"children":3604},{"style":550},[3605],{"type":15,"value":617},{"type":10,"tag":543,"props":3607,"children":3608},{"style":577},[3609],{"type":15,"value":3033},{"type":10,"tag":543,"props":3611,"children":3612},{"style":562},[3613],{"type":15,"value":585},{"type":10,"tag":543,"props":3615,"children":3617},{"class":545,"line":3616},48,[3618,3622,3627],{"type":10,"tag":543,"props":3619,"children":3620},{"style":550},[3621],{"type":15,"value":1384},{"type":10,"tag":543,"props":3623,"children":3624},{"style":577},[3625],{"type":15,"value":3626}," pData",{"type":10,"tag":543,"props":3628,"children":3629},{"style":562},[3630],{"type":15,"value":627},{"type":10,"tag":543,"props":3632,"children":3634},{"class":545,"line":3633},49,[3635],{"type":10,"tag":543,"props":3636,"children":3637},{"emptyLinePlaceholder":634},[3638],{"type":15,"value":637},{"type":10,"tag":543,"props":3640,"children":3642},{"class":545,"line":3641},50,[3643,3647,3651],{"type":10,"tag":543,"props":3644,"children":3645},{"style":550},[3646],{"type":15,"value":920},{"type":10,"tag":543,"props":3648,"children":3649},{"style":550},[3650],{"type":15,"value":925},{"type":10,"tag":543,"props":3652,"children":3653},{"style":562},[3654],{"type":15,"value":3655}," VkAccelerationStructureCaptureDescriptorDataInfoEXT {\n",{"type":10,"tag":543,"props":3657,"children":3659},{"class":545,"line":3658},51,[3660],{"type":10,"tag":543,"props":3661,"children":3662},{"style":562},[3663],{"type":15,"value":3664}," VkStructureType sType;\n",{"type":10,"tag":543,"props":3666,"children":3668},{"class":545,"line":3667},52,[3669,3673,3677],{"type":10,"tag":543,"props":3670,"children":3671},{"style":550},[3672],{"type":15,"value":946},{"type":10,"tag":543,"props":3674,"children":3675},{"style":550},[3676],{"type":15,"value":951},{"type":10,"tag":543,"props":3678,"children":3679},{"style":562},[3680],{"type":15,"value":3681}," pNext;\n",{"type":10,"tag":543,"props":3683,"children":3685},{"class":545,"line":3684},53,[3686],{"type":10,"tag":543,"props":3687,"children":3688},{"style":562},[3689],{"type":15,"value":3690}," VkAccelerationStructureKHR accelerationStructure;\n",{"type":10,"tag":543,"props":3692,"children":3694},{"class":545,"line":3693},54,[3695],{"type":10,"tag":543,"props":3696,"children":3697},{"style":562},[3698],{"type":15,"value":3699}," VkAccelerationStructureNV accelerationStructureNV;\n",{"type":10,"tag":543,"props":3701,"children":3703},{"class":545,"line":3702},55,[3704],{"type":10,"tag":543,"props":3705,"children":3706},{"style":562},[3707],{"type":15,"value":3708},"} VkAccelerationStructureCaptureDescriptorDataInfoEXT;\n",{"type":10,"tag":11,"props":3710,"children":3711},{},[3712],{"type":15,"value":3713},"Once queried, this must be provided to buffer/image/imageview/sampler/acceleration structure creation in a similar manner to buffer device address creation, by chaining the following structure to buffer, image, imageview, sampler, or acceleration structure creation:",{"type":10,"tag":532,"props":3715,"children":3717},{"className":534,"code":3716,"language":536,"meta":537,"style":537},"typedef struct VkOpaqueCaptureDescriptorDataCreateInfoEXT {\n VkStructureType sType;\n const void* pNext;\n const void* opaqueCaptureDescriptorData;\n} VkOpaqueCaptureDescriptorDataCreateInfoEXT;\n",[3718],{"type":10,"tag":42,"props":3719,"children":3720},{"__ignoreMap":537},[3721,3737,3744,3759,3775],{"type":10,"tag":543,"props":3722,"children":3723},{"class":545,"line":546},[3724,3728,3732],{"type":10,"tag":543,"props":3725,"children":3726},{"style":550},[3727],{"type":15,"value":920},{"type":10,"tag":543,"props":3729,"children":3730},{"style":550},[3731],{"type":15,"value":925},{"type":10,"tag":543,"props":3733,"children":3734},{"style":562},[3735],{"type":15,"value":3736}," VkOpaqueCaptureDescriptorDataCreateInfoEXT {\n",{"type":10,"tag":543,"props":3738,"children":3739},{"class":545,"line":568},[3740],{"type":10,"tag":543,"props":3741,"children":3742},{"style":562},[3743],{"type":15,"value":3084},{"type":10,"tag":543,"props":3745,"children":3746},{"class":545,"line":588},[3747,3751,3755],{"type":10,"tag":543,"props":3748,"children":3749},{"style":550},[3750],{"type":15,"value":946},{"type":10,"tag":543,"props":3752,"children":3753},{"style":550},[3754],{"type":15,"value":951},{"type":10,"tag":543,"props":3756,"children":3757},{"style":562},[3758],{"type":15,"value":3100},{"type":10,"tag":543,"props":3760,"children":3761},{"class":545,"line":606},[3762,3766,3770],{"type":10,"tag":543,"props":3763,"children":3764},{"style":550},[3765],{"type":15,"value":946},{"type":10,"tag":543,"props":3767,"children":3768},{"style":550},[3769],{"type":15,"value":951},{"type":10,"tag":543,"props":3771,"children":3772},{"style":562},[3773],{"type":15,"value":3774}," opaqueCaptureDescriptorData;\n",{"type":10,"tag":543,"props":3776,"children":3777},{"class":545,"line":630},[3778],{"type":10,"tag":543,"props":3779,"children":3780},{"style":562},[3781],{"type":15,"value":3782},"} VkOpaqueCaptureDescriptorDataCreateInfoEXT;\n",{"type":10,"tag":11,"props":3784,"children":3785},{},[3786,3788,3794,3795,3801,3802,3808,3809,3815,3817,3823],{"type":15,"value":3787},"In each case, the size of the capture data is sized to the ",{"type":10,"tag":42,"props":3789,"children":3791},{"className":3790},[],[3792],{"type":15,"value":3793},"bufferCaptureReplayDescriptorDataSize",{"type":15,"value":748},{"type":10,"tag":42,"props":3796,"children":3798},{"className":3797},[],[3799],{"type":15,"value":3800},"imageCaptureReplayDescriptorDataSize",{"type":15,"value":748},{"type":10,"tag":42,"props":3803,"children":3805},{"className":3804},[],[3806],{"type":15,"value":3807},"imageViewCaptureReplayDescriptorDataSize",{"type":15,"value":748},{"type":10,"tag":42,"props":3810,"children":3812},{"className":3811},[],[3813],{"type":15,"value":3814},"samplerCaptureReplayDescriptorDataSize",{"type":15,"value":3816},", or ",{"type":10,"tag":42,"props":3818,"children":3820},{"className":3819},[],[3821],{"type":15,"value":3822},"accelerationStructureCaptureReplayDescriptorDataSize",{"type":15,"value":3824}," limits as appropriate.",{"type":10,"tag":11,"props":3826,"children":3827},{},[3828,3830,3837,3839,3846],{"type":15,"value":3829},"In addition, ",{"type":10,"tag":124,"props":3831,"children":3834},{"href":3832,"rel":3833},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/vkGetDeviceMemoryOpaqueCaptureAddress.html",[128],[3835],{"type":15,"value":3836},"vkGetDeviceMemoryOpaqueCaptureAddress",{"type":15,"value":3838}," must be used to capture the opaque address and replay it with ",{"type":10,"tag":124,"props":3840,"children":3843},{"href":3841,"rel":3842},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkMemoryOpaqueCaptureAddressAllocateInfo.html",[128],[3844],{"type":15,"value":3845},"VkMemoryOpaqueCaptureAddressAllocateInfo",{"type":15,"value":3847},", for any memory used by resources with these handles.",{"type":10,"tag":228,"props":3849,"children":3851},{"id":3850},"_device_features",[3852],{"type":15,"value":3853},"Device Features",{"type":10,"tag":11,"props":3855,"children":3856},{},[3857],{"type":15,"value":3858},"The following features are exposed:",{"type":10,"tag":532,"props":3860,"children":3862},{"className":534,"code":3861,"language":536,"meta":537,"style":537},"typedef struct VkPhysicalDeviceDescriptorBufferFeaturesEXT {\n VkStructureType sType;\n void* pNext;\n VkBool32 descriptorBuffer;\n VkBool32 descriptorBufferCaptureReplay;\n VkBool32 descriptorBufferImageLayoutIgnored;\n VkBool32 descriptorBufferPushDescriptors;\n} VkPhysicalDeviceDescriptorBufferFeaturesEXT;\n",[3863],{"type":10,"tag":42,"props":3864,"children":3865},{"__ignoreMap":537},[3866,3882,3889,3901,3909,3917,3925,3933],{"type":10,"tag":543,"props":3867,"children":3868},{"class":545,"line":546},[3869,3873,3877],{"type":10,"tag":543,"props":3870,"children":3871},{"style":550},[3872],{"type":15,"value":920},{"type":10,"tag":543,"props":3874,"children":3875},{"style":550},[3876],{"type":15,"value":925},{"type":10,"tag":543,"props":3878,"children":3879},{"style":562},[3880],{"type":15,"value":3881}," VkPhysicalDeviceDescriptorBufferFeaturesEXT {\n",{"type":10,"tag":543,"props":3883,"children":3884},{"class":545,"line":568},[3885],{"type":10,"tag":543,"props":3886,"children":3887},{"style":562},[3888],{"type":15,"value":3084},{"type":10,"tag":543,"props":3890,"children":3891},{"class":545,"line":588},[3892,3896],{"type":10,"tag":543,"props":3893,"children":3894},{"style":550},[3895],{"type":15,"value":1384},{"type":10,"tag":543,"props":3897,"children":3898},{"style":562},[3899],{"type":15,"value":3900}," pNext;\n",{"type":10,"tag":543,"props":3902,"children":3903},{"class":545,"line":606},[3904],{"type":10,"tag":543,"props":3905,"children":3906},{"style":562},[3907],{"type":15,"value":3908}," VkBool32 descriptorBuffer;\n",{"type":10,"tag":543,"props":3910,"children":3911},{"class":545,"line":630},[3912],{"type":10,"tag":543,"props":3913,"children":3914},{"style":562},[3915],{"type":15,"value":3916}," VkBool32 descriptorBufferCaptureReplay;\n",{"type":10,"tag":543,"props":3918,"children":3919},{"class":545,"line":640},[3920],{"type":10,"tag":543,"props":3921,"children":3922},{"style":562},[3923],{"type":15,"value":3924}," VkBool32 descriptorBufferImageLayoutIgnored;\n",{"type":10,"tag":543,"props":3926,"children":3927},{"class":545,"line":657},[3928],{"type":10,"tag":543,"props":3929,"children":3930},{"style":562},[3931],{"type":15,"value":3932}," VkBool32 descriptorBufferPushDescriptors;\n",{"type":10,"tag":543,"props":3934,"children":3935},{"class":545,"line":673},[3936],{"type":10,"tag":543,"props":3937,"children":3938},{"style":562},[3939],{"type":15,"value":3940},"} VkPhysicalDeviceDescriptorBufferFeaturesEXT;\n",{"type":10,"tag":11,"props":3942,"children":3943},{},[3944,3945,3951,3953,3960,3962,3967,3969,3975,3977,3982],{"type":15,"value":1468},{"type":10,"tag":42,"props":3946,"children":3948},{"className":3947},[],[3949],{"type":15,"value":3950},"descriptorBuffer",{"type":15,"value":3952}," feature is enabled, ",{"type":10,"tag":124,"props":3954,"children":3957},{"href":3955,"rel":3956},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_AMD_shader_fragment_mask.html",[128],[3958],{"type":15,"value":3959},"VK_AMD_shader_fragment_mask",{"type":15,"value":3961}," must not be enabled.\nIf the ",{"type":10,"tag":42,"props":3963,"children":3965},{"className":3964},[],[3966],{"type":15,"value":1474},{"type":15,"value":3968}," feature is enabled, the image layout provided when getting a descriptor is ignored.\nThe ",{"type":10,"tag":42,"props":3970,"children":3972},{"className":3971},[],[3973],{"type":15,"value":3974},"descriptorBufferCaptureReplay",{"type":15,"value":3976}," feature is primarily for capture replay tools, and allows opaque data to be captured and replayed, allowing the same descriptor handles to be used on replay.\nIf the ",{"type":10,"tag":42,"props":3978,"children":3980},{"className":3979},[],[3981],{"type":15,"value":2743},{"type":15,"value":3983}," features is enabled push descriptors can be used with descriptor buffers.",{"type":10,"tag":228,"props":3985,"children":3987},{"id":3986},"_device_properties",[3988],{"type":15,"value":3989},"Device Properties",{"type":10,"tag":11,"props":3991,"children":3992},{},[3993],{"type":15,"value":3994},"The following properties are exposed:",{"type":10,"tag":532,"props":3996,"children":3998},{"className":534,"code":3997,"language":536,"meta":537,"style":537},"typedef struct VkPhysicalDeviceDescriptorBufferPropertiesEXT {\n VkStructureType sType;\n void* pNext;\n VkBool32 combinedImageSamplerDescriptorSingleArray;\n VkBool32 bufferlessPushDescriptors;\n VkBool32 allowSamplerImageViewPostSubmitCreation;\n VkDeviceSize descriptorBufferOffsetAlignment;\n uint32_t maxDescriptorBufferBindings;\n uint32_t maxResourceDescriptorBufferBindings;\n uint32_t maxSamplerDescriptorBufferBindings;\n uint32_t maxEmbeddedImmutableSamplerBindings;\n uint32_t maxEmbeddedImmutableSamplers;\n size_t bufferCaptureReplayDescriptorDataSize;\n size_t imageCaptureReplayDescriptorDataSize;\n size_t imageViewCaptureReplayDescriptorDataSize;\n size_t samplerCaptureReplayDescriptorDataSize;\n size_t accelerationStructureCaptureReplayDescriptorDataSize;\n size_t samplerDescriptorSize;\n size_t combinedImageSamplerDescriptorSize;\n size_t sampledImageDescriptorSize;\n size_t storageImageDescriptorSize;\n size_t uniformTexelBufferDescriptorSize;\n size_t robustUniformTexelBufferDescriptorSize;\n size_t storageTexelBufferDescriptorSize;\n size_t robustStorageTexelBufferDescriptorSize;\n size_t uniformBufferDescriptorSize;\n size_t robustUniformBufferDescriptorSize;\n size_t storageBufferDescriptorSize;\n size_t robustStorageBufferDescriptorSize;\n size_t inputAttachmentDescriptorSize;\n size_t accelerationStructureDescriptorSize;\n VkDeviceSize maxSamplerDescriptorBufferRange;\n VkDeviceSize maxResourceDescriptorBufferRange;\n VkDeviceSize samplerDescriptorBufferAddressSpaceSize;\n VkDeviceSize resourceDescriptorBufferAddressSpaceSize;\n VkDeviceSize descriptorBufferAddressSpaceSize;\n} VkPhysicalDeviceDescriptorBufferPropertiesEXT;\n",[3999],{"type":10,"tag":42,"props":4000,"children":4001},{"__ignoreMap":537},[4002,4018,4025,4036,4044,4052,4060,4068,4080,4092,4104,4116,4128,4140,4152,4164,4176,4188,4200,4212,4224,4236,4248,4260,4272,4284,4296,4308,4320,4332,4344,4356,4364,4372,4380,4388,4396],{"type":10,"tag":543,"props":4003,"children":4004},{"class":545,"line":546},[4005,4009,4013],{"type":10,"tag":543,"props":4006,"children":4007},{"style":550},[4008],{"type":15,"value":920},{"type":10,"tag":543,"props":4010,"children":4011},{"style":550},[4012],{"type":15,"value":925},{"type":10,"tag":543,"props":4014,"children":4015},{"style":562},[4016],{"type":15,"value":4017}," VkPhysicalDeviceDescriptorBufferPropertiesEXT {\n",{"type":10,"tag":543,"props":4019,"children":4020},{"class":545,"line":568},[4021],{"type":10,"tag":543,"props":4022,"children":4023},{"style":562},[4024],{"type":15,"value":3084},{"type":10,"tag":543,"props":4026,"children":4027},{"class":545,"line":588},[4028,4032],{"type":10,"tag":543,"props":4029,"children":4030},{"style":550},[4031],{"type":15,"value":1384},{"type":10,"tag":543,"props":4033,"children":4034},{"style":562},[4035],{"type":15,"value":3900},{"type":10,"tag":543,"props":4037,"children":4038},{"class":545,"line":606},[4039],{"type":10,"tag":543,"props":4040,"children":4041},{"style":562},[4042],{"type":15,"value":4043}," VkBool32 combinedImageSamplerDescriptorSingleArray;\n",{"type":10,"tag":543,"props":4045,"children":4046},{"class":545,"line":630},[4047],{"type":10,"tag":543,"props":4048,"children":4049},{"style":562},[4050],{"type":15,"value":4051}," VkBool32 bufferlessPushDescriptors;\n",{"type":10,"tag":543,"props":4053,"children":4054},{"class":545,"line":640},[4055],{"type":10,"tag":543,"props":4056,"children":4057},{"style":562},[4058],{"type":15,"value":4059}," VkBool32 allowSamplerImageViewPostSubmitCreation;\n",{"type":10,"tag":543,"props":4061,"children":4062},{"class":545,"line":657},[4063],{"type":10,"tag":543,"props":4064,"children":4065},{"style":562},[4066],{"type":15,"value":4067}," VkDeviceSize descriptorBufferOffsetAlignment;\n",{"type":10,"tag":543,"props":4069,"children":4070},{"class":545,"line":673},[4071,4075],{"type":10,"tag":543,"props":4072,"children":4073},{"style":550},[4074],{"type":15,"value":695},{"type":10,"tag":543,"props":4076,"children":4077},{"style":562},[4078],{"type":15,"value":4079}," maxDescriptorBufferBindings;\n",{"type":10,"tag":543,"props":4081,"children":4082},{"class":545,"line":689},[4083,4087],{"type":10,"tag":543,"props":4084,"children":4085},{"style":550},[4086],{"type":15,"value":695},{"type":10,"tag":543,"props":4088,"children":4089},{"style":562},[4090],{"type":15,"value":4091}," maxResourceDescriptorBufferBindings;\n",{"type":10,"tag":543,"props":4093,"children":4094},{"class":545,"line":707},[4095,4099],{"type":10,"tag":543,"props":4096,"children":4097},{"style":550},[4098],{"type":15,"value":695},{"type":10,"tag":543,"props":4100,"children":4101},{"style":562},[4102],{"type":15,"value":4103}," maxSamplerDescriptorBufferBindings;\n",{"type":10,"tag":543,"props":4105,"children":4106},{"class":545,"line":1036},[4107,4111],{"type":10,"tag":543,"props":4108,"children":4109},{"style":550},[4110],{"type":15,"value":695},{"type":10,"tag":543,"props":4112,"children":4113},{"style":562},[4114],{"type":15,"value":4115}," maxEmbeddedImmutableSamplerBindings;\n",{"type":10,"tag":543,"props":4117,"children":4118},{"class":545,"line":1058},[4119,4123],{"type":10,"tag":543,"props":4120,"children":4121},{"style":550},[4122],{"type":15,"value":695},{"type":10,"tag":543,"props":4124,"children":4125},{"style":562},[4126],{"type":15,"value":4127}," maxEmbeddedImmutableSamplers;\n",{"type":10,"tag":543,"props":4129,"children":4130},{"class":545,"line":1079},[4131,4135],{"type":10,"tag":543,"props":4132,"children":4133},{"style":550},[4134],{"type":15,"value":1366},{"type":10,"tag":543,"props":4136,"children":4137},{"style":562},[4138],{"type":15,"value":4139}," bufferCaptureReplayDescriptorDataSize;\n",{"type":10,"tag":543,"props":4141,"children":4142},{"class":545,"line":1100},[4143,4147],{"type":10,"tag":543,"props":4144,"children":4145},{"style":550},[4146],{"type":15,"value":1366},{"type":10,"tag":543,"props":4148,"children":4149},{"style":562},[4150],{"type":15,"value":4151}," imageCaptureReplayDescriptorDataSize;\n",{"type":10,"tag":543,"props":4153,"children":4154},{"class":545,"line":1121},[4155,4159],{"type":10,"tag":543,"props":4156,"children":4157},{"style":550},[4158],{"type":15,"value":1366},{"type":10,"tag":543,"props":4160,"children":4161},{"style":562},[4162],{"type":15,"value":4163}," imageViewCaptureReplayDescriptorDataSize;\n",{"type":10,"tag":543,"props":4165,"children":4166},{"class":545,"line":1143},[4167,4171],{"type":10,"tag":543,"props":4168,"children":4169},{"style":550},[4170],{"type":15,"value":1366},{"type":10,"tag":543,"props":4172,"children":4173},{"style":562},[4174],{"type":15,"value":4175}," samplerCaptureReplayDescriptorDataSize;\n",{"type":10,"tag":543,"props":4177,"children":4178},{"class":545,"line":1164},[4179,4183],{"type":10,"tag":543,"props":4180,"children":4181},{"style":550},[4182],{"type":15,"value":1366},{"type":10,"tag":543,"props":4184,"children":4185},{"style":562},[4186],{"type":15,"value":4187}," accelerationStructureCaptureReplayDescriptorDataSize;\n",{"type":10,"tag":543,"props":4189,"children":4190},{"class":545,"line":1185},[4191,4195],{"type":10,"tag":543,"props":4192,"children":4193},{"style":550},[4194],{"type":15,"value":1366},{"type":10,"tag":543,"props":4196,"children":4197},{"style":562},[4198],{"type":15,"value":4199}," samplerDescriptorSize;\n",{"type":10,"tag":543,"props":4201,"children":4202},{"class":545,"line":1206},[4203,4207],{"type":10,"tag":543,"props":4204,"children":4205},{"style":550},[4206],{"type":15,"value":1366},{"type":10,"tag":543,"props":4208,"children":4209},{"style":562},[4210],{"type":15,"value":4211}," combinedImageSamplerDescriptorSize;\n",{"type":10,"tag":543,"props":4213,"children":4214},{"class":545,"line":1215},[4215,4219],{"type":10,"tag":543,"props":4216,"children":4217},{"style":550},[4218],{"type":15,"value":1366},{"type":10,"tag":543,"props":4220,"children":4221},{"style":562},[4222],{"type":15,"value":4223}," sampledImageDescriptorSize;\n",{"type":10,"tag":543,"props":4225,"children":4226},{"class":545,"line":1224},[4227,4231],{"type":10,"tag":543,"props":4228,"children":4229},{"style":550},[4230],{"type":15,"value":1366},{"type":10,"tag":543,"props":4232,"children":4233},{"style":562},[4234],{"type":15,"value":4235}," storageImageDescriptorSize;\n",{"type":10,"tag":543,"props":4237,"children":4238},{"class":545,"line":1232},[4239,4243],{"type":10,"tag":543,"props":4240,"children":4241},{"style":550},[4242],{"type":15,"value":1366},{"type":10,"tag":543,"props":4244,"children":4245},{"style":562},[4246],{"type":15,"value":4247}," uniformTexelBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4249,"children":4250},{"class":545,"line":1249},[4251,4255],{"type":10,"tag":543,"props":4252,"children":4253},{"style":550},[4254],{"type":15,"value":1366},{"type":10,"tag":543,"props":4256,"children":4257},{"style":562},[4258],{"type":15,"value":4259}," robustUniformTexelBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4261,"children":4262},{"class":545,"line":1257},[4263,4267],{"type":10,"tag":543,"props":4264,"children":4265},{"style":550},[4266],{"type":15,"value":1366},{"type":10,"tag":543,"props":4268,"children":4269},{"style":562},[4270],{"type":15,"value":4271}," storageTexelBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4273,"children":4274},{"class":545,"line":1273},[4275,4279],{"type":10,"tag":543,"props":4276,"children":4277},{"style":550},[4278],{"type":15,"value":1366},{"type":10,"tag":543,"props":4280,"children":4281},{"style":562},[4282],{"type":15,"value":4283}," robustStorageTexelBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4285,"children":4286},{"class":545,"line":1282},[4287,4291],{"type":10,"tag":543,"props":4288,"children":4289},{"style":550},[4290],{"type":15,"value":1366},{"type":10,"tag":543,"props":4292,"children":4293},{"style":562},[4294],{"type":15,"value":4295}," uniformBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4297,"children":4298},{"class":545,"line":1291},[4299,4303],{"type":10,"tag":543,"props":4300,"children":4301},{"style":550},[4302],{"type":15,"value":1366},{"type":10,"tag":543,"props":4304,"children":4305},{"style":562},[4306],{"type":15,"value":4307}," robustUniformBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4309,"children":4310},{"class":545,"line":1300},[4311,4315],{"type":10,"tag":543,"props":4312,"children":4313},{"style":550},[4314],{"type":15,"value":1366},{"type":10,"tag":543,"props":4316,"children":4317},{"style":562},[4318],{"type":15,"value":4319}," storageBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4321,"children":4322},{"class":545,"line":1308},[4323,4327],{"type":10,"tag":543,"props":4324,"children":4325},{"style":550},[4326],{"type":15,"value":1366},{"type":10,"tag":543,"props":4328,"children":4329},{"style":562},[4330],{"type":15,"value":4331}," robustStorageBufferDescriptorSize;\n",{"type":10,"tag":543,"props":4333,"children":4334},{"class":545,"line":1325},[4335,4339],{"type":10,"tag":543,"props":4336,"children":4337},{"style":550},[4338],{"type":15,"value":1366},{"type":10,"tag":543,"props":4340,"children":4341},{"style":562},[4342],{"type":15,"value":4343}," inputAttachmentDescriptorSize;\n",{"type":10,"tag":543,"props":4345,"children":4346},{"class":545,"line":1334},[4347,4351],{"type":10,"tag":543,"props":4348,"children":4349},{"style":550},[4350],{"type":15,"value":1366},{"type":10,"tag":543,"props":4352,"children":4353},{"style":562},[4354],{"type":15,"value":4355}," accelerationStructureDescriptorSize;\n",{"type":10,"tag":543,"props":4357,"children":4358},{"class":545,"line":1360},[4359],{"type":10,"tag":543,"props":4360,"children":4361},{"style":562},[4362],{"type":15,"value":4363}," VkDeviceSize maxSamplerDescriptorBufferRange;\n",{"type":10,"tag":543,"props":4365,"children":4366},{"class":545,"line":1378},[4367],{"type":10,"tag":543,"props":4368,"children":4369},{"style":562},[4370],{"type":15,"value":4371}," VkDeviceSize maxResourceDescriptorBufferRange;\n",{"type":10,"tag":543,"props":4373,"children":4374},{"class":545,"line":3406},[4375],{"type":10,"tag":543,"props":4376,"children":4377},{"style":562},[4378],{"type":15,"value":4379}," VkDeviceSize samplerDescriptorBufferAddressSpaceSize;\n",{"type":10,"tag":543,"props":4381,"children":4382},{"class":545,"line":3423},[4383],{"type":10,"tag":543,"props":4384,"children":4385},{"style":562},[4386],{"type":15,"value":4387}," VkDeviceSize resourceDescriptorBufferAddressSpaceSize;\n",{"type":10,"tag":543,"props":4389,"children":4390},{"class":545,"line":3440},[4391],{"type":10,"tag":543,"props":4392,"children":4393},{"style":562},[4394],{"type":15,"value":4395}," VkDeviceSize descriptorBufferAddressSpaceSize;\n",{"type":10,"tag":543,"props":4397,"children":4398},{"class":545,"line":3465},[4399],{"type":10,"tag":543,"props":4400,"children":4401},{"style":562},[4402],{"type":15,"value":4403},"} VkPhysicalDeviceDescriptorBufferPropertiesEXT;\n",{"type":10,"tag":56,"props":4405,"children":4406},{},[4407,4417,4434,4451,4507,4517,4527,4537,4547,4565,4599,4609,4619,4629,4639,4649,4659,4669,4679,4689,4699,4709,4719,4729,4739,4749,4759,4769,4779],{"type":10,"tag":60,"props":4408,"children":4409},{},[4410,4415],{"type":10,"tag":42,"props":4411,"children":4413},{"className":4412},[],[4414],{"type":15,"value":2394},{"type":15,"value":4416}," describes the alignment required, in bytes, when setting offsets into the descriptor buffer.",{"type":10,"tag":60,"props":4418,"children":4419},{},[4420,4425,4427,4432],{"type":10,"tag":42,"props":4421,"children":4423},{"className":4422},[],[4424],{"type":15,"value":1536},{"type":15,"value":4426}," indicates that the implementation does not require an array of ",{"type":10,"tag":42,"props":4428,"children":4430},{"className":4429},[],[4431],{"type":15,"value":1544},{"type":15,"value":4433}," descriptors to be written into a descriptor buffer as an array of image descriptors, immediately followed by an array of sampler descriptors.",{"type":10,"tag":60,"props":4435,"children":4436},{},[4437,4442,4444,4449],{"type":10,"tag":42,"props":4438,"children":4440},{"className":4439},[],[4441],{"type":15,"value":1985},{"type":15,"value":4443}," indicates that the implementation does not require a buffer created with ",{"type":10,"tag":42,"props":4445,"children":4447},{"className":4446},[],[4448],{"type":15,"value":2821},{"type":15,"value":4450}," to be bound when using push descriptors.",{"type":10,"tag":60,"props":4452,"children":4453},{},[4454,4459,4461,4466,4467,4472,4474,4479,4481,4486,4487,4492,4494,4499,4500,4505],{"type":10,"tag":42,"props":4455,"children":4457},{"className":4456},[],[4458],{"type":15,"value":2629},{"type":15,"value":4460}," indicates that the implementation does not restrict when the ",{"type":10,"tag":42,"props":4462,"children":4464},{"className":4463},[],[4465],{"type":15,"value":2643},{"type":15,"value":1509},{"type":10,"tag":42,"props":4468,"children":4470},{"className":4469},[],[4471],{"type":15,"value":2650},{"type":15,"value":4473}," objects used to retrieve descriptor data can be created in relation to command buffer submission. If this value is ",{"type":10,"tag":42,"props":4475,"children":4477},{"className":4476},[],[4478],{"type":15,"value":1552},{"type":15,"value":4480},", then the application must create any ",{"type":10,"tag":42,"props":4482,"children":4484},{"className":4483},[],[4485],{"type":15,"value":2643},{"type":15,"value":1509},{"type":10,"tag":42,"props":4488,"children":4490},{"className":4489},[],[4491],{"type":15,"value":2650},{"type":15,"value":4493}," objects whose descriptor data is accessed during the execution of a command buffer, before the ",{"type":10,"tag":42,"props":4495,"children":4497},{"className":4496},[],[4498],{"type":15,"value":2617},{"type":15,"value":2659},{"type":10,"tag":42,"props":4501,"children":4503},{"className":4502},[],[4504],{"type":15,"value":2665},{"type":15,"value":4506},") call that submits that command buffer.",{"type":10,"tag":60,"props":4508,"children":4509},{},[4510,4515],{"type":10,"tag":42,"props":4511,"children":4513},{"className":4512},[],[4514],{"type":15,"value":2042},{"type":15,"value":4516}," defines the maximum total number of descriptor buffers and embedded immutable sampler sets that can be bound.",{"type":10,"tag":60,"props":4518,"children":4519},{},[4520,4525],{"type":10,"tag":42,"props":4521,"children":4523},{"className":4522},[],[4524],{"type":15,"value":1961},{"type":15,"value":4526}," defines the maximum number of resource descriptor buffers that can be bound.",{"type":10,"tag":60,"props":4528,"children":4529},{},[4530,4535],{"type":10,"tag":42,"props":4531,"children":4533},{"className":4532},[],[4534],{"type":15,"value":1942},{"type":15,"value":4536}," defines the maximum number of sampler descriptor buffers that can be bound.",{"type":10,"tag":60,"props":4538,"children":4539},{},[4540,4545],{"type":10,"tag":42,"props":4541,"children":4543},{"className":4542},[],[4544],{"type":15,"value":2560},{"type":15,"value":4546}," defines the maximum number of embedded immutable samplers sets that can be bound.",{"type":10,"tag":60,"props":4548,"children":4549},{},[4550,4556,4558,4563],{"type":10,"tag":42,"props":4551,"children":4553},{"className":4552},[],[4554],{"type":15,"value":4555},"maxEmbeddedImmutableSamplers",{"type":15,"value":4557}," describes the maximum number of unique immutable samplers in descriptor set layouts created with ",{"type":10,"tag":42,"props":4559,"children":4561},{"className":4560},[],[4562],{"type":15,"value":2552},{"type":15,"value":4564},", and pipeline layouts created from them, which can simultaneously exist on a device.",{"type":10,"tag":60,"props":4566,"children":4567},{},[4568,4573,4574,4579,4580,4585,4586,4591,4592,4597],{"type":10,"tag":42,"props":4569,"children":4571},{"className":4570},[],[4572],{"type":15,"value":3793},{"type":15,"value":748},{"type":10,"tag":42,"props":4575,"children":4577},{"className":4576},[],[4578],{"type":15,"value":3800},{"type":15,"value":748},{"type":10,"tag":42,"props":4581,"children":4583},{"className":4582},[],[4584],{"type":15,"value":3807},{"type":15,"value":748},{"type":10,"tag":42,"props":4587,"children":4589},{"className":4588},[],[4590],{"type":15,"value":3814},{"type":15,"value":2112},{"type":10,"tag":42,"props":4593,"children":4595},{"className":4594},[],[4596],{"type":15,"value":3822},{"type":15,"value":4598}," define the maximum size, in bytes, of the opaque data used for capture replay with each respective object type.",{"type":10,"tag":60,"props":4600,"children":4601},{},[4602,4607],{"type":10,"tag":42,"props":4603,"children":4605},{"className":4604},[],[4606],{"type":15,"value":746},{"type":15,"value":4608}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_SAMPLER descriptor.",{"type":10,"tag":60,"props":4610,"children":4611},{},[4612,4617],{"type":10,"tag":42,"props":4613,"children":4615},{"className":4614},[],[4616],{"type":15,"value":754},{"type":15,"value":4618}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor.",{"type":10,"tag":60,"props":4620,"children":4621},{},[4622,4627],{"type":10,"tag":42,"props":4623,"children":4625},{"className":4624},[],[4626],{"type":15,"value":761},{"type":15,"value":4628}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE descriptor.",{"type":10,"tag":60,"props":4630,"children":4631},{},[4632,4637],{"type":10,"tag":42,"props":4633,"children":4635},{"className":4634},[],[4636],{"type":15,"value":768},{"type":15,"value":4638}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_IMAGE descriptor.",{"type":10,"tag":60,"props":4640,"children":4641},{},[4642,4647],{"type":10,"tag":42,"props":4643,"children":4645},{"className":4644},[],[4646],{"type":15,"value":775},{"type":15,"value":4648}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor.",{"type":10,"tag":60,"props":4650,"children":4651},{},[4652,4657],{"type":10,"tag":42,"props":4653,"children":4655},{"className":4654},[],[4656],{"type":15,"value":782},{"type":15,"value":4658}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER descriptor when robust buffer access is enabled.",{"type":10,"tag":60,"props":4660,"children":4661},{},[4662,4667],{"type":10,"tag":42,"props":4663,"children":4665},{"className":4664},[],[4666],{"type":15,"value":789},{"type":15,"value":4668}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor.",{"type":10,"tag":60,"props":4670,"children":4671},{},[4672,4677],{"type":10,"tag":42,"props":4673,"children":4675},{"className":4674},[],[4676],{"type":15,"value":796},{"type":15,"value":4678}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_TEXEL_BUFFER descriptor when robust buffer access is enabled.",{"type":10,"tag":60,"props":4680,"children":4681},{},[4682,4687],{"type":10,"tag":42,"props":4683,"children":4685},{"className":4684},[],[4686],{"type":15,"value":803},{"type":15,"value":4688}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor.",{"type":10,"tag":60,"props":4690,"children":4691},{},[4692,4697],{"type":10,"tag":42,"props":4693,"children":4695},{"className":4694},[],[4696],{"type":15,"value":810},{"type":15,"value":4698}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER descriptor when robust buffer access is enabled.",{"type":10,"tag":60,"props":4700,"children":4701},{},[4702,4707],{"type":10,"tag":42,"props":4703,"children":4705},{"className":4704},[],[4706],{"type":15,"value":817},{"type":15,"value":4708}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor.",{"type":10,"tag":60,"props":4710,"children":4711},{},[4712,4717],{"type":10,"tag":42,"props":4713,"children":4715},{"className":4714},[],[4716],{"type":15,"value":824},{"type":15,"value":4718}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_STORAGE_BUFFER descriptor when robust buffer access is enabled.",{"type":10,"tag":60,"props":4720,"children":4721},{},[4722,4727],{"type":10,"tag":42,"props":4723,"children":4725},{"className":4724},[],[4726],{"type":15,"value":831},{"type":15,"value":4728}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT descriptor.",{"type":10,"tag":60,"props":4730,"children":4731},{},[4732,4737],{"type":10,"tag":42,"props":4733,"children":4735},{"className":4734},[],[4736],{"type":15,"value":838},{"type":15,"value":4738}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR/VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV descriptor.",{"type":10,"tag":60,"props":4740,"children":4741},{},[4742,4747],{"type":10,"tag":42,"props":4743,"children":4745},{"className":4744},[],[4746],{"type":15,"value":2084},{"type":15,"value":4748}," describes the accessible range, in bytes, of a sampler buffer when bound.",{"type":10,"tag":60,"props":4750,"children":4751},{},[4752,4757],{"type":10,"tag":42,"props":4753,"children":4755},{"className":4754},[],[4756],{"type":15,"value":2092},{"type":15,"value":4758}," describes the accessible range, in bytes, of a resource buffer when bound.",{"type":10,"tag":60,"props":4760,"children":4761},{},[4762,4767],{"type":10,"tag":42,"props":4763,"children":4765},{"className":4764},[],[4766],{"type":15,"value":2103},{"type":15,"value":4768}," describes the total amount of address space available, in bytes, for descriptor buffers containing samplers.",{"type":10,"tag":60,"props":4770,"children":4771},{},[4772,4777],{"type":10,"tag":42,"props":4773,"children":4775},{"className":4774},[],[4776],{"type":15,"value":2110},{"type":15,"value":4778}," describes the total amount of address space available, in bytes, for descriptor buffers containing resources.",{"type":10,"tag":60,"props":4780,"children":4781},{},[4782,4787],{"type":10,"tag":42,"props":4783,"children":4785},{"className":4784},[],[4786],{"type":15,"value":2118},{"type":15,"value":4788}," describes the total amount of address space available, in bytes, for all descriptor buffers.",{"type":10,"tag":11,"props":4790,"children":4791},{},[4792,4794,4799],{"type":15,"value":4793},"If ",{"type":10,"tag":124,"props":4795,"children":4797},{"href":126,"rel":4796},[128],[4798],{"type":15,"value":131},{"type":15,"value":4800}," is used,\na descriptor is considered to be a union of all the enabled types, so the size of a descriptor is the maximum of all enabled types.",{"type":10,"tag":532,"props":4802,"children":4804},{"className":534,"code":4803,"language":536,"meta":537,"style":537},"typedef struct VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT {\n VkStructureType sType;\n void* pNext;\n size_t combinedImageSamplerDensityMapDescriptorSize;\n} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT;\n",[4805],{"type":10,"tag":42,"props":4806,"children":4807},{"__ignoreMap":537},[4808,4824,4831,4842,4854],{"type":10,"tag":543,"props":4809,"children":4810},{"class":545,"line":546},[4811,4815,4819],{"type":10,"tag":543,"props":4812,"children":4813},{"style":550},[4814],{"type":15,"value":920},{"type":10,"tag":543,"props":4816,"children":4817},{"style":550},[4818],{"type":15,"value":925},{"type":10,"tag":543,"props":4820,"children":4821},{"style":562},[4822],{"type":15,"value":4823}," VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT {\n",{"type":10,"tag":543,"props":4825,"children":4826},{"class":545,"line":568},[4827],{"type":10,"tag":543,"props":4828,"children":4829},{"style":562},[4830],{"type":15,"value":3084},{"type":10,"tag":543,"props":4832,"children":4833},{"class":545,"line":588},[4834,4838],{"type":10,"tag":543,"props":4835,"children":4836},{"style":550},[4837],{"type":15,"value":1384},{"type":10,"tag":543,"props":4839,"children":4840},{"style":562},[4841],{"type":15,"value":3900},{"type":10,"tag":543,"props":4843,"children":4844},{"class":545,"line":606},[4845,4849],{"type":10,"tag":543,"props":4846,"children":4847},{"style":550},[4848],{"type":15,"value":1366},{"type":10,"tag":543,"props":4850,"children":4851},{"style":562},[4852],{"type":15,"value":4853}," combinedImageSamplerDensityMapDescriptorSize;\n",{"type":10,"tag":543,"props":4855,"children":4856},{"class":545,"line":630},[4857],{"type":10,"tag":543,"props":4858,"children":4859},{"style":562},[4860],{"type":15,"value":4861},"} VkPhysicalDeviceDescriptorBufferDensityMapPropertiesEXT;\n",{"type":10,"tag":56,"props":4863,"children":4864},{},[4865],{"type":10,"tag":60,"props":4866,"children":4867},{},[4868,4873,4875,4882],{"type":10,"tag":42,"props":4869,"children":4871},{"className":4870},[],[4872],{"type":15,"value":845},{"type":15,"value":4874}," describes the size, in bytes, of a VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER descriptor when using the VK_SAMPLER_CREATE_SUBSAMPLED_BIT_EXT flag of the ",{"type":10,"tag":124,"props":4876,"children":4879},{"href":4877,"rel":4878},"https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VK_EXT_fragment_density_map.html",[128],[4880],{"type":15,"value":4881},"VK_EXT_fragment_density_map",{"type":15,"value":4883}," extension.",{"type":10,"tag":17,"props":4885,"children":4887},{"id":4886},"_mapping_to_directx_12_descriptor_heaps",[4888],{"type":15,"value":4889},"Mapping to DirectX® 12 Descriptor Heaps",{"type":10,"tag":11,"props":4891,"children":4892},{},[4893],{"type":15,"value":4894},"In DirectX 12 (DX12), descriptors are allocated into descriptor heaps, which work almost completely differently to anything currently in Vulkan.\nThis extension aims to reduce one aspect of the divergence between the two.\nBelow is a rough description of the mapping from DX12 to this extension.\nApplications looking to port between the two APIs will likely have more information available than the DX12 API provides, and can likely take shortcuts (highlighted where possible).\nThis doesn’t solve the overall limits for object counts, and so it’s not possible to trivially emulate every corner of the DX12 API.",{"type":10,"tag":228,"props":4896,"children":4898},{"id":4897},"_descriptor_heap_creation",[4899],{"type":15,"value":4900},"Descriptor Heap Creation",{"type":10,"tag":11,"props":4902,"children":4903},{},[4904],{"type":15,"value":4905},"DX12 has the following command to create a heap:",{"type":10,"tag":532,"props":4907,"children":4909},{"className":534,"code":4908,"language":536,"meta":537,"style":537},"typedef struct D3D12_DESCRIPTOR_HEAP_DESC {\n D3D12_DESCRIPTOR_HEAP_TYPE Type;\n UINT NumDescriptors;\n D3D12_DESCRIPTOR_HEAP_FLAGS Flags;\n UINT NodeMask;\n} D3D12_DESCRIPTOR_HEAP_DESC;\n\nHRESULT CreateDescriptorHeap(\n const D3D12_DESCRIPTOR_HEAP_DESC *pDescriptorHeapDesc,\n REFIID riid,\n void **ppvHeap\n);\n",[4910],{"type":10,"tag":42,"props":4911,"children":4912},{"__ignoreMap":537},[4913,4929,4937,4945,4953,4961,4969,4976,4993,5019,5036,5054],{"type":10,"tag":543,"props":4914,"children":4915},{"class":545,"line":546},[4916,4920,4924],{"type":10,"tag":543,"props":4917,"children":4918},{"style":550},[4919],{"type":15,"value":920},{"type":10,"tag":543,"props":4921,"children":4922},{"style":550},[4923],{"type":15,"value":925},{"type":10,"tag":543,"props":4925,"children":4926},{"style":562},[4927],{"type":15,"value":4928}," D3D12_DESCRIPTOR_HEAP_DESC {\n",{"type":10,"tag":543,"props":4930,"children":4931},{"class":545,"line":568},[4932],{"type":10,"tag":543,"props":4933,"children":4934},{"style":562},[4935],{"type":15,"value":4936}," D3D12_DESCRIPTOR_HEAP_TYPE Type;\n",{"type":10,"tag":543,"props":4938,"children":4939},{"class":545,"line":588},[4940],{"type":10,"tag":543,"props":4941,"children":4942},{"style":562},[4943],{"type":15,"value":4944}," UINT NumDescriptors;\n",{"type":10,"tag":543,"props":4946,"children":4947},{"class":545,"line":606},[4948],{"type":10,"tag":543,"props":4949,"children":4950},{"style":562},[4951],{"type":15,"value":4952}," D3D12_DESCRIPTOR_HEAP_FLAGS Flags;\n",{"type":10,"tag":543,"props":4954,"children":4955},{"class":545,"line":630},[4956],{"type":10,"tag":543,"props":4957,"children":4958},{"style":562},[4959],{"type":15,"value":4960}," UINT NodeMask;\n",{"type":10,"tag":543,"props":4962,"children":4963},{"class":545,"line":640},[4964],{"type":10,"tag":543,"props":4965,"children":4966},{"style":562},[4967],{"type":15,"value":4968},"} D3D12_DESCRIPTOR_HEAP_DESC;\n",{"type":10,"tag":543,"props":4970,"children":4971},{"class":545,"line":657},[4972],{"type":10,"tag":543,"props":4973,"children":4974},{"emptyLinePlaceholder":634},[4975],{"type":15,"value":637},{"type":10,"tag":543,"props":4977,"children":4978},{"class":545,"line":673},[4979,4984,4989],{"type":10,"tag":543,"props":4980,"children":4981},{"style":562},[4982],{"type":15,"value":4983},"HRESULT ",{"type":10,"tag":543,"props":4985,"children":4986},{"style":556},[4987],{"type":15,"value":4988},"CreateDescriptorHeap",{"type":10,"tag":543,"props":4990,"children":4991},{"style":562},[4992],{"type":15,"value":565},{"type":10,"tag":543,"props":4994,"children":4995},{"class":545,"line":689},[4996,5001,5006,5010,5015],{"type":10,"tag":543,"props":4997,"children":4998},{"style":550},[4999],{"type":15,"value":5000}," const",{"type":10,"tag":543,"props":5002,"children":5003},{"style":562},[5004],{"type":15,"value":5005}," D3D12_DESCRIPTOR_HEAP_DESC ",{"type":10,"tag":543,"props":5007,"children":5008},{"style":550},[5009],{"type":15,"value":617},{"type":10,"tag":543,"props":5011,"children":5012},{"style":577},[5013],{"type":15,"value":5014},"pDescriptorHeapDesc",{"type":10,"tag":543,"props":5016,"children":5017},{"style":562},[5018],{"type":15,"value":585},{"type":10,"tag":543,"props":5020,"children":5021},{"class":545,"line":707},[5022,5027,5032],{"type":10,"tag":543,"props":5023,"children":5024},{"style":562},[5025],{"type":15,"value":5026}," REFIID ",{"type":10,"tag":543,"props":5028,"children":5029},{"style":577},[5030],{"type":15,"value":5031},"riid",{"type":10,"tag":543,"props":5033,"children":5034},{"style":562},[5035],{"type":15,"value":585},{"type":10,"tag":543,"props":5037,"children":5038},{"class":545,"line":1036},[5039,5044,5049],{"type":10,"tag":543,"props":5040,"children":5041},{"style":550},[5042],{"type":15,"value":5043}," void",{"type":10,"tag":543,"props":5045,"children":5046},{"style":550},[5047],{"type":15,"value":5048}," **",{"type":10,"tag":543,"props":5050,"children":5051},{"style":562},[5052],{"type":15,"value":5053},"ppvHeap\n",{"type":10,"tag":543,"props":5055,"children":5056},{"class":545,"line":1058},[5057],{"type":10,"tag":543,"props":5058,"children":5059},{"style":562},[5060],{"type":15,"value":627},{"type":10,"tag":11,"props":5062,"children":5063},{},[5064],{"type":15,"value":5065},"Implementing the equivalent functionality in Vulkan would mean the following operations:",{"type":10,"tag":56,"props":5067,"children":5068},{},[5069,5170,5195,5257,5304],{"type":10,"tag":60,"props":5070,"children":5071},{},[5072,5073,5078,5079,5085,5087],{"type":15,"value":2707},{"type":10,"tag":42,"props":5074,"children":5076},{"className":5075},[],[5077],{"type":15,"value":249},{"type":15,"value":192},{"type":10,"tag":42,"props":5080,"children":5082},{"className":5081},[],[5083],{"type":15,"value":5084},"VK_DESCRIPTOR_BINDING_VARIABLE_DESCRIPTOR_COUNT_BIT",{"type":15,"value":5086},". The count would be up to 1000000 for resources, and 2048 for samplers.",{"type":10,"tag":56,"props":5088,"children":5089},{},[5090,5101],{"type":10,"tag":60,"props":5091,"children":5092},{},[5093,5094,5099],{"type":15,"value":4793},{"type":10,"tag":124,"props":5095,"children":5097},{"href":126,"rel":5096},[128],[5098],{"type":15,"value":131},{"type":15,"value":5100}," is supported, we only need one descriptor set layout which supports all descriptor types for the heap type.",{"type":10,"tag":60,"props":5102,"children":5103},{},[5104,5106],{"type":15,"value":5105},"Otherwise, there are two alternatives:",{"type":10,"tag":56,"props":5107,"children":5108},{},[5109,5157],{"type":10,"tag":60,"props":5110,"children":5111},{},[5112,5114,5120,5121,5127,5128,5134,5135,5141,5142,5148,5149,5155],{"type":15,"value":5113},"Create up to 6 descriptor set layouts of the relevant descriptor types the application cares about (",{"type":10,"tag":42,"props":5115,"children":5117},{"className":5116},[],[5118],{"type":15,"value":5119},"STORAGE_BUFFER",{"type":15,"value":748},{"type":10,"tag":42,"props":5122,"children":5124},{"className":5123},[],[5125],{"type":15,"value":5126},"UNIFORM_BUFFER",{"type":15,"value":748},{"type":10,"tag":42,"props":5129,"children":5131},{"className":5130},[],[5132],{"type":15,"value":5133},"SAMPLED_IMAGE",{"type":15,"value":748},{"type":10,"tag":42,"props":5136,"children":5138},{"className":5137},[],[5139],{"type":15,"value":5140},"STORAGE_IMAGE",{"type":15,"value":748},{"type":10,"tag":42,"props":5143,"children":5145},{"className":5144},[],[5146],{"type":15,"value":5147},"UNIFORM_TEXEL_BUFFER",{"type":15,"value":748},{"type":10,"tag":42,"props":5150,"children":5152},{"className":5151},[],[5153],{"type":15,"value":5154},"STORAGE_TEXEL_BUFFER",{"type":15,"value":5156},").",{"type":10,"tag":60,"props":5158,"children":5159},{},[5160,5162,5168],{"type":15,"value":5161},"Create one descriptor set layout with 6 fixed-size arrays instead of using variable descriptor counts. This means ",{"type":10,"tag":42,"props":5163,"children":5165},{"className":5164},[],[5166],{"type":15,"value":5167},"NumDescriptors",{"type":15,"value":5169}," is effectively ignored.",{"type":10,"tag":60,"props":5171,"children":5172},{},[5173,5174,5179,5181,5186,5188,5194],{"type":15,"value":2707},{"type":10,"tag":42,"props":5175,"children":5177},{"className":5176},[],[5178],{"type":15,"value":312},{"type":15,"value":5180},", size equal to ",{"type":10,"tag":42,"props":5182,"children":5184},{"className":5183},[],[5185],{"type":15,"value":5167},{"type":15,"value":5187}," multiplied by the descriptor size within it, and its device mask set per ",{"type":10,"tag":42,"props":5189,"children":5191},{"className":5190},[],[5192],{"type":15,"value":5193},"NodeMask",{"type":15,"value":479},{"type":10,"tag":60,"props":5196,"children":5197},{},[5198,5199,5205,5207,5213,5215,5221,5223],{"type":15,"value":4793},{"type":10,"tag":42,"props":5200,"children":5202},{"className":5201},[],[5203],{"type":15,"value":5204},"Flags",{"type":15,"value":5206}," includes ",{"type":10,"tag":42,"props":5208,"children":5210},{"className":5209},[],[5211],{"type":15,"value":5212},"D3D12_DESCRIPTOR_HEAP_FLAG_SHADER_VISIBLE",{"type":15,"value":5214},", allocate ",{"type":10,"tag":42,"props":5216,"children":5218},{"className":5217},[],[5219],{"type":15,"value":5220},"DEVICE_LOCAL",{"type":15,"value":5222}," memory.",{"type":10,"tag":56,"props":5224,"children":5225},{},[5226,5245],{"type":10,"tag":60,"props":5227,"children":5228},{},[5229,5231,5236,5237,5243],{"type":15,"value":5230},"If this memory can be ",{"type":10,"tag":42,"props":5232,"children":5234},{"className":5233},[],[5235],{"type":15,"value":5220},{"type":15,"value":141},{"type":10,"tag":42,"props":5238,"children":5240},{"className":5239},[],[5241],{"type":15,"value":5242},"HOST_VISIBLE",{"type":15,"value":5244},", then that can be mapped directly for the CPU pointer and used as the heap CPU pointer.",{"type":10,"tag":60,"props":5246,"children":5247},{},[5248,5250,5255],{"type":15,"value":5249},"Otherwise, ",{"type":10,"tag":42,"props":5251,"children":5253},{"className":5252},[],[5254],{"type":15,"value":5242},{"type":15,"value":5256}," staging memory should be allocated for a parallel buffer.\nCopying from this staging buffer to the main descriptor buffer should be done at each submit where the staging buffer has been modified.",{"type":10,"tag":60,"props":5258,"children":5259},{},[5260,5262,5267,5268,5273,5275,5280,5281],{"type":15,"value":5261},"If Flags does not include ",{"type":10,"tag":42,"props":5263,"children":5265},{"className":5264},[],[5266],{"type":15,"value":5212},{"type":15,"value":5214},{"type":10,"tag":42,"props":5269,"children":5271},{"className":5270},[],[5272],{"type":15,"value":5242},{"type":15,"value":5274}," memory that can be used for staging copies to ",{"type":10,"tag":42,"props":5276,"children":5278},{"className":5277},[],[5279],{"type":15,"value":5220},{"type":15,"value":5222},{"type":10,"tag":56,"props":5282,"children":5283},{},[5284],{"type":10,"tag":60,"props":5285,"children":5286},{},[5287,5289,5295,5297,5303],{"type":15,"value":5288},"Alternatively, plain ",{"type":10,"tag":42,"props":5290,"children":5292},{"className":5291},[],[5293],{"type":15,"value":5294},"malloc",{"type":15,"value":5296}," can be used if descriptor copies are implemented as ",{"type":10,"tag":42,"props":5298,"children":5300},{"className":5299},[],[5301],{"type":15,"value":5302},"memcpy",{"type":15,"value":479},{"type":10,"tag":60,"props":5305,"children":5306},{},[5307,5309,5315],{"type":15,"value":5308},"Copying descriptors ala ",{"type":10,"tag":42,"props":5310,"children":5312},{"className":5311},[],[5313],{"type":15,"value":5314},"CopyDescriptorsSimple()",{"type":15,"value":5316}," is implemented with either memcpy or staging copies.",{"type":10,"tag":11,"props":5318,"children":5319},{},[5320],{"type":15,"value":5321},"This model would support the full TIER_3 resource binding feature in DX12 and shader model 6.6 direct heap access, but can be simplified a lot for applications with DX11-style binding models.",{"type":10,"tag":228,"props":5323,"children":5325},{"id":5324},"_descriptor_creation",[5326],{"type":15,"value":5327},"Descriptor Creation",{"type":10,"tag":11,"props":5329,"children":5330},{},[5331,5333,5340],{"type":15,"value":5332},"Unlike DX12, Vulkan (and this extension) requires view objects and sampler objects to exist and have their lifetimes managed by the application.\nThese objects need to be kept alive for the descriptor itself to be valid.\nHow this is managed precisely is going to depend on the application’s usage patterns, though ",{"type":10,"tag":124,"props":5334,"children":5337},{"href":5335,"rel":5336},"https://github.com/HansKristian-Work/vkd3d-proton",[128],[5338],{"type":15,"value":5339},"vkd3d-proton",{"type":15,"value":5341}," suggests one viable option.\nThe scheme used by vkd3d-proton involves keeping a hash map of the views associated with each resource object (or the device for samplers), using creation parameters as a key, so that their lifetime is tied to the underlying resource and can be reused.\nWhen actually creating the UAV/SRV/Sampler, the object should be looked up in the relevant hash map, and created there if necessary.\nThe descriptor itself is then written directly to the provided CPU pointer.\nNote that 'VkBufferView' objects are not used and have been replaced by an explicit address, range, and format.\nThis is very important since applications have a tendency to linearly allocate texel buffers and might end up rapidly create these views at different offsets.\nIf applications were forced to hold on to all unique 'VkBufferView' objects, things get out of hand quickly.\nvkd3d-proton currently works around this problem by quantizing the texel buffer offset and range, and instead performs offset/range checks per access in shaders to keep the number of objects low, which is obviously not desirable.",{"type":10,"tag":11,"props":5343,"children":5344},{},[5345],{"type":15,"value":5346},"For image views on the other hand, the number of unique views in flight per resource tends to be constrained and manageable.\nIn terms of performance characteristics, creating SRVs and UAVs is already far more expensive in DX12 than copying descriptors.\nThe style observed in most DX12 applications is that view objects are created in non-shader visible heaps, which are then streamed into shader visible heaps.",{"type":10,"tag":228,"props":5348,"children":5350},{"id":5349},"_descriptor_heap_queries",[5351],{"type":15,"value":5352},"Descriptor Heap Queries",{"type":10,"tag":11,"props":5354,"children":5355},{},[5356],{"type":15,"value":5357},"Descriptor heaps provide methods to query the “start” pointer for the descriptor heap on both the CPU and GPU.",{"type":10,"tag":532,"props":5359,"children":5361},{"className":534,"code":5360,"language":536,"meta":537,"style":537},"D3D12_CPU_DESCRIPTOR_HANDLE GetCPUDescriptorHandleForHeapStart();\nD3D12_GPU_DESCRIPTOR_HANDLE GetGPUDescriptorHandleForHeapStart();\nUINT GetDescriptorHandleIncrementSize(\n D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType\n);\n",[5362],{"type":10,"tag":42,"props":5363,"children":5364},{"__ignoreMap":537},[5365,5383,5400,5417,5425],{"type":10,"tag":543,"props":5366,"children":5367},{"class":545,"line":546},[5368,5373,5378],{"type":10,"tag":543,"props":5369,"children":5370},{"style":562},[5371],{"type":15,"value":5372},"D3D12_CPU_DESCRIPTOR_HANDLE ",{"type":10,"tag":543,"props":5374,"children":5375},{"style":556},[5376],{"type":15,"value":5377},"GetCPUDescriptorHandleForHeapStart",{"type":10,"tag":543,"props":5379,"children":5380},{"style":562},[5381],{"type":15,"value":5382},"();\n",{"type":10,"tag":543,"props":5384,"children":5385},{"class":545,"line":568},[5386,5391,5396],{"type":10,"tag":543,"props":5387,"children":5388},{"style":562},[5389],{"type":15,"value":5390},"D3D12_GPU_DESCRIPTOR_HANDLE ",{"type":10,"tag":543,"props":5392,"children":5393},{"style":556},[5394],{"type":15,"value":5395},"GetGPUDescriptorHandleForHeapStart",{"type":10,"tag":543,"props":5397,"children":5398},{"style":562},[5399],{"type":15,"value":5382},{"type":10,"tag":543,"props":5401,"children":5402},{"class":545,"line":588},[5403,5408,5413],{"type":10,"tag":543,"props":5404,"children":5405},{"style":562},[5406],{"type":15,"value":5407},"UINT ",{"type":10,"tag":543,"props":5409,"children":5410},{"style":556},[5411],{"type":15,"value":5412},"GetDescriptorHandleIncrementSize",{"type":10,"tag":543,"props":5414,"children":5415},{"style":562},[5416],{"type":15,"value":565},{"type":10,"tag":543,"props":5418,"children":5419},{"class":545,"line":606},[5420],{"type":10,"tag":543,"props":5421,"children":5422},{"style":562},[5423],{"type":15,"value":5424}," D3D12_DESCRIPTOR_HEAP_TYPE DescriptorHeapType\n",{"type":10,"tag":543,"props":5426,"children":5427},{"class":545,"line":630},[5428],{"type":10,"tag":543,"props":5429,"children":5430},{"style":562},[5431],{"type":15,"value":627},{"type":10,"tag":11,"props":5433,"children":5434},{},[5435,5440,5442,5448,5450,5455,5457,5462],{"type":10,"tag":42,"props":5436,"children":5438},{"className":5437},[],[5439],{"type":15,"value":5395},{"type":15,"value":5441}," should be the ",{"type":10,"tag":42,"props":5443,"children":5445},{"className":5444},[],[5446],{"type":15,"value":5447},"VkDeviceAddress",{"type":15,"value":5449}," for the device-local buffer.\n",{"type":10,"tag":42,"props":5451,"children":5453},{"className":5452},[],[5454],{"type":15,"value":5377},{"type":15,"value":5456}," should be the mapped host address for the host-visible buffer.\n",{"type":10,"tag":42,"props":5458,"children":5460},{"className":5459},[],[5461],{"type":15,"value":5412},{"type":15,"value":5463}," should be the size of the largest descriptor possible in the buffer.",{"type":10,"tag":11,"props":5465,"children":5466},{},[5467],{"type":15,"value":5468},"However, this model can fall through fairly quickly if the descriptor set layout is more complicated.\nWhen more than one descriptor array is used to emulate the union-style descriptor heap of DX12,\nit is not possible to provide a unique pointer to host memory that is suitable for copying.",{"type":10,"tag":11,"props":5470,"children":5471},{},[5472],{"type":15,"value":5473},"An engine abstraction that takes descriptor heap and offset separately is much easier to implement overall and avoids all these pitfalls.",{"type":10,"tag":228,"props":5475,"children":5477},{"id":5476},"_descriptor_copies",[5478],{"type":15,"value":5479},"Descriptor Copies",{"type":10,"tag":11,"props":5481,"children":5482},{},[5483,5485,5490],{"type":15,"value":5484},"D3D12-style descriptor copies can be performed using ",{"type":10,"tag":42,"props":5486,"children":5488},{"className":5487},[],[5489],{"type":15,"value":5302},{"type":15,"value":5491}," on the host-visible descriptor buffer memory,\nbut applications need to make sure the memory that is being read from is cached on the host.\nAlternatively, it is possible to use staging buffer copies.",{"type":10,"tag":228,"props":5493,"children":5495},{"id":5494},"_descriptor_binding_2",[5496],{"type":15,"value":1712},{"type":10,"tag":11,"props":5498,"children":5499},{},[5500],{"type":15,"value":5501},"Binding descriptors to shaders in DX12 consists of two operations: setting the descriptor heaps, and setting tables as offsets into those heaps.",{"type":10,"tag":11,"props":5503,"children":5504},{},[5505,5511,5513,5518],{"type":10,"tag":42,"props":5506,"children":5508},{"className":5507},[],[5509],{"type":15,"value":5510},"SetDescriptorHeaps",{"type":15,"value":5512}," allows applications to set one sampler heap, and one CBV/SRV/UAV heap (containing other resources).\nThis command should straightforwardly map to ",{"type":10,"tag":42,"props":5514,"children":5516},{"className":5515},[],[5517],{"type":15,"value":1864},{"type":15,"value":5519},", with each heap being bound as a separate buffer.",{"type":10,"tag":11,"props":5521,"children":5522},{},[5523,5529,5531,5536,5538,5543],{"type":10,"tag":42,"props":5524,"children":5526},{"className":5525},[],[5527],{"type":15,"value":5528},"Set{Graphics|Compute}RootDescriptorTable",{"type":15,"value":5530}," allows applications to set various offsets to the descriptor heap, to be more or less used like descriptor sets in Vulkan.\nThis command will map fairly directly to ",{"type":10,"tag":42,"props":5532,"children":5534},{"className":5533},[],[5535],{"type":15,"value":2230},{"type":15,"value":5537},", but if implementing DX12 root signatures natively, this approach will not work easily.\nThe core assumption of DX12 is that the heap is a big array and a table offset should be seen more as an index offset into that big array.\n",{"type":10,"tag":42,"props":5539,"children":5541},{"className":5540},[],[5542],{"type":15,"value":2394},{"type":15,"value":5544}," might be larger than one descriptor, so binding at the desired offset might not be possible.\nDescriptor buffer offsets are better suited for suballocating individual descriptor sets rather than slicing existing descriptor sets.",{"type":10,"tag":11,"props":5546,"children":5547},{},[5548],{"type":15,"value":5549},"An engine abstraction can decide to take this into account when allocating descriptor sets:",{"type":10,"tag":56,"props":5551,"children":5552},{},[5553,5558],{"type":10,"tag":60,"props":5554,"children":5555},{},[5556],{"type":15,"value":5557},"In DX12 path, a root signature has N tables, which needs to allocate M descriptors each.",{"type":10,"tag":60,"props":5559,"children":5560},{},[5561,5563,5568],{"type":15,"value":5562},"In Vulkan path, a \"root signature\" translates to a ",{"type":10,"tag":42,"props":5564,"children":5566},{"className":5565},[],[5567],{"type":15,"value":340},{"type":15,"value":5569},", which in turn translates to N `VkDescriptorSetLayout`s which require M bytes in the descriptor buffer each.",{"type":10,"tag":11,"props":5571,"children":5572},{},[5573,5575,5580],{"type":15,"value":5574},"If native DX12 root signature compatibility is required however, the suggested implementation is to bind the heap in its entirety with a single ",{"type":10,"tag":42,"props":5576,"children":5578},{"className":5577},[],[5579],{"type":15,"value":2524},{"type":15,"value":5581}," of 0.\nThe shader declares global unsized arrays and from there we can implement shader model 6.6 by just indexing into the descriptor array directly.\nFor older models, descriptor table offsets can translate to u32 push constants that add an extra offset, meaning that we promote legacy root signatures to shader model 6.6.\nThis is a fairly invasive process and it is only expected that translation layers would go to this length.",{"type":10,"tag":17,"props":5583,"children":5585},{"id":5584},"_porting_existing_vulkan_applications",[5586],{"type":15,"value":5587},"Porting existing Vulkan applications",{"type":10,"tag":11,"props":5589,"children":5590},{},[5591],{"type":15,"value":5592},"Porting an existing Vulkan application to the new API should require minimal additional code, and ideally should allow the removal of older code.",{"type":10,"tag":11,"props":5594,"children":5595},{},[5596],{"type":15,"value":5597},"Applications should be uploading descriptors in the exact same manner they upload other resource data (e.g. new textures, constants, etc.).\nAll advice about how to upload resources (e.g. use staging buffers, use the DMA queue asynchronously, etc.) apply in the exact same manner for descriptors as they do for anything else.",{"type":10,"tag":11,"props":5599,"children":5600},{},[5601,5603,5608],{"type":15,"value":5602},"When porting an application then, the aim should not be to create a new separate path for descriptor uploads, but to directly hook into existing resource upload paths.\nThis amortizes the cost of descriptor uploads with other data uploads and reduces the amount of code dedicated to descriptor management.\nAny improvements to data uploads then automatically apply to descriptor uploads.\nFor strategies where resizable BAR or unified memory can be used, none of this is necessary and uploading descriptors becomes ",{"type":10,"tag":42,"props":5604,"children":5606},{"className":5605},[],[5607],{"type":15,"value":5302},{"type":15,"value":479},{"type":10,"tag":11,"props":5610,"children":5611},{},[5612,5614,5620,5622,5627],{"type":15,"value":5613},"For descriptor management, pools are removed. Instead of allocating descriptor sets from pools, applications can instead allocate from a custom allocator, which is backed by a big descriptor buffer.\nThe size to allocate for a set would be obtained from ",{"type":10,"tag":42,"props":5615,"children":5617},{"className":5616},[],[5618],{"type":15,"value":5619},"vkGetDescriptorSetLayoutSizeEXT",{"type":15,"value":5621}," and alignment from ",{"type":10,"tag":42,"props":5623,"children":5625},{"className":5624},[],[5626],{"type":15,"value":2394},{"type":15,"value":5628},".\nA linear or arena allocator would be a good match for this.",{"type":10,"tag":11,"props":5630,"children":5631},{},[5632,5634,5639,5640,5646],{"type":15,"value":5633},"Instead of updating descriptor sets with ",{"type":10,"tag":42,"props":5635,"children":5637},{"className":5636},[],[5638],{"type":15,"value":47},{"type":15,"value":748},{"type":10,"tag":42,"props":5641,"children":5643},{"className":5642},[],[5644],{"type":15,"value":5645},"vkGetDescriptorEXT",{"type":15,"value":5647}," could point directly to the mapped descriptor buffer, or a scratch buffer can be used and copied later.",{"type":10,"tag":17,"props":5649,"children":5651},{"id":5650},"_example",[5652],{"type":15,"value":5653},"Example",{"type":10,"tag":11,"props":5655,"children":5656},{},[5657],{"type":15,"value":5658},"This example intends to show:",{"type":10,"tag":56,"props":5660,"children":5661},{},[5662,5667,5672,5677,5682,5687],{"type":10,"tag":60,"props":5663,"children":5664},{},[5665],{"type":15,"value":5666},"How to create descriptor set layouts",{"type":10,"tag":60,"props":5668,"children":5669},{},[5670],{"type":15,"value":5671},"How to use immutable samplers with descriptor buffers",{"type":10,"tag":60,"props":5673,"children":5674},{},[5675],{"type":15,"value":5676},"How to use embedded immutable samplers",{"type":10,"tag":60,"props":5678,"children":5679},{},[5680],{"type":15,"value":5681},"How to use push descriptors",{"type":10,"tag":60,"props":5683,"children":5684},{},[5685],{"type":15,"value":5686},"How to allocate enough descriptor buffer memory",{"type":10,"tag":60,"props":5688,"children":5689},{},[5690],{"type":15,"value":5691},"How to bind ranges of descriptor buffers to descriptor sets",{"type":10,"tag":532,"props":5693,"children":5695},{"className":534,"code":5694,"language":536,"meta":537,"style":537},"VkSampler immutableSamplers[4]; // Create these somehow.\n\n// When using descriptor buffers, it is generally a good idea to separate out samplers and resources into separate sets,\n// since descriptor buffers containing samplers might be very limited in size.\nconst VkDescriptorSetLayoutBinding setLayout0[] =\n{\n {\n 0, // binding\n VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE, // descriptorType\n 2, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n NULL // pImmutableSamplers\n },\n {\n 1, // binding\n VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER, // descriptorType\n 2, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n NULL // pImmutableSamplers\n }\n};\n\nconst VkDescriptorSetLayoutBinding setLayout1[] =\n{\n {\n 0, // binding\n VK_DESCRIPTOR_TYPE_SAMPLER, // descriptorType\n 2, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n &immutableSamplers[0], // pImmutableSamplers\n },\n {\n 1, // binding\n VK_DESCRIPTOR_TYPE_SAMPLER, // descriptorType\n 2, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n NULL,\n }\n};\n\nconst VkDescriptorSetLayoutBinding setLayout2[] =\n{\n // binding to a single image descriptor\n {\n 0, // binding\n VK_DESCRIPTOR_TYPE_STORAGE_BUFFER, // descriptorType\n 1, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n NULL // pImmutableSamplers\n }\n};\n\n// Embedded immutable samplers are internally allocated and we do not need to allocate anything.\nconst VkDescriptorSetLayoutBinding setLayout3[] =\n{\n {\n 0, // binding\n VK_DESCRIPTOR_TYPE_SAMPLER, // descriptorType\n 1, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n &immutableSamplers[2], // pImmutableSamplers\n },\n {\n 1, // binding\n VK_DESCRIPTOR_TYPE_SAMPLER, // descriptorType\n 1, // descriptorCount\n VK_SHADER_STAGE_FRAGMENT_BIT, // stageFlags\n &immutableSamplers[3], // pImmutableSamplers\n }\n};\n\n// Descriptor set layouts are created as normal, but we use the descriptor buffer flag on the set layouts.\nVkDescriptorSetLayout layout0 =\n create_descriptor_set_layout({ .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, .pBindings = setLayout0, .bindingCount = 2 });\nVkDescriptorSetLayout layout1 =\n create_descriptor_set_layout({ .flags = VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, .pBindings = setLayout1, .bindingCount = 2 });\nVkDescriptorSetLayout layout2 =\n create_descriptor_set_layout({ .flags =\n VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |\n VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,\n .pBindings = setLayout2, .bindingCount = 1 });\nVkDescriptorSetLayout layout3 =\n create_descriptor_set_layout({ .flags =\n VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT |\n VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,\n .pBindings = setLayout3, .bindingCount = 2 });\n\n// Use 5 descriptor set layouts, mostly here to demonstrate how multiple sets can refer to one descriptor buffer.\n// Also, use embedded sampler sets and push constants for completion.\nVkPipelineLayout layout = create_pipeline_layout({ .layouts = { layout0, layout0, layout1, layout2, layout3 }});\n\n// Query how big the descriptor set layout is.\nVkDeviceSize layoutSizes[2];\nvkGetDescriptorSetLayoutSizeEXT(device, layout0, &layoutSizes[0]);\nvkGetDescriptorSetLayoutSizeEXT(device, layout1, &layoutSizes[1]);\n\n// Align the descriptor set size so it is suitable for suballocation within a descriptor buffer.\nlayoutSizes[0] = align(layoutSizes[0], props.descriptorBufferOffsetAlignment);\nlayoutSizes[1] = align(layoutSizes[1], props.descriptorBufferOffsetAlignment);\n\n// Query individual offsets into the descriptor set.\nVkDeviceSize layoutOffsets[2][2];\nvkGetDescriptorSetLayoutBindingOffsetEXT(device, layout0, 0, &layoutOffsets[0][0]);\nvkGetDescriptorSetLayoutBindingOffsetEXT(device, layout0, 1, &layoutOffsets[0][1]);\nvkGetDescriptorSetLayoutBindingOffsetEXT(device, layout1, 0, &layoutOffsets[1][0]);\nvkGetDescriptorSetLayoutBindingOffsetEXT(device, layout1, 1, &layoutOffsets[1][1]);\n\n#define SET_COUNT 64\n\n// Allocate the equivalent of a big descriptor pool.\n// The size is arbitrary and should be large and be able to hold all descriptors used by app,\n// for this sample, we allocate the smallest possible descriptor buffer for the number of sets we need.\n// The most compatible thing to do is 1 resource buffer, 1 sampler buffer.\nBuffer resourceBuffer = create_buffer({\n .size = layoutSizes[0] * 2 * SET_COUNT,\n .usage = VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT |\n (props.bufferlessPushDescriptors ? 0 : VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT),\n .properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT });\n\nBuffer samplerBuffer = create_buffer({\n .size = layoutSizes[1] * SET_COUNT,\n .usage = VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT,\n .properties = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT });\n\nconst VkDescriptorBufferBindingPushDescriptorBufferHandleEXT push_descriptor_buffer_handle = {\n VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT, NULL, resourceBuffer.handle};\n\nconst VkDescriptorBufferBindingInfoEXT binding_infos[2] = {\n { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, (props.bufferlessPushDescriptors ? NULL : &push_descriptor_buffer_handle),\n resourceBuffer.deviceAddress,\n VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT | (props.bufferlessPushDescriptors ? 0 : VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT) },\n { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, NULL, samplerBuffer.deviceAddress,\n VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT }\n};\n\n// Bind the descriptor buffers once, from here, we will offset into the buffer for different descriptor sets.\nvkCmdBindDescriptorBuffersEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, 0, 2, binding_infos);\n\n// Allocate these somehow, not particularly important to this example.\nVkImageView views[SET_COUNT][2][2];\nVkSampler samplers[SET_COUNT][2];\nVkDeviceAddress bufferAddressTexelBuffer;\n\n// No buffers are associated with embedded immutable samplers. This maps to DX12 static samplers.\n// There is no vkCmdBindPipelineLayout(), so this is the way to do it in Vulkan.\nvkCmdBindDescriptorBufferEmbeddedSamplersEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 4);\n\nfor (int i = 0; i \u003C SET_COUNT; i++)\n{\n // This refers to the buffers we bound in vkCmdBindDescriptorBuffersEXT.\n // Allocate descriptor sets linearly.\n const uint32_t bufferIndices[] = { 0, 0, 1 };\n const VkDeviceSize offsets[] = { 2 * i * layoutSizes[0], (2 * i + 1) * layoutSizes[0], i * layoutSizes[1] };\n\n // Set 0: Resource set pulled from buffer 0\n // Set 1: Resource set pulled from buffer 0\n // Set 2: Sampler set pulled from buffer 1\n // Set 3: Push descriptors\n // Set 4: Embedded samplers\n\n vkCmdSetDescriptorBufferOffsetsEXT(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 0, 3,\n bufferIndices, offsets);\n\n VkWriteDescriptorSet ssbo_write = { /* Fill in as desired, details not interesting here. */ };\n vkCmdPushDescriptorSetKHR(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, 3, 1, &ssbo_write);\n\n VkDescriptorImageInfo image_info = {};\n VkDescriptorAddressInfoEXT addr_info = { VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT };\n VkDescriptorGetInfoEXT info = { VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT };\n\n for (int j = 0; j \u003C 2; j++)\n {\n info.type = VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;\n info.pSampledImage = &image_info;\n // If descriptorBufferImageLayoutIgnored is enabled, this is ignored, convenient!\n image_info.imageLayout = VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;\n\n // Offset is based on the binding offset + the offset within the descriptor set layout we queried earlier.\n // For array indexing, use the descriptor size from physical device property.\n // set j, binding 0, element k\n for (int k = 0; k \u003C 2; k++)\n {\n image_info.imageView = views[i][j][k];\n vkGetDescriptorEXT(device, &info, props.sampledImageDescriptorSize,\n resourceBuffer.hostPointer + offsets[j] + layoutOffsets[0][0] + k * props.sampledImageDescriptorSize);\n }\n\n // set j, binding 1, element k\n info.type = VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;\n info.data.pUniformBuffer = &addr_info;\n for (int k = 0; k \u003C 2; k++)\n {\n addr_info.range = 1024;\n addr_info.address = bufferAddressTexelBuffer + (4 * i + 2 * j + k) * addr_info.range;\n // No VkBufferView needed, how convenient!\n addr_info.format = VK_FORMAT_R8G8B8A8_UNORM;\n vkGetDescriptorEXT(device, &info, props.uniformTexelBufferDescriptorSize,\n resourceBuffer.hostPointer + offsets[j] + layoutOffsets[0][1] + k * props.uniformTexelBufferDescriptorSize);\n }\n }\n\n // For immutable samplers, we have to emit the buffer payload.\n // In practice, the immutable samplers must work even if implementation just ignores pImmutableSamplers.\n info.type = VK_DESCRIPTOR_TYPE_SAMPLER;\n // set 2, binding 0, element k\n for (int k = 0; k \u003C 2; k++)\n {\n info.data.pSampler = &immutableSamplers[k];\n vkGetDescriptorEXT(device, &info, props.samplerDescriptorSize,\n samplerBuffer.hostPointer + offsets[2] + layoutOffsets[1][0] + k * props.samplerDescriptorSize);\n }\n\n // set 2, binding 1, element k\n for (int k = 0; k \u003C 2; k++)\n {\n info.data.pSampler = &samplers[i][k];\n vkGetDescriptorEXT(device, &info, props.samplerDescriptorSize,\n samplerBuffer.hostPointer + offsets[2] + layoutOffsets[1][1] + k * props.samplerDescriptorSize);\n }\n\n vkCmdDraw(...);\n}\n",[5696],{"type":10,"tag":42,"props":5697,"children":5698},{"__ignoreMap":537},[5699,5733,5740,5748,5756,5779,5787,5795,5813,5826,5843,5856,5869,5877,5884,5901,5914,5930,5942,5954,5962,5970,5977,5997,6004,6011,6026,6039,6054,6065,6096,6103,6110,6125,6137,6152,6163,6174,6181,6188,6195,6215,6222,6230,6237,6252,6265,6280,6291,6302,6309,6316,6323,6331,6351,6358,6366,6382,6394,6410,6422,6451,6459,6467,6483,6495,6511,6523,6553,6561,6569,6577,6586,6600,6646,6659,6700,6713,6729,6743,6752,6783,6796,6812,6824,6833,6862,6870,6879,6888,6920,6928,6937,6964,6999,7032,7040,7049,7101,7149,7157,7166,7200,7248,7296,7344,7392,7400,7419,7427,7436,7445,7454,7463,7486,7534,7556,7585,7613,7621,7642,7678,7695,7719,7727,7749,7768,7776,7814,7846,7855,7890,7908,7917,7925,7933,7942,7972,7980,7989,8024,8049,8058,8066,8075,8084,8105,8113,8169,8177,8186,8195,8252,8378,8386,8395,8404,8413,8422,8431,8439,8468,8477,8485,8512,8550,8558,8576,8594,8612,8620,8676,8684,8702,8724,8733,8751,8759,8768,8777,8786,8842,8851,8874,8897,8966,8975,8983,8992,9009,9031,9083,9091,9114,9186,9195,9213,9234,9299,9307,9315,9323,9332,9341,9359,9368,9420,9428,9454,9476,9550,9558,9566,9575,9627,9635,9660,9680,9752,9760,9768,9782],{"type":10,"tag":543,"props":5700,"children":5701},{"class":545,"line":546},[5702,5707,5712,5717,5722,5727],{"type":10,"tag":543,"props":5703,"children":5704},{"style":562},[5705],{"type":15,"value":5706},"VkSampler ",{"type":10,"tag":543,"props":5708,"children":5709},{"style":577},[5710],{"type":15,"value":5711},"immutableSamplers",{"type":10,"tag":543,"props":5713,"children":5714},{"style":562},[5715],{"type":15,"value":5716},"[",{"type":10,"tag":543,"props":5718,"children":5719},{"style":889},[5720],{"type":15,"value":5721},"4",{"type":10,"tag":543,"props":5723,"children":5724},{"style":562},[5725],{"type":15,"value":5726},"];",{"type":10,"tag":543,"props":5728,"children":5730},{"style":5729},"--shiki-default:#6E7781;--shiki-dark:#8B949E",[5731],{"type":15,"value":5732}," // Create these somehow.\n",{"type":10,"tag":543,"props":5734,"children":5735},{"class":545,"line":568},[5736],{"type":10,"tag":543,"props":5737,"children":5738},{"emptyLinePlaceholder":634},[5739],{"type":15,"value":637},{"type":10,"tag":543,"props":5741,"children":5742},{"class":545,"line":588},[5743],{"type":10,"tag":543,"props":5744,"children":5745},{"style":5729},[5746],{"type":15,"value":5747},"// When using descriptor buffers, it is generally a good idea to separate out samplers and resources into separate sets,\n",{"type":10,"tag":543,"props":5749,"children":5750},{"class":545,"line":606},[5751],{"type":10,"tag":543,"props":5752,"children":5753},{"style":5729},[5754],{"type":15,"value":5755},"// since descriptor buffers containing samplers might be very limited in size.\n",{"type":10,"tag":543,"props":5757,"children":5758},{"class":545,"line":630},[5759,5764,5769,5774],{"type":10,"tag":543,"props":5760,"children":5761},{"style":550},[5762],{"type":15,"value":5763},"const",{"type":10,"tag":543,"props":5765,"children":5766},{"style":562},[5767],{"type":15,"value":5768}," VkDescriptorSetLayoutBinding setLayout0",{"type":10,"tag":543,"props":5770,"children":5771},{"style":550},[5772],{"type":15,"value":5773},"[]",{"type":10,"tag":543,"props":5775,"children":5776},{"style":550},[5777],{"type":15,"value":5778}," =\n",{"type":10,"tag":543,"props":5780,"children":5781},{"class":545,"line":640},[5782],{"type":10,"tag":543,"props":5783,"children":5784},{"style":562},[5785],{"type":15,"value":5786},"{\n",{"type":10,"tag":543,"props":5788,"children":5789},{"class":545,"line":657},[5790],{"type":10,"tag":543,"props":5791,"children":5792},{"style":562},[5793],{"type":15,"value":5794}," {\n",{"type":10,"tag":543,"props":5796,"children":5797},{"class":545,"line":673},[5798,5803,5808],{"type":10,"tag":543,"props":5799,"children":5800},{"style":889},[5801],{"type":15,"value":5802}," 0",{"type":10,"tag":543,"props":5804,"children":5805},{"style":562},[5806],{"type":15,"value":5807},",",{"type":10,"tag":543,"props":5809,"children":5810},{"style":5729},[5811],{"type":15,"value":5812}," // binding\n",{"type":10,"tag":543,"props":5814,"children":5815},{"class":545,"line":689},[5816,5821],{"type":10,"tag":543,"props":5817,"children":5818},{"style":562},[5819],{"type":15,"value":5820}," VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE,",{"type":10,"tag":543,"props":5822,"children":5823},{"style":5729},[5824],{"type":15,"value":5825}," // descriptorType\n",{"type":10,"tag":543,"props":5827,"children":5828},{"class":545,"line":707},[5829,5834,5838],{"type":10,"tag":543,"props":5830,"children":5831},{"style":889},[5832],{"type":15,"value":5833}," 2",{"type":10,"tag":543,"props":5835,"children":5836},{"style":562},[5837],{"type":15,"value":5807},{"type":10,"tag":543,"props":5839,"children":5840},{"style":5729},[5841],{"type":15,"value":5842}," // descriptorCount\n",{"type":10,"tag":543,"props":5844,"children":5845},{"class":545,"line":1036},[5846,5851],{"type":10,"tag":543,"props":5847,"children":5848},{"style":562},[5849],{"type":15,"value":5850}," VK_SHADER_STAGE_FRAGMENT_BIT,",{"type":10,"tag":543,"props":5852,"children":5853},{"style":5729},[5854],{"type":15,"value":5855}," // stageFlags\n",{"type":10,"tag":543,"props":5857,"children":5858},{"class":545,"line":1058},[5859,5864],{"type":10,"tag":543,"props":5860,"children":5861},{"style":889},[5862],{"type":15,"value":5863}," NULL",{"type":10,"tag":543,"props":5865,"children":5866},{"style":5729},[5867],{"type":15,"value":5868}," // pImmutableSamplers\n",{"type":10,"tag":543,"props":5870,"children":5871},{"class":545,"line":1079},[5872],{"type":10,"tag":543,"props":5873,"children":5874},{"style":562},[5875],{"type":15,"value":5876}," },\n",{"type":10,"tag":543,"props":5878,"children":5879},{"class":545,"line":1100},[5880],{"type":10,"tag":543,"props":5881,"children":5882},{"style":562},[5883],{"type":15,"value":5794},{"type":10,"tag":543,"props":5885,"children":5886},{"class":545,"line":1121},[5887,5892,5896],{"type":10,"tag":543,"props":5888,"children":5889},{"style":889},[5890],{"type":15,"value":5891}," 1",{"type":10,"tag":543,"props":5893,"children":5894},{"style":562},[5895],{"type":15,"value":5807},{"type":10,"tag":543,"props":5897,"children":5898},{"style":5729},[5899],{"type":15,"value":5900}," // binding\n",{"type":10,"tag":543,"props":5902,"children":5903},{"class":545,"line":1143},[5904,5909],{"type":10,"tag":543,"props":5905,"children":5906},{"style":562},[5907],{"type":15,"value":5908}," VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER,",{"type":10,"tag":543,"props":5910,"children":5911},{"style":5729},[5912],{"type":15,"value":5913}," // descriptorType\n",{"type":10,"tag":543,"props":5915,"children":5916},{"class":545,"line":1164},[5917,5921,5925],{"type":10,"tag":543,"props":5918,"children":5919},{"style":889},[5920],{"type":15,"value":5833},{"type":10,"tag":543,"props":5922,"children":5923},{"style":562},[5924],{"type":15,"value":5807},{"type":10,"tag":543,"props":5926,"children":5927},{"style":5729},[5928],{"type":15,"value":5929}," // descriptorCount\n",{"type":10,"tag":543,"props":5931,"children":5932},{"class":545,"line":1185},[5933,5937],{"type":10,"tag":543,"props":5934,"children":5935},{"style":562},[5936],{"type":15,"value":5850},{"type":10,"tag":543,"props":5938,"children":5939},{"style":5729},[5940],{"type":15,"value":5941}," // stageFlags\n",{"type":10,"tag":543,"props":5943,"children":5944},{"class":545,"line":1206},[5945,5949],{"type":10,"tag":543,"props":5946,"children":5947},{"style":889},[5948],{"type":15,"value":5863},{"type":10,"tag":543,"props":5950,"children":5951},{"style":5729},[5952],{"type":15,"value":5953}," // pImmutableSamplers\n",{"type":10,"tag":543,"props":5955,"children":5956},{"class":545,"line":1215},[5957],{"type":10,"tag":543,"props":5958,"children":5959},{"style":562},[5960],{"type":15,"value":5961}," }\n",{"type":10,"tag":543,"props":5963,"children":5964},{"class":545,"line":1224},[5965],{"type":10,"tag":543,"props":5966,"children":5967},{"style":562},[5968],{"type":15,"value":5969},"};\n",{"type":10,"tag":543,"props":5971,"children":5972},{"class":545,"line":1232},[5973],{"type":10,"tag":543,"props":5974,"children":5975},{"emptyLinePlaceholder":634},[5976],{"type":15,"value":637},{"type":10,"tag":543,"props":5978,"children":5979},{"class":545,"line":1249},[5980,5984,5989,5993],{"type":10,"tag":543,"props":5981,"children":5982},{"style":550},[5983],{"type":15,"value":5763},{"type":10,"tag":543,"props":5985,"children":5986},{"style":562},[5987],{"type":15,"value":5988}," VkDescriptorSetLayoutBinding setLayout1",{"type":10,"tag":543,"props":5990,"children":5991},{"style":550},[5992],{"type":15,"value":5773},{"type":10,"tag":543,"props":5994,"children":5995},{"style":550},[5996],{"type":15,"value":5778},{"type":10,"tag":543,"props":5998,"children":5999},{"class":545,"line":1257},[6000],{"type":10,"tag":543,"props":6001,"children":6002},{"style":562},[6003],{"type":15,"value":5786},{"type":10,"tag":543,"props":6005,"children":6006},{"class":545,"line":1273},[6007],{"type":10,"tag":543,"props":6008,"children":6009},{"style":562},[6010],{"type":15,"value":5794},{"type":10,"tag":543,"props":6012,"children":6013},{"class":545,"line":1282},[6014,6018,6022],{"type":10,"tag":543,"props":6015,"children":6016},{"style":889},[6017],{"type":15,"value":5802},{"type":10,"tag":543,"props":6019,"children":6020},{"style":562},[6021],{"type":15,"value":5807},{"type":10,"tag":543,"props":6023,"children":6024},{"style":5729},[6025],{"type":15,"value":5812},{"type":10,"tag":543,"props":6027,"children":6028},{"class":545,"line":1291},[6029,6034],{"type":10,"tag":543,"props":6030,"children":6031},{"style":562},[6032],{"type":15,"value":6033}," VK_DESCRIPTOR_TYPE_SAMPLER,",{"type":10,"tag":543,"props":6035,"children":6036},{"style":5729},[6037],{"type":15,"value":6038}," // descriptorType\n",{"type":10,"tag":543,"props":6040,"children":6041},{"class":545,"line":1300},[6042,6046,6050],{"type":10,"tag":543,"props":6043,"children":6044},{"style":889},[6045],{"type":15,"value":5833},{"type":10,"tag":543,"props":6047,"children":6048},{"style":562},[6049],{"type":15,"value":5807},{"type":10,"tag":543,"props":6051,"children":6052},{"style":5729},[6053],{"type":15,"value":5842},{"type":10,"tag":543,"props":6055,"children":6056},{"class":545,"line":1308},[6057,6061],{"type":10,"tag":543,"props":6058,"children":6059},{"style":562},[6060],{"type":15,"value":5850},{"type":10,"tag":543,"props":6062,"children":6063},{"style":5729},[6064],{"type":15,"value":5855},{"type":10,"tag":543,"props":6066,"children":6067},{"class":545,"line":1325},[6068,6073,6077,6081,6086,6091],{"type":10,"tag":543,"props":6069,"children":6070},{"style":550},[6071],{"type":15,"value":6072}," &",{"type":10,"tag":543,"props":6074,"children":6075},{"style":577},[6076],{"type":15,"value":5711},{"type":10,"tag":543,"props":6078,"children":6079},{"style":562},[6080],{"type":15,"value":5716},{"type":10,"tag":543,"props":6082,"children":6083},{"style":889},[6084],{"type":15,"value":6085},"0",{"type":10,"tag":543,"props":6087,"children":6088},{"style":562},[6089],{"type":15,"value":6090},"],",{"type":10,"tag":543,"props":6092,"children":6093},{"style":5729},[6094],{"type":15,"value":6095}," // pImmutableSamplers\n",{"type":10,"tag":543,"props":6097,"children":6098},{"class":545,"line":1334},[6099],{"type":10,"tag":543,"props":6100,"children":6101},{"style":562},[6102],{"type":15,"value":5876},{"type":10,"tag":543,"props":6104,"children":6105},{"class":545,"line":1360},[6106],{"type":10,"tag":543,"props":6107,"children":6108},{"style":562},[6109],{"type":15,"value":5794},{"type":10,"tag":543,"props":6111,"children":6112},{"class":545,"line":1378},[6113,6117,6121],{"type":10,"tag":543,"props":6114,"children":6115},{"style":889},[6116],{"type":15,"value":5891},{"type":10,"tag":543,"props":6118,"children":6119},{"style":562},[6120],{"type":15,"value":5807},{"type":10,"tag":543,"props":6122,"children":6123},{"style":5729},[6124],{"type":15,"value":5900},{"type":10,"tag":543,"props":6126,"children":6127},{"class":545,"line":3406},[6128,6132],{"type":10,"tag":543,"props":6129,"children":6130},{"style":562},[6131],{"type":15,"value":6033},{"type":10,"tag":543,"props":6133,"children":6134},{"style":5729},[6135],{"type":15,"value":6136}," // descriptorType\n",{"type":10,"tag":543,"props":6138,"children":6139},{"class":545,"line":3423},[6140,6144,6148],{"type":10,"tag":543,"props":6141,"children":6142},{"style":889},[6143],{"type":15,"value":5833},{"type":10,"tag":543,"props":6145,"children":6146},{"style":562},[6147],{"type":15,"value":5807},{"type":10,"tag":543,"props":6149,"children":6150},{"style":5729},[6151],{"type":15,"value":5929},{"type":10,"tag":543,"props":6153,"children":6154},{"class":545,"line":3440},[6155,6159],{"type":10,"tag":543,"props":6156,"children":6157},{"style":562},[6158],{"type":15,"value":5850},{"type":10,"tag":543,"props":6160,"children":6161},{"style":5729},[6162],{"type":15,"value":5941},{"type":10,"tag":543,"props":6164,"children":6165},{"class":545,"line":3465},[6166,6170],{"type":10,"tag":543,"props":6167,"children":6168},{"style":889},[6169],{"type":15,"value":5863},{"type":10,"tag":543,"props":6171,"children":6172},{"style":562},[6173],{"type":15,"value":585},{"type":10,"tag":543,"props":6175,"children":6176},{"class":545,"line":3482},[6177],{"type":10,"tag":543,"props":6178,"children":6179},{"style":562},[6180],{"type":15,"value":5961},{"type":10,"tag":543,"props":6182,"children":6183},{"class":545,"line":3490},[6184],{"type":10,"tag":543,"props":6185,"children":6186},{"style":562},[6187],{"type":15,"value":5969},{"type":10,"tag":543,"props":6189,"children":6190},{"class":545,"line":3507},[6191],{"type":10,"tag":543,"props":6192,"children":6193},{"emptyLinePlaceholder":634},[6194],{"type":15,"value":637},{"type":10,"tag":543,"props":6196,"children":6197},{"class":545,"line":3515},[6198,6202,6207,6211],{"type":10,"tag":543,"props":6199,"children":6200},{"style":550},[6201],{"type":15,"value":5763},{"type":10,"tag":543,"props":6203,"children":6204},{"style":562},[6205],{"type":15,"value":6206}," VkDescriptorSetLayoutBinding setLayout2",{"type":10,"tag":543,"props":6208,"children":6209},{"style":550},[6210],{"type":15,"value":5773},{"type":10,"tag":543,"props":6212,"children":6213},{"style":550},[6214],{"type":15,"value":5778},{"type":10,"tag":543,"props":6216,"children":6217},{"class":545,"line":3531},[6218],{"type":10,"tag":543,"props":6219,"children":6220},{"style":562},[6221],{"type":15,"value":5786},{"type":10,"tag":543,"props":6223,"children":6224},{"class":545,"line":3540},[6225],{"type":10,"tag":543,"props":6226,"children":6227},{"style":5729},[6228],{"type":15,"value":6229}," // binding to a single image descriptor\n",{"type":10,"tag":543,"props":6231,"children":6232},{"class":545,"line":3549},[6233],{"type":10,"tag":543,"props":6234,"children":6235},{"style":562},[6236],{"type":15,"value":5794},{"type":10,"tag":543,"props":6238,"children":6239},{"class":545,"line":3557},[6240,6244,6248],{"type":10,"tag":543,"props":6241,"children":6242},{"style":889},[6243],{"type":15,"value":5802},{"type":10,"tag":543,"props":6245,"children":6246},{"style":562},[6247],{"type":15,"value":5807},{"type":10,"tag":543,"props":6249,"children":6250},{"style":5729},[6251],{"type":15,"value":5812},{"type":10,"tag":543,"props":6253,"children":6254},{"class":545,"line":3574},[6255,6260],{"type":10,"tag":543,"props":6256,"children":6257},{"style":562},[6258],{"type":15,"value":6259}," VK_DESCRIPTOR_TYPE_STORAGE_BUFFER,",{"type":10,"tag":543,"props":6261,"children":6262},{"style":5729},[6263],{"type":15,"value":6264}," // descriptorType\n",{"type":10,"tag":543,"props":6266,"children":6267},{"class":545,"line":3591},[6268,6272,6276],{"type":10,"tag":543,"props":6269,"children":6270},{"style":889},[6271],{"type":15,"value":5891},{"type":10,"tag":543,"props":6273,"children":6274},{"style":562},[6275],{"type":15,"value":5807},{"type":10,"tag":543,"props":6277,"children":6278},{"style":5729},[6279],{"type":15,"value":5842},{"type":10,"tag":543,"props":6281,"children":6282},{"class":545,"line":3616},[6283,6287],{"type":10,"tag":543,"props":6284,"children":6285},{"style":562},[6286],{"type":15,"value":5850},{"type":10,"tag":543,"props":6288,"children":6289},{"style":5729},[6290],{"type":15,"value":5855},{"type":10,"tag":543,"props":6292,"children":6293},{"class":545,"line":3633},[6294,6298],{"type":10,"tag":543,"props":6295,"children":6296},{"style":889},[6297],{"type":15,"value":5863},{"type":10,"tag":543,"props":6299,"children":6300},{"style":5729},[6301],{"type":15,"value":5868},{"type":10,"tag":543,"props":6303,"children":6304},{"class":545,"line":3641},[6305],{"type":10,"tag":543,"props":6306,"children":6307},{"style":562},[6308],{"type":15,"value":5961},{"type":10,"tag":543,"props":6310,"children":6311},{"class":545,"line":3658},[6312],{"type":10,"tag":543,"props":6313,"children":6314},{"style":562},[6315],{"type":15,"value":5969},{"type":10,"tag":543,"props":6317,"children":6318},{"class":545,"line":3667},[6319],{"type":10,"tag":543,"props":6320,"children":6321},{"emptyLinePlaceholder":634},[6322],{"type":15,"value":637},{"type":10,"tag":543,"props":6324,"children":6325},{"class":545,"line":3684},[6326],{"type":10,"tag":543,"props":6327,"children":6328},{"style":5729},[6329],{"type":15,"value":6330},"// Embedded immutable samplers are internally allocated and we do not need to allocate anything.\n",{"type":10,"tag":543,"props":6332,"children":6333},{"class":545,"line":3693},[6334,6338,6343,6347],{"type":10,"tag":543,"props":6335,"children":6336},{"style":550},[6337],{"type":15,"value":5763},{"type":10,"tag":543,"props":6339,"children":6340},{"style":562},[6341],{"type":15,"value":6342}," VkDescriptorSetLayoutBinding setLayout3",{"type":10,"tag":543,"props":6344,"children":6345},{"style":550},[6346],{"type":15,"value":5773},{"type":10,"tag":543,"props":6348,"children":6349},{"style":550},[6350],{"type":15,"value":5778},{"type":10,"tag":543,"props":6352,"children":6353},{"class":545,"line":3702},[6354],{"type":10,"tag":543,"props":6355,"children":6356},{"style":562},[6357],{"type":15,"value":5786},{"type":10,"tag":543,"props":6359,"children":6361},{"class":545,"line":6360},56,[6362],{"type":10,"tag":543,"props":6363,"children":6364},{"style":562},[6365],{"type":15,"value":5794},{"type":10,"tag":543,"props":6367,"children":6369},{"class":545,"line":6368},57,[6370,6374,6378],{"type":10,"tag":543,"props":6371,"children":6372},{"style":889},[6373],{"type":15,"value":5802},{"type":10,"tag":543,"props":6375,"children":6376},{"style":562},[6377],{"type":15,"value":5807},{"type":10,"tag":543,"props":6379,"children":6380},{"style":5729},[6381],{"type":15,"value":5812},{"type":10,"tag":543,"props":6383,"children":6385},{"class":545,"line":6384},58,[6386,6390],{"type":10,"tag":543,"props":6387,"children":6388},{"style":562},[6389],{"type":15,"value":6033},{"type":10,"tag":543,"props":6391,"children":6392},{"style":5729},[6393],{"type":15,"value":6038},{"type":10,"tag":543,"props":6395,"children":6397},{"class":545,"line":6396},59,[6398,6402,6406],{"type":10,"tag":543,"props":6399,"children":6400},{"style":889},[6401],{"type":15,"value":5891},{"type":10,"tag":543,"props":6403,"children":6404},{"style":562},[6405],{"type":15,"value":5807},{"type":10,"tag":543,"props":6407,"children":6408},{"style":5729},[6409],{"type":15,"value":5842},{"type":10,"tag":543,"props":6411,"children":6413},{"class":545,"line":6412},60,[6414,6418],{"type":10,"tag":543,"props":6415,"children":6416},{"style":562},[6417],{"type":15,"value":5850},{"type":10,"tag":543,"props":6419,"children":6420},{"style":5729},[6421],{"type":15,"value":5855},{"type":10,"tag":543,"props":6423,"children":6425},{"class":545,"line":6424},61,[6426,6430,6434,6438,6443,6447],{"type":10,"tag":543,"props":6427,"children":6428},{"style":550},[6429],{"type":15,"value":6072},{"type":10,"tag":543,"props":6431,"children":6432},{"style":577},[6433],{"type":15,"value":5711},{"type":10,"tag":543,"props":6435,"children":6436},{"style":562},[6437],{"type":15,"value":5716},{"type":10,"tag":543,"props":6439,"children":6440},{"style":889},[6441],{"type":15,"value":6442},"2",{"type":10,"tag":543,"props":6444,"children":6445},{"style":562},[6446],{"type":15,"value":6090},{"type":10,"tag":543,"props":6448,"children":6449},{"style":5729},[6450],{"type":15,"value":6095},{"type":10,"tag":543,"props":6452,"children":6454},{"class":545,"line":6453},62,[6455],{"type":10,"tag":543,"props":6456,"children":6457},{"style":562},[6458],{"type":15,"value":5876},{"type":10,"tag":543,"props":6460,"children":6462},{"class":545,"line":6461},63,[6463],{"type":10,"tag":543,"props":6464,"children":6465},{"style":562},[6466],{"type":15,"value":5794},{"type":10,"tag":543,"props":6468,"children":6470},{"class":545,"line":6469},64,[6471,6475,6479],{"type":10,"tag":543,"props":6472,"children":6473},{"style":889},[6474],{"type":15,"value":5891},{"type":10,"tag":543,"props":6476,"children":6477},{"style":562},[6478],{"type":15,"value":5807},{"type":10,"tag":543,"props":6480,"children":6481},{"style":5729},[6482],{"type":15,"value":5900},{"type":10,"tag":543,"props":6484,"children":6486},{"class":545,"line":6485},65,[6487,6491],{"type":10,"tag":543,"props":6488,"children":6489},{"style":562},[6490],{"type":15,"value":6033},{"type":10,"tag":543,"props":6492,"children":6493},{"style":5729},[6494],{"type":15,"value":6136},{"type":10,"tag":543,"props":6496,"children":6498},{"class":545,"line":6497},66,[6499,6503,6507],{"type":10,"tag":543,"props":6500,"children":6501},{"style":889},[6502],{"type":15,"value":5891},{"type":10,"tag":543,"props":6504,"children":6505},{"style":562},[6506],{"type":15,"value":5807},{"type":10,"tag":543,"props":6508,"children":6509},{"style":5729},[6510],{"type":15,"value":5929},{"type":10,"tag":543,"props":6512,"children":6514},{"class":545,"line":6513},67,[6515,6519],{"type":10,"tag":543,"props":6516,"children":6517},{"style":562},[6518],{"type":15,"value":5850},{"type":10,"tag":543,"props":6520,"children":6521},{"style":5729},[6522],{"type":15,"value":5941},{"type":10,"tag":543,"props":6524,"children":6526},{"class":545,"line":6525},68,[6527,6531,6535,6539,6544,6548],{"type":10,"tag":543,"props":6528,"children":6529},{"style":550},[6530],{"type":15,"value":6072},{"type":10,"tag":543,"props":6532,"children":6533},{"style":577},[6534],{"type":15,"value":5711},{"type":10,"tag":543,"props":6536,"children":6537},{"style":562},[6538],{"type":15,"value":5716},{"type":10,"tag":543,"props":6540,"children":6541},{"style":889},[6542],{"type":15,"value":6543},"3",{"type":10,"tag":543,"props":6545,"children":6546},{"style":562},[6547],{"type":15,"value":6090},{"type":10,"tag":543,"props":6549,"children":6550},{"style":5729},[6551],{"type":15,"value":6552}," // pImmutableSamplers\n",{"type":10,"tag":543,"props":6554,"children":6556},{"class":545,"line":6555},69,[6557],{"type":10,"tag":543,"props":6558,"children":6559},{"style":562},[6560],{"type":15,"value":5961},{"type":10,"tag":543,"props":6562,"children":6564},{"class":545,"line":6563},70,[6565],{"type":10,"tag":543,"props":6566,"children":6567},{"style":562},[6568],{"type":15,"value":5969},{"type":10,"tag":543,"props":6570,"children":6572},{"class":545,"line":6571},71,[6573],{"type":10,"tag":543,"props":6574,"children":6575},{"emptyLinePlaceholder":634},[6576],{"type":15,"value":637},{"type":10,"tag":543,"props":6578,"children":6580},{"class":545,"line":6579},72,[6581],{"type":10,"tag":543,"props":6582,"children":6583},{"style":5729},[6584],{"type":15,"value":6585},"// Descriptor set layouts are created as normal, but we use the descriptor buffer flag on the set layouts.\n",{"type":10,"tag":543,"props":6587,"children":6589},{"class":545,"line":6588},73,[6590,6595],{"type":10,"tag":543,"props":6591,"children":6592},{"style":562},[6593],{"type":15,"value":6594},"VkDescriptorSetLayout layout0 ",{"type":10,"tag":543,"props":6596,"children":6597},{"style":550},[6598],{"type":15,"value":6599},"=\n",{"type":10,"tag":543,"props":6601,"children":6603},{"class":545,"line":6602},74,[6604,6609,6614,6618,6623,6627,6632,6636,6641],{"type":10,"tag":543,"props":6605,"children":6606},{"style":556},[6607],{"type":15,"value":6608}," create_descriptor_set_layout",{"type":10,"tag":543,"props":6610,"children":6611},{"style":562},[6612],{"type":15,"value":6613},"({ .flags ",{"type":10,"tag":543,"props":6615,"children":6616},{"style":550},[6617],{"type":15,"value":881},{"type":10,"tag":543,"props":6619,"children":6620},{"style":562},[6621],{"type":15,"value":6622}," VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT, .pBindings ",{"type":10,"tag":543,"props":6624,"children":6625},{"style":550},[6626],{"type":15,"value":881},{"type":10,"tag":543,"props":6628,"children":6629},{"style":562},[6630],{"type":15,"value":6631}," setLayout0, .bindingCount ",{"type":10,"tag":543,"props":6633,"children":6634},{"style":550},[6635],{"type":15,"value":881},{"type":10,"tag":543,"props":6637,"children":6638},{"style":889},[6639],{"type":15,"value":6640}," 2",{"type":10,"tag":543,"props":6642,"children":6643},{"style":562},[6644],{"type":15,"value":6645}," });\n",{"type":10,"tag":543,"props":6647,"children":6649},{"class":545,"line":6648},75,[6650,6655],{"type":10,"tag":543,"props":6651,"children":6652},{"style":562},[6653],{"type":15,"value":6654},"VkDescriptorSetLayout layout1 ",{"type":10,"tag":543,"props":6656,"children":6657},{"style":550},[6658],{"type":15,"value":6599},{"type":10,"tag":543,"props":6660,"children":6662},{"class":545,"line":6661},76,[6663,6667,6671,6675,6679,6683,6688,6692,6696],{"type":10,"tag":543,"props":6664,"children":6665},{"style":556},[6666],{"type":15,"value":6608},{"type":10,"tag":543,"props":6668,"children":6669},{"style":562},[6670],{"type":15,"value":6613},{"type":10,"tag":543,"props":6672,"children":6673},{"style":550},[6674],{"type":15,"value":881},{"type":10,"tag":543,"props":6676,"children":6677},{"style":562},[6678],{"type":15,"value":6622},{"type":10,"tag":543,"props":6680,"children":6681},{"style":550},[6682],{"type":15,"value":881},{"type":10,"tag":543,"props":6684,"children":6685},{"style":562},[6686],{"type":15,"value":6687}," setLayout1, .bindingCount ",{"type":10,"tag":543,"props":6689,"children":6690},{"style":550},[6691],{"type":15,"value":881},{"type":10,"tag":543,"props":6693,"children":6694},{"style":889},[6695],{"type":15,"value":6640},{"type":10,"tag":543,"props":6697,"children":6698},{"style":562},[6699],{"type":15,"value":6645},{"type":10,"tag":543,"props":6701,"children":6703},{"class":545,"line":6702},77,[6704,6709],{"type":10,"tag":543,"props":6705,"children":6706},{"style":562},[6707],{"type":15,"value":6708},"VkDescriptorSetLayout layout2 ",{"type":10,"tag":543,"props":6710,"children":6711},{"style":550},[6712],{"type":15,"value":6599},{"type":10,"tag":543,"props":6714,"children":6716},{"class":545,"line":6715},78,[6717,6721,6725],{"type":10,"tag":543,"props":6718,"children":6719},{"style":556},[6720],{"type":15,"value":6608},{"type":10,"tag":543,"props":6722,"children":6723},{"style":562},[6724],{"type":15,"value":6613},{"type":10,"tag":543,"props":6726,"children":6727},{"style":550},[6728],{"type":15,"value":6599},{"type":10,"tag":543,"props":6730,"children":6732},{"class":545,"line":6731},79,[6733,6738],{"type":10,"tag":543,"props":6734,"children":6735},{"style":562},[6736],{"type":15,"value":6737}," VK_DESCRIPTOR_SET_LAYOUT_CREATE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":6739,"children":6740},{"style":550},[6741],{"type":15,"value":6742},"|\n",{"type":10,"tag":543,"props":6744,"children":6746},{"class":545,"line":6745},80,[6747],{"type":10,"tag":543,"props":6748,"children":6749},{"style":562},[6750],{"type":15,"value":6751}," VK_DESCRIPTOR_SET_LAYOUT_CREATE_PUSH_DESCRIPTOR_BIT_KHR,\n",{"type":10,"tag":543,"props":6753,"children":6755},{"class":545,"line":6754},81,[6756,6761,6765,6770,6774,6779],{"type":10,"tag":543,"props":6757,"children":6758},{"style":562},[6759],{"type":15,"value":6760}," .pBindings ",{"type":10,"tag":543,"props":6762,"children":6763},{"style":550},[6764],{"type":15,"value":881},{"type":10,"tag":543,"props":6766,"children":6767},{"style":562},[6768],{"type":15,"value":6769}," setLayout2, .bindingCount ",{"type":10,"tag":543,"props":6771,"children":6772},{"style":550},[6773],{"type":15,"value":881},{"type":10,"tag":543,"props":6775,"children":6776},{"style":889},[6777],{"type":15,"value":6778}," 1",{"type":10,"tag":543,"props":6780,"children":6781},{"style":562},[6782],{"type":15,"value":6645},{"type":10,"tag":543,"props":6784,"children":6786},{"class":545,"line":6785},82,[6787,6792],{"type":10,"tag":543,"props":6788,"children":6789},{"style":562},[6790],{"type":15,"value":6791},"VkDescriptorSetLayout layout3 ",{"type":10,"tag":543,"props":6793,"children":6794},{"style":550},[6795],{"type":15,"value":6599},{"type":10,"tag":543,"props":6797,"children":6799},{"class":545,"line":6798},83,[6800,6804,6808],{"type":10,"tag":543,"props":6801,"children":6802},{"style":556},[6803],{"type":15,"value":6608},{"type":10,"tag":543,"props":6805,"children":6806},{"style":562},[6807],{"type":15,"value":6613},{"type":10,"tag":543,"props":6809,"children":6810},{"style":550},[6811],{"type":15,"value":6599},{"type":10,"tag":543,"props":6813,"children":6815},{"class":545,"line":6814},84,[6816,6820],{"type":10,"tag":543,"props":6817,"children":6818},{"style":562},[6819],{"type":15,"value":6737},{"type":10,"tag":543,"props":6821,"children":6822},{"style":550},[6823],{"type":15,"value":6742},{"type":10,"tag":543,"props":6825,"children":6827},{"class":545,"line":6826},85,[6828],{"type":10,"tag":543,"props":6829,"children":6830},{"style":562},[6831],{"type":15,"value":6832}," VK_DESCRIPTOR_SET_LAYOUT_CREATE_EMBEDDED_IMMUTABLE_SAMPLERS_BIT_EXT,\n",{"type":10,"tag":543,"props":6834,"children":6836},{"class":545,"line":6835},86,[6837,6841,6845,6850,6854,6858],{"type":10,"tag":543,"props":6838,"children":6839},{"style":562},[6840],{"type":15,"value":6760},{"type":10,"tag":543,"props":6842,"children":6843},{"style":550},[6844],{"type":15,"value":881},{"type":10,"tag":543,"props":6846,"children":6847},{"style":562},[6848],{"type":15,"value":6849}," setLayout3, .bindingCount ",{"type":10,"tag":543,"props":6851,"children":6852},{"style":550},[6853],{"type":15,"value":881},{"type":10,"tag":543,"props":6855,"children":6856},{"style":889},[6857],{"type":15,"value":6640},{"type":10,"tag":543,"props":6859,"children":6860},{"style":562},[6861],{"type":15,"value":6645},{"type":10,"tag":543,"props":6863,"children":6865},{"class":545,"line":6864},87,[6866],{"type":10,"tag":543,"props":6867,"children":6868},{"emptyLinePlaceholder":634},[6869],{"type":15,"value":637},{"type":10,"tag":543,"props":6871,"children":6873},{"class":545,"line":6872},88,[6874],{"type":10,"tag":543,"props":6875,"children":6876},{"style":5729},[6877],{"type":15,"value":6878},"// Use 5 descriptor set layouts, mostly here to demonstrate how multiple sets can refer to one descriptor buffer.\n",{"type":10,"tag":543,"props":6880,"children":6882},{"class":545,"line":6881},89,[6883],{"type":10,"tag":543,"props":6884,"children":6885},{"style":5729},[6886],{"type":15,"value":6887},"// Also, use embedded sampler sets and push constants for completion.\n",{"type":10,"tag":543,"props":6889,"children":6891},{"class":545,"line":6890},90,[6892,6897,6901,6906,6911,6915],{"type":10,"tag":543,"props":6893,"children":6894},{"style":562},[6895],{"type":15,"value":6896},"VkPipelineLayout layout ",{"type":10,"tag":543,"props":6898,"children":6899},{"style":550},[6900],{"type":15,"value":881},{"type":10,"tag":543,"props":6902,"children":6903},{"style":556},[6904],{"type":15,"value":6905}," create_pipeline_layout",{"type":10,"tag":543,"props":6907,"children":6908},{"style":562},[6909],{"type":15,"value":6910},"({ .layouts ",{"type":10,"tag":543,"props":6912,"children":6913},{"style":550},[6914],{"type":15,"value":881},{"type":10,"tag":543,"props":6916,"children":6917},{"style":562},[6918],{"type":15,"value":6919}," { layout0, layout0, layout1, layout2, layout3 }});\n",{"type":10,"tag":543,"props":6921,"children":6923},{"class":545,"line":6922},91,[6924],{"type":10,"tag":543,"props":6925,"children":6926},{"emptyLinePlaceholder":634},[6927],{"type":15,"value":637},{"type":10,"tag":543,"props":6929,"children":6931},{"class":545,"line":6930},92,[6932],{"type":10,"tag":543,"props":6933,"children":6934},{"style":5729},[6935],{"type":15,"value":6936},"// Query how big the descriptor set layout is.\n",{"type":10,"tag":543,"props":6938,"children":6940},{"class":545,"line":6939},93,[6941,6946,6951,6955,6959],{"type":10,"tag":543,"props":6942,"children":6943},{"style":562},[6944],{"type":15,"value":6945},"VkDeviceSize ",{"type":10,"tag":543,"props":6947,"children":6948},{"style":577},[6949],{"type":15,"value":6950},"layoutSizes",{"type":10,"tag":543,"props":6952,"children":6953},{"style":562},[6954],{"type":15,"value":5716},{"type":10,"tag":543,"props":6956,"children":6957},{"style":889},[6958],{"type":15,"value":6442},{"type":10,"tag":543,"props":6960,"children":6961},{"style":562},[6962],{"type":15,"value":6963},"];\n",{"type":10,"tag":543,"props":6965,"children":6967},{"class":545,"line":6966},94,[6968,6972,6977,6982,6986,6990,6994],{"type":10,"tag":543,"props":6969,"children":6970},{"style":556},[6971],{"type":15,"value":5619},{"type":10,"tag":543,"props":6973,"children":6974},{"style":562},[6975],{"type":15,"value":6976},"(device, layout0, ",{"type":10,"tag":543,"props":6978,"children":6979},{"style":550},[6980],{"type":15,"value":6981},"&",{"type":10,"tag":543,"props":6983,"children":6984},{"style":577},[6985],{"type":15,"value":6950},{"type":10,"tag":543,"props":6987,"children":6988},{"style":562},[6989],{"type":15,"value":5716},{"type":10,"tag":543,"props":6991,"children":6992},{"style":889},[6993],{"type":15,"value":6085},{"type":10,"tag":543,"props":6995,"children":6996},{"style":562},[6997],{"type":15,"value":6998},"]);\n",{"type":10,"tag":543,"props":7000,"children":7002},{"class":545,"line":7001},95,[7003,7007,7012,7016,7020,7024,7028],{"type":10,"tag":543,"props":7004,"children":7005},{"style":556},[7006],{"type":15,"value":5619},{"type":10,"tag":543,"props":7008,"children":7009},{"style":562},[7010],{"type":15,"value":7011},"(device, layout1, ",{"type":10,"tag":543,"props":7013,"children":7014},{"style":550},[7015],{"type":15,"value":6981},{"type":10,"tag":543,"props":7017,"children":7018},{"style":577},[7019],{"type":15,"value":6950},{"type":10,"tag":543,"props":7021,"children":7022},{"style":562},[7023],{"type":15,"value":5716},{"type":10,"tag":543,"props":7025,"children":7026},{"style":889},[7027],{"type":15,"value":1649},{"type":10,"tag":543,"props":7029,"children":7030},{"style":562},[7031],{"type":15,"value":6998},{"type":10,"tag":543,"props":7033,"children":7035},{"class":545,"line":7034},96,[7036],{"type":10,"tag":543,"props":7037,"children":7038},{"emptyLinePlaceholder":634},[7039],{"type":15,"value":637},{"type":10,"tag":543,"props":7041,"children":7043},{"class":545,"line":7042},97,[7044],{"type":10,"tag":543,"props":7045,"children":7046},{"style":5729},[7047],{"type":15,"value":7048},"// Align the descriptor set size so it is suitable for suballocation within a descriptor buffer.\n",{"type":10,"tag":543,"props":7050,"children":7052},{"class":545,"line":7051},98,[7053,7057,7061,7065,7070,7074,7079,7084,7088,7092,7096],{"type":10,"tag":543,"props":7054,"children":7055},{"style":577},[7056],{"type":15,"value":6950},{"type":10,"tag":543,"props":7058,"children":7059},{"style":562},[7060],{"type":15,"value":5716},{"type":10,"tag":543,"props":7062,"children":7063},{"style":889},[7064],{"type":15,"value":6085},{"type":10,"tag":543,"props":7066,"children":7067},{"style":562},[7068],{"type":15,"value":7069},"] ",{"type":10,"tag":543,"props":7071,"children":7072},{"style":550},[7073],{"type":15,"value":881},{"type":10,"tag":543,"props":7075,"children":7076},{"style":556},[7077],{"type":15,"value":7078}," align",{"type":10,"tag":543,"props":7080,"children":7081},{"style":562},[7082],{"type":15,"value":7083},"(",{"type":10,"tag":543,"props":7085,"children":7086},{"style":577},[7087],{"type":15,"value":6950},{"type":10,"tag":543,"props":7089,"children":7090},{"style":562},[7091],{"type":15,"value":5716},{"type":10,"tag":543,"props":7093,"children":7094},{"style":889},[7095],{"type":15,"value":6085},{"type":10,"tag":543,"props":7097,"children":7098},{"style":562},[7099],{"type":15,"value":7100},"], props.descriptorBufferOffsetAlignment);\n",{"type":10,"tag":543,"props":7102,"children":7104},{"class":545,"line":7103},99,[7105,7109,7113,7117,7121,7125,7129,7133,7137,7141,7145],{"type":10,"tag":543,"props":7106,"children":7107},{"style":577},[7108],{"type":15,"value":6950},{"type":10,"tag":543,"props":7110,"children":7111},{"style":562},[7112],{"type":15,"value":5716},{"type":10,"tag":543,"props":7114,"children":7115},{"style":889},[7116],{"type":15,"value":1649},{"type":10,"tag":543,"props":7118,"children":7119},{"style":562},[7120],{"type":15,"value":7069},{"type":10,"tag":543,"props":7122,"children":7123},{"style":550},[7124],{"type":15,"value":881},{"type":10,"tag":543,"props":7126,"children":7127},{"style":556},[7128],{"type":15,"value":7078},{"type":10,"tag":543,"props":7130,"children":7131},{"style":562},[7132],{"type":15,"value":7083},{"type":10,"tag":543,"props":7134,"children":7135},{"style":577},[7136],{"type":15,"value":6950},{"type":10,"tag":543,"props":7138,"children":7139},{"style":562},[7140],{"type":15,"value":5716},{"type":10,"tag":543,"props":7142,"children":7143},{"style":889},[7144],{"type":15,"value":1649},{"type":10,"tag":543,"props":7146,"children":7147},{"style":562},[7148],{"type":15,"value":7100},{"type":10,"tag":543,"props":7150,"children":7152},{"class":545,"line":7151},100,[7153],{"type":10,"tag":543,"props":7154,"children":7155},{"emptyLinePlaceholder":634},[7156],{"type":15,"value":637},{"type":10,"tag":543,"props":7158,"children":7160},{"class":545,"line":7159},101,[7161],{"type":10,"tag":543,"props":7162,"children":7163},{"style":5729},[7164],{"type":15,"value":7165},"// Query individual offsets into the descriptor set.\n",{"type":10,"tag":543,"props":7167,"children":7169},{"class":545,"line":7168},102,[7170,7174,7179,7183,7187,7192,7196],{"type":10,"tag":543,"props":7171,"children":7172},{"style":562},[7173],{"type":15,"value":6945},{"type":10,"tag":543,"props":7175,"children":7176},{"style":577},[7177],{"type":15,"value":7178},"layoutOffsets",{"type":10,"tag":543,"props":7180,"children":7181},{"style":562},[7182],{"type":15,"value":5716},{"type":10,"tag":543,"props":7184,"children":7185},{"style":889},[7186],{"type":15,"value":6442},{"type":10,"tag":543,"props":7188,"children":7189},{"style":562},[7190],{"type":15,"value":7191},"][",{"type":10,"tag":543,"props":7193,"children":7194},{"style":889},[7195],{"type":15,"value":6442},{"type":10,"tag":543,"props":7197,"children":7198},{"style":562},[7199],{"type":15,"value":6963},{"type":10,"tag":543,"props":7201,"children":7203},{"class":545,"line":7202},103,[7204,7208,7212,7216,7220,7224,7228,7232,7236,7240,7244],{"type":10,"tag":543,"props":7205,"children":7206},{"style":556},[7207],{"type":15,"value":1449},{"type":10,"tag":543,"props":7209,"children":7210},{"style":562},[7211],{"type":15,"value":6976},{"type":10,"tag":543,"props":7213,"children":7214},{"style":889},[7215],{"type":15,"value":6085},{"type":10,"tag":543,"props":7217,"children":7218},{"style":562},[7219],{"type":15,"value":748},{"type":10,"tag":543,"props":7221,"children":7222},{"style":550},[7223],{"type":15,"value":6981},{"type":10,"tag":543,"props":7225,"children":7226},{"style":577},[7227],{"type":15,"value":7178},{"type":10,"tag":543,"props":7229,"children":7230},{"style":562},[7231],{"type":15,"value":5716},{"type":10,"tag":543,"props":7233,"children":7234},{"style":889},[7235],{"type":15,"value":6085},{"type":10,"tag":543,"props":7237,"children":7238},{"style":562},[7239],{"type":15,"value":7191},{"type":10,"tag":543,"props":7241,"children":7242},{"style":889},[7243],{"type":15,"value":6085},{"type":10,"tag":543,"props":7245,"children":7246},{"style":562},[7247],{"type":15,"value":6998},{"type":10,"tag":543,"props":7249,"children":7251},{"class":545,"line":7250},104,[7252,7256,7260,7264,7268,7272,7276,7280,7284,7288,7292],{"type":10,"tag":543,"props":7253,"children":7254},{"style":556},[7255],{"type":15,"value":1449},{"type":10,"tag":543,"props":7257,"children":7258},{"style":562},[7259],{"type":15,"value":6976},{"type":10,"tag":543,"props":7261,"children":7262},{"style":889},[7263],{"type":15,"value":1649},{"type":10,"tag":543,"props":7265,"children":7266},{"style":562},[7267],{"type":15,"value":748},{"type":10,"tag":543,"props":7269,"children":7270},{"style":550},[7271],{"type":15,"value":6981},{"type":10,"tag":543,"props":7273,"children":7274},{"style":577},[7275],{"type":15,"value":7178},{"type":10,"tag":543,"props":7277,"children":7278},{"style":562},[7279],{"type":15,"value":5716},{"type":10,"tag":543,"props":7281,"children":7282},{"style":889},[7283],{"type":15,"value":6085},{"type":10,"tag":543,"props":7285,"children":7286},{"style":562},[7287],{"type":15,"value":7191},{"type":10,"tag":543,"props":7289,"children":7290},{"style":889},[7291],{"type":15,"value":1649},{"type":10,"tag":543,"props":7293,"children":7294},{"style":562},[7295],{"type":15,"value":6998},{"type":10,"tag":543,"props":7297,"children":7299},{"class":545,"line":7298},105,[7300,7304,7308,7312,7316,7320,7324,7328,7332,7336,7340],{"type":10,"tag":543,"props":7301,"children":7302},{"style":556},[7303],{"type":15,"value":1449},{"type":10,"tag":543,"props":7305,"children":7306},{"style":562},[7307],{"type":15,"value":7011},{"type":10,"tag":543,"props":7309,"children":7310},{"style":889},[7311],{"type":15,"value":6085},{"type":10,"tag":543,"props":7313,"children":7314},{"style":562},[7315],{"type":15,"value":748},{"type":10,"tag":543,"props":7317,"children":7318},{"style":550},[7319],{"type":15,"value":6981},{"type":10,"tag":543,"props":7321,"children":7322},{"style":577},[7323],{"type":15,"value":7178},{"type":10,"tag":543,"props":7325,"children":7326},{"style":562},[7327],{"type":15,"value":5716},{"type":10,"tag":543,"props":7329,"children":7330},{"style":889},[7331],{"type":15,"value":1649},{"type":10,"tag":543,"props":7333,"children":7334},{"style":562},[7335],{"type":15,"value":7191},{"type":10,"tag":543,"props":7337,"children":7338},{"style":889},[7339],{"type":15,"value":6085},{"type":10,"tag":543,"props":7341,"children":7342},{"style":562},[7343],{"type":15,"value":6998},{"type":10,"tag":543,"props":7345,"children":7347},{"class":545,"line":7346},106,[7348,7352,7356,7360,7364,7368,7372,7376,7380,7384,7388],{"type":10,"tag":543,"props":7349,"children":7350},{"style":556},[7351],{"type":15,"value":1449},{"type":10,"tag":543,"props":7353,"children":7354},{"style":562},[7355],{"type":15,"value":7011},{"type":10,"tag":543,"props":7357,"children":7358},{"style":889},[7359],{"type":15,"value":1649},{"type":10,"tag":543,"props":7361,"children":7362},{"style":562},[7363],{"type":15,"value":748},{"type":10,"tag":543,"props":7365,"children":7366},{"style":550},[7367],{"type":15,"value":6981},{"type":10,"tag":543,"props":7369,"children":7370},{"style":577},[7371],{"type":15,"value":7178},{"type":10,"tag":543,"props":7373,"children":7374},{"style":562},[7375],{"type":15,"value":5716},{"type":10,"tag":543,"props":7377,"children":7378},{"style":889},[7379],{"type":15,"value":1649},{"type":10,"tag":543,"props":7381,"children":7382},{"style":562},[7383],{"type":15,"value":7191},{"type":10,"tag":543,"props":7385,"children":7386},{"style":889},[7387],{"type":15,"value":1649},{"type":10,"tag":543,"props":7389,"children":7390},{"style":562},[7391],{"type":15,"value":6998},{"type":10,"tag":543,"props":7393,"children":7395},{"class":545,"line":7394},107,[7396],{"type":10,"tag":543,"props":7397,"children":7398},{"emptyLinePlaceholder":634},[7399],{"type":15,"value":637},{"type":10,"tag":543,"props":7401,"children":7403},{"class":545,"line":7402},108,[7404,7409,7414],{"type":10,"tag":543,"props":7405,"children":7406},{"style":550},[7407],{"type":15,"value":7408},"#define",{"type":10,"tag":543,"props":7410,"children":7411},{"style":556},[7412],{"type":15,"value":7413}," SET_COUNT",{"type":10,"tag":543,"props":7415,"children":7416},{"style":889},[7417],{"type":15,"value":7418}," 64\n",{"type":10,"tag":543,"props":7420,"children":7422},{"class":545,"line":7421},109,[7423],{"type":10,"tag":543,"props":7424,"children":7425},{"emptyLinePlaceholder":634},[7426],{"type":15,"value":637},{"type":10,"tag":543,"props":7428,"children":7430},{"class":545,"line":7429},110,[7431],{"type":10,"tag":543,"props":7432,"children":7433},{"style":5729},[7434],{"type":15,"value":7435},"// Allocate the equivalent of a big descriptor pool.\n",{"type":10,"tag":543,"props":7437,"children":7439},{"class":545,"line":7438},111,[7440],{"type":10,"tag":543,"props":7441,"children":7442},{"style":5729},[7443],{"type":15,"value":7444},"// The size is arbitrary and should be large and be able to hold all descriptors used by app,\n",{"type":10,"tag":543,"props":7446,"children":7448},{"class":545,"line":7447},112,[7449],{"type":10,"tag":543,"props":7450,"children":7451},{"style":5729},[7452],{"type":15,"value":7453},"// for this sample, we allocate the smallest possible descriptor buffer for the number of sets we need.\n",{"type":10,"tag":543,"props":7455,"children":7457},{"class":545,"line":7456},113,[7458],{"type":10,"tag":543,"props":7459,"children":7460},{"style":5729},[7461],{"type":15,"value":7462},"// The most compatible thing to do is 1 resource buffer, 1 sampler buffer.\n",{"type":10,"tag":543,"props":7464,"children":7466},{"class":545,"line":7465},114,[7467,7472,7476,7481],{"type":10,"tag":543,"props":7468,"children":7469},{"style":562},[7470],{"type":15,"value":7471},"Buffer resourceBuffer ",{"type":10,"tag":543,"props":7473,"children":7474},{"style":550},[7475],{"type":15,"value":881},{"type":10,"tag":543,"props":7477,"children":7478},{"style":556},[7479],{"type":15,"value":7480}," create_buffer",{"type":10,"tag":543,"props":7482,"children":7483},{"style":562},[7484],{"type":15,"value":7485},"({\n",{"type":10,"tag":543,"props":7487,"children":7489},{"class":545,"line":7488},115,[7490,7495,7499,7504,7508,7512,7516,7520,7524,7529],{"type":10,"tag":543,"props":7491,"children":7492},{"style":562},[7493],{"type":15,"value":7494}," .size ",{"type":10,"tag":543,"props":7496,"children":7497},{"style":550},[7498],{"type":15,"value":881},{"type":10,"tag":543,"props":7500,"children":7501},{"style":577},[7502],{"type":15,"value":7503}," layoutSizes",{"type":10,"tag":543,"props":7505,"children":7506},{"style":562},[7507],{"type":15,"value":5716},{"type":10,"tag":543,"props":7509,"children":7510},{"style":889},[7511],{"type":15,"value":6085},{"type":10,"tag":543,"props":7513,"children":7514},{"style":562},[7515],{"type":15,"value":7069},{"type":10,"tag":543,"props":7517,"children":7518},{"style":550},[7519],{"type":15,"value":617},{"type":10,"tag":543,"props":7521,"children":7522},{"style":889},[7523],{"type":15,"value":6640},{"type":10,"tag":543,"props":7525,"children":7526},{"style":550},[7527],{"type":15,"value":7528}," *",{"type":10,"tag":543,"props":7530,"children":7531},{"style":562},[7532],{"type":15,"value":7533}," SET_COUNT,\n",{"type":10,"tag":543,"props":7535,"children":7537},{"class":545,"line":7536},116,[7538,7543,7547,7552],{"type":10,"tag":543,"props":7539,"children":7540},{"style":562},[7541],{"type":15,"value":7542}," .usage ",{"type":10,"tag":543,"props":7544,"children":7545},{"style":550},[7546],{"type":15,"value":881},{"type":10,"tag":543,"props":7548,"children":7549},{"style":562},[7550],{"type":15,"value":7551}," VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":7553,"children":7554},{"style":550},[7555],{"type":15,"value":6742},{"type":10,"tag":543,"props":7557,"children":7559},{"class":545,"line":7558},117,[7560,7565,7570,7575,7580],{"type":10,"tag":543,"props":7561,"children":7562},{"style":562},[7563],{"type":15,"value":7564}," (props.bufferlessPushDescriptors ",{"type":10,"tag":543,"props":7566,"children":7567},{"style":550},[7568],{"type":15,"value":7569},"?",{"type":10,"tag":543,"props":7571,"children":7572},{"style":889},[7573],{"type":15,"value":7574}," 0",{"type":10,"tag":543,"props":7576,"children":7577},{"style":550},[7578],{"type":15,"value":7579}," :",{"type":10,"tag":543,"props":7581,"children":7582},{"style":562},[7583],{"type":15,"value":7584}," VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT),\n",{"type":10,"tag":543,"props":7586,"children":7588},{"class":545,"line":7587},118,[7589,7594,7598,7603,7608],{"type":10,"tag":543,"props":7590,"children":7591},{"style":562},[7592],{"type":15,"value":7593}," .properties ",{"type":10,"tag":543,"props":7595,"children":7596},{"style":550},[7597],{"type":15,"value":881},{"type":10,"tag":543,"props":7599,"children":7600},{"style":562},[7601],{"type":15,"value":7602}," VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT ",{"type":10,"tag":543,"props":7604,"children":7605},{"style":550},[7606],{"type":15,"value":7607},"|",{"type":10,"tag":543,"props":7609,"children":7610},{"style":562},[7611],{"type":15,"value":7612}," VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT });\n",{"type":10,"tag":543,"props":7614,"children":7616},{"class":545,"line":7615},119,[7617],{"type":10,"tag":543,"props":7618,"children":7619},{"emptyLinePlaceholder":634},[7620],{"type":15,"value":637},{"type":10,"tag":543,"props":7622,"children":7624},{"class":545,"line":7623},120,[7625,7630,7634,7638],{"type":10,"tag":543,"props":7626,"children":7627},{"style":562},[7628],{"type":15,"value":7629},"Buffer samplerBuffer ",{"type":10,"tag":543,"props":7631,"children":7632},{"style":550},[7633],{"type":15,"value":881},{"type":10,"tag":543,"props":7635,"children":7636},{"style":556},[7637],{"type":15,"value":7480},{"type":10,"tag":543,"props":7639,"children":7640},{"style":562},[7641],{"type":15,"value":7485},{"type":10,"tag":543,"props":7643,"children":7645},{"class":545,"line":7644},121,[7646,7650,7654,7658,7662,7666,7670,7674],{"type":10,"tag":543,"props":7647,"children":7648},{"style":562},[7649],{"type":15,"value":7494},{"type":10,"tag":543,"props":7651,"children":7652},{"style":550},[7653],{"type":15,"value":881},{"type":10,"tag":543,"props":7655,"children":7656},{"style":577},[7657],{"type":15,"value":7503},{"type":10,"tag":543,"props":7659,"children":7660},{"style":562},[7661],{"type":15,"value":5716},{"type":10,"tag":543,"props":7663,"children":7664},{"style":889},[7665],{"type":15,"value":1649},{"type":10,"tag":543,"props":7667,"children":7668},{"style":562},[7669],{"type":15,"value":7069},{"type":10,"tag":543,"props":7671,"children":7672},{"style":550},[7673],{"type":15,"value":617},{"type":10,"tag":543,"props":7675,"children":7676},{"style":562},[7677],{"type":15,"value":7533},{"type":10,"tag":543,"props":7679,"children":7681},{"class":545,"line":7680},122,[7682,7686,7690],{"type":10,"tag":543,"props":7683,"children":7684},{"style":562},[7685],{"type":15,"value":7542},{"type":10,"tag":543,"props":7687,"children":7688},{"style":550},[7689],{"type":15,"value":881},{"type":10,"tag":543,"props":7691,"children":7692},{"style":562},[7693],{"type":15,"value":7694}," VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT,\n",{"type":10,"tag":543,"props":7696,"children":7698},{"class":545,"line":7697},123,[7699,7703,7707,7711,7715],{"type":10,"tag":543,"props":7700,"children":7701},{"style":562},[7702],{"type":15,"value":7593},{"type":10,"tag":543,"props":7704,"children":7705},{"style":550},[7706],{"type":15,"value":881},{"type":10,"tag":543,"props":7708,"children":7709},{"style":562},[7710],{"type":15,"value":7602},{"type":10,"tag":543,"props":7712,"children":7713},{"style":550},[7714],{"type":15,"value":7607},{"type":10,"tag":543,"props":7716,"children":7717},{"style":562},[7718],{"type":15,"value":7612},{"type":10,"tag":543,"props":7720,"children":7722},{"class":545,"line":7721},124,[7723],{"type":10,"tag":543,"props":7724,"children":7725},{"emptyLinePlaceholder":634},[7726],{"type":15,"value":637},{"type":10,"tag":543,"props":7728,"children":7730},{"class":545,"line":7729},125,[7731,7735,7740,7744],{"type":10,"tag":543,"props":7732,"children":7733},{"style":550},[7734],{"type":15,"value":5763},{"type":10,"tag":543,"props":7736,"children":7737},{"style":562},[7738],{"type":15,"value":7739}," VkDescriptorBufferBindingPushDescriptorBufferHandleEXT push_descriptor_buffer_handle ",{"type":10,"tag":543,"props":7741,"children":7742},{"style":550},[7743],{"type":15,"value":881},{"type":10,"tag":543,"props":7745,"children":7746},{"style":562},[7747],{"type":15,"value":7748}," {\n",{"type":10,"tag":543,"props":7750,"children":7752},{"class":545,"line":7751},126,[7753,7758,7763],{"type":10,"tag":543,"props":7754,"children":7755},{"style":562},[7756],{"type":15,"value":7757}," VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_PUSH_DESCRIPTOR_BUFFER_HANDLE_EXT, ",{"type":10,"tag":543,"props":7759,"children":7760},{"style":889},[7761],{"type":15,"value":7762},"NULL",{"type":10,"tag":543,"props":7764,"children":7765},{"style":562},[7766],{"type":15,"value":7767},", resourceBuffer.handle};\n",{"type":10,"tag":543,"props":7769,"children":7771},{"class":545,"line":7770},127,[7772],{"type":10,"tag":543,"props":7773,"children":7774},{"emptyLinePlaceholder":634},[7775],{"type":15,"value":637},{"type":10,"tag":543,"props":7777,"children":7779},{"class":545,"line":7778},128,[7780,7784,7789,7794,7798,7802,7806,7810],{"type":10,"tag":543,"props":7781,"children":7782},{"style":550},[7783],{"type":15,"value":5763},{"type":10,"tag":543,"props":7785,"children":7786},{"style":562},[7787],{"type":15,"value":7788}," VkDescriptorBufferBindingInfoEXT ",{"type":10,"tag":543,"props":7790,"children":7791},{"style":577},[7792],{"type":15,"value":7793},"binding_infos",{"type":10,"tag":543,"props":7795,"children":7796},{"style":562},[7797],{"type":15,"value":5716},{"type":10,"tag":543,"props":7799,"children":7800},{"style":889},[7801],{"type":15,"value":6442},{"type":10,"tag":543,"props":7803,"children":7804},{"style":562},[7805],{"type":15,"value":7069},{"type":10,"tag":543,"props":7807,"children":7808},{"style":550},[7809],{"type":15,"value":881},{"type":10,"tag":543,"props":7811,"children":7812},{"style":562},[7813],{"type":15,"value":7748},{"type":10,"tag":543,"props":7815,"children":7817},{"class":545,"line":7816},129,[7818,7823,7827,7832,7836,7841],{"type":10,"tag":543,"props":7819,"children":7820},{"style":562},[7821],{"type":15,"value":7822}," { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, (props.bufferlessPushDescriptors ",{"type":10,"tag":543,"props":7824,"children":7825},{"style":550},[7826],{"type":15,"value":7569},{"type":10,"tag":543,"props":7828,"children":7829},{"style":889},[7830],{"type":15,"value":7831}," NULL",{"type":10,"tag":543,"props":7833,"children":7834},{"style":550},[7835],{"type":15,"value":7579},{"type":10,"tag":543,"props":7837,"children":7838},{"style":550},[7839],{"type":15,"value":7840}," &",{"type":10,"tag":543,"props":7842,"children":7843},{"style":562},[7844],{"type":15,"value":7845},"push_descriptor_buffer_handle),\n",{"type":10,"tag":543,"props":7847,"children":7849},{"class":545,"line":7848},130,[7850],{"type":10,"tag":543,"props":7851,"children":7852},{"style":562},[7853],{"type":15,"value":7854}," resourceBuffer.deviceAddress,\n",{"type":10,"tag":543,"props":7856,"children":7858},{"class":545,"line":7857},131,[7859,7864,7868,7873,7877,7881,7885],{"type":10,"tag":543,"props":7860,"children":7861},{"style":562},[7862],{"type":15,"value":7863}," VK_BUFFER_USAGE_RESOURCE_DESCRIPTOR_BUFFER_BIT_EXT ",{"type":10,"tag":543,"props":7865,"children":7866},{"style":550},[7867],{"type":15,"value":7607},{"type":10,"tag":543,"props":7869,"children":7870},{"style":562},[7871],{"type":15,"value":7872}," (props.bufferlessPushDescriptors ",{"type":10,"tag":543,"props":7874,"children":7875},{"style":550},[7876],{"type":15,"value":7569},{"type":10,"tag":543,"props":7878,"children":7879},{"style":889},[7880],{"type":15,"value":7574},{"type":10,"tag":543,"props":7882,"children":7883},{"style":550},[7884],{"type":15,"value":7579},{"type":10,"tag":543,"props":7886,"children":7887},{"style":562},[7888],{"type":15,"value":7889}," VK_BUFFER_USAGE_PUSH_DESCRIPTORS_DESCRIPTOR_BUFFER_BIT) },\n",{"type":10,"tag":543,"props":7891,"children":7893},{"class":545,"line":7892},132,[7894,7899,7903],{"type":10,"tag":543,"props":7895,"children":7896},{"style":562},[7897],{"type":15,"value":7898}," { VK_STRUCTURE_TYPE_DESCRIPTOR_BUFFER_BINDING_INFO_EXT, ",{"type":10,"tag":543,"props":7900,"children":7901},{"style":889},[7902],{"type":15,"value":7762},{"type":10,"tag":543,"props":7904,"children":7905},{"style":562},[7906],{"type":15,"value":7907},", samplerBuffer.deviceAddress,\n",{"type":10,"tag":543,"props":7909,"children":7911},{"class":545,"line":7910},133,[7912],{"type":10,"tag":543,"props":7913,"children":7914},{"style":562},[7915],{"type":15,"value":7916}," VK_BUFFER_USAGE_SAMPLER_DESCRIPTOR_BUFFER_BIT_EXT }\n",{"type":10,"tag":543,"props":7918,"children":7920},{"class":545,"line":7919},134,[7921],{"type":10,"tag":543,"props":7922,"children":7923},{"style":562},[7924],{"type":15,"value":5969},{"type":10,"tag":543,"props":7926,"children":7928},{"class":545,"line":7927},135,[7929],{"type":10,"tag":543,"props":7930,"children":7931},{"emptyLinePlaceholder":634},[7932],{"type":15,"value":637},{"type":10,"tag":543,"props":7934,"children":7936},{"class":545,"line":7935},136,[7937],{"type":10,"tag":543,"props":7938,"children":7939},{"style":5729},[7940],{"type":15,"value":7941},"// Bind the descriptor buffers once, from here, we will offset into the buffer for different descriptor sets.\n",{"type":10,"tag":543,"props":7943,"children":7945},{"class":545,"line":7944},137,[7946,7950,7955,7959,7963,7967],{"type":10,"tag":543,"props":7947,"children":7948},{"style":556},[7949],{"type":15,"value":1864},{"type":10,"tag":543,"props":7951,"children":7952},{"style":562},[7953],{"type":15,"value":7954},"(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, ",{"type":10,"tag":543,"props":7956,"children":7957},{"style":889},[7958],{"type":15,"value":6085},{"type":10,"tag":543,"props":7960,"children":7961},{"style":562},[7962],{"type":15,"value":748},{"type":10,"tag":543,"props":7964,"children":7965},{"style":889},[7966],{"type":15,"value":6442},{"type":10,"tag":543,"props":7968,"children":7969},{"style":562},[7970],{"type":15,"value":7971},", binding_infos);\n",{"type":10,"tag":543,"props":7973,"children":7975},{"class":545,"line":7974},138,[7976],{"type":10,"tag":543,"props":7977,"children":7978},{"emptyLinePlaceholder":634},[7979],{"type":15,"value":637},{"type":10,"tag":543,"props":7981,"children":7983},{"class":545,"line":7982},139,[7984],{"type":10,"tag":543,"props":7985,"children":7986},{"style":5729},[7987],{"type":15,"value":7988},"// Allocate these somehow, not particularly important to this example.\n",{"type":10,"tag":543,"props":7990,"children":7992},{"class":545,"line":7991},140,[7993,7998,8003,8008,8012,8016,8020],{"type":10,"tag":543,"props":7994,"children":7995},{"style":562},[7996],{"type":15,"value":7997},"VkImageView ",{"type":10,"tag":543,"props":7999,"children":8000},{"style":577},[8001],{"type":15,"value":8002},"views",{"type":10,"tag":543,"props":8004,"children":8005},{"style":562},[8006],{"type":15,"value":8007},"[SET_COUNT][",{"type":10,"tag":543,"props":8009,"children":8010},{"style":889},[8011],{"type":15,"value":6442},{"type":10,"tag":543,"props":8013,"children":8014},{"style":562},[8015],{"type":15,"value":7191},{"type":10,"tag":543,"props":8017,"children":8018},{"style":889},[8019],{"type":15,"value":6442},{"type":10,"tag":543,"props":8021,"children":8022},{"style":562},[8023],{"type":15,"value":6963},{"type":10,"tag":543,"props":8025,"children":8027},{"class":545,"line":8026},141,[8028,8032,8037,8041,8045],{"type":10,"tag":543,"props":8029,"children":8030},{"style":562},[8031],{"type":15,"value":5706},{"type":10,"tag":543,"props":8033,"children":8034},{"style":577},[8035],{"type":15,"value":8036},"samplers",{"type":10,"tag":543,"props":8038,"children":8039},{"style":562},[8040],{"type":15,"value":8007},{"type":10,"tag":543,"props":8042,"children":8043},{"style":889},[8044],{"type":15,"value":6442},{"type":10,"tag":543,"props":8046,"children":8047},{"style":562},[8048],{"type":15,"value":6963},{"type":10,"tag":543,"props":8050,"children":8052},{"class":545,"line":8051},142,[8053],{"type":10,"tag":543,"props":8054,"children":8055},{"style":562},[8056],{"type":15,"value":8057},"VkDeviceAddress bufferAddressTexelBuffer;\n",{"type":10,"tag":543,"props":8059,"children":8061},{"class":545,"line":8060},143,[8062],{"type":10,"tag":543,"props":8063,"children":8064},{"emptyLinePlaceholder":634},[8065],{"type":15,"value":637},{"type":10,"tag":543,"props":8067,"children":8069},{"class":545,"line":8068},144,[8070],{"type":10,"tag":543,"props":8071,"children":8072},{"style":5729},[8073],{"type":15,"value":8074},"// No buffers are associated with embedded immutable samplers. This maps to DX12 static samplers.\n",{"type":10,"tag":543,"props":8076,"children":8078},{"class":545,"line":8077},145,[8079],{"type":10,"tag":543,"props":8080,"children":8081},{"style":5729},[8082],{"type":15,"value":8083},"// There is no vkCmdBindPipelineLayout(), so this is the way to do it in Vulkan.\n",{"type":10,"tag":543,"props":8085,"children":8087},{"class":545,"line":8086},146,[8088,8092,8097,8101],{"type":10,"tag":543,"props":8089,"children":8090},{"style":556},[8091],{"type":15,"value":2420},{"type":10,"tag":543,"props":8093,"children":8094},{"style":562},[8095],{"type":15,"value":8096},"(cmd, VK_PIPELINE_BIND_POINT_GRAPHICS, layout, ",{"type":10,"tag":543,"props":8098,"children":8099},{"style":889},[8100],{"type":15,"value":5721},{"type":10,"tag":543,"props":8102,"children":8103},{"style":562},[8104],{"type":15,"value":627},{"type":10,"tag":543,"props":8106,"children":8108},{"class":545,"line":8107},147,[8109],{"type":10,"tag":543,"props":8110,"children":8111},{"emptyLinePlaceholder":634},[8112],{"type":15,"value":637},{"type":10,"tag":543,"props":8114,"children":8116},{"class":545,"line":8115},148,[8117,8122,8127,8132,8137,8141,8145,8150,8155,8160,8165],{"type":10,"tag":543,"props":8118,"children":8119},{"style":550},[8120],{"type":15,"value":8121},"for",{"type":10,"tag":543,"props":8123,"children":8124},{"style":562},[8125],{"type":15,"value":8126}," (",{"type":10,"tag":543,"props":8128,"children":8129},{"style":550},[8130],{"type":15,"value":8131},"int",{"type":10,"tag":543,"props":8133,"children":8134},{"style":562},[8135],{"type":15,"value":8136}," i ",{"type":10,"tag":543,"props":8138,"children":8139},{"style":550},[8140],{"type":15,"value":881},{"type":10,"tag":543,"props":8142,"children":8143},{"style":889},[8144],{"type":15,"value":7574},{"type":10,"tag":543,"props":8146,"children":8147},{"style":562},[8148],{"type":15,"value":8149},"; i ",{"type":10,"tag":543,"props":8151,"children":8152},{"style":550},[8153],{"type":15,"value":8154},"\u003C",{"type":10,"tag":543,"props":8156,"children":8157},{"style":562},[8158],{"type":15,"value":8159}," SET_COUNT; i",{"type":10,"tag":543,"props":8161,"children":8162},{"style":550},[8163],{"type":15,"value":8164},"++",{"type":10,"tag":543,"props":8166,"children":8167},{"style":562},[8168],{"type":15,"value":2486},{"type":10,"tag":543,"props":8170,"children":8172},{"class":545,"line":8171},149,[8173],{"type":10,"tag":543,"props":8174,"children":8175},{"style":562},[8176],{"type":15,"value":5786},{"type":10,"tag":543,"props":8178,"children":8180},{"class":545,"line":8179},150,[8181],{"type":10,"tag":543,"props":8182,"children":8183},{"style":5729},[8184],{"type":15,"value":8185}," // This refers to the buffers we bound in vkCmdBindDescriptorBuffersEXT.\n",{"type":10,"tag":543,"props":8187,"children":8189},{"class":545,"line":8188},151,[8190],{"type":10,"tag":543,"props":8191,"children":8192},{"style":5729},[8193],{"type":15,"value":8194}," // Allocate descriptor sets linearly.\n",{"type":10,"tag":543,"props":8196,"children":8198},{"class":545,"line":8197},152,[8199,8203,8208,8213,8217,8222,8227,8231,8235,8239,8243,8247],{"type":10,"tag":543,"props":8200,"children":8201},{"style":550},[8202],{"type":15,"value":946},{"type":10,"tag":543,"props":8204,"children":8205},{"style":550},[8206],{"type":15,"value":8207}," uint32_t",{"type":10,"tag":543,"props":8209,"children":8210},{"style":562},[8211],{"type":15,"value":8212}," bufferIndices",{"type":10,"tag":543,"props":8214,"children":8215},{"style":550},[8216],{"type":15,"value":5773},{"type":10,"tag":543,"props":8218,"children":8219},{"style":550},[8220],{"type":15,"value":8221}," =",{"type":10,"tag":543,"props":8223,"children":8224},{"style":562},[8225],{"type":15,"value":8226}," { ",{"type":10,"tag":543,"props":8228,"children":8229},{"style":889},[8230],{"type":15,"value":6085},{"type":10,"tag":543,"props":8232,"children":8233},{"style":562},[8234],{"type":15,"value":748},{"type":10,"tag":543,"props":8236,"children":8237},{"style":889},[8238],{"type":15,"value":6085},{"type":10,"tag":543,"props":8240,"children":8241},{"style":562},[8242],{"type":15,"value":748},{"type":10,"tag":543,"props":8244,"children":8245},{"style":889},[8246],{"type":15,"value":1649},{"type":10,"tag":543,"props":8248,"children":8249},{"style":562},[8250],{"type":15,"value":8251}," };\n",{"type":10,"tag":543,"props":8253,"children":8255},{"class":545,"line":8254},153,[8256,8260,8265,8269,8273,8277,8281,8285,8289,8293,8297,8301,8305,8310,8314,8318,8322,8327,8331,8336,8340,8344,8348,8352,8357,8361,8365,8369,8373],{"type":10,"tag":543,"props":8257,"children":8258},{"style":550},[8259],{"type":15,"value":946},{"type":10,"tag":543,"props":8261,"children":8262},{"style":562},[8263],{"type":15,"value":8264}," VkDeviceSize offsets",{"type":10,"tag":543,"props":8266,"children":8267},{"style":550},[8268],{"type":15,"value":5773},{"type":10,"tag":543,"props":8270,"children":8271},{"style":550},[8272],{"type":15,"value":8221},{"type":10,"tag":543,"props":8274,"children":8275},{"style":562},[8276],{"type":15,"value":8226},{"type":10,"tag":543,"props":8278,"children":8279},{"style":889},[8280],{"type":15,"value":6442},{"type":10,"tag":543,"props":8282,"children":8283},{"style":550},[8284],{"type":15,"value":7528},{"type":10,"tag":543,"props":8286,"children":8287},{"style":562},[8288],{"type":15,"value":8136},{"type":10,"tag":543,"props":8290,"children":8291},{"style":550},[8292],{"type":15,"value":617},{"type":10,"tag":543,"props":8294,"children":8295},{"style":577},[8296],{"type":15,"value":7503},{"type":10,"tag":543,"props":8298,"children":8299},{"style":562},[8300],{"type":15,"value":5716},{"type":10,"tag":543,"props":8302,"children":8303},{"style":889},[8304],{"type":15,"value":6085},{"type":10,"tag":543,"props":8306,"children":8307},{"style":562},[8308],{"type":15,"value":8309},"], (",{"type":10,"tag":543,"props":8311,"children":8312},{"style":889},[8313],{"type":15,"value":6442},{"type":10,"tag":543,"props":8315,"children":8316},{"style":550},[8317],{"type":15,"value":7528},{"type":10,"tag":543,"props":8319,"children":8320},{"style":562},[8321],{"type":15,"value":8136},{"type":10,"tag":543,"props":8323,"children":8324},{"style":550},[8325],{"type":15,"value":8326},"+",{"type":10,"tag":543,"props":8328,"children":8329},{"style":889},[8330],{"type":15,"value":6778},{"type":10,"tag":543,"props":8332,"children":8333},{"style":562},[8334],{"type":15,"value":8335},") ",{"type":10,"tag":543,"props":8337,"children":8338},{"style":550},[8339],{"type":15,"value":617},{"type":10,"tag":543,"props":8341,"children":8342},{"style":577},[8343],{"type":15,"value":7503},{"type":10,"tag":543,"props":8345,"children":8346},{"style":562},[8347],{"type":15,"value":5716},{"type":10,"tag":543,"props":8349,"children":8350},{"style":889},[8351],{"type":15,"value":6085},{"type":10,"tag":543,"props":8353,"children":8354},{"style":562},[8355],{"type":15,"value":8356},"], i ",{"type":10,"tag":543,"props":8358,"children":8359},{"style":550},[8360],{"type":15,"value":617},{"type":10,"tag":543,"props":8362,"children":8363},{"style":577},[8364],{"type":15,"value":7503},{"type":10,"tag":543,"props":8366,"children":8367},{"style":562},[8368],{"type":15,"value":5716},{"type":10,"tag":543,"props":8370,"children":8371},{"style":889},[8372],{"type":15,"value":1649},{"type":10,"tag":543,"props":8374,"children":8375},{"style":562},[8376],{"type":15,"value":8377},"] };\n",{"type":10,"tag":543,"props":8379,"children":8381},{"class":545,"line":8380},154,[8382],{"type":10,"tag":543,"props":8383,"children":8384},{"emptyLinePlaceholder":634},[8385],{"type":15,"value":637},{"type":10,"tag":543,"props":8387,"children":8389},{"class":545,"line":8388},155,[8390],{"type":10,"tag":543,"props":8391,"children":8392},{"style":5729},[8393],{"type":15,"value":8394}," // Set 0: Resource set pulled from buffer 0\n",{"type":10,"tag":543,"props":8396,"children":8398},{"class":545,"line":8397},156,[8399],{"type":10,"tag":543,"props":8400,"children":8401},{"style":5729},[8402],{"type":15,"value":8403}," // Set 1: Resource set pulled from buffer 0\n",{"type":10,"tag":543,"props":8405,"children":8407},{"class":545,"line":8406},157,[8408],{"type":10,"tag":543,"props":8409,"children":8410},{"style":5729},[8411],{"type":15,"value":8412}," // Set 2: Sampler set pulled from buffer 1\n",{"type":10,"tag":543,"props":8414,"children":8416},{"class":545,"line":8415},158,[8417],{"type":10,"tag":543,"props":8418,"children":8419},{"style":5729},[8420],{"type":15,"value":8421}," // Set 3: Push descriptors\n",{"type":10,"tag":543,"props":8423,"children":8425},{"class":545,"line":8424},159,[8426],{"type":10,"tag":543,"props":8427,"children":8428},{"style":5729},[8429],{"type":15,"value":8430}," // Set 4: Embedded samplers\n",{"type":10,"tag":543,"props":8432,"children":8434},{"class":545,"line":8433},160,[8435],{"type":10,"tag":543,"props":8436,"children":8437},{"emptyLinePlaceholder":634},[8438],{"type":15,"value":637},{"type":10,"tag":543,"props":8440,"children":8442},{"class":545,"line":8441},161,[8443,8448,8452,8456,8460,8464],{"type":10,"tag":543,"props":8444,"children":8445},{"style":556},[8446],{"type":15,"value":8447}," vkCmdSetDescriptorBufferOffsetsEXT",{"type":10,"tag":543,"props":8449,"children":8450},{"style":562},[8451],{"type":15,"value":8096},{"type":10,"tag":543,"props":8453,"children":8454},{"style":889},[8455],{"type":15,"value":6085},{"type":10,"tag":543,"props":8457,"children":8458},{"style":562},[8459],{"type":15,"value":748},{"type":10,"tag":543,"props":8461,"children":8462},{"style":889},[8463],{"type":15,"value":6543},{"type":10,"tag":543,"props":8465,"children":8466},{"style":562},[8467],{"type":15,"value":585},{"type":10,"tag":543,"props":8469,"children":8471},{"class":545,"line":8470},162,[8472],{"type":10,"tag":543,"props":8473,"children":8474},{"style":562},[8475],{"type":15,"value":8476}," bufferIndices, offsets);\n",{"type":10,"tag":543,"props":8478,"children":8480},{"class":545,"line":8479},163,[8481],{"type":10,"tag":543,"props":8482,"children":8483},{"emptyLinePlaceholder":634},[8484],{"type":15,"value":637},{"type":10,"tag":543,"props":8486,"children":8488},{"class":545,"line":8487},164,[8489,8494,8498,8503,8508],{"type":10,"tag":543,"props":8490,"children":8491},{"style":562},[8492],{"type":15,"value":8493}," VkWriteDescriptorSet ssbo_write ",{"type":10,"tag":543,"props":8495,"children":8496},{"style":550},[8497],{"type":15,"value":881},{"type":10,"tag":543,"props":8499,"children":8500},{"style":562},[8501],{"type":15,"value":8502}," {",{"type":10,"tag":543,"props":8504,"children":8505},{"style":5729},[8506],{"type":15,"value":8507}," /* Fill in as desired, details not interesting here. */",{"type":10,"tag":543,"props":8509,"children":8510},{"style":562},[8511],{"type":15,"value":8251},{"type":10,"tag":543,"props":8513,"children":8515},{"class":545,"line":8514},165,[8516,8521,8525,8529,8533,8537,8541,8545],{"type":10,"tag":543,"props":8517,"children":8518},{"style":556},[8519],{"type":15,"value":8520}," vkCmdPushDescriptorSetKHR",{"type":10,"tag":543,"props":8522,"children":8523},{"style":562},[8524],{"type":15,"value":8096},{"type":10,"tag":543,"props":8526,"children":8527},{"style":889},[8528],{"type":15,"value":6543},{"type":10,"tag":543,"props":8530,"children":8531},{"style":562},[8532],{"type":15,"value":748},{"type":10,"tag":543,"props":8534,"children":8535},{"style":889},[8536],{"type":15,"value":1649},{"type":10,"tag":543,"props":8538,"children":8539},{"style":562},[8540],{"type":15,"value":748},{"type":10,"tag":543,"props":8542,"children":8543},{"style":550},[8544],{"type":15,"value":6981},{"type":10,"tag":543,"props":8546,"children":8547},{"style":562},[8548],{"type":15,"value":8549},"ssbo_write);\n",{"type":10,"tag":543,"props":8551,"children":8553},{"class":545,"line":8552},166,[8554],{"type":10,"tag":543,"props":8555,"children":8556},{"emptyLinePlaceholder":634},[8557],{"type":15,"value":637},{"type":10,"tag":543,"props":8559,"children":8561},{"class":545,"line":8560},167,[8562,8567,8571],{"type":10,"tag":543,"props":8563,"children":8564},{"style":562},[8565],{"type":15,"value":8566}," VkDescriptorImageInfo image_info ",{"type":10,"tag":543,"props":8568,"children":8569},{"style":550},[8570],{"type":15,"value":881},{"type":10,"tag":543,"props":8572,"children":8573},{"style":562},[8574],{"type":15,"value":8575}," {};\n",{"type":10,"tag":543,"props":8577,"children":8579},{"class":545,"line":8578},168,[8580,8585,8589],{"type":10,"tag":543,"props":8581,"children":8582},{"style":562},[8583],{"type":15,"value":8584}," VkDescriptorAddressInfoEXT addr_info ",{"type":10,"tag":543,"props":8586,"children":8587},{"style":550},[8588],{"type":15,"value":881},{"type":10,"tag":543,"props":8590,"children":8591},{"style":562},[8592],{"type":15,"value":8593}," { VK_STRUCTURE_TYPE_DESCRIPTOR_ADDRESS_INFO_EXT };\n",{"type":10,"tag":543,"props":8595,"children":8597},{"class":545,"line":8596},169,[8598,8603,8607],{"type":10,"tag":543,"props":8599,"children":8600},{"style":562},[8601],{"type":15,"value":8602}," VkDescriptorGetInfoEXT info ",{"type":10,"tag":543,"props":8604,"children":8605},{"style":550},[8606],{"type":15,"value":881},{"type":10,"tag":543,"props":8608,"children":8609},{"style":562},[8610],{"type":15,"value":8611}," { VK_STRUCTURE_TYPE_DESCRIPTOR_GET_INFO_EXT };\n",{"type":10,"tag":543,"props":8613,"children":8615},{"class":545,"line":8614},170,[8616],{"type":10,"tag":543,"props":8617,"children":8618},{"emptyLinePlaceholder":634},[8619],{"type":15,"value":637},{"type":10,"tag":543,"props":8621,"children":8623},{"class":545,"line":8622},171,[8624,8629,8633,8637,8642,8646,8650,8655,8659,8663,8668,8672],{"type":10,"tag":543,"props":8625,"children":8626},{"style":550},[8627],{"type":15,"value":8628}," for",{"type":10,"tag":543,"props":8630,"children":8631},{"style":562},[8632],{"type":15,"value":8126},{"type":10,"tag":543,"props":8634,"children":8635},{"style":550},[8636],{"type":15,"value":8131},{"type":10,"tag":543,"props":8638,"children":8639},{"style":562},[8640],{"type":15,"value":8641}," j ",{"type":10,"tag":543,"props":8643,"children":8644},{"style":550},[8645],{"type":15,"value":881},{"type":10,"tag":543,"props":8647,"children":8648},{"style":889},[8649],{"type":15,"value":7574},{"type":10,"tag":543,"props":8651,"children":8652},{"style":562},[8653],{"type":15,"value":8654},"; j ",{"type":10,"tag":543,"props":8656,"children":8657},{"style":550},[8658],{"type":15,"value":8154},{"type":10,"tag":543,"props":8660,"children":8661},{"style":889},[8662],{"type":15,"value":6640},{"type":10,"tag":543,"props":8664,"children":8665},{"style":562},[8666],{"type":15,"value":8667},"; j",{"type":10,"tag":543,"props":8669,"children":8670},{"style":550},[8671],{"type":15,"value":8164},{"type":10,"tag":543,"props":8673,"children":8674},{"style":562},[8675],{"type":15,"value":2486},{"type":10,"tag":543,"props":8677,"children":8679},{"class":545,"line":8678},172,[8680],{"type":10,"tag":543,"props":8681,"children":8682},{"style":562},[8683],{"type":15,"value":5794},{"type":10,"tag":543,"props":8685,"children":8687},{"class":545,"line":8686},173,[8688,8693,8697],{"type":10,"tag":543,"props":8689,"children":8690},{"style":562},[8691],{"type":15,"value":8692}," info.type ",{"type":10,"tag":543,"props":8694,"children":8695},{"style":550},[8696],{"type":15,"value":881},{"type":10,"tag":543,"props":8698,"children":8699},{"style":562},[8700],{"type":15,"value":8701}," VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE;\n",{"type":10,"tag":543,"props":8703,"children":8705},{"class":545,"line":8704},174,[8706,8711,8715,8719],{"type":10,"tag":543,"props":8707,"children":8708},{"style":562},[8709],{"type":15,"value":8710}," info.pSampledImage ",{"type":10,"tag":543,"props":8712,"children":8713},{"style":550},[8714],{"type":15,"value":881},{"type":10,"tag":543,"props":8716,"children":8717},{"style":550},[8718],{"type":15,"value":7840},{"type":10,"tag":543,"props":8720,"children":8721},{"style":562},[8722],{"type":15,"value":8723},"image_info;\n",{"type":10,"tag":543,"props":8725,"children":8727},{"class":545,"line":8726},175,[8728],{"type":10,"tag":543,"props":8729,"children":8730},{"style":5729},[8731],{"type":15,"value":8732}," // If descriptorBufferImageLayoutIgnored is enabled, this is ignored, convenient!\n",{"type":10,"tag":543,"props":8734,"children":8736},{"class":545,"line":8735},176,[8737,8742,8746],{"type":10,"tag":543,"props":8738,"children":8739},{"style":562},[8740],{"type":15,"value":8741}," image_info.imageLayout ",{"type":10,"tag":543,"props":8743,"children":8744},{"style":550},[8745],{"type":15,"value":881},{"type":10,"tag":543,"props":8747,"children":8748},{"style":562},[8749],{"type":15,"value":8750}," VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL;\n",{"type":10,"tag":543,"props":8752,"children":8754},{"class":545,"line":8753},177,[8755],{"type":10,"tag":543,"props":8756,"children":8757},{"emptyLinePlaceholder":634},[8758],{"type":15,"value":637},{"type":10,"tag":543,"props":8760,"children":8762},{"class":545,"line":8761},178,[8763],{"type":10,"tag":543,"props":8764,"children":8765},{"style":5729},[8766],{"type":15,"value":8767}," // Offset is based on the binding offset + the offset within the descriptor set layout we queried earlier.\n",{"type":10,"tag":543,"props":8769,"children":8771},{"class":545,"line":8770},179,[8772],{"type":10,"tag":543,"props":8773,"children":8774},{"style":5729},[8775],{"type":15,"value":8776}," // For array indexing, use the descriptor size from physical device property.\n",{"type":10,"tag":543,"props":8778,"children":8780},{"class":545,"line":8779},180,[8781],{"type":10,"tag":543,"props":8782,"children":8783},{"style":5729},[8784],{"type":15,"value":8785}," // set j, binding 0, element k\n",{"type":10,"tag":543,"props":8787,"children":8789},{"class":545,"line":8788},181,[8790,8795,8799,8803,8808,8812,8816,8821,8825,8829,8834,8838],{"type":10,"tag":543,"props":8791,"children":8792},{"style":550},[8793],{"type":15,"value":8794}," for",{"type":10,"tag":543,"props":8796,"children":8797},{"style":562},[8798],{"type":15,"value":8126},{"type":10,"tag":543,"props":8800,"children":8801},{"style":550},[8802],{"type":15,"value":8131},{"type":10,"tag":543,"props":8804,"children":8805},{"style":562},[8806],{"type":15,"value":8807}," k ",{"type":10,"tag":543,"props":8809,"children":8810},{"style":550},[8811],{"type":15,"value":881},{"type":10,"tag":543,"props":8813,"children":8814},{"style":889},[8815],{"type":15,"value":7574},{"type":10,"tag":543,"props":8817,"children":8818},{"style":562},[8819],{"type":15,"value":8820},"; k ",{"type":10,"tag":543,"props":8822,"children":8823},{"style":550},[8824],{"type":15,"value":8154},{"type":10,"tag":543,"props":8826,"children":8827},{"style":889},[8828],{"type":15,"value":6640},{"type":10,"tag":543,"props":8830,"children":8831},{"style":562},[8832],{"type":15,"value":8833},"; k",{"type":10,"tag":543,"props":8835,"children":8836},{"style":550},[8837],{"type":15,"value":8164},{"type":10,"tag":543,"props":8839,"children":8840},{"style":562},[8841],{"type":15,"value":2486},{"type":10,"tag":543,"props":8843,"children":8845},{"class":545,"line":8844},182,[8846],{"type":10,"tag":543,"props":8847,"children":8848},{"style":562},[8849],{"type":15,"value":8850}," {\n",{"type":10,"tag":543,"props":8852,"children":8854},{"class":545,"line":8853},183,[8855,8860,8864,8869],{"type":10,"tag":543,"props":8856,"children":8857},{"style":562},[8858],{"type":15,"value":8859}," image_info.imageView ",{"type":10,"tag":543,"props":8861,"children":8862},{"style":550},[8863],{"type":15,"value":881},{"type":10,"tag":543,"props":8865,"children":8866},{"style":577},[8867],{"type":15,"value":8868}," views",{"type":10,"tag":543,"props":8870,"children":8871},{"style":562},[8872],{"type":15,"value":8873},"[i][j][k];\n",{"type":10,"tag":543,"props":8875,"children":8877},{"class":545,"line":8876},184,[8878,8883,8888,8892],{"type":10,"tag":543,"props":8879,"children":8880},{"style":556},[8881],{"type":15,"value":8882}," vkGetDescriptorEXT",{"type":10,"tag":543,"props":8884,"children":8885},{"style":562},[8886],{"type":15,"value":8887},"(device, ",{"type":10,"tag":543,"props":8889,"children":8890},{"style":550},[8891],{"type":15,"value":6981},{"type":10,"tag":543,"props":8893,"children":8894},{"style":562},[8895],{"type":15,"value":8896},"info, props.sampledImageDescriptorSize,\n",{"type":10,"tag":543,"props":8898,"children":8900},{"class":545,"line":8899},185,[8901,8906,8910,8915,8920,8924,8929,8933,8937,8941,8945,8949,8953,8957,8961],{"type":10,"tag":543,"props":8902,"children":8903},{"style":562},[8904],{"type":15,"value":8905}," resourceBuffer.hostPointer ",{"type":10,"tag":543,"props":8907,"children":8908},{"style":550},[8909],{"type":15,"value":8326},{"type":10,"tag":543,"props":8911,"children":8912},{"style":577},[8913],{"type":15,"value":8914}," offsets",{"type":10,"tag":543,"props":8916,"children":8917},{"style":562},[8918],{"type":15,"value":8919},"[j] ",{"type":10,"tag":543,"props":8921,"children":8922},{"style":550},[8923],{"type":15,"value":8326},{"type":10,"tag":543,"props":8925,"children":8926},{"style":577},[8927],{"type":15,"value":8928}," layoutOffsets",{"type":10,"tag":543,"props":8930,"children":8931},{"style":562},[8932],{"type":15,"value":5716},{"type":10,"tag":543,"props":8934,"children":8935},{"style":889},[8936],{"type":15,"value":6085},{"type":10,"tag":543,"props":8938,"children":8939},{"style":562},[8940],{"type":15,"value":7191},{"type":10,"tag":543,"props":8942,"children":8943},{"style":889},[8944],{"type":15,"value":6085},{"type":10,"tag":543,"props":8946,"children":8947},{"style":562},[8948],{"type":15,"value":7069},{"type":10,"tag":543,"props":8950,"children":8951},{"style":550},[8952],{"type":15,"value":8326},{"type":10,"tag":543,"props":8954,"children":8955},{"style":562},[8956],{"type":15,"value":8807},{"type":10,"tag":543,"props":8958,"children":8959},{"style":550},[8960],{"type":15,"value":617},{"type":10,"tag":543,"props":8962,"children":8963},{"style":562},[8964],{"type":15,"value":8965}," props.sampledImageDescriptorSize);\n",{"type":10,"tag":543,"props":8967,"children":8969},{"class":545,"line":8968},186,[8970],{"type":10,"tag":543,"props":8971,"children":8972},{"style":562},[8973],{"type":15,"value":8974}," }\n",{"type":10,"tag":543,"props":8976,"children":8978},{"class":545,"line":8977},187,[8979],{"type":10,"tag":543,"props":8980,"children":8981},{"emptyLinePlaceholder":634},[8982],{"type":15,"value":637},{"type":10,"tag":543,"props":8984,"children":8986},{"class":545,"line":8985},188,[8987],{"type":10,"tag":543,"props":8988,"children":8989},{"style":5729},[8990],{"type":15,"value":8991}," // set j, binding 1, element k\n",{"type":10,"tag":543,"props":8993,"children":8995},{"class":545,"line":8994},189,[8996,9000,9004],{"type":10,"tag":543,"props":8997,"children":8998},{"style":562},[8999],{"type":15,"value":8692},{"type":10,"tag":543,"props":9001,"children":9002},{"style":550},[9003],{"type":15,"value":881},{"type":10,"tag":543,"props":9005,"children":9006},{"style":562},[9007],{"type":15,"value":9008}," VK_DESCRIPTOR_TYPE_UNIFORM_TEXEL_BUFFER;\n",{"type":10,"tag":543,"props":9010,"children":9012},{"class":545,"line":9011},190,[9013,9018,9022,9026],{"type":10,"tag":543,"props":9014,"children":9015},{"style":562},[9016],{"type":15,"value":9017}," info.data.pUniformBuffer ",{"type":10,"tag":543,"props":9019,"children":9020},{"style":550},[9021],{"type":15,"value":881},{"type":10,"tag":543,"props":9023,"children":9024},{"style":550},[9025],{"type":15,"value":7840},{"type":10,"tag":543,"props":9027,"children":9028},{"style":562},[9029],{"type":15,"value":9030},"addr_info;\n",{"type":10,"tag":543,"props":9032,"children":9034},{"class":545,"line":9033},191,[9035,9039,9043,9047,9051,9055,9059,9063,9067,9071,9075,9079],{"type":10,"tag":543,"props":9036,"children":9037},{"style":550},[9038],{"type":15,"value":8794},{"type":10,"tag":543,"props":9040,"children":9041},{"style":562},[9042],{"type":15,"value":8126},{"type":10,"tag":543,"props":9044,"children":9045},{"style":550},[9046],{"type":15,"value":8131},{"type":10,"tag":543,"props":9048,"children":9049},{"style":562},[9050],{"type":15,"value":8807},{"type":10,"tag":543,"props":9052,"children":9053},{"style":550},[9054],{"type":15,"value":881},{"type":10,"tag":543,"props":9056,"children":9057},{"style":889},[9058],{"type":15,"value":7574},{"type":10,"tag":543,"props":9060,"children":9061},{"style":562},[9062],{"type":15,"value":8820},{"type":10,"tag":543,"props":9064,"children":9065},{"style":550},[9066],{"type":15,"value":8154},{"type":10,"tag":543,"props":9068,"children":9069},{"style":889},[9070],{"type":15,"value":6640},{"type":10,"tag":543,"props":9072,"children":9073},{"style":562},[9074],{"type":15,"value":8833},{"type":10,"tag":543,"props":9076,"children":9077},{"style":550},[9078],{"type":15,"value":8164},{"type":10,"tag":543,"props":9080,"children":9081},{"style":562},[9082],{"type":15,"value":2486},{"type":10,"tag":543,"props":9084,"children":9086},{"class":545,"line":9085},192,[9087],{"type":10,"tag":543,"props":9088,"children":9089},{"style":562},[9090],{"type":15,"value":8850},{"type":10,"tag":543,"props":9092,"children":9094},{"class":545,"line":9093},193,[9095,9100,9104,9109],{"type":10,"tag":543,"props":9096,"children":9097},{"style":562},[9098],{"type":15,"value":9099}," addr_info.range ",{"type":10,"tag":543,"props":9101,"children":9102},{"style":550},[9103],{"type":15,"value":881},{"type":10,"tag":543,"props":9105,"children":9106},{"style":889},[9107],{"type":15,"value":9108}," 1024",{"type":10,"tag":543,"props":9110,"children":9111},{"style":562},[9112],{"type":15,"value":9113},";\n",{"type":10,"tag":543,"props":9115,"children":9117},{"class":545,"line":9116},194,[9118,9123,9127,9132,9136,9140,9144,9148,9152,9156,9160,9164,9168,9172,9177,9181],{"type":10,"tag":543,"props":9119,"children":9120},{"style":562},[9121],{"type":15,"value":9122}," addr_info.address ",{"type":10,"tag":543,"props":9124,"children":9125},{"style":550},[9126],{"type":15,"value":881},{"type":10,"tag":543,"props":9128,"children":9129},{"style":562},[9130],{"type":15,"value":9131}," bufferAddressTexelBuffer ",{"type":10,"tag":543,"props":9133,"children":9134},{"style":550},[9135],{"type":15,"value":8326},{"type":10,"tag":543,"props":9137,"children":9138},{"style":562},[9139],{"type":15,"value":8126},{"type":10,"tag":543,"props":9141,"children":9142},{"style":889},[9143],{"type":15,"value":5721},{"type":10,"tag":543,"props":9145,"children":9146},{"style":550},[9147],{"type":15,"value":7528},{"type":10,"tag":543,"props":9149,"children":9150},{"style":562},[9151],{"type":15,"value":8136},{"type":10,"tag":543,"props":9153,"children":9154},{"style":550},[9155],{"type":15,"value":8326},{"type":10,"tag":543,"props":9157,"children":9158},{"style":889},[9159],{"type":15,"value":6640},{"type":10,"tag":543,"props":9161,"children":9162},{"style":550},[9163],{"type":15,"value":7528},{"type":10,"tag":543,"props":9165,"children":9166},{"style":562},[9167],{"type":15,"value":8641},{"type":10,"tag":543,"props":9169,"children":9170},{"style":550},[9171],{"type":15,"value":8326},{"type":10,"tag":543,"props":9173,"children":9174},{"style":562},[9175],{"type":15,"value":9176}," k) ",{"type":10,"tag":543,"props":9178,"children":9179},{"style":550},[9180],{"type":15,"value":617},{"type":10,"tag":543,"props":9182,"children":9183},{"style":562},[9184],{"type":15,"value":9185}," addr_info.range;\n",{"type":10,"tag":543,"props":9187,"children":9189},{"class":545,"line":9188},195,[9190],{"type":10,"tag":543,"props":9191,"children":9192},{"style":5729},[9193],{"type":15,"value":9194}," // No VkBufferView needed, how convenient!\n",{"type":10,"tag":543,"props":9196,"children":9198},{"class":545,"line":9197},196,[9199,9204,9208],{"type":10,"tag":543,"props":9200,"children":9201},{"style":562},[9202],{"type":15,"value":9203}," addr_info.format ",{"type":10,"tag":543,"props":9205,"children":9206},{"style":550},[9207],{"type":15,"value":881},{"type":10,"tag":543,"props":9209,"children":9210},{"style":562},[9211],{"type":15,"value":9212}," VK_FORMAT_R8G8B8A8_UNORM;\n",{"type":10,"tag":543,"props":9214,"children":9216},{"class":545,"line":9215},197,[9217,9221,9225,9229],{"type":10,"tag":543,"props":9218,"children":9219},{"style":556},[9220],{"type":15,"value":8882},{"type":10,"tag":543,"props":9222,"children":9223},{"style":562},[9224],{"type":15,"value":8887},{"type":10,"tag":543,"props":9226,"children":9227},{"style":550},[9228],{"type":15,"value":6981},{"type":10,"tag":543,"props":9230,"children":9231},{"style":562},[9232],{"type":15,"value":9233},"info, props.uniformTexelBufferDescriptorSize,\n",{"type":10,"tag":543,"props":9235,"children":9237},{"class":545,"line":9236},198,[9238,9242,9246,9250,9254,9258,9262,9266,9270,9274,9278,9282,9286,9290,9294],{"type":10,"tag":543,"props":9239,"children":9240},{"style":562},[9241],{"type":15,"value":8905},{"type":10,"tag":543,"props":9243,"children":9244},{"style":550},[9245],{"type":15,"value":8326},{"type":10,"tag":543,"props":9247,"children":9248},{"style":577},[9249],{"type":15,"value":8914},{"type":10,"tag":543,"props":9251,"children":9252},{"style":562},[9253],{"type":15,"value":8919},{"type":10,"tag":543,"props":9255,"children":9256},{"style":550},[9257],{"type":15,"value":8326},{"type":10,"tag":543,"props":9259,"children":9260},{"style":577},[9261],{"type":15,"value":8928},{"type":10,"tag":543,"props":9263,"children":9264},{"style":562},[9265],{"type":15,"value":5716},{"type":10,"tag":543,"props":9267,"children":9268},{"style":889},[9269],{"type":15,"value":6085},{"type":10,"tag":543,"props":9271,"children":9272},{"style":562},[9273],{"type":15,"value":7191},{"type":10,"tag":543,"props":9275,"children":9276},{"style":889},[9277],{"type":15,"value":1649},{"type":10,"tag":543,"props":9279,"children":9280},{"style":562},[9281],{"type":15,"value":7069},{"type":10,"tag":543,"props":9283,"children":9284},{"style":550},[9285],{"type":15,"value":8326},{"type":10,"tag":543,"props":9287,"children":9288},{"style":562},[9289],{"type":15,"value":8807},{"type":10,"tag":543,"props":9291,"children":9292},{"style":550},[9293],{"type":15,"value":617},{"type":10,"tag":543,"props":9295,"children":9296},{"style":562},[9297],{"type":15,"value":9298}," props.uniformTexelBufferDescriptorSize);\n",{"type":10,"tag":543,"props":9300,"children":9302},{"class":545,"line":9301},199,[9303],{"type":10,"tag":543,"props":9304,"children":9305},{"style":562},[9306],{"type":15,"value":8974},{"type":10,"tag":543,"props":9308,"children":9310},{"class":545,"line":9309},200,[9311],{"type":10,"tag":543,"props":9312,"children":9313},{"style":562},[9314],{"type":15,"value":5961},{"type":10,"tag":543,"props":9316,"children":9318},{"class":545,"line":9317},201,[9319],{"type":10,"tag":543,"props":9320,"children":9321},{"emptyLinePlaceholder":634},[9322],{"type":15,"value":637},{"type":10,"tag":543,"props":9324,"children":9326},{"class":545,"line":9325},202,[9327],{"type":10,"tag":543,"props":9328,"children":9329},{"style":5729},[9330],{"type":15,"value":9331}," // For immutable samplers, we have to emit the buffer payload.\n",{"type":10,"tag":543,"props":9333,"children":9335},{"class":545,"line":9334},203,[9336],{"type":10,"tag":543,"props":9337,"children":9338},{"style":5729},[9339],{"type":15,"value":9340}," // In practice, the immutable samplers must work even if implementation just ignores pImmutableSamplers.\n",{"type":10,"tag":543,"props":9342,"children":9344},{"class":545,"line":9343},204,[9345,9350,9354],{"type":10,"tag":543,"props":9346,"children":9347},{"style":562},[9348],{"type":15,"value":9349}," info.type ",{"type":10,"tag":543,"props":9351,"children":9352},{"style":550},[9353],{"type":15,"value":881},{"type":10,"tag":543,"props":9355,"children":9356},{"style":562},[9357],{"type":15,"value":9358}," VK_DESCRIPTOR_TYPE_SAMPLER;\n",{"type":10,"tag":543,"props":9360,"children":9362},{"class":545,"line":9361},205,[9363],{"type":10,"tag":543,"props":9364,"children":9365},{"style":5729},[9366],{"type":15,"value":9367}," // set 2, binding 0, element k\n",{"type":10,"tag":543,"props":9369,"children":9371},{"class":545,"line":9370},206,[9372,9376,9380,9384,9388,9392,9396,9400,9404,9408,9412,9416],{"type":10,"tag":543,"props":9373,"children":9374},{"style":550},[9375],{"type":15,"value":8628},{"type":10,"tag":543,"props":9377,"children":9378},{"style":562},[9379],{"type":15,"value":8126},{"type":10,"tag":543,"props":9381,"children":9382},{"style":550},[9383],{"type":15,"value":8131},{"type":10,"tag":543,"props":9385,"children":9386},{"style":562},[9387],{"type":15,"value":8807},{"type":10,"tag":543,"props":9389,"children":9390},{"style":550},[9391],{"type":15,"value":881},{"type":10,"tag":543,"props":9393,"children":9394},{"style":889},[9395],{"type":15,"value":7574},{"type":10,"tag":543,"props":9397,"children":9398},{"style":562},[9399],{"type":15,"value":8820},{"type":10,"tag":543,"props":9401,"children":9402},{"style":550},[9403],{"type":15,"value":8154},{"type":10,"tag":543,"props":9405,"children":9406},{"style":889},[9407],{"type":15,"value":6640},{"type":10,"tag":543,"props":9409,"children":9410},{"style":562},[9411],{"type":15,"value":8833},{"type":10,"tag":543,"props":9413,"children":9414},{"style":550},[9415],{"type":15,"value":8164},{"type":10,"tag":543,"props":9417,"children":9418},{"style":562},[9419],{"type":15,"value":2486},{"type":10,"tag":543,"props":9421,"children":9423},{"class":545,"line":9422},207,[9424],{"type":10,"tag":543,"props":9425,"children":9426},{"style":562},[9427],{"type":15,"value":5794},{"type":10,"tag":543,"props":9429,"children":9431},{"class":545,"line":9430},208,[9432,9437,9441,9445,9449],{"type":10,"tag":543,"props":9433,"children":9434},{"style":562},[9435],{"type":15,"value":9436}," info.data.pSampler ",{"type":10,"tag":543,"props":9438,"children":9439},{"style":550},[9440],{"type":15,"value":881},{"type":10,"tag":543,"props":9442,"children":9443},{"style":550},[9444],{"type":15,"value":7840},{"type":10,"tag":543,"props":9446,"children":9447},{"style":577},[9448],{"type":15,"value":5711},{"type":10,"tag":543,"props":9450,"children":9451},{"style":562},[9452],{"type":15,"value":9453},"[k];\n",{"type":10,"tag":543,"props":9455,"children":9457},{"class":545,"line":9456},209,[9458,9463,9467,9471],{"type":10,"tag":543,"props":9459,"children":9460},{"style":556},[9461],{"type":15,"value":9462}," vkGetDescriptorEXT",{"type":10,"tag":543,"props":9464,"children":9465},{"style":562},[9466],{"type":15,"value":8887},{"type":10,"tag":543,"props":9468,"children":9469},{"style":550},[9470],{"type":15,"value":6981},{"type":10,"tag":543,"props":9472,"children":9473},{"style":562},[9474],{"type":15,"value":9475},"info, props.samplerDescriptorSize,\n",{"type":10,"tag":543,"props":9477,"children":9479},{"class":545,"line":9478},210,[9480,9485,9489,9493,9497,9501,9505,9509,9513,9517,9521,9525,9529,9533,9537,9541,9545],{"type":10,"tag":543,"props":9481,"children":9482},{"style":562},[9483],{"type":15,"value":9484}," samplerBuffer.hostPointer ",{"type":10,"tag":543,"props":9486,"children":9487},{"style":550},[9488],{"type":15,"value":8326},{"type":10,"tag":543,"props":9490,"children":9491},{"style":577},[9492],{"type":15,"value":8914},{"type":10,"tag":543,"props":9494,"children":9495},{"style":562},[9496],{"type":15,"value":5716},{"type":10,"tag":543,"props":9498,"children":9499},{"style":889},[9500],{"type":15,"value":6442},{"type":10,"tag":543,"props":9502,"children":9503},{"style":562},[9504],{"type":15,"value":7069},{"type":10,"tag":543,"props":9506,"children":9507},{"style":550},[9508],{"type":15,"value":8326},{"type":10,"tag":543,"props":9510,"children":9511},{"style":577},[9512],{"type":15,"value":8928},{"type":10,"tag":543,"props":9514,"children":9515},{"style":562},[9516],{"type":15,"value":5716},{"type":10,"tag":543,"props":9518,"children":9519},{"style":889},[9520],{"type":15,"value":1649},{"type":10,"tag":543,"props":9522,"children":9523},{"style":562},[9524],{"type":15,"value":7191},{"type":10,"tag":543,"props":9526,"children":9527},{"style":889},[9528],{"type":15,"value":6085},{"type":10,"tag":543,"props":9530,"children":9531},{"style":562},[9532],{"type":15,"value":7069},{"type":10,"tag":543,"props":9534,"children":9535},{"style":550},[9536],{"type":15,"value":8326},{"type":10,"tag":543,"props":9538,"children":9539},{"style":562},[9540],{"type":15,"value":8807},{"type":10,"tag":543,"props":9542,"children":9543},{"style":550},[9544],{"type":15,"value":617},{"type":10,"tag":543,"props":9546,"children":9547},{"style":562},[9548],{"type":15,"value":9549}," props.samplerDescriptorSize);\n",{"type":10,"tag":543,"props":9551,"children":9553},{"class":545,"line":9552},211,[9554],{"type":10,"tag":543,"props":9555,"children":9556},{"style":562},[9557],{"type":15,"value":5961},{"type":10,"tag":543,"props":9559,"children":9561},{"class":545,"line":9560},212,[9562],{"type":10,"tag":543,"props":9563,"children":9564},{"emptyLinePlaceholder":634},[9565],{"type":15,"value":637},{"type":10,"tag":543,"props":9567,"children":9569},{"class":545,"line":9568},213,[9570],{"type":10,"tag":543,"props":9571,"children":9572},{"style":5729},[9573],{"type":15,"value":9574}," // set 2, binding 1, element k\n",{"type":10,"tag":543,"props":9576,"children":9578},{"class":545,"line":9577},214,[9579,9583,9587,9591,9595,9599,9603,9607,9611,9615,9619,9623],{"type":10,"tag":543,"props":9580,"children":9581},{"style":550},[9582],{"type":15,"value":8628},{"type":10,"tag":543,"props":9584,"children":9585},{"style":562},[9586],{"type":15,"value":8126},{"type":10,"tag":543,"props":9588,"children":9589},{"style":550},[9590],{"type":15,"value":8131},{"type":10,"tag":543,"props":9592,"children":9593},{"style":562},[9594],{"type":15,"value":8807},{"type":10,"tag":543,"props":9596,"children":9597},{"style":550},[9598],{"type":15,"value":881},{"type":10,"tag":543,"props":9600,"children":9601},{"style":889},[9602],{"type":15,"value":7574},{"type":10,"tag":543,"props":9604,"children":9605},{"style":562},[9606],{"type":15,"value":8820},{"type":10,"tag":543,"props":9608,"children":9609},{"style":550},[9610],{"type":15,"value":8154},{"type":10,"tag":543,"props":9612,"children":9613},{"style":889},[9614],{"type":15,"value":6640},{"type":10,"tag":543,"props":9616,"children":9617},{"style":562},[9618],{"type":15,"value":8833},{"type":10,"tag":543,"props":9620,"children":9621},{"style":550},[9622],{"type":15,"value":8164},{"type":10,"tag":543,"props":9624,"children":9625},{"style":562},[9626],{"type":15,"value":2486},{"type":10,"tag":543,"props":9628,"children":9630},{"class":545,"line":9629},215,[9631],{"type":10,"tag":543,"props":9632,"children":9633},{"style":562},[9634],{"type":15,"value":5794},{"type":10,"tag":543,"props":9636,"children":9638},{"class":545,"line":9637},216,[9639,9643,9647,9651,9655],{"type":10,"tag":543,"props":9640,"children":9641},{"style":562},[9642],{"type":15,"value":9436},{"type":10,"tag":543,"props":9644,"children":9645},{"style":550},[9646],{"type":15,"value":881},{"type":10,"tag":543,"props":9648,"children":9649},{"style":550},[9650],{"type":15,"value":7840},{"type":10,"tag":543,"props":9652,"children":9653},{"style":577},[9654],{"type":15,"value":8036},{"type":10,"tag":543,"props":9656,"children":9657},{"style":562},[9658],{"type":15,"value":9659},"[i][k];\n",{"type":10,"tag":543,"props":9661,"children":9663},{"class":545,"line":9662},217,[9664,9668,9672,9676],{"type":10,"tag":543,"props":9665,"children":9666},{"style":556},[9667],{"type":15,"value":9462},{"type":10,"tag":543,"props":9669,"children":9670},{"style":562},[9671],{"type":15,"value":8887},{"type":10,"tag":543,"props":9673,"children":9674},{"style":550},[9675],{"type":15,"value":6981},{"type":10,"tag":543,"props":9677,"children":9678},{"style":562},[9679],{"type":15,"value":9475},{"type":10,"tag":543,"props":9681,"children":9683},{"class":545,"line":9682},218,[9684,9688,9692,9696,9700,9704,9708,9712,9716,9720,9724,9728,9732,9736,9740,9744,9748],{"type":10,"tag":543,"props":9685,"children":9686},{"style":562},[9687],{"type":15,"value":9484},{"type":10,"tag":543,"props":9689,"children":9690},{"style":550},[9691],{"type":15,"value":8326},{"type":10,"tag":543,"props":9693,"children":9694},{"style":577},[9695],{"type":15,"value":8914},{"type":10,"tag":543,"props":9697,"children":9698},{"style":562},[9699],{"type":15,"value":5716},{"type":10,"tag":543,"props":9701,"children":9702},{"style":889},[9703],{"type":15,"value":6442},{"type":10,"tag":543,"props":9705,"children":9706},{"style":562},[9707],{"type":15,"value":7069},{"type":10,"tag":543,"props":9709,"children":9710},{"style":550},[9711],{"type":15,"value":8326},{"type":10,"tag":543,"props":9713,"children":9714},{"style":577},[9715],{"type":15,"value":8928},{"type":10,"tag":543,"props":9717,"children":9718},{"style":562},[9719],{"type":15,"value":5716},{"type":10,"tag":543,"props":9721,"children":9722},{"style":889},[9723],{"type":15,"value":1649},{"type":10,"tag":543,"props":9725,"children":9726},{"style":562},[9727],{"type":15,"value":7191},{"type":10,"tag":543,"props":9729,"children":9730},{"style":889},[9731],{"type":15,"value":1649},{"type":10,"tag":543,"props":9733,"children":9734},{"style":562},[9735],{"type":15,"value":7069},{"type":10,"tag":543,"props":9737,"children":9738},{"style":550},[9739],{"type":15,"value":8326},{"type":10,"tag":543,"props":9741,"children":9742},{"style":562},[9743],{"type":15,"value":8807},{"type":10,"tag":543,"props":9745,"children":9746},{"style":550},[9747],{"type":15,"value":617},{"type":10,"tag":543,"props":9749,"children":9750},{"style":562},[9751],{"type":15,"value":9549},{"type":10,"tag":543,"props":9753,"children":9755},{"class":545,"line":9754},219,[9756],{"type":10,"tag":543,"props":9757,"children":9758},{"style":562},[9759],{"type":15,"value":5961},{"type":10,"tag":543,"props":9761,"children":9763},{"class":545,"line":9762},220,[9764],{"type":10,"tag":543,"props":9765,"children":9766},{"emptyLinePlaceholder":634},[9767],{"type":15,"value":637},{"type":10,"tag":543,"props":9769,"children":9771},{"class":545,"line":9770},221,[9772,9777],{"type":10,"tag":543,"props":9773,"children":9774},{"style":556},[9775],{"type":15,"value":9776}," vkCmdDraw",{"type":10,"tag":543,"props":9778,"children":9779},{"style":562},[9780],{"type":15,"value":9781},"(...);\n",{"type":10,"tag":543,"props":9783,"children":9785},{"class":545,"line":9784},222,[9786],{"type":10,"tag":543,"props":9787,"children":9788},{"style":562},[9789],{"type":15,"value":9790},"}\n",{"type":10,"tag":17,"props":9792,"children":9794},{"id":9793},"_issues",[9795],{"type":15,"value":9796},"Issues",{"type":10,"tag":228,"props":9798,"children":9800},{"id":9799},"_resolved_how_do_immutable_samplers_work",[9801],{"type":15,"value":9802},"RESOLVED: How do immutable samplers work?",{"type":10,"tag":11,"props":9804,"children":9805},{},[9806],{"type":15,"value":9807},"There may be cases where a driver needs immutable samplers stored as part of the descriptor, rather than solely existing as a part of the pipeline.\nWith descriptor sets, this could be hidden from the application as the driver controlled how writes were performed – not so with this API.\nTo fix this, samplers must be used to populate these descriptor bindings as if they were not immutable, and they must have been created with identical parameters.",{"type":10,"tag":11,"props":9809,"children":9810},{},[9811],{"type":15,"value":9812},"For partity with DX12, a special kind of descriptor set - embedded immutable samplers - are supported as an alternative which follow DX12 restrictions.",{"type":10,"tag":228,"props":9814,"children":9816},{"id":9815},"_resolved_should_we_support_dynamic_buffers",[9817],{"type":15,"value":9818},"RESOLVED: Should we support dynamic buffers?",{"type":10,"tag":11,"props":9820,"children":9821},{},[9822],{"type":15,"value":9823},"No, these have very specialized support paths in some drivers, and end up being more pain than it’s worth to support.\nApplications can achieve the same using device addresses in push constants, or pipelined descriptor buffer updates.",{"type":10,"tag":228,"props":9825,"children":9827},{"id":9826},"_unresolved_how_does_this_interact_with_descriptor_set_invalidation",[9828],{"type":15,"value":9829},"UNRESOLVED: How does this interact with descriptor set invalidation?",{"type":10,"tag":11,"props":9831,"children":9832},{},[9833,9835,9840],{"type":15,"value":9834},"There’s some extra complication with whether descriptor set layouts work with buffers or sets (",{"type":10,"tag":42,"props":9836,"children":9838},{"className":9837},[],[9839],{"type":15,"value":2796},{"type":15,"value":9841},") that will need sorting.\nShouldn’t be too difficult and will likely just be along the lines of invalidating sets that don’t match in this regard when binding a new pipeline layout, but it’s too much detail for this design document.",{"type":10,"tag":228,"props":9843,"children":9845},{"id":9844},"_resolved_should_vkgetdescriptoroffset_take_an_arrayoffset_parameter_or_should_we_make_guarantees_about_how_arrays_work",[9846,9848,9854,9856,9862],{"type":15,"value":9847},"RESOLVED: Should ",{"type":10,"tag":42,"props":9849,"children":9851},{"className":9850},[],[9852],{"type":15,"value":9853},"vkGetDescriptorOffset",{"type":15,"value":9855}," take an ",{"type":10,"tag":42,"props":9857,"children":9859},{"className":9858},[],[9860],{"type":15,"value":9861},"arrayOffset",{"type":15,"value":9863}," parameter, or should we make guarantees about how arrays work?",{"type":10,"tag":11,"props":9865,"children":9866},{},[9867],{"type":15,"value":9868},"Guarantees about how arrays work makes it much easier to work with GPU-side updates, as it avoids having to either add a “get offset” shader intrinsic, or for apps to keep a mapping when doing GPU copies.",{"type":10,"tag":228,"props":9870,"children":9872},{"id":9871},"_resolved_now_that_descriptors_are_in_regular_memory_should_there_be_a_limit_on_the_size_of_inline_uniforms",[9873],{"type":15,"value":9874},"RESOLVED: Now that descriptors are in regular memory, should there be a limit on the size of “inline uniforms”?",{"type":10,"tag":11,"props":9876,"children":9877},{},[9878],{"type":15,"value":9879},"We should allow developers to put as many constants into descriptor buffers as they want, thus removing the limit, at least when it interacts with this extension.\nThis is likely to remove an indirection compared to putting these in a uniform buffer.\nPotentially we might want to at least have it match the uniform buffer limit rather than being independent.",{"type":10,"tag":228,"props":9881,"children":9883},{"id":9882},"_resolved_why_are_view_objects_required_when_dx12_has_no_such_requirement",[9884],{"type":15,"value":9885},"RESOLVED: Why are view objects required when DX12 has no such requirement?",{"type":10,"tag":11,"props":9887,"children":9888},{},[9889],{"type":15,"value":9890},"DX12 has dedicated heap objects which allow implementations to hide a lot of implementation detail behind them; without them, some vendors rely on view objects to store metadata.\nIntroducing heaps to Vulkan as-is was too complex alongside the other changes in this extension, when the primary goal is to enable explicit memory management, rather than precise DX12 compatibility.\nIf this turns out to be a significant problem, a future extension could be developed to bridge this gap.",{"type":10,"tag":228,"props":9892,"children":9894},{"id":9893},"_resolved_should_vkgetdescriptorext_vkgetdescriptorsetlayoutbindingoffsetext_be_arrayed",[9895,9896,9901,9903,9908],{"type":15,"value":9847},{"type":10,"tag":42,"props":9897,"children":9899},{"className":9898},[],[9900],{"type":15,"value":5645},{"type":15,"value":9902}," / ",{"type":10,"tag":42,"props":9904,"children":9906},{"className":9905},[],[9907],{"type":15,"value":1449},{"type":15,"value":9909}," be arrayed?",{"type":10,"tag":11,"props":9911,"children":9912},{},[9913],{"type":15,"value":9914},"No – there is no reason why pulling this loop into the driver should provide any benefit.",{"type":10,"tag":228,"props":9916,"children":9918},{"id":9917},"_resolved_should_we_support_combined_imagesampler_descriptors_with_this_extension",[9919],{"type":15,"value":9920},"RESOLVED: Should we support combined image/sampler descriptors with this extension?",{"type":10,"tag":11,"props":9922,"children":9923},{},[9924,9926,9931],{"type":15,"value":9925},"While some consider these deprecated, removing them would prevent some applications being able to port to this extension.\nAdditionally, YCbCr support currently ",{"type":10,"tag":34,"props":9927,"children":9928},{},[9929],{"type":15,"value":9930},"relies",{"type":15,"value":9932}," on this descriptor type, which is required on some platforms.\nIt might be possible to remove that requirement in the YCbCr feature, but it is a lot of work for a fairly low payoff.",{"type":10,"tag":228,"props":9934,"children":9936},{"id":9935},"_resolved_how_does_this_interact_with_variable_descriptor_count",[9937],{"type":15,"value":9938},"RESOLVED: How does this interact with variable descriptor count?",{"type":10,"tag":11,"props":9940,"children":9941},{},[9942,9944,9950,9952,9957,9958,9963,9965,9970],{"type":15,"value":9943},"The variable flag is allowed; ",{"type":10,"tag":42,"props":9945,"children":9947},{"className":9946},[],[9948],{"type":15,"value":9949},"vkGetDescriptorSetLayoutSize",{"type":15,"value":9951}," returns a size assuming the maximum size will be used - but developers are free to use the set with a buffer sized for a smaller number of descriptors. The exception to this is when ",{"type":10,"tag":42,"props":9953,"children":9955},{"className":9954},[],[9956],{"type":15,"value":1536},{"type":15,"value":2679},{"type":10,"tag":42,"props":9959,"children":9961},{"className":9960},[],[9962],{"type":15,"value":1552},{"type":15,"value":9964}," and the binding contains ",{"type":10,"tag":42,"props":9966,"children":9968},{"className":9967},[],[9969],{"type":15,"value":1544},{"type":15,"value":9971}," descriptors; in this case the image and sampler descriptors are still arranged in the descriptor buffer as though the maximum number of descriptors are used, and so the buffer must be sized accordingly.",{"type":10,"tag":228,"props":9973,"children":9975},{"id":9974},"_resolved_should_we_require_descriptors_to_be_retrieved_for_null_handle_or_is_memset0_sufficient",[9976,9978,9984,9986,9992],{"type":15,"value":9977},"RESOLVED: Should we require descriptors to be retrieved for ",{"type":10,"tag":42,"props":9979,"children":9981},{"className":9980},[],[9982],{"type":15,"value":9983},"NULL_HANDLE",{"type":15,"value":9985}," or is ",{"type":10,"tag":42,"props":9987,"children":9989},{"className":9988},[],[9990],{"type":15,"value":9991},"memset(0)",{"type":15,"value":9993}," sufficient?",{"type":10,"tag":11,"props":9995,"children":9996},{},[9997,9999,10005,10006,10011,10013,10018],{"type":15,"value":9998},"Some vendors use non-zero values for null descriptors, so applications can retrieve these using ",{"type":10,"tag":42,"props":10000,"children":10002},{"className":10001},[],[10003],{"type":15,"value":10004},"VK_NULL_HANDLE",{"type":15,"value":192},{"type":10,"tag":42,"props":10007,"children":10009},{"className":10008},[],[10010],{"type":15,"value":5645},{"type":15,"value":10012},".\nFor descriptor types which take buffer devices addresses, a ",{"type":10,"tag":42,"props":10014,"children":10016},{"className":10015},[],[10017],{"type":15,"value":6085},{"type":15,"value":10019}," address is used instead.",{"type":10,"tag":228,"props":10021,"children":10023},{"id":10022},"_resolved_how_can_ycbcr_descriptors_be_obtained",[10024],{"type":15,"value":10025},"RESOLVED: How can YCbCr descriptors be obtained?",{"type":10,"tag":11,"props":10027,"children":10028},{},[10029,10031,10037,10039,10044],{"type":15,"value":10030},"YCbCr descriptors can have multiple descriptors associated with them; applications must allow for this space.\n",{"type":10,"tag":42,"props":10032,"children":10034},{"className":10033},[],[10035],{"type":15,"value":10036},"VkSamplerYcbcrConversionImageFormatProperties::combinedImageSamplerDescriptorCount",{"type":15,"value":10038}," determines how many descriptors each image format requires.\nWhen calling ",{"type":10,"tag":42,"props":10040,"children":10042},{"className":10041},[],[10043],{"type":15,"value":5645},{"type":15,"value":10045}," for a YCbCr combined descriptor, applications must provide a pointer to enough memory for this many combined sampled image descriptors, and factor this in when copying descriptors.",{"type":10,"tag":228,"props":10047,"children":10049},{"id":10048},"_resolved_how_should_we_expect_capturereplay_tooling_e_g_renderdocvktrace_to_use_this",[10050],{"type":15,"value":10051},"RESOLVED: How should we expect capture/replay tooling (e.g. RenderDoc/vktrace) to use this?",{"type":10,"tag":11,"props":10053,"children":10054},{},[10055],{"type":15,"value":10056},"A capture replay bit on image/buffer creation will be added to enable descriptors to be reused between runs. This allows capture tools to capture the buffer data as bound, and replay with the same descriptors, rather than attempting to do a mapping.\nSome sort of GPU feedback is still desirable on capture to determine which handles are accessed, but this will be similar to the situation with descriptor indexing.",{"type":10,"tag":228,"props":10058,"children":10060},{"id":10059},"_resolved_on_some_platforms_descriptor_sets_occupy_a_4gb_range_allowing_the_set_pointer_to_be_32_bit_rather_than_64_bit_how_can_this_be_guaranteed_for_descriptor_buffers",[10061],{"type":15,"value":10062},"RESOLVED: On some platforms, descriptor sets occupy a 4GB range, allowing the set pointer to be 32-bit, rather than 64-bit. How can this be guaranteed for descriptor buffers?",{"type":10,"tag":11,"props":10064,"children":10065},{},[10066],{"type":15,"value":10067},"This could be done a number of ways – e.g. having unique memory types that guarantee allocation in a 4GB range.",{"type":10,"tag":228,"props":10069,"children":10071},{"id":10070},"_resolved_should_the_alignment_be_separate_from_the_size",[10072],{"type":15,"value":10073},"RESOLVED: Should the alignment be separate from the size?",{"type":10,"tag":11,"props":10075,"children":10076},{},[10077],{"type":15,"value":10078},"No - the alignment of a descriptor is always the size of the descriptor.",{"type":10,"tag":228,"props":10080,"children":10082},{"id":10081},"_resolved_what_is_the_fast_path_for_constant_data_in_this_new_model_previously_most_vendors_have_recommended_dynamic_ubos_as_a_fast_path_but_those_go_away_in_this_extension",[10083],{"type":15,"value":10084},"RESOLVED: What is the fast path for constant data in this new model? Previously most vendors have recommended dynamic UBOs as a fast path, but those go away in this extension.",{"type":10,"tag":11,"props":10086,"children":10087},{},[10088,10090,10096],{"type":15,"value":10089},"The crucial part of getting data into a shader quickly is mostly dominated by number of indirections, and cache behavior.\nStatic accesses with fewer indirections and minimal memory model interactions (e.g. read-only and not ",{"type":10,"tag":42,"props":10091,"children":10093},{"className":10092},[],[10094],{"type":15,"value":10095},"NonPrivate",{"type":15,"value":10097},") will be fastest.\nPush constants should be favored for small amounts of data.\nFor larger amounts of data, applications should favor allocating buffers and putting data into those buffers according with whichever of the below API mechanisms is most straightforward for their use case, with some potential degradation at each step.",{"type":10,"tag":56,"props":10099,"children":10100},{},[10101,10105,10110,10115,10119,10124],{"type":10,"tag":60,"props":10102,"children":10103},{},[10104],{"type":15,"value":422},{"type":10,"tag":60,"props":10106,"children":10107},{},[10108],{"type":15,"value":10109},"Pointer to data in push constants",{"type":10,"tag":60,"props":10111,"children":10112},{},[10113],{"type":15,"value":10114},"Inline uniform data in descriptor buffers",{"type":10,"tag":60,"props":10116,"children":10117},{},[10118],{"type":15,"value":432},{"type":10,"tag":60,"props":10120,"children":10121},{},[10122],{"type":15,"value":10123},"Uniform buffer in descriptor memory",{"type":10,"tag":60,"props":10125,"children":10126},{},[10127],{"type":15,"value":10128},"Storage buffer in descriptor memory",{"type":10,"tag":11,"props":10130,"children":10131},{},[10132],{"type":15,"value":10133},"This order listed above is not necessarily true for all IHVs.",{"type":10,"tag":228,"props":10135,"children":10137},{"id":10136},"_resolved_should_applications_be_able_to_mix_sets_and_buffers",[10138],{"type":15,"value":10139},"RESOLVED: Should applications be able to mix sets and buffers?",{"type":10,"tag":11,"props":10141,"children":10142},{},[10143],{"type":15,"value":10144},"Originally the intention was to support this, but at least one vendor cannot support this natively.",{"type":10,"tag":228,"props":10146,"children":10148},{"id":10147},"_resolved_should_we_use_buffer_device_addresses_for_the_buffer_arguments",[10149],{"type":15,"value":10150},"RESOLVED: Should we use buffer device addresses for the buffer arguments?",{"type":10,"tag":11,"props":10152,"children":10153},{},[10154],{"type":15,"value":10155},"Buffer parameters in recent extensions have been using device address arguments, so this extension aims to be consistent. Part of the reason for this though, is so that the base address can be modified with a single pointer argument instead of object + offset.\nHowever, this extension explicitly uses a separate command for setting the offset dynamically compared to the base address, to allow for the application to set the base address statically.\nHaving the base address specified with a device address is still useful for consistency though.",{"type":10,"tag":228,"props":10157,"children":10159},{"id":10158},"_resolved_how_does_this_interact_with_vk_ext_pipeline_robustness",[10160],{"type":15,"value":10161},"RESOLVED: How does this interact with VK_EXT_pipeline_robustness?",{"type":10,"tag":11,"props":10163,"children":10164},{},[10165,10167,10173],{"type":15,"value":10166},"There is no way to request robust and non-robust descriptors separately, or specify robust/non-robust descriptors in the set layout, so if\nthe ",{"type":10,"tag":42,"props":10168,"children":10170},{"className":10169},[],[10171],{"type":15,"value":10172},"robustBufferAccess",{"type":15,"value":10174}," feature is enabled then robust descriptors are always used.",{"type":10,"tag":10176,"props":10177,"children":10178},"style",{},[10179],{"type":15,"value":10180},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":537,"searchDepth":568,"depth":568,"links":10182},[10183,10184,10185,10196,10203,10204,10205],{"id":19,"depth":568,"text":22},{"id":82,"depth":568,"text":85},{"id":223,"depth":568,"text":226,"children":10186},[10187,10188,10189,10190,10191,10192,10193,10194,10195],{"id":230,"depth":588,"text":233},{"id":513,"depth":588,"text":516},{"id":1662,"depth":588,"text":1665},{"id":1709,"depth":588,"text":1712},{"id":2565,"depth":588,"text":2568},{"id":2730,"depth":588,"text":432},{"id":2845,"depth":588,"text":2848},{"id":3850,"depth":588,"text":3853},{"id":3986,"depth":588,"text":3989},{"id":4886,"depth":568,"text":4889,"children":10197},[10198,10199,10200,10201,10202],{"id":4897,"depth":588,"text":4900},{"id":5324,"depth":588,"text":5327},{"id":5349,"depth":588,"text":5352},{"id":5476,"depth":588,"text":5479},{"id":5494,"depth":588,"text":1712},{"id":5584,"depth":568,"text":5587},{"id":5650,"depth":568,"text":5653},{"id":9793,"depth":568,"text":9796,"children":10206},[10207,10208,10209,10210,10212,10213,10214,10216,10217,10218,10220,10221,10222,10223,10224,10225,10226,10227],{"id":9799,"depth":588,"text":9802},{"id":9815,"depth":588,"text":9818},{"id":9826,"depth":588,"text":9829},{"id":9844,"depth":588,"text":10211},"RESOLVED: Should vkGetDescriptorOffset take an arrayOffset parameter, or should we make guarantees about how arrays work?",{"id":9871,"depth":588,"text":9874},{"id":9882,"depth":588,"text":9885},{"id":9893,"depth":588,"text":10215},"RESOLVED: Should vkGetDescriptorEXT / vkGetDescriptorSetLayoutBindingOffsetEXT be arrayed?",{"id":9917,"depth":588,"text":9920},{"id":9935,"depth":588,"text":9938},{"id":9974,"depth":588,"text":10219},"RESOLVED: Should we require descriptors to be retrieved for NULL_HANDLE or is memset(0) sufficient?",{"id":10022,"depth":588,"text":10025},{"id":10048,"depth":588,"text":10051},{"id":10059,"depth":588,"text":10062},{"id":10070,"depth":588,"text":10073},{"id":10081,"depth":588,"text":10084},{"id":10136,"depth":588,"text":10139},{"id":10147,"depth":588,"text":10150},{"id":10158,"depth":588,"text":10161},"markdown",[10230,10235,10238,10241,10244,10247,10250,10253,10256,10259,10262,10265,10268,10270,10273,10276,10279,10282,10285,10288,10291,10294,10297,10300,10303,10306,10309,10312,10315,10318,10321,10324,10327,10330,10333,10336,10339,10342,10345,10348,10351,10354,10357,10360,10363,10366,10369,10372,10375,10378,10381,10384,10387,10390,10393,10396,10399,10402,10405],{"index":10231,"title":10232,"id":10233,"appendix":10234},0,"Preamble","preamble",false,{"index":546,"title":10236,"id":10237,"appendix":10234},"Introduction","introduction",{"index":568,"title":10239,"id":10240,"appendix":10234},"Fundamentals","fundamentals",{"index":588,"title":10242,"id":10243,"appendix":10234},"Initialization","initialization",{"index":606,"title":10245,"id":10246,"appendix":10234},"Devices and Queues","devsandqueues",{"index":630,"title":10248,"id":10249,"appendix":10234},"Command Buffers","commandbuffers",{"index":640,"title":10251,"id":10252,"appendix":10234},"Synchronization and Cache Control","synchronization",{"index":657,"title":10254,"id":10255,"appendix":10234},"Render Pass","renderpass",{"index":673,"title":10257,"id":10258,"appendix":10234},"Shaders","shaders",{"index":689,"title":10260,"id":10261,"appendix":10234},"Pipelines","pipelines",{"index":707,"title":10263,"id":10264,"appendix":10234},"Memory Allocation","memory",{"index":1036,"title":10266,"id":10267,"appendix":10234},"Resource Creation","resources",{"index":1058,"title":10269,"id":8036,"appendix":10234},"Samplers",{"index":1079,"title":10271,"id":10272,"appendix":10234},"Resource Descriptors","descriptorsets",{"index":1100,"title":10274,"id":10275,"appendix":10234},"Shader Interfaces","interfaces",{"index":1121,"title":10277,"id":10278,"appendix":10234},"Image Operations","textures",{"index":1143,"title":10280,"id":10281,"appendix":10234},"Fragment Density Map Operations","fragmentdensitymapops",{"index":1164,"title":10283,"id":10284,"appendix":10234},"Queries","queries",{"index":1185,"title":10286,"id":10287,"appendix":10234},"Clear Commands","clears",{"index":1206,"title":10289,"id":10290,"appendix":10234},"Copy Commands","copies",{"index":1215,"title":10292,"id":10293,"appendix":10234},"Drawing Commands","drawing",{"index":1224,"title":10295,"id":10296,"appendix":10234},"Fixed-Function Vertex Processing","fxvertex",{"index":1232,"title":10298,"id":10299,"appendix":10234},"Tessellation","tessellation",{"index":1249,"title":10301,"id":10302,"appendix":10234},"Geometry Shading","geometry",{"index":1257,"title":10304,"id":10305,"appendix":10234},"Mesh Shading","mesh",{"index":1273,"title":10307,"id":10308,"appendix":10234},"Cluster Culling Shading","cluster-culling",{"index":1282,"title":10310,"id":10311,"appendix":10234},"Fixed-Function Vertex Post-Processing","vertexpostproc",{"index":1291,"title":10313,"id":10314,"appendix":10234},"Rasterization","primsrast",{"index":1300,"title":10316,"id":10317,"appendix":10234},"Fragment Operations","fragops",{"index":1308,"title":10319,"id":10320,"appendix":10234},"The Framebuffer","framebuffer",{"index":1325,"title":10322,"id":10323,"appendix":10234},"Dispatching Commands","dispatch",{"index":1334,"title":10325,"id":10326,"appendix":10234},"Device-Generated Commands","device-generated-commands",{"index":1360,"title":10328,"id":10329,"appendix":10234},"Sparse Resources","sparsememory",{"index":1378,"title":10331,"id":10332,"appendix":10234},"Window System Integration (WSI)","wsi",{"index":3406,"title":10334,"id":10335,"appendix":10234},"Deferred Host Operations","deferred-host-operations",{"index":3423,"title":10337,"id":10338,"appendix":10234},"Private Data","private-data",{"index":3440,"title":10340,"id":10341,"appendix":10234},"Acceleration Structures","acceleration-structure",{"index":3465,"title":10343,"id":10344,"appendix":10234},"Micromap","micromap",{"index":3482,"title":10346,"id":10347,"appendix":10234},"Ray Traversal","ray-traversal",{"index":3490,"title":10349,"id":10350,"appendix":10234},"Ray Tracing","ray-tracing",{"index":3507,"title":10352,"id":10353,"appendix":10234},"Memory Decompression","memory-decompression",{"index":3515,"title":10355,"id":10356,"appendix":10234},"Video Coding","video-coding",{"index":3531,"title":10358,"id":10359,"appendix":10234},"Optical Flow","opticalflow",{"index":3540,"title":10361,"id":10362,"appendix":10234},"Execution Graphs","executiongraphs",{"index":3549,"title":10364,"id":10365,"appendix":10234},"Extending Vulkan","extendingvulkan",{"index":3557,"title":10367,"id":10368,"appendix":10234},"Features","features",{"index":3574,"title":10370,"id":10371,"appendix":10234},"Limits","limits",{"index":3591,"title":10373,"id":10374,"appendix":10234},"Formats","formats",{"index":3616,"title":10376,"id":10377,"appendix":10234},"Additional Capabilities","capabilities",{"index":3633,"title":10379,"id":10380,"appendix":10234},"Debugging","debugging",{"index":10231,"title":10382,"id":10383,"appendix":634},"Vulkan Environment for SPIR-V","spirvenv",{"index":546,"title":10385,"id":10386,"appendix":634},"Memory Model","memory-model",{"index":568,"title":10388,"id":10389,"appendix":634},"Compressed Image Formats","compressed_image_formats",{"index":588,"title":10391,"id":10392,"appendix":634},"Core Revisions (Informative)","versions",{"index":606,"title":10394,"id":10395,"appendix":634},"Layers & Extensions (Informative)","extensions",{"index":630,"title":10397,"id":10398,"appendix":634},"API Boilerplate","boilerplate",{"index":640,"title":10400,"id":10401,"appendix":634},"Invariance","invariance",{"index":657,"title":10403,"id":10404,"appendix":634},"Lexicon","lexicon",{"index":673,"title":10406,"id":10407,"appendix":634},"Credits (Informative)","credits",[10409,10415,10419,10423,10427,10431,10434,10437,10440,10443,10446,10448,10451,10453,10455,10457,10459,10462,10466,10468,10470,10472,10475,10477,10480,10488,10491,10497,10501,10506,10508,10512,10518,10524,10529,10531,10533,10539,10542,10545,10551,10555,10558,10563,10566,10568,10571,10577,10580,10582,10586,10590,10594,10596,10598,10602,10605,10611,10614,10618,10620,10626,10628,10631,10633,10637,10640,10644,10647,10652,10655,10657,10661,10662,10665,10668,10672,10677,10681,10685,10689,10692,10696,10700,10704,10708,10711,10714,10717,10720,10723,10726,10730,10734,10738,10741,10745,10750,10754,10759,10762,10765,10770,10775,10778,10781,10785,10790,10793,10798,10803,10806,10808,10812,10816,10819,10824,10828,10831,10835,10838,10841,10845,10849,10853,10855,10857,10861,10864,10866,10868,10870,10873,10876,10879,10882,10885,10889,10893,10896,10898,10900,10902,10905,10907,10911,10915,10919,10921,10925,10928,10930,10933,10935,10938,10943,10946,10949,10951,10955,10958,10965,10969,10973,10976,10981,10983,10987,10990,10993,10996,11000,11005,11011,11015,11017,11021,11023,11027,11030,11034,11037,11040,11042,11044,11047,11049,11054,11057,11060,11064,11067,11071,11075,11078,11081,11082,11084,11087,11088,11090,11093,11097,11100,11101,11104,11106,11109,11111,11112,11114,11117,11118,11121,11123,11126,11129,11133,11135,11137,11138,11140,11141,11143,11146,11148,11150,11152,11154,11155,11158,11159,11162,11167,11171,11174,11176,11178,11180,11183,11186,11189,11192,11196,11198,11203,11207,11209,11213,11216,11219,11223,11226,11228,11232,11235,11238,11240,11242,11245,11246,11248,11252,11255,11259,11262,11266,11270,11272,11275,11278,11280,11283,11285,11287,11289,11294,11295,11298,11301,11303,11306,11308,11310,11314,11317,11319,11322,11326,11328,11330,11334,11336,11338,11342,11345,11347,11351,11354,11357,11360,11363,11367,11372,11376,11379,11384,11388,11391,11394,11398,11400,11404,11407,11410,11414,11416,11421,11425,11427,11433,11436,11438,11441,11445,11448,11452,11456,11459,11460,11463,11465,11467,11469,11471,11473,11475,11477,11480,11482,11484,11486,11490,11494,11498,11502,11505,11507,11511,11514,11518,11520,11524,11527,11530,11533,11536,11538,11540,11542,11545,11547,11549,11551,11553,11555,11557,11559,11563,11566,11570,11574,11577,11580,11583,11585,11588,11591,11595,11598,11601,11607,11611,11615,11619],{"number":7927,"type":580,"author":10410,"provisional":634,"depends":10411,"platform":10412,"contact":10413,"extension":10414,"proposal":634},"AMD","(((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_synchronization2),VK_VERSION_1_3)+VK_KHR_pipeline_library+VK_KHR_spirv_1_4","provisional","Tobias Hector @tobski","VK_AMDX_shader_enqueue",{"number":10416,"type":580,"author":10410,"provisional":10234,"contact":10417,"extension":10418,"proposal":634},477,"Stu Smith","VK_AMD_anti_lag",{"number":8779,"type":580,"author":10410,"provisional":10234,"specialuse":10420,"contact":10421,"extension":10422,"proposal":10234},"devtools","Daniel Rakos @drakos-amd","VK_AMD_buffer_marker",{"number":10424,"type":580,"author":10410,"provisional":10234,"depends":10425,"contact":10413,"extension":10426,"proposal":10234},230,"VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","VK_AMD_device_coherent_memory",{"number":9577,"type":580,"author":10410,"provisional":10234,"depends":10428,"contact":10429,"extension":10430,"proposal":10234},"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain","Matthaeus G. Chajdas @anteru","VK_AMD_display_native_hdr",{"number":3406,"type":580,"author":10410,"promotedto":10432,"provisional":10234,"contact":10421,"extension":10433,"proposal":10234},"VK_KHR_draw_indirect_count","VK_AMD_draw_indirect_count",{"number":1282,"type":580,"author":10410,"provisional":10234,"contact":10435,"extension":10436,"proposal":10234},"Dominik Witczak @dominikwitczakamd","VK_AMD_gcn_shader",{"number":3465,"type":580,"author":10410,"deprecatedby":10438,"provisional":10234,"contact":10435,"extension":10439,"proposal":10234},"VK_KHR_shader_float16_int8","VK_AMD_gpu_shader_half_float",{"number":7910,"type":580,"author":10410,"deprecatedby":10438,"provisional":10234,"contact":10441,"extension":10442,"proposal":10234},"Qun Lin @linqun","VK_AMD_gpu_shader_int16",{"number":9011,"type":580,"author":10410,"provisional":10234,"contact":10444,"extension":10445,"proposal":10234},"Martin Dinkov @mdinkov","VK_AMD_memory_overallocation_behavior",{"number":7944,"type":580,"author":10410,"provisional":10234,"contact":10429,"extension":10447,"proposal":10234},"VK_AMD_mixed_attachment_samples",{"number":3440,"type":580,"author":10410,"obsoletedby":10449,"provisional":10234,"contact":10429,"extension":10450,"proposal":10234},"VK_KHR_maintenance1","VK_AMD_negative_viewport_height",{"number":8876,"type":580,"author":10410,"provisional":10234,"contact":10429,"extension":10452,"proposal":10234},"VK_AMD_pipeline_compiler_control",{"number":1206,"type":580,"author":10410,"provisional":10234,"contact":10421,"extension":10454,"proposal":10234},"VK_AMD_rasterization_order",{"number":3482,"type":580,"author":10410,"provisional":10234,"contact":10435,"extension":10456,"proposal":10234},"VK_AMD_shader_ballot",{"number":8968,"type":580,"author":10410,"provisional":10234,"depends":10425,"contact":10444,"extension":10458,"proposal":10234},"VK_AMD_shader_core_properties",{"number":10460,"type":580,"author":10410,"provisional":10234,"depends":10458,"contact":10429,"extension":10461,"proposal":10234},228,"VK_AMD_shader_core_properties2",{"number":10463,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10413,"extension":10465,"proposal":634},322,"EXT","VK_AMD_shader_early_and_late_fragment_tests",{"number":1232,"type":580,"author":10410,"provisional":10234,"contact":10441,"extension":10467,"proposal":10234},"VK_AMD_shader_explicit_vertex_parameter",{"number":7974,"type":580,"author":10410,"provisional":10234,"contact":10469,"extension":3959,"proposal":10234},"Aaron Hagan @AaronHaganAMD",{"number":3591,"type":580,"author":10410,"provisional":10234,"contact":10435,"extension":10471,"proposal":10234},"VK_AMD_shader_image_load_store_lod",{"number":3540,"type":580,"author":10410,"provisional":10234,"specialuse":10420,"contact":10473,"extension":10474,"proposal":10234},"Jaakko Konttinen @jaakkoamd","VK_AMD_shader_info",{"number":1224,"type":580,"author":10410,"provisional":10234,"contact":10441,"extension":10476,"proposal":10234},"VK_AMD_shader_trinary_minmax",{"number":3531,"type":580,"author":10410,"provisional":10234,"depends":10425,"contact":10478,"extension":10479,"proposal":10234},"Rex Xu @amdrexu","VK_AMD_texture_gather_bias_lod",{"number":10481,"type":580,"author":10482,"provisional":10234,"depends":10483,"platform":10484,"specialuse":10485,"contact":10486,"extension":10487,"proposal":634},469,"ANDROID","VK_ANDROID_external_memory_android_hardware_buffer","android","glemulation","Chris Forbes @chrisforbes","VK_ANDROID_external_format_resolve",{"number":7848,"type":580,"author":10482,"provisional":10234,"depends":10489,"platform":10484,"contact":10490,"extension":10483,"proposal":10234},"((VK_KHR_sampler_ycbcr_conversion+VK_KHR_external_memory+VK_KHR_dedicated_allocation),VK_VERSION_1_1)+VK_EXT_queue_family_foreign","Jesse Hall @critsec",{"number":10492,"type":580,"author":10493,"promotedto":10494,"provisional":10234,"depends":10425,"contact":10495,"extension":10496,"proposal":10234},343,"ARM","VK_EXT_rasterization_order_attachment_access","Jan-Harald Fredriksen @janharaldfredriksen-arm","VK_ARM_rasterization_order_attachment_access",{"number":10498,"type":580,"author":10493,"provisional":10234,"depends":10499,"contact":10495,"extension":10500,"proposal":634},425,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_ARM_render_pass_striped",{"number":10502,"type":580,"author":10493,"provisional":10234,"depends":10503,"contact":10504,"extension":10505,"proposal":10234},418,"VK_ARM_shader_core_builtins","Kevin Petit @kpet","VK_ARM_scheduling_controls",{"number":10507,"type":580,"author":10493,"provisional":10234,"depends":10425,"contact":10504,"extension":10503,"proposal":10234},498,{"number":10509,"type":580,"author":10493,"provisional":10234,"depends":10510,"contact":10495,"extension":10511,"proposal":10234},416,"VK_VERSION_1_1","VK_ARM_shader_core_properties",{"number":10513,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10516,"extension":10517,"proposal":10234},341,"VK_VERSION_1_3","vulkansc","Joshua Ashton @Joshua-Ashton","VK_EXT_4444_formats",{"number":10519,"type":10520,"author":10464,"provisional":10234,"depends":10521,"contact":10522,"extension":10523,"proposal":10234},286,"instance","VK_EXT_direct_mode_display","Drew DeVault sir@cmpwn.com","VK_EXT_acquire_drm_display",{"number":6890,"type":10520,"author":10525,"provisional":10234,"depends":10521,"platform":10526,"contact":10527,"extension":10528,"proposal":10234},"NV","xlib_xrandr","James Jones @cubanismo","VK_EXT_acquire_xlib_display",{"extension":10530,"proposal":10234},"VK_EXT_application_parameters",{"number":6525,"type":580,"author":10493,"provisional":10234,"depends":10425,"contact":10495,"extension":10532,"proposal":10234},"VK_EXT_astc_decode_mode",{"number":10534,"type":580,"author":10464,"provisional":10234,"depends":10535,"ratified":10536,"contact":10537,"extension":10538,"proposal":634},525,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_attachment_feedback_loop_layout","vulkan","Mike Blumenkrantz @zmike","VK_EXT_attachment_feedback_loop_dynamic_state",{"number":10540,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10516,"extension":10541,"proposal":634},340,"VK_EXT_attachment_feedback_loop_layout",{"number":8171,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":10544,"proposal":10234},"Jeff Bolz @jeffbolznv","VK_EXT_blend_operation_advanced",{"number":10546,"type":580,"author":10464,"provisional":10234,"depends":10547,"specialuse":10548,"contact":10549,"extension":10550,"proposal":10234},412,"VK_EXT_custom_border_color","glemulation,d3demulation","Piers Daniell @pdaniell-nv","VK_EXT_border_color_swizzle",{"number":10552,"type":580,"author":10525,"deprecatedby":10553,"provisional":10234,"depends":10425,"contact":10543,"extension":10554,"proposal":10234},245,"VK_KHR_buffer_device_address","VK_EXT_buffer_device_address",{"number":8899,"type":580,"author":10464,"promotedto":10556,"provisional":10234,"depends":10425,"contact":10421,"extension":10557,"proposal":634},"VK_KHR_calibrated_timestamps","VK_EXT_calibrated_timestamps",{"number":10559,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10560,"contact":10561,"extension":10562,"proposal":10234},382,"vulkan,vulkansc","Sharif Elcott @selcott","VK_EXT_color_write_enable",{"number":6785,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":10564,"extension":10565,"proposal":10234},"Vikram Kushwaha @vkushwaha","VK_EXT_conditional_rendering",{"number":7168,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10536,"contact":10549,"extension":10567,"proposal":10234},"VK_EXT_conservative_rasterization",{"number":10569,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10560,"specialuse":10548,"contact":10570,"extension":10547,"proposal":10234},288,"Liam Middlebrook @liam-middlebrook",{"number":1249,"type":580,"author":10572,"promotedto":10573,"provisional":10234,"depends":10574,"specialuse":10380,"contact":10575,"extension":10576,"proposal":10234},"Baldur Karlsson","VK_EXT_debug_utils","VK_EXT_debug_report","Baldur Karlsson @baldurk","VK_EXT_debug_marker",{"number":1058,"type":10520,"author":10578,"deprecatedby":10573,"provisional":10234,"specialuse":10380,"contact":10579,"extension":10574,"proposal":10234},"GOOGLE","Courtney Goeltzenleuchter @courtney-g",{"number":7816,"type":10520,"author":10464,"provisional":10234,"specialuse":10380,"contact":10581,"extension":10573,"proposal":10234},"Mark Young @marky-lunarg",{"number":10583,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10584,"contact":10516,"extension":10585,"proposal":634},284,"d3demulation","VK_EXT_depth_bias_control",{"number":10587,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10588,"extension":10589,"proposal":10234},422,"Graeme Leese @gnl21","VK_EXT_depth_clamp_zero_one",{"number":10591,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10485,"contact":10592,"extension":10593,"proposal":10234},356,"Shahbaz Youssefi @syoussefi","VK_EXT_depth_clip_control",{"number":7202,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10560,"specialuse":10584,"contact":10549,"extension":10595,"proposal":10234},"VK_EXT_depth_clip_enable",{"number":1100,"type":580,"author":10525,"provisional":10234,"ratified":10560,"contact":10549,"extension":10597,"proposal":10234},"VK_EXT_depth_range_unrestricted",{"number":10599,"type":580,"author":10464,"provisional":10234,"depends":10600,"contact":10413,"extension":10601,"proposal":634},317,"((((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_buffer_device_address+VK_EXT_descriptor_indexing),VK_VERSION_1_2)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_EXT_descriptor_buffer",{"number":8470,"type":580,"author":10525,"promotedto":10603,"provisional":10234,"depends":10604,"contact":10543,"extension":369,"proposal":10234},"VK_VERSION_1_2","(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance3),VK_VERSION_1_1",{"number":10606,"type":580,"author":10464,"provisional":10234,"depends":10607,"specialuse":10608,"contact":10609,"extension":10610,"proposal":10234},355,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_debug_utils","debugging,devtools","Ralph Potter gitlab:@r_potter","VK_EXT_device_address_binding_report",{"number":10612,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10609,"extension":10613,"proposal":634},342,"VK_EXT_device_fault",{"number":10615,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10420,"contact":10616,"extension":10617,"proposal":10234},285,"Yiwei Zhang @zhangyiwei","VK_EXT_device_memory_report",{"number":6881,"type":10520,"author":10525,"provisional":10234,"depends":10619,"contact":10527,"extension":10521,"proposal":10234},"VK_KHR_display",{"number":10621,"type":10520,"author":10464,"provisional":10234,"depends":10622,"platform":10623,"contact":10624,"extension":10625,"proposal":10234},347,"VK_KHR_surface","directfb","Nicolas Caramelli @caramelli","VK_EXT_directfb_surface",{"number":7151,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10560,"contact":10549,"extension":10627,"proposal":10234},"VK_EXT_discard_rectangles",{"number":6930,"type":580,"author":10525,"provisional":10234,"depends":10629,"ratified":10536,"contact":10527,"extension":10630,"proposal":10234},"VK_EXT_display_surface_counter+VK_KHR_swapchain","VK_EXT_display_control",{"number":6922,"type":10520,"author":10525,"provisional":10234,"depends":10619,"ratified":10536,"contact":10527,"extension":10632,"proposal":10234},"VK_EXT_display_surface_counter",{"number":10634,"type":580,"author":10464,"provisional":10234,"depends":10635,"ratified":10536,"contact":10549,"extension":10636,"proposal":634},500,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_dynamic_rendering),VK_VERSION_1_3","VK_EXT_dynamic_rendering_unused_attachments",{"number":10638,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10549,"extension":10639,"proposal":10234},268,"VK_EXT_extended_dynamic_state",{"number":10641,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10642,"extension":10643,"proposal":10234},378,"Vikram Kushwaha @vkushwaha-nv","VK_EXT_extended_dynamic_state2",{"number":10645,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10536,"contact":10549,"extension":10646,"proposal":634},456,"VK_EXT_extended_dynamic_state3",{"number":10648,"type":580,"author":10464,"provisional":10234,"depends":10649,"ratified":10536,"contact":10650,"extension":10651,"proposal":634},454,"VK_KHR_external_memory,VK_VERSION_1_1","Lina Versace @versalinyaa","VK_EXT_external_memory_acquire_unmodified",{"number":7751,"type":580,"author":10464,"provisional":10234,"depends":10653,"ratified":10560,"contact":10650,"extension":10654,"proposal":10234},"VK_KHR_external_memory_fd","VK_EXT_external_memory_dma_buf",{"number":8770,"type":580,"author":10464,"provisional":10234,"depends":10649,"ratified":10560,"contact":10421,"extension":10656,"proposal":10234},"VK_EXT_external_memory_host",{"number":8622,"type":580,"author":10658,"provisional":10234,"ratified":10536,"contact":10659,"extension":10660,"proposal":10234},"QCOM","Matthew Netsch @mnetsch","VK_EXT_filter_cubic",{"number":9754,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10659,"extension":4881,"proposal":10234},{"number":10663,"type":580,"author":10464,"provisional":10234,"depends":4881,"contact":10659,"extension":10664,"proposal":10234},333,"VK_EXT_fragment_density_map2",{"number":10666,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10549,"extension":10667,"proposal":10234},252,"VK_EXT_fragment_shader_interlock",{"number":10669,"type":580,"author":10464,"provisional":10234,"ratified":10536,"contact":10670,"extension":10671,"proposal":634},376,"James Fitzpatrick @jamesfitzpatrick","VK_EXT_frame_boundary",{"number":10673,"type":580,"author":10464,"provisional":10234,"depends":10674,"platform":10675,"ratified":10536,"contact":10527,"extension":10676,"proposal":10234},256,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_surface+VK_KHR_get_surface_capabilities2+VK_KHR_swapchain","win32","VK_EXT_full_screen_exclusive",{"number":8726,"type":580,"author":10464,"promotedto":10678,"provisional":10234,"contact":10679,"extension":10680,"proposal":10234},"VK_KHR_global_priority","Andres Rodriguez @lostgoat","VK_EXT_global_priority",{"number":10682,"type":580,"author":10464,"promotedto":10678,"provisional":10234,"depends":10683,"contact":10616,"extension":10684,"proposal":10234},389,"VK_EXT_global_priority+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_global_priority_query",{"number":10686,"type":580,"author":10410,"provisional":10234,"depends":10687,"contact":10413,"extension":10688,"proposal":634},321,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_pipeline_library","VK_EXT_graphics_pipeline_library",{"number":7346,"type":580,"author":10578,"provisional":10234,"depends":10690,"ratified":10560,"contact":10579,"extension":10691,"proposal":10234},"VK_KHR_swapchain","VK_EXT_hdr_metadata",{"number":10693,"type":10520,"author":10464,"provisional":10234,"depends":10622,"contact":10694,"extension":10695,"proposal":10234},257,"Lisa Wu @chengtianww","VK_EXT_headless_surface",{"number":10697,"type":580,"author":10464,"provisional":10234,"depends":10698,"ratified":10536,"contact":10592,"extension":10699,"proposal":634},271,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_copy_commands2+VK_KHR_format_feature_flags2),VK_VERSION_1_3","VK_EXT_host_image_copy",{"number":10701,"type":580,"author":10464,"promotedto":10603,"provisional":10234,"depends":10425,"contact":10702,"extension":10703,"proposal":10234},262,"Bas Nieuwenhuizen @BNieuwenhuizen","VK_EXT_host_query_reset",{"number":10705,"type":580,"author":10464,"provisional":10234,"depends":10706,"specialuse":10485,"contact":10537,"extension":10707,"proposal":10234},394,"(VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2),VK_VERSION_1_1","VK_EXT_image_2d_view_of_3d",{"number":10709,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10495,"extension":10710,"proposal":634},339,"VK_EXT_image_compression_control",{"number":10712,"type":580,"author":10464,"provisional":10234,"depends":10710,"contact":10495,"extension":10713,"proposal":10234},438,"VK_EXT_image_compression_control_swapchain",{"number":8424,"type":580,"author":10464,"provisional":10234,"depends":10715,"ratified":10536,"contact":10650,"extension":10716,"proposal":10234},"(((VK_KHR_bind_memory2+VK_KHR_get_physical_device_properties2+VK_KHR_sampler_ycbcr_conversion),VK_VERSION_1_1)+VK_KHR_image_format_list),VK_VERSION_1_2","VK_EXT_image_drm_format_modifier",{"number":10718,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10588,"extension":10719,"proposal":10234},336,"VK_EXT_image_robustness",{"number":10721,"type":580,"author":10464,"provisional":10234,"depends":10706,"specialuse":10584,"contact":10537,"extension":10722,"proposal":634},419,"VK_EXT_image_sliced_view_of_3d",{"number":10724,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10516,"extension":10725,"proposal":10234},392,"VK_EXT_image_view_min_lod",{"number":10727,"type":580,"author":10464,"promotedto":10728,"provisional":10234,"depends":10425,"contact":10549,"extension":10729,"proposal":10234},266,"VK_KHR_index_type_uint8","VK_EXT_index_type_uint8",{"number":7982,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10731,"contact":10732,"extension":10733,"proposal":10234},"(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance1),VK_VERSION_1_1","Daniel Rakos @aqnuep","VK_EXT_inline_uniform_block",{"number":10735,"type":10520,"author":10464,"provisional":10234,"ratified":10536,"contact":10736,"extension":10737,"proposal":634},497,"Christophe Riccio @christophe","VK_EXT_layer_settings",{"number":10739,"type":580,"author":10464,"provisional":10234,"depends":10425,"specialuse":10485,"contact":10592,"extension":10740,"proposal":634},466,"VK_EXT_legacy_dithering",{"number":10742,"type":580,"author":10464,"provisional":10234,"depends":10743,"ratified":10536,"specialuse":10485,"contact":10537,"extension":10744,"proposal":634},496,"VK_EXT_vertex_input_dynamic_state","VK_EXT_legacy_vertex_attributes",{"number":10746,"type":580,"author":10464,"promotedto":10747,"provisional":10234,"depends":10425,"specialuse":10748,"contact":10543,"extension":10749,"proposal":10234},260,"VK_KHR_line_rasterization","cadsupport","VK_EXT_line_rasterization",{"number":10751,"type":580,"author":10464,"promotedto":10752,"provisional":10234,"ratified":10536,"contact":10592,"extension":10753,"proposal":10234},401,"VK_KHR_load_store_op_none","VK_EXT_load_store_op_none",{"number":10755,"type":580,"author":10464,"provisional":10234,"depends":10756,"ratified":10536,"contact":10757,"extension":10758,"proposal":634},273,"VK_KHR_map_memory2","Faith Ekstrand @gfxstrand","VK_EXT_map_memory_placed",{"number":10760,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":10761,"proposal":10234},238,"VK_EXT_memory_budget",{"number":10763,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":10764,"proposal":10234},239,"VK_EXT_memory_priority",{"number":10766,"type":580,"author":10464,"provisional":10234,"depends":10767,"contact":10768,"extension":10769,"proposal":634},329,"VK_KHR_spirv_1_4","Christoph Kubisch @pixeljetstream","VK_EXT_mesh_shader",{"number":10771,"type":580,"author":10464,"provisional":10234,"platform":10772,"contact":10773,"extension":10774,"proposal":634},312,"metal","Bill Hollings @billhollings","VK_EXT_metal_objects",{"number":9682,"type":10520,"author":10464,"provisional":10234,"depends":10622,"platform":10772,"contact":10776,"extension":10777,"proposal":10234},"Dzmitry Malyshau @kvark","VK_EXT_metal_surface",{"number":10779,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10537,"extension":10780,"proposal":10234},393,"VK_EXT_multi_draw",{"number":10782,"type":580,"author":10464,"provisional":10234,"depends":10783,"contact":10592,"extension":10784,"proposal":634},377,"(VK_KHR_create_renderpass2+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_EXT_multisampled_render_to_single_sampled",{"number":10786,"type":580,"author":10464,"provisional":10234,"depends":10787,"specialuse":10584,"contact":10788,"extension":10789,"proposal":634},495,"VK_KHR_maintenance3","Joshua Ashton @Joshua-Ashton,Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_mutable_descriptor_type",{"number":10791,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10549,"extension":10792,"proposal":10234},452,"VK_EXT_nested_command_buffer",{"number":10794,"type":580,"author":10464,"provisional":10234,"depends":10425,"specialuse":10795,"contact":10796,"extension":10797,"proposal":634},423,"d3demulation,glemulation","Georg Lehmann @DadSchoorse","VK_EXT_non_seamless_cube_map",{"number":10799,"type":580,"author":10464,"provisional":10234,"depends":10800,"ratified":10536,"contact":10801,"extension":10802,"proposal":634},397,"VK_KHR_acceleration_structure+(VK_KHR_synchronization2,VK_VERSION_1_3)","Christoph Kubisch @pixeljetstream, Eric Werness","VK_EXT_opacity_micromap",{"number":10804,"type":580,"author":10464,"provisional":10234,"depends":10764,"contact":10549,"extension":10805,"proposal":10234},413,"VK_EXT_pageable_device_local_memory",{"number":9568,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10560,"contact":10429,"extension":10807,"proposal":10234},"VK_EXT_pci_bus_info",{"number":10809,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10810,"extension":10811,"proposal":10234},354,"Simon Ser @emersion","VK_EXT_physical_device_drm",{"number":10813,"type":580,"author":10410,"promotedto":10514,"provisional":10234,"depends":10425,"contact":10814,"extension":10815,"proposal":10234},298,"Gregory Grebe @grgrebe_amd","VK_EXT_pipeline_creation_cache_control",{"number":9093,"type":580,"author":10578,"promotedto":10514,"provisional":10234,"specialuse":10420,"contact":10817,"extension":10818,"proposal":10234},"Jean-Francois Roy @jfroy","VK_EXT_pipeline_creation_feedback",{"number":10820,"type":580,"author":10464,"provisional":10234,"depends":10821,"contact":10822,"extension":10823,"proposal":634},499,"VK_KHR_ray_tracing_pipeline+VK_KHR_pipeline_library","Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_pipeline_library_group_handles",{"number":10825,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10826,"extension":10827,"proposal":10234},373,"Mukund Keshava @mkeshavanv","VK_EXT_pipeline_properties",{"number":10829,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10592,"extension":10830,"proposal":634},467,"VK_EXT_pipeline_protected_access",{"number":6555,"type":580,"author":10832,"provisional":10234,"depends":10425,"contact":10833,"extension":10834,"proposal":10234},"IMG","Jarred Davies","VK_EXT_pipeline_robustness",{"number":8397,"type":580,"author":10525,"provisional":10234,"ratified":10536,"contact":10836,"extension":10837,"proposal":10234},"Daniel Koch @dgkoch","VK_EXT_post_depth_coverage",{"number":10839,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10485,"contact":10592,"extension":10840,"proposal":10234},357,"VK_EXT_primitive_topology_list_restart",{"number":10842,"type":580,"author":10464,"provisional":10234,"depends":10843,"specialuse":10485,"contact":10592,"extension":10844,"proposal":634},383,"VK_EXT_transform_feedback","VK_EXT_primitives_generated_query",{"number":10846,"type":580,"author":10525,"promotedto":10514,"provisional":10234,"depends":10425,"contact":10847,"extension":10848,"proposal":10234},296,"Matthew Rusch @mattruschnv","VK_EXT_private_data",{"number":10850,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10485,"contact":10851,"extension":10852,"proposal":10234},255,"Jesse Hall @jessehall","VK_EXT_provoking_vertex",{"number":7770,"type":580,"author":10464,"provisional":10234,"depends":10649,"ratified":10560,"contact":10650,"extension":10854,"proposal":10234},"VK_EXT_queue_family_foreign",{"number":10856,"type":580,"author":10493,"provisional":10234,"depends":10425,"contact":10495,"extension":10494,"proposal":634},464,{"number":10858,"type":580,"author":10464,"provisional":10234,"depends":10859,"contact":10495,"extension":10860,"proposal":10234},345,"VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1","VK_EXT_rgba10x6_formats",{"number":10862,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10560,"contact":10570,"extension":10863,"proposal":10234},287,"VK_EXT_robustness2",{"number":8068,"type":580,"author":10410,"provisional":10234,"depends":10425,"ratified":10560,"contact":10421,"extension":10865,"proposal":10234},"VK_EXT_sample_locations",{"number":7857,"type":580,"author":10525,"promotedto":10603,"provisional":10234,"depends":10425,"contact":10543,"extension":10867,"proposal":10234},"VK_EXT_sampler_filter_minmax",{"number":9784,"type":580,"author":10464,"promotedto":10603,"provisional":10234,"depends":10425,"contact":10413,"extension":10869,"proposal":10234},"VK_EXT_scalar_block_layout",{"number":10871,"type":580,"author":10464,"promotedto":10603,"provisional":10234,"contact":10421,"extension":10872,"proposal":10234},247,"VK_EXT_separate_stencil_usage",{"number":10874,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10560,"contact":10642,"extension":10875,"proposal":10234},261,"VK_EXT_shader_atomic_float",{"number":10877,"type":580,"author":10464,"provisional":10234,"depends":10875,"ratified":10536,"contact":10757,"extension":10878,"proposal":10234},274,"VK_EXT_shader_atomic_float2",{"number":10880,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10543,"extension":10881,"proposal":10234},277,"VK_EXT_shader_demote_to_helper_invocation",{"number":10883,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10413,"extension":10884,"proposal":10234},235,"VK_EXT_shader_image_atomic_int64",{"number":10886,"type":580,"author":10464,"provisional":10234,"depends":10887,"contact":10822,"extension":10888,"proposal":634},463,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_pipeline_creation_cache_control),VK_VERSION_1_3","VK_EXT_shader_module_identifier",{"number":10890,"type":580,"author":10464,"provisional":10234,"depends":10635,"ratified":10536,"contact":10891,"extension":10892,"proposal":634},483,"Daniel Story @daniel-story","VK_EXT_shader_object",{"number":10894,"type":580,"author":10464,"provisional":10234,"ratified":10536,"contact":10504,"extension":10895,"proposal":634},565,"VK_EXT_shader_replicated_composites",{"number":8026,"type":580,"author":10464,"provisional":10234,"ratified":10560,"contact":10435,"extension":10897,"proposal":10234},"VK_EXT_shader_stencil_export",{"number":6485,"type":580,"author":10525,"deprecatedby":10603,"provisional":10234,"contact":10836,"extension":10899,"proposal":10234},"VK_EXT_shader_subgroup_ballot",{"number":6497,"type":580,"author":10525,"deprecatedby":10510,"provisional":10234,"contact":10836,"extension":10901,"proposal":10234},"VK_EXT_shader_subgroup_vote",{"number":10903,"type":580,"author":10464,"provisional":10234,"depends":10514,"ratified":10536,"contact":10495,"extension":10904,"proposal":634},396,"VK_EXT_shader_tile_image",{"number":8479,"type":580,"author":10525,"promotedto":10603,"provisional":10234,"contact":10836,"extension":10906,"proposal":10234},"VK_EXT_shader_viewport_index_layer",{"number":10908,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10510,"ratified":10515,"contact":10909,"extension":10910,"proposal":10234},226,"Neil Henning @sheredom","VK_EXT_subgroup_size_control",{"number":10912,"type":580,"author":10464,"provisional":10234,"depends":10425,"contact":10913,"extension":10914,"proposal":634},459,"Ting Wei @catweiting","VK_EXT_subpass_merge_feedback",{"number":10916,"type":10520,"author":10464,"provisional":10234,"depends":10917,"contact":10592,"extension":10918,"proposal":634},275,"VK_KHR_surface+VK_KHR_get_surface_capabilities2","VK_EXT_surface_maintenance1",{"number":7298,"type":10520,"author":10578,"provisional":10234,"depends":10622,"contact":10579,"extension":10920,"proposal":10234},"VK_EXT_swapchain_colorspace",{"number":10922,"type":580,"author":10464,"provisional":10234,"depends":10923,"contact":10592,"extension":10924,"proposal":634},276,"VK_KHR_swapchain+VK_EXT_surface_maintenance1+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_swapchain_maintenance1",{"number":10926,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10543,"extension":10927,"proposal":10234},282,"VK_EXT_texel_buffer_alignment",{"number":6513,"type":580,"author":10493,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10515,"contact":10495,"extension":10929,"proposal":10234},"VK_EXT_texture_compression_astc_hdr",{"number":10931,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"contact":10413,"extension":10932,"proposal":10234},246,"VK_EXT_tooling_info",{"number":1308,"type":580,"author":10525,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10934,"contact":10549,"extension":10843,"proposal":10234},"glemulation,d3demulation,devtools",{"number":8441,"type":580,"author":10578,"provisional":10234,"contact":10936,"extension":10937,"proposal":10234},"Cort Stratton @cdwfs","VK_EXT_validation_cache",{"number":10939,"type":10520,"author":10940,"deprecatedby":10737,"provisional":10234,"specialuse":10380,"contact":10941,"extension":10942,"proposal":10234},248,"LUNARG","Karl Schultz @karl-lunarg","VK_EXT_validation_features",{"number":6453,"type":10520,"author":10578,"deprecatedby":10737,"provisional":10234,"specialuse":10380,"contact":10944,"extension":10945,"proposal":10234},"Tobin Ehlis @tobine","VK_EXT_validation_flags",{"number":9033,"type":580,"author":10525,"promotedto":10947,"provisional":10234,"depends":10425,"contact":10564,"extension":10948,"proposal":10234},"VK_KHR_vertex_attribute_divisor","VK_EXT_vertex_attribute_divisor",{"number":10950,"type":580,"author":10464,"provisional":10234,"depends":10425,"ratified":10536,"contact":10549,"extension":10743,"proposal":10234},353,{"number":10952,"type":580,"author":10464,"promotedto":10514,"provisional":10234,"depends":10859,"ratified":10515,"contact":10953,"extension":10954,"proposal":10234},331,"Tony Zlatinski @tzlatinski","VK_EXT_ycbcr_2plane_444_formats",{"number":10956,"type":580,"author":10464,"provisional":10234,"depends":10859,"ratified":10560,"contact":10549,"extension":10957,"proposal":10234},253,"VK_EXT_ycbcr_image_arrays",{"number":10959,"type":580,"author":10960,"provisional":10234,"depends":10961,"platform":10962,"contact":10963,"extension":10964,"proposal":10234},367,"FUCHSIA","VK_FUCHSIA_external_memory+(VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1)","fuchsia","John Rosasco @rosasco","VK_FUCHSIA_buffer_collection",{"number":10966,"type":580,"author":10960,"provisional":10234,"depends":10967,"platform":10962,"contact":10963,"extension":10968,"proposal":10234},365,"(VK_KHR_external_memory_capabilities+VK_KHR_external_memory),VK_VERSION_1_1","VK_FUCHSIA_external_memory",{"number":10970,"type":580,"author":10960,"provisional":10234,"depends":10971,"platform":10962,"contact":10963,"extension":10972,"proposal":10234},366,"VK_KHR_external_semaphore_capabilities+VK_KHR_external_semaphore","VK_FUCHSIA_external_semaphore",{"number":9629,"type":10520,"author":10960,"provisional":10234,"depends":10622,"platform":10962,"contact":10974,"extension":10975,"proposal":10234},"Craig Stout @cdotstout","VK_FUCHSIA_imagepipe_surface",{"number":9085,"type":580,"author":10977,"provisional":10234,"depends":10978,"platform":10979,"contact":10817,"extension":10980,"proposal":10234},"GGP","VK_KHR_swapchain+VK_GGP_stream_descriptor_surface","ggp","VK_GGP_frame_token",{"number":3641,"type":10520,"author":10977,"provisional":10234,"depends":10622,"platform":10979,"contact":10817,"extension":10982,"proposal":10234},"VK_GGP_stream_descriptor_surface",{"number":10984,"type":580,"author":10578,"provisional":10234,"contact":10985,"extension":10986,"proposal":10234},225,"Hai Nguyen @chaoticbob","VK_GOOGLE_decorate_string",{"number":6939,"type":580,"author":10578,"provisional":10234,"depends":10690,"contact":10988,"extension":10989,"proposal":10234},"Ian Elliott @ianelliottus","VK_GOOGLE_display_timing",{"number":10991,"type":580,"author":10578,"provisional":10234,"contact":10985,"extension":10992,"proposal":10234},224,"VK_GOOGLE_hlsl_functionality1",{"number":10994,"type":10520,"author":10578,"provisional":10234,"depends":10622,"specialuse":10485,"contact":10592,"extension":10995,"proposal":634},434,"VK_GOOGLE_surfaceless_query",{"number":10997,"type":580,"author":10578,"provisional":10234,"contact":10998,"extension":10999,"proposal":10234},290,"Kaye Mason @chaleur","VK_GOOGLE_user_type",{"number":11001,"type":580,"author":11002,"provisional":10234,"depends":10425,"contact":11003,"extension":11004,"proposal":634},405,"HUAWEI","Yuchang Wang @richard_Wang2","VK_HUAWEI_cluster_culling_shader",{"number":11006,"type":580,"author":11007,"provisional":10234,"depends":11008,"contact":11009,"extension":11010,"proposal":634},371,"Huawei","VK_KHR_ray_tracing_pipeline+(VK_KHR_synchronization2,VK_VERSION_1_3)","Pan Gao @PanGao-h","VK_HUAWEI_invocation_mask",{"number":11012,"type":580,"author":11002,"provisional":10234,"depends":11013,"contact":11009,"extension":11014,"proposal":10234},370,"((VK_KHR_create_renderpass2,VK_VERSION_1_2)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_HUAWEI_subpass_shading",{"number":1143,"type":580,"author":10832,"provisional":10234,"contact":10413,"extension":11016,"proposal":10234},"VK_IMG_filter_cubic",{"number":3702,"type":580,"author":10832,"deprecatedby":11018,"provisional":10234,"contact":11019,"extension":11020,"proposal":10234},null,"Stuart Smith","VK_IMG_format_pvrtc",{"number":7438,"type":580,"author":10832,"provisional":10234,"depends":10425,"specialuse":10485,"contact":10670,"extension":11022,"proposal":10234},"VK_IMG_relaxed_line_rasterization",{"number":9552,"type":580,"author":11024,"provisional":10234,"specialuse":10420,"contact":11025,"extension":11026,"proposal":10234},"INTEL","Lionel Landwerlin @llandwerlin","VK_INTEL_performance_query",{"number":9478,"type":580,"author":11024,"provisional":10234,"depends":10425,"contact":11028,"extension":11029,"proposal":10234},"Ian Romanick @ianromanick","VK_INTEL_shader_integer_functions2",{"number":6814,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11032,"ratified":10536,"contact":10495,"extension":11033,"proposal":10234},"KHR","(VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class),VK_VERSION_1_1","VK_KHR_16bit_storage",{"number":8761,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11032,"ratified":10536,"contact":11035,"extension":11036,"proposal":10234},"Alexander Galazin @alegal-arm","VK_KHR_8bit_storage",{"number":8188,"type":580,"author":11031,"provisional":10234,"depends":11038,"ratified":10536,"contact":10836,"extension":11039,"proposal":10234},"((VK_VERSION_1_1+VK_EXT_descriptor_indexing+VK_KHR_buffer_device_address),VK_VERSION_1_2)+VK_KHR_deferred_host_operations","VK_KHR_acceleration_structure",{"number":689,"type":10520,"author":11031,"provisional":10234,"depends":10622,"platform":10484,"ratified":10536,"contact":10490,"extension":11041,"proposal":10234},"VK_KHR_android_surface",{"number":8415,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10413,"extension":11043,"proposal":10234},"VK_KHR_bind_memory2",{"number":11045,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11046,"ratified":10536,"contact":10543,"extension":10553,"proposal":10234},258,"(VK_KHR_get_physical_device_properties2+VK_KHR_device_group),VK_VERSION_1_1",{"number":11048,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":10732,"extension":10556,"proposal":10234},544,{"number":11050,"type":580,"author":11031,"provisional":10234,"depends":11051,"ratified":10536,"contact":11052,"extension":11053,"proposal":634},512,"VK_KHR_get_physical_device_properties2","Jean-Noe Morissette @MagicPoncho","VK_KHR_compute_shader_derivatives",{"number":11055,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"contact":10504,"extension":11056,"proposal":634},507,"VK_KHR_cooperative_matrix",{"number":11058,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10560,"contact":10659,"extension":11059,"proposal":10234},338,"VK_KHR_copy_commands2",{"number":7429,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11061,"ratified":10536,"contact":11062,"extension":11063,"proposal":10234},"(VK_KHR_multiview+VK_KHR_maintenance2),VK_VERSION_1_1","Tobias Hector @tobias","VK_KHR_create_renderpass2",{"number":7778,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11065,"ratified":10536,"contact":10527,"extension":11066,"proposal":10234},"VK_KHR_get_memory_requirements2,VK_VERSION_1_1","VK_KHR_dedicated_allocation",{"number":11068,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":11069,"extension":11070,"proposal":10234},269,"Josh Barczak @jbarczak","VK_KHR_deferred_host_operations",{"number":9309,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11072,"ratified":10536,"contact":11073,"extension":11074,"proposal":10234},"VK_KHR_create_renderpass2,VK_VERSION_1_2","Jan-Harald Fredriksen @janharald","VK_KHR_depth_stencil_resolve",{"number":6835,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":11076,"extension":11077,"proposal":10234},"Markus Tavenrath @mtavenrath","VK_KHR_descriptor_update_template",{"number":6424,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11079,"ratified":10536,"contact":10543,"extension":11080,"proposal":10234},"VK_KHR_device_group_creation","VK_KHR_device_group",{"number":6571,"type":10520,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10543,"extension":11079,"proposal":10234},{"number":588,"type":10520,"author":11031,"provisional":10234,"depends":10622,"ratified":10560,"contact":11083,"extension":10619,"proposal":10234},"James Jones @cubanismo,Norbert Nopper @FslNopper",{"number":606,"type":580,"author":11031,"provisional":10234,"depends":11085,"ratified":10560,"contact":10527,"extension":11086,"proposal":10234},"VK_KHR_swapchain+VK_KHR_display","VK_KHR_display_swapchain",{"number":8614,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"ratified":10536,"contact":10549,"extension":10432,"proposal":10234},{"number":9215,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":10421,"extension":11089,"proposal":10234},"VK_KHR_driver_properties",{"number":3557,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":11091,"ratified":10536,"contact":10413,"extension":11092,"proposal":634},"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_KHR_dynamic_rendering",{"number":11094,"type":580,"author":10410,"provisional":10234,"depends":11095,"ratified":10536,"contact":10413,"extension":11096,"proposal":634},233,"VK_KHR_dynamic_rendering,VK_VERSION_1_3","VK_KHR_dynamic_rendering_local_read",{"number":7465,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11098,"ratified":10536,"contact":10490,"extension":11099,"proposal":10234},"VK_KHR_external_fence_capabilities","VK_KHR_external_fence",{"number":7456,"type":10520,"author":11031,"promotedto":10510,"provisional":10234,"depends":10425,"ratified":10536,"contact":10490,"extension":11098,"proposal":10234},{"number":7536,"type":580,"author":11031,"provisional":10234,"depends":11102,"ratified":10560,"contact":10490,"extension":11103,"proposal":10234},"VK_KHR_external_fence,VK_VERSION_1_1","VK_KHR_external_fence_fd",{"number":7488,"type":580,"author":11031,"provisional":10234,"depends":11099,"platform":10675,"ratified":10536,"contact":10490,"extension":11105,"proposal":10234},"VK_KHR_external_fence_win32",{"number":6588,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11107,"ratified":10536,"contact":10527,"extension":11108,"proposal":10234},"VK_KHR_external_memory_capabilities,VK_VERSION_1_1","VK_KHR_external_memory",{"number":6579,"type":10520,"author":11031,"promotedto":10510,"provisional":10234,"depends":10425,"ratified":10536,"contact":10527,"extension":11110,"proposal":10234},"VK_KHR_external_memory_capabilities",{"number":6648,"type":580,"author":11031,"provisional":10234,"depends":10649,"ratified":10560,"contact":10527,"extension":10653,"proposal":10234},{"number":6602,"type":580,"author":11031,"provisional":10234,"depends":10649,"platform":10675,"ratified":10536,"contact":10527,"extension":11113,"proposal":10234},"VK_KHR_external_memory_win32",{"number":6715,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11115,"ratified":10536,"contact":10527,"extension":11116,"proposal":10234},"VK_KHR_external_semaphore_capabilities","VK_KHR_external_semaphore",{"number":6702,"type":10520,"author":11031,"promotedto":10510,"provisional":10234,"depends":10425,"ratified":10536,"contact":10527,"extension":11115,"proposal":10234},{"number":6745,"type":580,"author":11031,"provisional":10234,"depends":11119,"ratified":10560,"contact":10527,"extension":11120,"proposal":10234},"VK_KHR_external_semaphore,VK_VERSION_1_1","VK_KHR_external_semaphore_fd",{"number":6731,"type":580,"author":11031,"provisional":10234,"depends":11116,"platform":10675,"ratified":10536,"contact":10527,"extension":11122,"proposal":10234},"VK_KHR_external_semaphore_win32",{"number":11124,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10536,"contact":11025,"extension":11125,"proposal":10234},361,"VK_KHR_format_feature_flags2",{"number":11127,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"contact":10417,"extension":11128,"proposal":634},323,"VK_KHR_fragment_shader_barycentric",{"number":11130,"type":580,"author":11031,"provisional":10234,"depends":11131,"ratified":10560,"contact":10413,"extension":11132,"proposal":634},227,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_create_renderpass2),VK_VERSION_1_2","VK_KHR_fragment_shading_rate",{"number":7680,"type":10520,"author":11031,"provisional":10234,"depends":10619,"ratified":10560,"contact":10527,"extension":11134,"proposal":10234},"VK_KHR_get_display_properties2",{"number":8107,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10757,"extension":11136,"proposal":10234},"VK_KHR_get_memory_requirements2",{"number":6412,"type":10520,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10543,"extension":11051,"proposal":10234},{"number":7623,"type":10520,"author":11031,"provisional":10234,"depends":10622,"ratified":10560,"contact":10527,"extension":11139,"proposal":10234},"VK_KHR_get_surface_capabilities2",{"number":8994,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":10413,"extension":10678,"proposal":10234},{"number":8115,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"ratified":10536,"contact":10757,"extension":11142,"proposal":10234},"VK_KHR_image_format_list",{"number":7421,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11144,"ratified":10536,"contact":11062,"extension":11145,"proposal":10234},"(((VK_KHR_get_physical_device_properties2+VK_KHR_maintenance2),VK_VERSION_1_1)+VK_KHR_image_format_list),VK_VERSION_1_2","VK_KHR_imageless_framebuffer",{"number":6826,"type":580,"author":11031,"provisional":10234,"depends":10690,"ratified":10560,"contact":10988,"extension":11147,"proposal":10234},"VK_KHR_incremental_present",{"number":11149,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":10549,"extension":10728,"proposal":10234},534,{"number":11151,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":10549,"extension":10747,"proposal":10234},535,{"number":11153,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":10592,"extension":10752,"proposal":634},527,{"number":6563,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10549,"extension":10449,"proposal":10234},{"number":7587,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":11156,"extension":11157,"proposal":10234},"Michael Worcester @michaelworcester","VK_KHR_maintenance2",{"number":8596,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":10787,"proposal":10234},{"number":11160,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10510,"ratified":10536,"contact":10549,"extension":11161,"proposal":10234},414,"VK_KHR_maintenance4",{"number":11163,"type":580,"author":11031,"provisional":10234,"depends":11164,"ratified":10536,"contact":11165,"extension":11166,"proposal":634},471,"(VK_VERSION_1_1+VK_KHR_dynamic_rendering),VK_VERSION_1_3","Stu Smith @stu-s","VK_KHR_maintenance5",{"number":11168,"type":580,"author":11031,"provisional":10234,"depends":10510,"ratified":10536,"contact":11169,"extension":11170,"proposal":634},546,"Jon Leech @oddhack","VK_KHR_maintenance6",{"number":11172,"type":580,"author":11031,"provisional":10234,"depends":10510,"ratified":10536,"contact":10537,"extension":11173,"proposal":634},563,"VK_KHR_maintenance7",{"number":11175,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":10757,"extension":10756,"proposal":634},272,{"number":3693,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":11177,"proposal":10234},"VK_KHR_multiview",{"extension":11179,"proposal":10234},"VK_KHR_object_refresh",{"number":7558,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"specialuse":10420,"contact":11181,"extension":11182,"proposal":10234},"Alon Or-bach @alonorbach","VK_KHR_performance_query",{"number":11184,"type":580,"author":11031,"provisional":10234,"depends":11166,"ratified":10536,"contact":11165,"extension":11185,"proposal":634},484,"VK_KHR_pipeline_binary",{"number":11187,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"specialuse":10420,"contact":10757,"extension":11188,"proposal":10234},270,"VK_KHR_pipeline_executable_properties",{"number":11190,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":10768,"extension":11191,"proposal":10234},291,"VK_KHR_pipeline_library",{"number":11193,"type":10520,"author":11031,"provisional":10234,"ratified":10536,"contact":11194,"extension":11195,"proposal":10234},395,"Charles Giessen @charles-lunarg","VK_KHR_portability_enumeration",{"number":8487,"type":580,"author":11031,"provisional":634,"depends":10425,"platform":10412,"ratified":10536,"contact":10773,"extension":11197,"proposal":10234},"VK_KHR_portability_subset",{"number":11199,"type":580,"author":11031,"provisional":10234,"depends":11200,"ratified":10536,"contact":11201,"extension":11202,"proposal":10234},295,"VK_KHR_swapchain+VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","Keith Packard @keithp","VK_KHR_present_id",{"number":11204,"type":580,"author":11031,"provisional":10234,"depends":11205,"ratified":10536,"contact":11201,"extension":11206,"proposal":10234},249,"VK_KHR_swapchain+VK_KHR_present_id","VK_KHR_present_wait",{"number":6754,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":11208,"proposal":10234},"VK_KHR_push_descriptor",{"number":11210,"type":580,"author":11031,"provisional":10234,"depends":11211,"ratified":10536,"contact":10836,"extension":11212,"proposal":10234},349,"VK_KHR_spirv_1_4+VK_KHR_acceleration_structure","VK_KHR_ray_query",{"number":11214,"type":580,"author":11031,"provisional":10234,"depends":11039,"ratified":10536,"contact":10836,"extension":11215,"proposal":10234},387,"VK_KHR_ray_tracing_maintenance1",{"number":11217,"type":580,"author":11031,"provisional":10234,"depends":11211,"ratified":10536,"contact":10836,"extension":11218,"proposal":10234},348,"VK_KHR_ray_tracing_pipeline",{"number":11220,"type":580,"author":11031,"provisional":10234,"depends":11039,"ratified":10536,"contact":11221,"extension":11222,"proposal":634},482,"Eric Werness","VK_KHR_ray_tracing_position_fetch",{"number":8077,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":11224,"extension":11225,"proposal":10234},"John Kessenich @johnkslang","VK_KHR_relaxed_block_layout",{"number":1121,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"ratified":10536,"contact":10413,"extension":11227,"proposal":10234},"VK_KHR_sampler_mirror_clamp_to_edge",{"number":8406,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11229,"ratified":10536,"contact":11230,"extension":11231,"proposal":10234},"(VK_KHR_maintenance1+VK_KHR_bind_memory2+VK_KHR_get_memory_requirements2+VK_KHR_get_physical_device_properties2),VK_VERSION_1_1","Andrew Garrard @fluppeteer","VK_KHR_sampler_ycbcr_conversion",{"number":11233,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11131,"ratified":10536,"contact":10549,"extension":11234,"proposal":10234},242,"VK_KHR_separate_depth_stencil_layouts",{"number":8788,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":11236,"extension":11237,"proposal":10234},"Aaron Hagan @ahagan","VK_KHR_shader_atomic_int64",{"number":8844,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":11236,"extension":11239,"proposal":10234},"VK_KHR_shader_clock",{"number":6469,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":10836,"extension":11241,"proposal":10234},"VK_KHR_shader_draw_parameters",{"number":11243,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"contact":10504,"extension":11244,"proposal":634},545,"VK_KHR_shader_expect_assume",{"number":6798,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":11035,"extension":10438,"proposal":10234},{"number":9236,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":11035,"extension":11247,"proposal":10234},"VK_KHR_shader_float_controls",{"number":11249,"type":580,"author":11031,"provisional":10234,"depends":11250,"ratified":10536,"contact":10588,"extension":11251,"proposal":634},529,"VK_VERSION_1_1+VK_KHR_shader_float_controls","VK_KHR_shader_float_controls2",{"number":11253,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10536,"contact":10504,"extension":11254,"proposal":634},281,"VK_KHR_shader_integer_dot_product",{"number":11256,"type":580,"author":11031,"provisional":10234,"depends":10510,"ratified":10536,"contact":11257,"extension":11258,"proposal":634},435,"Alan Baker @alan-baker","VK_KHR_shader_maximal_reconvergence",{"number":11260,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"ratified":10536,"contact":10575,"extension":11261,"proposal":10234},294,"VK_KHR_shader_non_semantic_info",{"number":11263,"type":580,"author":11031,"provisional":10234,"depends":11264,"ratified":10536,"contact":10413,"extension":11265,"proposal":634},236,"VK_VERSION_1_1+VK_KHR_vulkan_memory_model+VK_KHR_shader_maximal_reconvergence","VK_KHR_shader_quad_control",{"number":11267,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":11268,"extension":11269,"proposal":634},559,"Nathan Gauër @Keenuts","VK_KHR_shader_relaxed_extended_instruction",{"number":8735,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10510,"ratified":10536,"contact":10909,"extension":11271,"proposal":10234},"VK_KHR_shader_subgroup_extended_types",{"number":11273,"type":580,"author":11031,"provisional":10234,"ratified":10536,"contact":10504,"extension":11274,"proposal":634},417,"VK_KHR_shader_subgroup_rotate",{"number":11276,"type":580,"author":11031,"provisional":10234,"depends":10510,"ratified":10536,"contact":11257,"extension":11277,"proposal":10234},324,"VK_KHR_shader_subgroup_uniform_control_flow",{"number":9637,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10560,"contact":10490,"extension":11279,"proposal":10234},"VK_KHR_shader_terminate_invocation",{"number":7447,"type":580,"author":11031,"provisional":10234,"depends":11281,"ratified":10560,"contact":11181,"extension":11282,"proposal":10234},"VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_KHR_shared_presentable_image",{"number":11284,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":11250,"ratified":10536,"contact":10490,"extension":10767,"proposal":10234},237,{"number":7892,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"ratified":10536,"contact":11035,"extension":11286,"proposal":10234},"VK_KHR_storage_buffer_storage_class",{"number":546,"type":10520,"author":11031,"provisional":10234,"ratified":10560,"contact":11288,"extension":10622,"proposal":10234},"James Jones @cubanismo,Ian Elliott @ianelliottus",{"number":11290,"type":10520,"author":11031,"provisional":10234,"depends":11291,"ratified":10536,"contact":11292,"extension":11293,"proposal":10234},240,"VK_VERSION_1_1+VK_KHR_get_surface_capabilities2","Sandeep Shinde @sashinde","VK_KHR_surface_protected_capabilities",{"number":568,"type":580,"author":11031,"provisional":10234,"depends":10622,"ratified":10560,"contact":11288,"extension":10690,"proposal":10234},{"number":9317,"type":580,"author":11031,"provisional":10234,"depends":11296,"ratified":10560,"contact":10421,"extension":11297,"proposal":10234},"VK_KHR_swapchain+(VK_KHR_maintenance2,VK_VERSION_1_1)+(VK_KHR_image_format_list,VK_VERSION_1_2)","VK_KHR_swapchain_mutable_format",{"number":11299,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10560,"contact":10413,"extension":11300,"proposal":10234},315,"VK_KHR_synchronization2",{"number":9430,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":10757,"extension":11302,"proposal":10234},"VK_KHR_timeline_semaphore",{"number":11304,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":10588,"extension":11305,"proposal":10234},254,"VK_KHR_uniform_buffer_standard_layout",{"number":7644,"type":580,"author":11031,"promotedto":10510,"provisional":10234,"depends":11032,"ratified":10536,"contact":10490,"extension":11307,"proposal":10234},"VK_KHR_variable_pointers",{"number":11309,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10560,"contact":10592,"extension":10947,"proposal":634},526,{"number":11311,"type":580,"author":11031,"provisional":10234,"depends":11312,"ratified":10536,"contact":10732,"extension":11313,"proposal":634},513,"VK_KHR_video_decode_queue","VK_KHR_video_decode_av1",{"number":3515,"type":580,"author":11031,"provisional":10234,"depends":11312,"ratified":10536,"contact":11315,"extension":11316,"proposal":634},"peter.fang@amd.com","VK_KHR_video_decode_h264",{"number":8985,"type":580,"author":11031,"provisional":10234,"depends":11312,"ratified":10536,"contact":11315,"extension":11318,"proposal":634},"VK_KHR_video_decode_h265",{"number":1273,"type":580,"author":11031,"provisional":10234,"depends":11320,"ratified":10536,"contact":11321,"extension":11312,"proposal":634},"VK_KHR_video_queue+(VK_KHR_synchronization2,VK_VERSION_1_3)","jake.beju@amd.com",{"number":3490,"type":580,"author":11031,"provisional":10234,"depends":11323,"ratified":10536,"contact":11324,"extension":11325,"proposal":634},"VK_KHR_video_encode_queue","Ahmed Abdelkhalek @aabdelkh","VK_KHR_video_encode_h264",{"number":3507,"type":580,"author":11031,"provisional":10234,"depends":11323,"ratified":10536,"contact":11324,"extension":11327,"proposal":634},"VK_KHR_video_encode_h265",{"number":11329,"type":580,"author":11031,"provisional":10234,"depends":11320,"ratified":10536,"contact":11324,"extension":11323,"proposal":634},300,{"number":11331,"type":580,"author":11031,"provisional":10234,"depends":11332,"ratified":10536,"contact":10732,"extension":11333,"proposal":634},516,"VK_KHR_video_queue","VK_KHR_video_maintenance1",{"number":1257,"type":580,"author":11031,"provisional":10234,"depends":11335,"ratified":10536,"contact":10953,"extension":11332,"proposal":634},"(VK_VERSION_1_1+VK_KHR_synchronization2),VK_VERSION_1_3",{"number":9560,"type":580,"author":11031,"promotedto":10603,"provisional":10234,"depends":10425,"ratified":10536,"contact":10543,"extension":11337,"proposal":10234},"VK_KHR_vulkan_memory_model",{"number":657,"type":10520,"author":11031,"provisional":10234,"depends":10622,"platform":11339,"ratified":10536,"contact":11340,"extension":11341,"proposal":10234},"wayland","Jesse Hall @critsec,Ian Elliott @ianelliottus","VK_KHR_wayland_surface",{"number":6661,"type":580,"author":11031,"provisional":10234,"depends":11113,"platform":10675,"ratified":10536,"contact":11343,"extension":11344,"proposal":10234},"Carsten Rohde @crohde","VK_KHR_win32_keyed_mutex",{"number":707,"type":10520,"author":11031,"provisional":10234,"depends":10622,"platform":10675,"ratified":10536,"contact":11340,"extension":11346,"proposal":10234},"VK_KHR_win32_surface",{"number":11348,"type":580,"author":11031,"provisional":10234,"depends":10425,"ratified":10536,"contact":11349,"extension":11350,"proposal":10234},337,"Caio Marcelo de Oliveira Filho @cmarcelo","VK_KHR_workgroup_memory_explicit_layout",{"number":640,"type":10520,"author":11031,"provisional":10234,"depends":10622,"platform":11352,"ratified":10536,"contact":11340,"extension":11353,"proposal":10234},"xcb","VK_KHR_xcb_surface",{"number":630,"type":10520,"author":11031,"provisional":10234,"depends":10622,"platform":11355,"ratified":10536,"contact":11340,"extension":11356,"proposal":10234},"xlib","VK_KHR_xlib_surface",{"number":11358,"type":580,"author":11031,"promotedto":10514,"provisional":10234,"depends":10425,"ratified":10536,"contact":11257,"extension":11359,"proposal":10234},326,"VK_KHR_zero_initialize_workgroup_memory",{"number":11361,"type":10520,"author":10940,"provisional":10234,"contact":11194,"extension":11362,"proposal":634},460,"VK_LUNARG_direct_driver_loading",{"number":11364,"type":580,"author":11365,"provisional":10234,"depends":10425,"specialuse":10584,"contact":10822,"extension":11366,"proposal":10234},576,"MESA","VK_MESA_image_alignment_control",{"number":11368,"type":580,"author":11369,"provisional":10234,"depends":10425,"contact":11370,"extension":11371,"proposal":634},531,"MSFT","Jesse Natalie @jenatali","VK_MSFT_layered_driver",{"number":7697,"type":10520,"author":11373,"deprecatedby":10777,"provisional":10234,"depends":10622,"platform":11374,"contact":10773,"extension":11375,"proposal":10234},"MVK","ios","VK_MVK_ios_surface",{"number":7721,"type":10520,"author":11373,"deprecatedby":10777,"provisional":10234,"depends":10622,"platform":11377,"contact":10773,"extension":11378,"proposal":10234},"macos","VK_MVK_macos_surface",{"number":6461,"type":10520,"author":11380,"provisional":10234,"depends":10622,"platform":11381,"contact":11382,"extension":11383,"proposal":10234},"NN","vi","Mathias Heyer gitlab:@mheyer","VK_NN_vi_surface",{"number":1325,"type":580,"author":11385,"provisional":10234,"contact":11386,"extension":11387,"proposal":10234},"NVX","Eric Werness @ewerness-nv,Liam Middlebrook @liam-middlebrook","VK_NVX_binary_import",{"number":1334,"type":580,"author":11385,"provisional":10234,"contact":11389,"extension":11390,"proposal":10234},"Eric Werness @ewerness-nv","VK_NVX_image_view_handle",{"number":7051,"type":580,"author":11385,"provisional":10234,"depends":11392,"contact":10543,"extension":11393,"proposal":10234},"VK_KHR_multiview,VK_VERSION_1_1","VK_NVX_multiview_per_view_attributes",{"number":11395,"type":580,"author":10525,"provisional":10234,"depends":10521,"platform":10675,"contact":11396,"extension":11397,"proposal":10234},346,"Jeff Juliano @jjuliano","VK_NV_acquire_winrt_display",{"number":6872,"type":580,"author":10525,"provisional":10234,"contact":11389,"extension":11399,"proposal":10234},"VK_NV_clip_space_w_scaling",{"number":11401,"type":580,"author":10525,"provisional":10234,"contact":11402,"extension":11403,"proposal":10234},560,"Lujin Wang @lujinwangnv","VK_NV_command_buffer_inheritance",{"number":9325,"type":580,"author":10525,"promotedto":11053,"provisional":10234,"depends":10425,"contact":11405,"extension":11406,"proposal":10234},"Pat Brown @nvpbrown","VK_NV_compute_shader_derivatives",{"number":11408,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":10543,"extension":11409,"proposal":10234},250,"VK_NV_cooperative_matrix",{"number":11411,"type":580,"author":10525,"provisional":10234,"depends":11412,"contact":10642,"extension":11413,"proposal":10234},427,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_buffer_device_address),VK_VERSION_1_2","VK_NV_copy_memory_indirect",{"number":3658,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":10836,"extension":11415,"proposal":10234},"VK_NV_corner_sampled_image",{"number":11417,"type":580,"author":10525,"provisional":10234,"depends":11418,"contact":11419,"extension":11420,"proposal":10234},251,"VK_NV_framebuffer_mixed_samples+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","Kedarnath Thangudu @kthangudu","VK_NV_coverage_reduction_mode",{"number":11422,"type":580,"author":10525,"provisional":634,"contact":11423,"extension":11424,"proposal":10234},308,"Tristan Lorach @tlorach","VK_NV_cuda_kernel_launch",{"number":1291,"type":580,"author":10525,"deprecatedby":11066,"provisional":10234,"contact":10543,"extension":11426,"proposal":10234},"VK_NV_dedicated_allocation",{"number":11428,"type":580,"author":11429,"provisional":10234,"depends":11430,"contact":11431,"extension":11432,"proposal":10234},241,"NVIDIA","(VK_KHR_dedicated_allocation+VK_KHR_get_physical_device_properties2),VK_VERSION_1_1","Nuno Subtil @nsubtil","VK_NV_dedicated_allocation_image_aliasing",{"number":11434,"type":580,"author":10525,"provisional":10234,"depends":10510,"contact":10549,"extension":11435,"proposal":10234},547,"VK_NV_descriptor_pool_overallocation",{"number":9422,"type":580,"author":11429,"provisional":10234,"depends":10425,"contact":11431,"extension":11437,"proposal":10234},"VK_NV_device_diagnostic_checkpoints",{"number":11439,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11419,"extension":11440,"proposal":10234},301,"VK_NV_device_diagnostics_config",{"number":11442,"type":580,"author":10525,"provisional":10234,"depends":11443,"contact":10768,"extension":11444,"proposal":10234},278,"(VK_VERSION_1_1+VK_KHR_buffer_device_address),VK_VERSION_1_2","VK_NV_device_generated_commands",{"number":11446,"type":580,"author":10525,"provisional":10234,"depends":11444,"contact":10642,"extension":11447,"proposal":10234},429,"VK_NV_device_generated_commands_compute",{"number":11449,"type":580,"author":10525,"provisional":634,"depends":10802,"platform":10412,"contact":11450,"extension":11451,"proposal":10234},398,"Christoph Kubisch @pixeljetstream, Eric Werness @ewerness-nv","VK_NV_displacement_micromap",{"number":11453,"type":580,"author":10525,"provisional":10234,"contact":11454,"extension":11455,"proposal":10234},493,"Russell Chou @russellcnv","VK_NV_extended_sparse_address_space",{"number":6368,"type":580,"author":10525,"deprecatedby":11108,"provisional":10234,"depends":11457,"contact":10527,"extension":11458,"proposal":10234},"VK_NV_external_memory_capabilities","VK_NV_external_memory",{"number":6360,"type":10520,"author":10525,"deprecatedby":11110,"provisional":10234,"contact":10527,"extension":11457,"proposal":10234},{"number":11461,"type":580,"author":10525,"provisional":10234,"depends":10649,"contact":11343,"extension":11462,"proposal":10234},372,"VK_NV_external_memory_rdma",{"extension":11464,"proposal":10234},"VK_NV_external_memory_sci_buf",{"number":6384,"type":580,"author":10525,"deprecatedby":11113,"provisional":10234,"depends":11458,"platform":10675,"contact":10527,"extension":11466,"proposal":10234},"VK_NV_external_memory_win32",{"extension":11468,"proposal":10234},"VK_NV_external_sci_sync",{"extension":11470,"proposal":10234},"VK_NV_external_sci_sync2",{"number":8380,"type":580,"author":10525,"provisional":10234,"contact":10543,"extension":11472,"proposal":10234},"VK_NV_fill_rectangle",{"number":8179,"type":580,"author":10525,"provisional":10234,"contact":10543,"extension":11474,"proposal":10234},"VK_NV_fragment_coverage_to_color",{"number":9343,"type":580,"author":10525,"promotedto":11128,"provisional":10234,"depends":10425,"contact":11405,"extension":11476,"proposal":10234},"VK_NV_fragment_shader_barycentric",{"number":11478,"type":580,"author":10525,"provisional":10234,"depends":11132,"contact":11405,"extension":11479,"proposal":10234},327,"VK_NV_fragment_shading_rate_enums",{"number":8254,"type":580,"author":10525,"provisional":10234,"contact":10543,"extension":11481,"proposal":10234},"VK_NV_framebuffer_mixed_samples",{"number":7034,"type":580,"author":10525,"provisional":10234,"contact":10836,"extension":11483,"proposal":10234},"VK_NV_geometry_shader_passthrough",{"number":1079,"type":580,"author":10525,"deprecatedby":11018,"provisional":10234,"contact":10549,"extension":11485,"proposal":10234},"VK_NV_glsl_shader",{"number":11487,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11488,"extension":11489,"proposal":10234},279,"David Zhao Akeley @akeley98","VK_NV_inherited_viewport_scissor",{"number":11491,"type":580,"author":11429,"provisional":10234,"depends":10425,"contact":11492,"extension":11493,"proposal":10234},431,"sourav parmar @souravpNV","VK_NV_linear_color_attachment",{"number":11495,"type":580,"author":10525,"provisional":10234,"contact":11496,"extension":11497,"proposal":10234},311,"Charles Hansen @cshansen","VK_NV_low_latency",{"number":11499,"type":580,"author":10525,"provisional":10234,"depends":11500,"contact":11496,"extension":11501,"proposal":10234},506,"VK_VERSION_1_2,VK_KHR_timeline_semaphore","VK_NV_low_latency2",{"number":11503,"type":580,"author":10525,"provisional":10234,"depends":11412,"contact":10642,"extension":11504,"proposal":10234},428,"VK_NV_memory_decompression",{"number":9334,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":10768,"extension":11506,"proposal":10234},"VK_NV_mesh_shader",{"number":11508,"type":580,"author":10525,"provisional":10234,"depends":11509,"contact":11343,"extension":11510,"proposal":10234},465,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_format_feature_flags2+VK_KHR_synchronization2),VK_VERSION_1_3","VK_NV_optical_flow",{"number":11512,"type":580,"author":10525,"provisional":10234,"depends":11170,"contact":10549,"extension":11513,"proposal":10234},517,"VK_NV_per_stage_descriptor_set",{"number":11515,"type":580,"author":10525,"provisional":10234,"depends":10674,"contact":11516,"extension":11517,"proposal":10234},293,"Liya Li @liyli","VK_NV_present_barrier",{"extension":11519,"proposal":10234},"VK_NV_private_vendor_info",{"number":11521,"type":580,"author":10525,"provisional":10234,"contact":11522,"extension":11523,"proposal":10234},556,"Rodrigo Locatti @rlocatti","VK_NV_raw_access_chains",{"number":8552,"type":580,"author":10525,"deprecatedby":11218,"provisional":10234,"depends":11525,"contact":11389,"extension":11526,"proposal":10234},"(VK_KHR_get_physical_device_properties2+VK_KHR_get_memory_requirements2),VK_VERSION_1_1","VK_NV_ray_tracing",{"number":11528,"type":580,"author":10525,"provisional":10234,"depends":11218,"contact":11389,"extension":11529,"proposal":10234},491,"VK_NV_ray_tracing_invocation_reorder",{"number":11531,"type":580,"author":10525,"provisional":10234,"depends":11218,"contact":11221,"extension":11532,"proposal":10234},328,"VK_NV_ray_tracing_motion_blur",{"number":11534,"type":580,"author":10525,"provisional":10234,"contact":10642,"extension":11535,"proposal":634},569,"VK_NV_ray_tracing_validation",{"number":8560,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11419,"extension":11537,"proposal":10234},"VK_NV_representative_fragment_test",{"number":7001,"type":580,"author":10525,"provisional":10234,"contact":10549,"extension":11539,"proposal":10234},"VK_NV_sample_mask_override_coverage",{"number":9370,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11405,"extension":11541,"proposal":10234},"VK_NV_scissor_exclusive",{"number":11543,"type":580,"author":10525,"provisional":10234,"contact":10543,"extension":11544,"proposal":10234},564,"VK_NV_shader_atomic_float16_vector",{"number":9361,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11405,"extension":11546,"proposal":10234},"VK_NV_shader_image_footprint",{"number":8388,"type":580,"author":10525,"provisional":10234,"depends":10510,"contact":10836,"extension":11548,"proposal":10234},"VK_NV_shader_sm_builtins",{"number":9301,"type":580,"author":10525,"provisional":10234,"depends":10510,"contact":10543,"extension":11550,"proposal":10234},"VK_NV_shader_subgroup_partitioned",{"number":8514,"type":580,"author":10525,"provisional":10234,"depends":10425,"contact":11405,"extension":11552,"proposal":10234},"VK_NV_shading_rate_image",{"number":7042,"type":580,"author":10525,"provisional":10234,"contact":10836,"extension":11554,"proposal":10234},"VK_NV_viewport_array2",{"number":7103,"type":580,"author":10525,"provisional":10234,"contact":10549,"extension":11556,"proposal":10234},"VK_NV_viewport_swizzle",{"number":6396,"type":580,"author":10525,"promotedto":11344,"provisional":10234,"depends":11466,"platform":10675,"contact":11343,"extension":11558,"proposal":10234},"VK_NV_win32_keyed_mutex",{"number":11560,"type":580,"author":10658,"provisional":10234,"depends":11561,"contact":10659,"extension":11562,"proposal":10234},522,"(VK_EXT_filter_cubic)+(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)","VK_QCOM_filter_cubic_clamp",{"number":11564,"type":580,"author":10658,"provisional":10234,"depends":10660,"contact":10659,"extension":11565,"proposal":10234},520,"VK_QCOM_filter_cubic_weights",{"number":11567,"type":580,"author":10658,"provisional":10234,"depends":11568,"contact":10659,"extension":11569,"proposal":10234},426,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_fragment_density_map","VK_QCOM_fragment_density_map_offset",{"number":11571,"type":580,"author":10658,"provisional":10234,"depends":11572,"contact":10659,"extension":11573,"proposal":634},441,"VK_KHR_format_feature_flags2,VK_VERSION_1_3","VK_QCOM_image_processing",{"number":11575,"type":580,"author":10658,"provisional":10234,"depends":11573,"contact":10659,"extension":11576,"proposal":10234},519,"VK_QCOM_image_processing2",{"number":11578,"type":580,"author":10658,"provisional":10234,"contact":10659,"extension":11579,"proposal":10234},511,"VK_QCOM_multiview_per_view_render_areas",{"number":11581,"type":580,"author":10658,"provisional":10234,"depends":10425,"contact":10659,"extension":11582,"proposal":10234},489,"VK_QCOM_multiview_per_view_viewports",{"number":8678,"type":580,"author":10658,"provisional":10234,"contact":10659,"extension":11584,"proposal":10234},"VK_QCOM_render_pass_shader_resolve",{"number":11586,"type":580,"author":10658,"provisional":10234,"contact":10659,"extension":11587,"proposal":10234},302,"VK_QCOM_render_pass_store_ops",{"number":11589,"type":580,"author":10658,"provisional":10234,"contact":10659,"extension":11590,"proposal":10234},283,"VK_QCOM_render_pass_transform",{"number":11592,"type":580,"author":10658,"provisional":10234,"depends":11593,"contact":10659,"extension":11594,"proposal":10234},334,"VK_KHR_copy_commands2,VK_VERSION_1_3","VK_QCOM_rotated_copy_commands",{"number":11596,"type":580,"author":10658,"provisional":10234,"depends":10425,"contact":10659,"extension":11597,"proposal":634},485,"VK_QCOM_tile_properties",{"number":11599,"type":580,"author":10658,"provisional":10234,"contact":10659,"extension":11600,"proposal":10234},521,"VK_QCOM_ycbcr_degamma",{"number":11602,"type":580,"author":11603,"provisional":10234,"depends":10489,"platform":11604,"contact":11605,"extension":11606,"proposal":10234},530,"QNX","screen","Mike Gorchak @mgorchak-blackberry, Aaron Ruby @aruby-blackberry","VK_QNX_external_memory_screen_buffer",{"number":11608,"type":10520,"author":11603,"provisional":10234,"depends":10622,"platform":11604,"contact":11609,"extension":11610,"proposal":10234},379,"Mike Gorchak @mgorchak-blackberry","VK_QNX_screen_surface",{"number":11612,"type":580,"author":11613,"provisional":10234,"depends":10425,"contact":10609,"extension":11614,"proposal":10234},486,"SEC","VK_SEC_amigo_profiling",{"number":11616,"type":580,"author":11617,"provisional":10234,"depends":10425,"specialuse":10584,"contact":10822,"extension":11618,"proposal":10234},421,"VALVE","VK_VALVE_descriptor_set_host_mapping",{"number":11620,"type":580,"author":11617,"promotedto":10789,"provisional":10234,"depends":10787,"specialuse":10584,"contact":10788,"extension":131,"proposal":10234},352,1725732644486]