[{"data":1,"prerenderedAt":9377},["ShallowReactive",2],{"GlLoeED0gt":3,"VyF3Mmj32r":7792,"N9m89Rcq0G":8017},{"title":4,"description":5,"body":6,"_type":7790,"_id":7791},"Synchronization and Cache Control","Synchronization of access to resources is primarily the responsibility of\nthe application in Vulkan.\nThe order of execution of commands with respect to the host and other\ncommands on the device has few implicit guarantees, and needs to be\nexplicitly specified.\nMemory caches and other optimizations are also explicitly managed, requiring\nthat the flow of data through the system is largely under application\ncontrol.",{"type":7,"children":8,"toc":7753},"root",[9,17,22,27,39,51,61,71,81,101,111,121,131,145,152,186,191,209,213,242,468,472,523,574,584,588,628,656,660,672,690,700,704,736,749,1007,1016,1023,1074,1105,1138,1175,1188,1200,1204,1225,1289,1330,1336,1355,1383,1414,1431,1442,1452,1461,1470,1474,1501,1524,1538,1563,2867,2871,2891,2910,2953,2962,2991,2996,3103,3108,3175,3180,3199,3204,3215,3227,3247,3252,3264,3269,3281,3286,3297,3302,3313,3318,3329,3334,3345,3350,3361,3366,3385,3390,3401,3406,3417,3423,3448,3452,3490,3499,3508,3517,3526,3530,3572,3584,3611,3617,3634,3672,3696,3712,3737,3748,3758,3786,3815,3828,3883,3925,3933,3939,3957,3977,4010,4016,4041,4072,4077,4083,4088,4092,4109,4114,4219,4234,4251,4269,4280,4284,4294,4378,4401,4426,4478,4483,4493,4503,4513,4522,4531,4540,4549,4558,4567,4576,4585,4594,4603,4607,4616,4620,4639,4697,4708,4718,4728,4737,4741,4759,4769,4790,4819,4825,4841,4850,4859,4868,4877,4886,4895,4901,4923,4937,4961,4988,4993,5028,5046,5091,5096,5118,5126,5173,5202,5224,5233,5241,5250,5257,5266,5275,5280,5289,5298,5307,5316,5325,5334,5343,5352,5361,5370,5379,5388,5397,5406,5415,5424,5430,5448,5482,5549,5559,5568,5577,5583,5599,5635,5640,5705,5714,5723,5728,5741,5952,5958,5976,6023,6029,6047,6085,6093,6101,6110,6119,6128,6136,6144,6150,6181,6206,6211,6265,6301,6339,6347,6389,6418,6446,6468,6512,6521,6529,6538,6546,6555,6563,6572,6581,6586,6595,6604,6613,6622,6631,6640,6649,6653,6662,6666,6675,6685,6689,6698,6707,6715,6719,6728,6736,6745,6754,6759,6768,6776,6785,6794,6800,6846,6852,6857,6866,6874,6880,6904,6913,6921,6931,6937,6966,6974,6982,6987,6996,7005,7011,7035,7044,7060,7069,7078,7083,7096,7119,7124,7137,7147,7227,7310,7323,7384,7451,7476,7497,7509,7552,7561,7567,7576,7585,7591,7603,7619,7634,7655,7665,7674,7680,7685,7690,7710,7720,7726,7735,7744],{"type":10,"tag":11,"props":12,"children":14},"element","h1",{"id":13},"synchronization",[15],{"type":16,"value":4},"text",{"type":10,"tag":18,"props":19,"children":20},"p",{},[21],{"type":16,"value":5},{"type":10,"tag":18,"props":23,"children":24},{},[25],{"type":16,"value":26},"Whilst some implicit guarantees exist between commands, five explicit\nsynchronization mechanisms are exposed by Vulkan:",{"type":10,"tag":28,"props":29,"children":31},"h6",{"id":30},"fences",[32],{"type":10,"tag":33,"props":34,"children":36},"a",{"href":35},"/chapters/synchronization#synchronization-fences",[37],{"type":16,"value":38},"Fences",{"type":10,"tag":18,"props":40,"children":41},{},[42,44,49],{"type":16,"value":43},"Fences ",{"type":10,"tag":45,"props":46,"children":48},"normative",{"type":47},"can",[],{"type":16,"value":50}," be used to communicate to the host that execution of some\ntask on the device has completed, controlling resource access between\nhost and device.",{"type":10,"tag":28,"props":52,"children":54},{"id":53},"semaphores",[55],{"type":10,"tag":33,"props":56,"children":58},{"href":57},"/chapters/synchronization#synchronization-semaphores",[59],{"type":16,"value":60},"Semaphores",{"type":10,"tag":18,"props":62,"children":63},{},[64,66,69],{"type":16,"value":65},"Semaphores ",{"type":10,"tag":45,"props":67,"children":68},{"type":47},[],{"type":16,"value":70}," be used to control resource access across multiple\nqueues.",{"type":10,"tag":28,"props":72,"children":74},{"id":73},"events",[75],{"type":10,"tag":33,"props":76,"children":78},{"href":77},"/chapters/synchronization#synchronization-events",[79],{"type":16,"value":80},"Events",{"type":10,"tag":18,"props":82,"children":83},{},[84,86,89,91,94,96,99],{"type":16,"value":85},"Events provide a fine-grained synchronization primitive which ",{"type":10,"tag":45,"props":87,"children":88},{"type":47},[],{"type":16,"value":90}," be\nsignaled either within a command buffer or by the host, and ",{"type":10,"tag":45,"props":92,"children":93},{"type":47},[],{"type":16,"value":95}," be\nwaited upon within a command buffer or queried on the host.\nEvents ",{"type":10,"tag":45,"props":97,"children":98},{"type":47},[],{"type":16,"value":100}," be used to control resource access within a single queue.",{"type":10,"tag":28,"props":102,"children":104},{"id":103},"pipeline-barriers",[105],{"type":10,"tag":33,"props":106,"children":108},{"href":107},"/chapters/synchronization#synchronization-pipeline-barriers",[109],{"type":16,"value":110},"Pipeline Barriers",{"type":10,"tag":18,"props":112,"children":113},{},[114,116,119],{"type":16,"value":115},"Pipeline barriers also provide synchronization control within a command\nbuffer, but at a single point, rather than with separate signal and wait\noperations.\nPipeline barriers ",{"type":10,"tag":45,"props":117,"children":118},{"type":47},[],{"type":16,"value":120}," be used to control resource access within a\nsingle queue.",{"type":10,"tag":28,"props":122,"children":124},{"id":123},"render-pass-objects",[125],{"type":10,"tag":33,"props":126,"children":128},{"href":127},"/chapters/renderpass#renderpass-objects",[129],{"type":16,"value":130},"Render Pass Objects",{"type":10,"tag":18,"props":132,"children":133},{},[134,136,139,141,144],{"type":16,"value":135},"Render pass objects provide a synchronization framework for rendering\ntasks, built upon the concepts in this chapter.\nMany cases that would otherwise need an application to use other\nsynchronization primitives ",{"type":10,"tag":45,"props":137,"children":138},{"type":47},[],{"type":16,"value":140}," be expressed more efficiently as part of\na render pass.\nRender pass objects ",{"type":10,"tag":45,"props":142,"children":143},{"type":47},[],{"type":16,"value":120},{"type":10,"tag":146,"props":147,"children":149},"h2",{"id":148},"synchronization-dependencies",[150],{"type":16,"value":151},"Execution and Memory Dependencies",{"type":10,"tag":18,"props":153,"children":154},{},[155,157,163,165,170,172,177,179,184],{"type":16,"value":156},"An ",{"type":10,"tag":158,"props":159,"children":160},"em",{},[161],{"type":16,"value":162},"operation",{"type":16,"value":164}," is an arbitrary amount of work to be executed on the host, a\ndevice, or an external entity such as a presentation engine.\nSynchronization commands introduce explicit ",{"type":10,"tag":158,"props":166,"children":167},{},[168],{"type":16,"value":169},"execution dependencies",{"type":16,"value":171},", and\n",{"type":10,"tag":158,"props":173,"children":174},{},[175],{"type":16,"value":176},"memory dependencies",{"type":16,"value":178}," between two sets of operations defined by the\ncommand’s two ",{"type":10,"tag":158,"props":180,"children":181},{},[182],{"type":16,"value":183},"synchronization scopes",{"type":16,"value":185},".",{"type":10,"tag":187,"props":188,"children":190},"anchor",{"id":189},"synchronization-dependencies-scopes",[],{"type":10,"tag":18,"props":192,"children":193},{},[194,196,199,201,207],{"type":16,"value":195},"The synchronization scopes define which other operations a synchronization\ncommand is able to create execution dependencies with.\nAny type of operation that is not in a synchronization command’s\nsynchronization scopes will not be included in the resulting dependency.\nFor example, for many synchronization commands, the synchronization scopes\n",{"type":10,"tag":45,"props":197,"children":198},{"type":47},[],{"type":16,"value":200}," be limited to just operations executing in specific\n",{"type":10,"tag":33,"props":202,"children":204},{"href":203},"/chapters/synchronization#synchronization-pipeline-stages",[205],{"type":16,"value":206},"pipeline stages",{"type":16,"value":208},", which allows other\npipeline stages to be excluded from a dependency.\nOther scoping options are possible, depending on the particular command.",{"type":10,"tag":187,"props":210,"children":212},{"id":211},"synchronization-dependencies-execution",[],{"type":10,"tag":18,"props":214,"children":215},{},[216,217,222,224,228,230,235,237,240],{"type":16,"value":156},{"type":10,"tag":158,"props":218,"children":219},{},[220],{"type":16,"value":221},"execution dependency",{"type":16,"value":223}," is a guarantee that for two sets of operations,\nthe first set ",{"type":10,"tag":45,"props":225,"children":227},{"type":226},"must",[],{"type":16,"value":229}," ",{"type":10,"tag":158,"props":231,"children":232},{},[233],{"type":16,"value":234},"happen-before",{"type":16,"value":236}," the second set.\nIf an operation happens-before another operation, then the first operation\n",{"type":10,"tag":45,"props":238,"children":239},{"type":226},[],{"type":16,"value":241}," complete before the second operation is initiated.\nMore precisely:",{"type":10,"tag":243,"props":244,"children":245},"ul",{},[246,276,287,318,352,383,438],{"type":10,"tag":247,"props":248,"children":249},"li",{},[250,252,263,265,274],{"type":16,"value":251},"Let ",{"type":10,"tag":158,"props":253,"children":254},{},[255,257],{"type":16,"value":256},"Ops",{"type":10,"tag":258,"props":259,"children":260},"sub",{},[261],{"type":16,"value":262},"1",{"type":16,"value":264}," and ",{"type":10,"tag":158,"props":266,"children":267},{},[268,269],{"type":16,"value":256},{"type":10,"tag":258,"props":270,"children":271},{},[272],{"type":16,"value":273},"2",{"type":16,"value":275}," be separate sets of operations.",{"type":10,"tag":247,"props":277,"children":278},{},[279,280,285],{"type":16,"value":251},{"type":10,"tag":158,"props":281,"children":282},{},[283],{"type":16,"value":284},"Sync",{"type":16,"value":286}," be a synchronization command.",{"type":10,"tag":247,"props":288,"children":289},{},[290,291,301,302,311,313,317],{"type":16,"value":251},{"type":10,"tag":158,"props":292,"children":293},{},[294,296],{"type":16,"value":295},"Scope",{"type":10,"tag":258,"props":297,"children":298},{},[299],{"type":16,"value":300},"1st",{"type":16,"value":264},{"type":10,"tag":158,"props":303,"children":304},{},[305,306],{"type":16,"value":295},{"type":10,"tag":258,"props":307,"children":308},{},[309],{"type":16,"value":310},"2nd",{"type":16,"value":312}," be the synchronization scopes of\n",{"type":10,"tag":158,"props":314,"children":315},{},[316],{"type":16,"value":284},{"type":16,"value":185},{"type":10,"tag":247,"props":319,"children":320},{},[321,322,331,333,341,343,351],{"type":16,"value":251},{"type":10,"tag":158,"props":323,"children":324},{},[325,327],{"type":16,"value":326},"ScopedOps",{"type":10,"tag":258,"props":328,"children":329},{},[330],{"type":16,"value":262},{"type":16,"value":332}," be the intersection of sets ",{"type":10,"tag":158,"props":334,"children":335},{},[336,337],{"type":16,"value":256},{"type":10,"tag":258,"props":338,"children":339},{},[340],{"type":16,"value":262},{"type":16,"value":342}," and\n",{"type":10,"tag":158,"props":344,"children":345},{},[346,347],{"type":16,"value":295},{"type":10,"tag":258,"props":348,"children":349},{},[350],{"type":16,"value":300},{"type":16,"value":185},{"type":10,"tag":247,"props":353,"children":354},{},[355,356,364,365,373,374,382],{"type":16,"value":251},{"type":10,"tag":158,"props":357,"children":358},{},[359,360],{"type":16,"value":326},{"type":10,"tag":258,"props":361,"children":362},{},[363],{"type":16,"value":273},{"type":16,"value":332},{"type":10,"tag":158,"props":366,"children":367},{},[368,369],{"type":16,"value":256},{"type":10,"tag":258,"props":370,"children":371},{},[372],{"type":16,"value":273},{"type":16,"value":342},{"type":10,"tag":158,"props":375,"children":376},{},[377,378],{"type":16,"value":295},{"type":10,"tag":258,"props":379,"children":380},{},[381],{"type":16,"value":310},{"type":16,"value":185},{"type":10,"tag":247,"props":384,"children":385},{},[386,388,396,398,402,403,411,413,418,420,428,429,437],{"type":16,"value":387},"Submitting ",{"type":10,"tag":158,"props":389,"children":390},{},[391,392],{"type":16,"value":256},{"type":10,"tag":258,"props":393,"children":394},{},[395],{"type":16,"value":262},{"type":16,"value":397},", ",{"type":10,"tag":158,"props":399,"children":400},{},[401],{"type":16,"value":284},{"type":16,"value":264},{"type":10,"tag":158,"props":404,"children":405},{},[406,407],{"type":16,"value":256},{"type":10,"tag":258,"props":408,"children":409},{},[410],{"type":16,"value":273},{"type":16,"value":412}," for execution, in that order,\nwill result in execution dependency ",{"type":10,"tag":158,"props":414,"children":415},{},[416],{"type":16,"value":417},"ExeDep",{"type":16,"value":419}," between ",{"type":10,"tag":158,"props":421,"children":422},{},[423,424],{"type":16,"value":326},{"type":10,"tag":258,"props":425,"children":426},{},[427],{"type":16,"value":262},{"type":16,"value":342},{"type":10,"tag":158,"props":430,"children":431},{},[432,433],{"type":16,"value":326},{"type":10,"tag":258,"props":434,"children":435},{},[436],{"type":16,"value":273},{"type":16,"value":185},{"type":10,"tag":247,"props":439,"children":440},{},[441,443,447,449,457,459,467],{"type":16,"value":442},"Execution dependency ",{"type":10,"tag":158,"props":444,"children":445},{},[446],{"type":16,"value":417},{"type":16,"value":448}," guarantees that ",{"type":10,"tag":158,"props":450,"children":451},{},[452,453],{"type":16,"value":326},{"type":10,"tag":258,"props":454,"children":455},{},[456],{"type":16,"value":262},{"type":16,"value":458},"\nhappen-before ",{"type":10,"tag":158,"props":460,"children":461},{},[462,463],{"type":16,"value":326},{"type":10,"tag":258,"props":464,"children":465},{},[466],{"type":16,"value":273},{"type":16,"value":185},{"type":10,"tag":187,"props":469,"children":471},{"id":470},"synchronization-dependencies-chains",[],{"type":10,"tag":18,"props":473,"children":474},{},[475,476,481,483,491,493,501,503,511,513,521],{"type":16,"value":156},{"type":10,"tag":158,"props":477,"children":478},{},[479],{"type":16,"value":480},"execution dependency chain",{"type":16,"value":482}," is a sequence of execution dependencies that\nform a happens-before relation between the first dependency’s ",{"type":10,"tag":158,"props":484,"children":485},{},[486,487],{"type":16,"value":326},{"type":10,"tag":258,"props":488,"children":489},{},[490],{"type":16,"value":262},{"type":16,"value":492},"\nand the final dependency’s ",{"type":10,"tag":158,"props":494,"children":495},{},[496,497],{"type":16,"value":326},{"type":10,"tag":258,"props":498,"children":499},{},[500],{"type":16,"value":273},{"type":16,"value":502},".\nFor each consecutive pair of execution dependencies, a chain exists if the\nintersection of ",{"type":10,"tag":158,"props":504,"children":505},{},[506,507],{"type":16,"value":295},{"type":10,"tag":258,"props":508,"children":509},{},[510],{"type":16,"value":310},{"type":16,"value":512}," in the first dependency and ",{"type":10,"tag":158,"props":514,"children":515},{},[516,517],{"type":16,"value":295},{"type":10,"tag":258,"props":518,"children":519},{},[520],{"type":16,"value":300},{"type":16,"value":522}," in the\nsecond dependency is not an empty set.\nThe formation of a single execution dependency from an execution dependency\nchain can be described by substituting the following in the description of\nexecution dependencies:",{"type":10,"tag":243,"props":524,"children":525},{},[526,536,555],{"type":10,"tag":247,"props":527,"children":528},{},[529,530,534],{"type":16,"value":251},{"type":10,"tag":158,"props":531,"children":532},{},[533],{"type":16,"value":284},{"type":16,"value":535}," be a set of synchronization commands that generate an\nexecution dependency chain.",{"type":10,"tag":247,"props":537,"children":538},{},[539,540,548,550,554],{"type":16,"value":251},{"type":10,"tag":158,"props":541,"children":542},{},[543,544],{"type":16,"value":295},{"type":10,"tag":258,"props":545,"children":546},{},[547],{"type":16,"value":300},{"type":16,"value":549}," be the first synchronization scope of the first command\nin ",{"type":10,"tag":158,"props":551,"children":552},{},[553],{"type":16,"value":284},{"type":16,"value":185},{"type":10,"tag":247,"props":556,"children":557},{},[558,559,567,569,573],{"type":16,"value":251},{"type":10,"tag":158,"props":560,"children":561},{},[562,563],{"type":16,"value":295},{"type":10,"tag":258,"props":564,"children":565},{},[566],{"type":16,"value":310},{"type":16,"value":568}," be the second synchronization scope of the last command\nin ",{"type":10,"tag":158,"props":570,"children":571},{},[572],{"type":16,"value":284},{"type":16,"value":185},{"type":10,"tag":18,"props":575,"children":576},{},[577,579,582],{"type":16,"value":578},"Execution dependencies alone are not sufficient to guarantee that values\nresulting from writes in one set of operations ",{"type":10,"tag":45,"props":580,"children":581},{"type":47},[],{"type":16,"value":583}," be read from another set\nof operations.",{"type":10,"tag":187,"props":585,"children":587},{"id":586},"synchronization-dependencies-available-and-visible",[],{"type":10,"tag":18,"props":589,"children":590},{},[591,593,598,600,605,607,612,614,619,621,626],{"type":16,"value":592},"Three additional types of operations are used to control memory access.\n",{"type":10,"tag":158,"props":594,"children":595},{},[596],{"type":16,"value":597},"Availability operations",{"type":16,"value":599}," cause the values generated by specified memory\nwrite accesses to become ",{"type":10,"tag":158,"props":601,"children":602},{},[603],{"type":16,"value":604},"available",{"type":16,"value":606}," to a memory domain for future access.\nAny available value remains available until a subsequent write to the same\nmemory location occurs (whether it is made available or not) or the memory\nis freed.\n",{"type":10,"tag":158,"props":608,"children":609},{},[610],{"type":16,"value":611},"Memory domain operations",{"type":16,"value":613}," cause writes that are available to a source\nmemory domain to become available to a destination memory domain (an example\nof this is making writes available to the host domain available to the\ndevice domain).\n",{"type":10,"tag":158,"props":615,"children":616},{},[617],{"type":16,"value":618},"Visibility operations",{"type":16,"value":620}," cause values available to a memory domain to become\n",{"type":10,"tag":158,"props":622,"children":623},{},[624],{"type":16,"value":625},"visible",{"type":16,"value":627}," to specified memory accesses.",{"type":10,"tag":18,"props":629,"children":630},{},[631,633,639,641,647,649,655],{"type":16,"value":632},"Availability, visibility, memory domains, and memory domain operations are\nformally defined in the ",{"type":10,"tag":33,"props":634,"children":636},{"href":635},"/chapters/memory-model#memory-model-availability-visibility",[637],{"type":16,"value":638},"Availability\nand Visibility",{"type":16,"value":640}," section of the ",{"type":10,"tag":33,"props":642,"children":644},{"href":643},"/chapters/memory-model#memory-model",[645],{"type":16,"value":646},"Memory Model",{"type":16,"value":648}," chapter.\nWhich API operations perform each of these operations is defined in\n",{"type":10,"tag":33,"props":650,"children":652},{"href":651},"/chapters/memory-model#memory-model-vulkan-availability-visibility",[653],{"type":16,"value":654},"Availability, Visibility, and\nDomain Operations",{"type":16,"value":185},{"type":10,"tag":187,"props":657,"children":659},{"id":658},"synchronization-dependencies-memory",[],{"type":10,"tag":18,"props":661,"children":662},{},[663,665,670],{"type":16,"value":664},"A ",{"type":10,"tag":158,"props":666,"children":667},{},[668],{"type":16,"value":669},"memory dependency",{"type":16,"value":671}," is an execution dependency which includes availability\nand visibility operations such that:",{"type":10,"tag":243,"props":673,"children":674},{},[675,680,685],{"type":10,"tag":247,"props":676,"children":677},{},[678],{"type":16,"value":679},"The first set of operations happens-before the availability operation.",{"type":10,"tag":247,"props":681,"children":682},{},[683],{"type":16,"value":684},"The availability operation happens-before the visibility operation.",{"type":10,"tag":247,"props":686,"children":687},{},[688],{"type":16,"value":689},"The visibility operation happens-before the second set of operations.",{"type":10,"tag":18,"props":691,"children":692},{},[693,695,698],{"type":16,"value":694},"Once written values are made visible to a particular type of memory access,\nthey ",{"type":10,"tag":45,"props":696,"children":697},{"type":47},[],{"type":16,"value":699}," be read or written by that type of memory access.\nMost synchronization commands in Vulkan define a memory dependency.",{"type":10,"tag":187,"props":701,"children":703},{"id":702},"synchronization-dependencies-access-scopes",[],{"type":10,"tag":18,"props":705,"children":706},{},[707,709,714,716,724,726,734],{"type":16,"value":708},"The specific memory accesses that are made available and visible are defined\nby the ",{"type":10,"tag":158,"props":710,"children":711},{},[712],{"type":16,"value":713},"access scopes",{"type":16,"value":715}," of a memory dependency.\nAny type of access that is in a memory dependency’s first access scope and\noccurs in ",{"type":10,"tag":158,"props":717,"children":718},{},[719,720],{"type":16,"value":326},{"type":10,"tag":258,"props":721,"children":722},{},[723],{"type":16,"value":262},{"type":16,"value":725}," is made available.\nAny type of access that is in a memory dependency’s second access scope and\noccurs in ",{"type":10,"tag":158,"props":727,"children":728},{},[729,730],{"type":16,"value":326},{"type":10,"tag":258,"props":731,"children":732},{},[733],{"type":16,"value":273},{"type":16,"value":735}," has any available writes made visible to it.\nAny type of operation that is not in a synchronization command’s access\nscopes will not be included in the resulting dependency.",{"type":10,"tag":18,"props":737,"children":738},{},[739,741,747],{"type":16,"value":740},"A memory dependency enforces availability and visibility of memory accesses\nand execution order between two sets of operations.\nAdding to the description of ",{"type":10,"tag":33,"props":742,"children":744},{"href":743},"/chapters/synchronization#synchronization-dependencies-chains",[745],{"type":16,"value":746},"execution dependency chains",{"type":16,"value":748},":",{"type":10,"tag":243,"props":750,"children":751},{},[752,776,798,819,838,870,901,954],{"type":10,"tag":247,"props":753,"children":754},{},[755,756,765,767,775],{"type":16,"value":251},{"type":10,"tag":158,"props":757,"children":758},{},[759,761],{"type":16,"value":760},"MemOps",{"type":10,"tag":258,"props":762,"children":763},{},[764],{"type":16,"value":262},{"type":16,"value":766}," be the set of memory accesses performed by\n",{"type":10,"tag":158,"props":768,"children":769},{},[770,771],{"type":16,"value":326},{"type":10,"tag":258,"props":772,"children":773},{},[774],{"type":16,"value":262},{"type":16,"value":185},{"type":10,"tag":247,"props":777,"children":778},{},[779,780,788,789,797],{"type":16,"value":251},{"type":10,"tag":158,"props":781,"children":782},{},[783,784],{"type":16,"value":760},{"type":10,"tag":258,"props":785,"children":786},{},[787],{"type":16,"value":273},{"type":16,"value":766},{"type":10,"tag":158,"props":790,"children":791},{},[792,793],{"type":16,"value":326},{"type":10,"tag":258,"props":794,"children":795},{},[796],{"type":16,"value":273},{"type":16,"value":185},{"type":10,"tag":247,"props":799,"children":800},{},[801,802,811,813,817],{"type":16,"value":251},{"type":10,"tag":158,"props":803,"children":804},{},[805,807],{"type":16,"value":806},"AccessScope",{"type":10,"tag":258,"props":808,"children":809},{},[810],{"type":16,"value":300},{"type":16,"value":812}," be the first access scope of the first command in\nthe ",{"type":10,"tag":158,"props":814,"children":815},{},[816],{"type":16,"value":284},{"type":16,"value":818}," chain.",{"type":10,"tag":247,"props":820,"children":821},{},[822,823,831,833,837],{"type":16,"value":251},{"type":10,"tag":158,"props":824,"children":825},{},[826,827],{"type":16,"value":806},{"type":10,"tag":258,"props":828,"children":829},{},[830],{"type":16,"value":310},{"type":16,"value":832}," be the second access scope of the last command in\nthe ",{"type":10,"tag":158,"props":834,"children":835},{},[836],{"type":16,"value":284},{"type":16,"value":818},{"type":10,"tag":247,"props":839,"children":840},{},[841,842,851,852,860,861,869],{"type":16,"value":251},{"type":10,"tag":158,"props":843,"children":844},{},[845,847],{"type":16,"value":846},"ScopedMemOps",{"type":10,"tag":258,"props":848,"children":849},{},[850],{"type":16,"value":262},{"type":16,"value":332},{"type":10,"tag":158,"props":853,"children":854},{},[855,856],{"type":16,"value":760},{"type":10,"tag":258,"props":857,"children":858},{},[859],{"type":16,"value":262},{"type":16,"value":342},{"type":10,"tag":158,"props":862,"children":863},{},[864,865],{"type":16,"value":806},{"type":10,"tag":258,"props":866,"children":867},{},[868],{"type":16,"value":300},{"type":16,"value":185},{"type":10,"tag":247,"props":871,"children":872},{},[873,874,882,883,891,892,900],{"type":16,"value":251},{"type":10,"tag":158,"props":875,"children":876},{},[877,878],{"type":16,"value":846},{"type":10,"tag":258,"props":879,"children":880},{},[881],{"type":16,"value":273},{"type":16,"value":332},{"type":10,"tag":158,"props":884,"children":885},{},[886,887],{"type":16,"value":760},{"type":10,"tag":258,"props":888,"children":889},{},[890],{"type":16,"value":273},{"type":16,"value":342},{"type":10,"tag":158,"props":893,"children":894},{},[895,896],{"type":16,"value":806},{"type":10,"tag":258,"props":897,"children":898},{},[899],{"type":16,"value":310},{"type":16,"value":185},{"type":10,"tag":247,"props":902,"children":903},{},[904,905,913,914,918,920,928,930,935,936,944,945,953],{"type":16,"value":387},{"type":10,"tag":158,"props":906,"children":907},{},[908,909],{"type":16,"value":256},{"type":10,"tag":258,"props":910,"children":911},{},[912],{"type":16,"value":262},{"type":16,"value":397},{"type":10,"tag":158,"props":915,"children":916},{},[917],{"type":16,"value":284},{"type":16,"value":919},", and ",{"type":10,"tag":158,"props":921,"children":922},{},[923,924],{"type":16,"value":256},{"type":10,"tag":258,"props":925,"children":926},{},[927],{"type":16,"value":273},{"type":16,"value":929}," for execution, in that order,\nwill result in a memory dependency ",{"type":10,"tag":158,"props":931,"children":932},{},[933],{"type":16,"value":934},"MemDep",{"type":16,"value":419},{"type":10,"tag":158,"props":937,"children":938},{},[939,940],{"type":16,"value":326},{"type":10,"tag":258,"props":941,"children":942},{},[943],{"type":16,"value":262},{"type":16,"value":342},{"type":10,"tag":158,"props":946,"children":947},{},[948,949],{"type":16,"value":326},{"type":10,"tag":258,"props":950,"children":951},{},[952],{"type":16,"value":273},{"type":16,"value":185},{"type":10,"tag":247,"props":955,"children":956},{},[957,959,963,965],{"type":16,"value":958},"Memory dependency ",{"type":10,"tag":158,"props":960,"children":961},{},[962],{"type":16,"value":934},{"type":16,"value":964}," guarantees that:",{"type":10,"tag":243,"props":966,"children":967},{},[968,983],{"type":10,"tag":247,"props":969,"children":970},{},[971,973,981],{"type":16,"value":972},"Memory writes in ",{"type":10,"tag":158,"props":974,"children":975},{},[976,977],{"type":16,"value":846},{"type":10,"tag":258,"props":978,"children":979},{},[980],{"type":16,"value":262},{"type":16,"value":982}," are made available.",{"type":10,"tag":247,"props":984,"children":985},{},[986,988,996,998,1006],{"type":16,"value":987},"Available memory writes, including those from ",{"type":10,"tag":158,"props":989,"children":990},{},[991,992],{"type":16,"value":846},{"type":10,"tag":258,"props":993,"children":994},{},[995],{"type":16,"value":262},{"type":16,"value":997},", are\nmade visible to ",{"type":10,"tag":158,"props":999,"children":1000},{},[1001,1002],{"type":16,"value":846},{"type":10,"tag":258,"props":1003,"children":1004},{},[1005],{"type":16,"value":273},{"type":16,"value":185},{"type":10,"tag":1008,"props":1009,"children":1010},"note",{},[1011],{"type":10,"tag":18,"props":1012,"children":1013},{},[1014],{"type":16,"value":1015},"Execution and memory dependencies are used to solve data hazards, i.e. to\nensure that read and write operations occur in a well-defined order.\nWrite-after-read hazards can be solved with just an execution dependency,\nbut read-after-write and write-after-write hazards need appropriate memory\ndependencies to be included between them.\nIf an application does not include dependencies to solve these hazards, the\nresults and execution orders of memory accesses are undefined:.",{"type":10,"tag":1017,"props":1018,"children":1020},"h3",{"id":1019},"synchronization-image-layout-transitions",[1021],{"type":16,"value":1022},"Image Layout Transitions",{"type":10,"tag":18,"props":1024,"children":1025},{},[1026,1028,1031,1033,1039,1041,1046,1048,1054,1056,1060,1062,1065,1067,1072],{"type":16,"value":1027},"Image subresources ",{"type":10,"tag":45,"props":1029,"children":1030},{"type":47},[],{"type":16,"value":1032}," be transitioned from one ",{"type":10,"tag":33,"props":1034,"children":1036},{"href":1035},"/chapters/resources#resources-image-layouts",[1037],{"type":16,"value":1038},"layout",{"type":16,"value":1040}," to another as part of a ",{"type":10,"tag":33,"props":1042,"children":1044},{"href":1043},"/chapters/synchronization#synchronization-dependencies-memory",[1045],{"type":16,"value":669},{"type":16,"value":1047}," (e.g. by using an\n",{"type":10,"tag":33,"props":1049,"children":1051},{"href":1050},"/chapters/synchronization#synchronization-image-memory-barriers",[1052],{"type":16,"value":1053},"image memory barrier",{"type":16,"value":1055},").\nWhen a layout transition is specified in a memory dependency, it\nhappens-after the availability operations in the memory dependency, and\nhappens-before the visibility operations.\nImage layout transitions ",{"type":10,"tag":45,"props":1057,"children":1059},{"type":1058},"may",[],{"type":16,"value":1061}," perform read and write accesses on all memory\nbound to the image subresource range, so applications ",{"type":10,"tag":45,"props":1063,"children":1064},{"type":226},[],{"type":16,"value":1066}," ensure that all\nmemory writes have been made\n",{"type":10,"tag":33,"props":1068,"children":1070},{"href":1069},"/chapters/synchronization#synchronization-dependencies-available-and-visible",[1071],{"type":16,"value":604},{"type":16,"value":1073}," before a\nlayout transition is executed.\nAvailable memory is automatically made visible to a layout transition, and\nwrites performed by a layout transition are automatically made available.",{"type":10,"tag":18,"props":1075,"children":1076},{},[1077,1079,1082,1084,1091,1093,1098,1100,1103],{"type":16,"value":1078},"Layout transitions always apply to a particular image subresource range, and\nspecify both an old layout and new layout.\nThe old layout ",{"type":10,"tag":45,"props":1080,"children":1081},{"type":226},[],{"type":16,"value":1083}," either be ",{"type":10,"tag":1085,"props":1086,"children":1088},"code",{"className":1087},[],[1089],{"type":16,"value":1090},"VK_IMAGE_LAYOUT_UNDEFINED",{"type":16,"value":1092},", or match the\ncurrent layout of the image subresource range.\nIf the old layout matches the current layout of the image subresource range,\nthe transition preserves the contents of that range.\nIf the old layout is ",{"type":10,"tag":1085,"props":1094,"children":1096},{"className":1095},[],[1097],{"type":16,"value":1090},{"type":16,"value":1099},", the contents of that\nrange ",{"type":10,"tag":45,"props":1101,"children":1102},{"type":1058},[],{"type":16,"value":1104}," be discarded.",{"type":10,"tag":1008,"props":1106,"children":1107},{},[1108,1120],{"type":10,"tag":18,"props":1109,"children":1110},{},[1111,1113,1118],{"type":16,"value":1112},"Image layout transitions with ",{"type":10,"tag":1085,"props":1114,"children":1116},{"className":1115},[],[1117],{"type":16,"value":1090},{"type":16,"value":1119}," allow the\nimplementation to discard the image subresource range, which can provide\nperformance or power benefits.\nTile-based architectures may be able to avoid flushing tile data to memory,\nand immediate style renderers may be able to achieve fast metadata clears to\nreinitialize frame buffer compression state, or similar.",{"type":10,"tag":18,"props":1121,"children":1122},{},[1123,1125,1129,1131,1137],{"type":16,"value":1124},"If the contents of an attachment are not needed after a render pass\ncompletes, then applications ",{"type":10,"tag":45,"props":1126,"children":1128},{"type":1127},"should",[],{"type":16,"value":1130}," use\n",{"type":10,"tag":1085,"props":1132,"children":1134},{"className":1133},[],[1135],{"type":16,"value":1136},"VK_ATTACHMENT_STORE_OP_DONT_CARE",{"type":16,"value":185},{"type":10,"tag":18,"props":1139,"children":1140},{},[1141,1143,1146,1148,1151,1153,1159,1160,1166,1168,1174],{"type":16,"value":1142},"As image layout transitions ",{"type":10,"tag":45,"props":1144,"children":1145},{"type":1058},[],{"type":16,"value":1147}," perform read and write accesses on the\nmemory bound to the image, if the image subresource affected by the layout\ntransition is bound to peer memory for any device in the current device mask\nthen the memory heap the bound memory comes from ",{"type":10,"tag":45,"props":1149,"children":1150},{"type":226},[],{"type":16,"value":1152}," support the\n",{"type":10,"tag":1085,"props":1154,"children":1156},{"className":1155},[],[1157],{"type":16,"value":1158},"VK_PEER_MEMORY_FEATURE_GENERIC_SRC_BIT",{"type":16,"value":342},{"type":10,"tag":1085,"props":1161,"children":1163},{"className":1162},[],[1164],{"type":16,"value":1165},"VK_PEER_MEMORY_FEATURE_GENERIC_DST_BIT",{"type":16,"value":1167}," capabilities as returned by\n",{"type":10,"tag":33,"props":1169,"children":1171},{"href":1170},"/man/vkGetDeviceGroupPeerMemoryFeatures",[1172],{"type":16,"value":1173},"vkGetDeviceGroupPeerMemoryFeatures",{"type":16,"value":185},{"type":10,"tag":1008,"props":1176,"children":1177},{},[1178],{"type":10,"tag":18,"props":1179,"children":1180},{},[1181,1183,1186],{"type":16,"value":1182},"Applications ",{"type":10,"tag":45,"props":1184,"children":1185},{"type":226},[],{"type":16,"value":1187}," ensure that layout transitions happen-after all\noperations accessing the image with the old layout, and happen-before any\noperations that will access the image with the new layout.\nLayout transitions are potentially read/write operations, so not defining\nappropriate memory dependencies to guarantee this will result in a data\nrace.",{"type":10,"tag":18,"props":1189,"children":1190},{},[1191,1193,1199],{"type":16,"value":1192},"Image layout transitions interact with ",{"type":10,"tag":33,"props":1194,"children":1196},{"href":1195},"/chapters/resources#resources-memory-aliasing",[1197],{"type":16,"value":1198},"memory\naliasing",{"type":16,"value":185},{"type":10,"tag":187,"props":1201,"children":1203},{"id":1202},"synchronization-image-barrier-layout-transition-order",[],{"type":10,"tag":18,"props":1205,"children":1206},{},[1207,1209,1215,1217,1223],{"type":16,"value":1208},"Layout transitions that are performed via image memory barriers execute in\ntheir entirety in ",{"type":10,"tag":33,"props":1210,"children":1212},{"href":1211},"/chapters/synchronization#synchronization-submission-order",[1213],{"type":16,"value":1214},"submission order",{"type":16,"value":1216},",\nrelative to other image layout transitions submitted to the same queue,\nincluding those performed by ",{"type":10,"tag":33,"props":1218,"children":1220},{"href":1219},"/chapters/renderpass#renderpass",[1221],{"type":16,"value":1222},"render passes",{"type":16,"value":1224},".\nIn effect there is an implicit execution dependency from each such layout\ntransition to all layout transitions previously submitted to the same queue.",{"type":10,"tag":18,"props":1226,"children":1227},{},[1228,1230,1236,1238,1244,1246,1250,1252,1255,1257,1263,1265,1271,1273,1279,1281,1287],{"type":16,"value":1229},"The image layout of each image subresource of a depth/stencil image created\nwith ",{"type":10,"tag":1085,"props":1231,"children":1233},{"className":1232},[],[1234],{"type":16,"value":1235},"VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT",{"type":16,"value":1237}," is\ndependent on the last sample locations used to render to the image\nsubresource as a depth/stencil attachment, thus when the ",{"type":10,"tag":1085,"props":1239,"children":1241},{"className":1240},[],[1242],{"type":16,"value":1243},"image",{"type":16,"value":1245}," member\nof an ",{"type":10,"tag":33,"props":1247,"children":1248},{"href":1050},[1249],{"type":16,"value":1053},{"type":16,"value":1251}," is an\nimage created with this flag the application ",{"type":10,"tag":45,"props":1253,"children":1254},{"type":47},[],{"type":16,"value":1256}," chain a\n",{"type":10,"tag":33,"props":1258,"children":1260},{"href":1259},"/man/VkSampleLocationsInfoEXT",[1261],{"type":16,"value":1262},"VkSampleLocationsInfoEXT",{"type":16,"value":1264}," structure to the ",{"type":10,"tag":1085,"props":1266,"children":1268},{"className":1267},[],[1269],{"type":16,"value":1270},"pNext",{"type":16,"value":1272}," chain of\n",{"type":10,"tag":33,"props":1274,"children":1276},{"href":1275},"/man/VkImageMemoryBarrier2",[1277],{"type":16,"value":1278},"VkImageMemoryBarrier2",{"type":16,"value":1280}," or\n",{"type":10,"tag":33,"props":1282,"children":1284},{"href":1283},"/man/VkImageMemoryBarrier",[1285],{"type":16,"value":1286},"VkImageMemoryBarrier",{"type":16,"value":1288}," to specify the sample locations to use during any\nimage layout transition.",{"type":10,"tag":18,"props":1290,"children":1291},{},[1292,1294,1299,1301,1307,1309,1314,1316,1322,1324,1329],{"type":16,"value":1293},"If the ",{"type":10,"tag":1085,"props":1295,"children":1297},{"className":1296},[],[1298],{"type":16,"value":1262},{"type":16,"value":1300}," structure does not match the sample\nlocation state last used to render to the image subresource range specified\nby ",{"type":10,"tag":1085,"props":1302,"children":1304},{"className":1303},[],[1305],{"type":16,"value":1306},"subresourceRange",{"type":16,"value":1308},", or if no ",{"type":10,"tag":1085,"props":1310,"children":1312},{"className":1311},[],[1313],{"type":16,"value":1262},{"type":16,"value":1315}," structure\nis present, then the contents of the given image subresource range becomes\nundefined: as if ",{"type":10,"tag":1085,"props":1317,"children":1319},{"className":1318},[],[1320],{"type":16,"value":1321},"oldLayout",{"type":16,"value":1323}," would equal\n",{"type":10,"tag":1085,"props":1325,"children":1327},{"className":1326},[],[1328],{"type":16,"value":1090},{"type":16,"value":185},{"type":10,"tag":1017,"props":1331,"children":1333},{"id":1332},"synchronization-pipeline-stages",[1334],{"type":16,"value":1335},"Pipeline Stages",{"type":10,"tag":18,"props":1337,"children":1338},{},[1339,1341,1347,1349,1353],{"type":16,"value":1340},"The work performed by an ",{"type":10,"tag":33,"props":1342,"children":1344},{"href":1343},"/chapters/fundamentals#fundamentals-queueoperation-command-types",[1345],{"type":16,"value":1346},"action\ncommand",{"type":16,"value":1348}," consists of multiple operations, which are performed as a sequence\nof logically independent steps known as ",{"type":10,"tag":158,"props":1350,"children":1351},{},[1352],{"type":16,"value":206},{"type":16,"value":1354},".\nThe exact pipeline stages executed depend on the particular command that is\nused, and current command buffer state when the command was recorded.",{"type":10,"tag":1008,"props":1356,"children":1357},{},[1358],{"type":10,"tag":18,"props":1359,"children":1360},{},[1361,1363,1368,1370,1375,1377,1382],{"type":16,"value":1362},"Operations performed by synchronization commands (e.g.\n",{"type":10,"tag":33,"props":1364,"children":1365},{"href":1069},[1366],{"type":16,"value":1367},"availability and\nvisibility operations",{"type":16,"value":1369},") are not executed by a defined pipeline stage.\nHowever other commands can still synchronize with them by using the\n",{"type":10,"tag":33,"props":1371,"children":1373},{"href":1372},"/chapters/synchronization#synchronization-dependencies-scopes",[1374],{"type":16,"value":183},{"type":16,"value":1376}," to create a\n",{"type":10,"tag":33,"props":1378,"children":1379},{"href":743},[1380],{"type":16,"value":1381},"dependency chain",{"type":16,"value":185},{"type":10,"tag":18,"props":1384,"children":1385},{},[1386,1388,1391,1393,1399,1401,1407,1409,1412],{"type":16,"value":1387},"Execution of operations across pipeline stages ",{"type":10,"tag":45,"props":1389,"children":1390},{"type":226},[],{"type":16,"value":1392}," adhere to\n",{"type":10,"tag":33,"props":1394,"children":1396},{"href":1395},"/chapters/synchronization#synchronization-implicit",[1397],{"type":16,"value":1398},"implicit ordering guarantees",{"type":16,"value":1400},", particularly\nincluding ",{"type":10,"tag":33,"props":1402,"children":1404},{"href":1403},"/chapters/synchronization#synchronization-pipeline-stages-order",[1405],{"type":16,"value":1406},"pipeline stage order",{"type":16,"value":1408},".\nOtherwise, execution across pipeline stages ",{"type":10,"tag":45,"props":1410,"children":1411},{"type":1058},[],{"type":16,"value":1413}," overlap or execute out of\norder with regards to other stages, unless otherwise enforced by an\nexecution dependency.",{"type":10,"tag":18,"props":1415,"children":1416},{},[1417,1419,1424,1426,1429],{"type":16,"value":1418},"Several of the synchronization commands include pipeline stage parameters,\nrestricting the ",{"type":10,"tag":33,"props":1420,"children":1421},{"href":1372},[1422],{"type":16,"value":1423},"synchronization\nscopes",{"type":16,"value":1425}," for that command to just those stages.\nThis allows fine grained control over the exact execution dependencies and\naccesses performed by action commands.\nImplementations ",{"type":10,"tag":45,"props":1427,"children":1428},{"type":1127},[],{"type":16,"value":1430}," use these pipeline stages to avoid unnecessary\nstalls or cache flushing.",{"type":10,"tag":1432,"props":1433,"children":1436},"refpage",{"name":1434,"type":1435},"VkPipelineStageFlagBits2","enums",[1437],{"type":10,"tag":18,"props":1438,"children":1439},{},[1440],{"type":16,"value":1441},"Pipeline stage flags for VkPipelineStageFlags2",{"type":10,"tag":1432,"props":1443,"children":1446},{"name":1444,"type":1445},"VkPipelineStageFlags2","flags",[1447],{"type":10,"tag":18,"props":1448,"children":1449},{},[1450],{"type":16,"value":1451},"64-bit mask of pipeline stage flags",{"type":10,"tag":1432,"props":1453,"children":1455},{"name":1454,"type":1435},"VkPipelineStageFlagBits",[1456],{"type":10,"tag":18,"props":1457,"children":1458},{},[1459],{"type":16,"value":1460},"Bitmask specifying pipeline stages",{"type":10,"tag":1432,"props":1462,"children":1464},{"name":1463,"type":1445},"VkPipelineStageFlags",[1465],{"type":10,"tag":18,"props":1466,"children":1467},{},[1468],{"type":16,"value":1469},"Bitmask of VkPipelineStageFlagBits",{"type":10,"tag":187,"props":1471,"children":1473},{"id":1472},"synchronization-pipeline-stages-masks",[],{"type":10,"tag":18,"props":1475,"children":1476},{},[1477,1479,1484,1486,1491,1493,1499],{"type":16,"value":1478},"If a synchronization command includes a source stage mask, its first\n",{"type":10,"tag":33,"props":1480,"children":1481},{"href":1372},[1482],{"type":16,"value":1483},"synchronization scope",{"type":16,"value":1485}," only includes\nexecution of the pipeline stages specified in that mask and any\n",{"type":10,"tag":33,"props":1487,"children":1488},{"href":1403},[1489],{"type":16,"value":1490},"logically earlier",{"type":16,"value":1492}," stages.\nIts first ",{"type":10,"tag":33,"props":1494,"children":1496},{"href":1495},"/chapters/synchronization#synchronization-dependencies-access-scopes",[1497],{"type":16,"value":1498},"access scope",{"type":16,"value":1500}," only\nincludes memory accesses performed by pipeline stages explicitly specified\nin the source stage mask.",{"type":10,"tag":18,"props":1502,"children":1503},{},[1504,1506,1510,1511,1516,1518,1522],{"type":16,"value":1505},"If a synchronization command includes a destination stage mask, its second\n",{"type":10,"tag":33,"props":1507,"children":1508},{"href":1372},[1509],{"type":16,"value":1483},{"type":16,"value":1485},{"type":10,"tag":33,"props":1512,"children":1513},{"href":1403},[1514],{"type":16,"value":1515},"logically later",{"type":16,"value":1517}," stages.\nIts second ",{"type":10,"tag":33,"props":1519,"children":1520},{"href":1495},[1521],{"type":16,"value":1498},{"type":16,"value":1523}," only\nincludes memory accesses performed by pipeline stages explicitly specified\nin the destination stage mask.",{"type":10,"tag":1008,"props":1525,"children":1526},{},[1527],{"type":10,"tag":18,"props":1528,"children":1529},{},[1530,1532,1536],{"type":16,"value":1531},"Note that ",{"type":10,"tag":33,"props":1533,"children":1534},{"href":1495},[1535],{"type":16,"value":713},{"type":16,"value":1537}," do\nnot interact with the logically earlier or later stages for either scope -\nonly the stages the application specifies are considered part of each access\nscope.",{"type":10,"tag":18,"props":1539,"children":1540},{},[1541,1543,1546,1548,1554,1556,1562],{"type":16,"value":1542},"Certain pipeline stages are only available on queues that support a\nparticular set of operations.\nThe following table lists, for each pipeline stage flag, which queue\ncapability flag ",{"type":10,"tag":45,"props":1544,"children":1545},{"type":226},[],{"type":16,"value":1547}," be supported by the queue.\nWhen multiple flags are enumerated in the second column of the table, it\nmeans that the pipeline stage is supported on the queue if it supports any\nof the listed capability flags.\nFor further details on queue capabilities see\n",{"type":10,"tag":33,"props":1549,"children":1551},{"href":1550},"/chapters/devsandqueues#devsandqueues-physical-device-enumeration",[1552],{"type":16,"value":1553},"Physical Device Enumeration",{"type":16,"value":1555},"\nand ",{"type":10,"tag":33,"props":1557,"children":1559},{"href":1558},"/chapters/devsandqueues#devsandqueues-queues",[1560],{"type":16,"value":1561},"Queues",{"type":16,"value":185},{"type":10,"tag":1564,"props":1565,"children":1572},"table",{"id":1566,"className":1567},"synchronization-pipeline-stages-supported",[1568,1569,1570,1571],"tableblock","frame-all","grid-all","stretch",[1573,1581,1594,1617],{"type":10,"tag":1574,"props":1575,"children":1578},"caption",{"className":1576},[1577],"title",[1579],{"type":16,"value":1580},"Table 3. Supported pipeline stage flags",{"type":10,"tag":1582,"props":1583,"children":1584},"colgroup",{},[1585,1590],{"type":10,"tag":1586,"props":1587,"children":1589},"col",{"style":1588},"width: 70%;",[],{"type":10,"tag":1586,"props":1591,"children":1593},{"style":1592},"width: 30%;",[],{"type":10,"tag":1595,"props":1596,"children":1597},"thead",{},[1598],{"type":10,"tag":1599,"props":1600,"children":1601},"tr",{},[1602,1611],{"type":10,"tag":1603,"props":1604,"children":1608},"th",{"className":1605},[1568,1606,1607],"halign-left","valign-top",[1609],{"type":16,"value":1610},"Pipeline stage flag",{"type":10,"tag":1603,"props":1612,"children":1614},{"className":1613},[1568,1606,1607],[1615],{"type":16,"value":1616},"Required queue capability flag",{"type":10,"tag":1618,"props":1619,"children":1620},"tbody",{},[1621,1649,1674,1710,1738,1766,1794,1822,1850,1878,1906,1934,1962,1990,2029,2054,2079,2107,2132,2170,2208,2246,2284,2312,2340,2368,2397,2426,2454,2487,2520,2548,2576,2604,2632,2660,2688,2716,2744,2782,2810,2838],{"type":10,"tag":1599,"props":1622,"children":1623},{},[1624,1639],{"type":10,"tag":1625,"props":1626,"children":1628},"td",{"className":1627},[1568,1606,1607],[1629],{"type":10,"tag":18,"props":1630,"children":1632},{"className":1631},[1568],[1633],{"type":10,"tag":1634,"props":1635,"children":1636},"literal",{},[1637],{"type":16,"value":1638},"VK_PIPELINE_STAGE_2_NONE",{"type":10,"tag":1625,"props":1640,"children":1642},{"className":1641},[1568,1606,1607],[1643],{"type":10,"tag":18,"props":1644,"children":1646},{"className":1645},[1568],[1647],{"type":16,"value":1648},"None required",{"type":10,"tag":1599,"props":1650,"children":1651},{},[1652,1665],{"type":10,"tag":1625,"props":1653,"children":1655},{"className":1654},[1568,1606,1607],[1656],{"type":10,"tag":18,"props":1657,"children":1659},{"className":1658},[1568],[1660],{"type":10,"tag":1634,"props":1661,"children":1662},{},[1663],{"type":16,"value":1664},"VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT",{"type":10,"tag":1625,"props":1666,"children":1668},{"className":1667},[1568,1606,1607],[1669],{"type":10,"tag":18,"props":1670,"children":1672},{"className":1671},[1568],[1673],{"type":16,"value":1648},{"type":10,"tag":1599,"props":1675,"children":1676},{},[1677,1690],{"type":10,"tag":1625,"props":1678,"children":1680},{"className":1679},[1568,1606,1607],[1681],{"type":10,"tag":18,"props":1682,"children":1684},{"className":1683},[1568],[1685],{"type":10,"tag":1634,"props":1686,"children":1687},{},[1688],{"type":16,"value":1689},"VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT",{"type":10,"tag":1625,"props":1691,"children":1693},{"className":1692},[1568,1606,1607],[1694],{"type":10,"tag":18,"props":1695,"children":1697},{"className":1696},[1568],[1698,1703,1705],{"type":10,"tag":1634,"props":1699,"children":1700},{},[1701],{"type":16,"value":1702},"VK_QUEUE_GRAPHICS_BIT",{"type":16,"value":1704}," or ",{"type":10,"tag":1634,"props":1706,"children":1707},{},[1708],{"type":16,"value":1709},"VK_QUEUE_COMPUTE_BIT",{"type":10,"tag":1599,"props":1711,"children":1712},{},[1713,1726],{"type":10,"tag":1625,"props":1714,"children":1716},{"className":1715},[1568,1606,1607],[1717],{"type":10,"tag":18,"props":1718,"children":1720},{"className":1719},[1568],[1721],{"type":10,"tag":1634,"props":1722,"children":1723},{},[1724],{"type":16,"value":1725},"VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT",{"type":10,"tag":1625,"props":1727,"children":1729},{"className":1728},[1568,1606,1607],[1730],{"type":10,"tag":18,"props":1731,"children":1733},{"className":1732},[1568],[1734],{"type":10,"tag":1634,"props":1735,"children":1736},{},[1737],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1739,"children":1740},{},[1741,1754],{"type":10,"tag":1625,"props":1742,"children":1744},{"className":1743},[1568,1606,1607],[1745],{"type":10,"tag":18,"props":1746,"children":1748},{"className":1747},[1568],[1749],{"type":10,"tag":1634,"props":1750,"children":1751},{},[1752],{"type":16,"value":1753},"VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT",{"type":10,"tag":1625,"props":1755,"children":1757},{"className":1756},[1568,1606,1607],[1758],{"type":10,"tag":18,"props":1759,"children":1761},{"className":1760},[1568],[1762],{"type":10,"tag":1634,"props":1763,"children":1764},{},[1765],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1767,"children":1768},{},[1769,1782],{"type":10,"tag":1625,"props":1770,"children":1772},{"className":1771},[1568,1606,1607],[1773],{"type":10,"tag":18,"props":1774,"children":1776},{"className":1775},[1568],[1777],{"type":10,"tag":1634,"props":1778,"children":1779},{},[1780],{"type":16,"value":1781},"VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT",{"type":10,"tag":1625,"props":1783,"children":1785},{"className":1784},[1568,1606,1607],[1786],{"type":10,"tag":18,"props":1787,"children":1789},{"className":1788},[1568],[1790],{"type":10,"tag":1634,"props":1791,"children":1792},{},[1793],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1795,"children":1796},{},[1797,1810],{"type":10,"tag":1625,"props":1798,"children":1800},{"className":1799},[1568,1606,1607],[1801],{"type":10,"tag":18,"props":1802,"children":1804},{"className":1803},[1568],[1805],{"type":10,"tag":1634,"props":1806,"children":1807},{},[1808],{"type":16,"value":1809},"VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT",{"type":10,"tag":1625,"props":1811,"children":1813},{"className":1812},[1568,1606,1607],[1814],{"type":10,"tag":18,"props":1815,"children":1817},{"className":1816},[1568],[1818],{"type":10,"tag":1634,"props":1819,"children":1820},{},[1821],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1823,"children":1824},{},[1825,1838],{"type":10,"tag":1625,"props":1826,"children":1828},{"className":1827},[1568,1606,1607],[1829],{"type":10,"tag":18,"props":1830,"children":1832},{"className":1831},[1568],[1833],{"type":10,"tag":1634,"props":1834,"children":1835},{},[1836],{"type":16,"value":1837},"VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT",{"type":10,"tag":1625,"props":1839,"children":1841},{"className":1840},[1568,1606,1607],[1842],{"type":10,"tag":18,"props":1843,"children":1845},{"className":1844},[1568],[1846],{"type":10,"tag":1634,"props":1847,"children":1848},{},[1849],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1851,"children":1852},{},[1853,1866],{"type":10,"tag":1625,"props":1854,"children":1856},{"className":1855},[1568,1606,1607],[1857],{"type":10,"tag":18,"props":1858,"children":1860},{"className":1859},[1568],[1861],{"type":10,"tag":1634,"props":1862,"children":1863},{},[1864],{"type":16,"value":1865},"VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT",{"type":10,"tag":1625,"props":1867,"children":1869},{"className":1868},[1568,1606,1607],[1870],{"type":10,"tag":18,"props":1871,"children":1873},{"className":1872},[1568],[1874],{"type":10,"tag":1634,"props":1875,"children":1876},{},[1877],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1879,"children":1880},{},[1881,1894],{"type":10,"tag":1625,"props":1882,"children":1884},{"className":1883},[1568,1606,1607],[1885],{"type":10,"tag":18,"props":1886,"children":1888},{"className":1887},[1568],[1889],{"type":10,"tag":1634,"props":1890,"children":1891},{},[1892],{"type":16,"value":1893},"VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT",{"type":10,"tag":1625,"props":1895,"children":1897},{"className":1896},[1568,1606,1607],[1898],{"type":10,"tag":18,"props":1899,"children":1901},{"className":1900},[1568],[1902],{"type":10,"tag":1634,"props":1903,"children":1904},{},[1905],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1907,"children":1908},{},[1909,1922],{"type":10,"tag":1625,"props":1910,"children":1912},{"className":1911},[1568,1606,1607],[1913],{"type":10,"tag":18,"props":1914,"children":1916},{"className":1915},[1568],[1917],{"type":10,"tag":1634,"props":1918,"children":1919},{},[1920],{"type":16,"value":1921},"VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT",{"type":10,"tag":1625,"props":1923,"children":1925},{"className":1924},[1568,1606,1607],[1926],{"type":10,"tag":18,"props":1927,"children":1929},{"className":1928},[1568],[1930],{"type":10,"tag":1634,"props":1931,"children":1932},{},[1933],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1935,"children":1936},{},[1937,1950],{"type":10,"tag":1625,"props":1938,"children":1940},{"className":1939},[1568,1606,1607],[1941],{"type":10,"tag":18,"props":1942,"children":1944},{"className":1943},[1568],[1945],{"type":10,"tag":1634,"props":1946,"children":1947},{},[1948],{"type":16,"value":1949},"VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT",{"type":10,"tag":1625,"props":1951,"children":1953},{"className":1952},[1568,1606,1607],[1954],{"type":10,"tag":18,"props":1955,"children":1957},{"className":1956},[1568],[1958],{"type":10,"tag":1634,"props":1959,"children":1960},{},[1961],{"type":16,"value":1702},{"type":10,"tag":1599,"props":1963,"children":1964},{},[1965,1978],{"type":10,"tag":1625,"props":1966,"children":1968},{"className":1967},[1568,1606,1607],[1969],{"type":10,"tag":18,"props":1970,"children":1972},{"className":1971},[1568],[1973],{"type":10,"tag":1634,"props":1974,"children":1975},{},[1976],{"type":16,"value":1977},"VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT",{"type":10,"tag":1625,"props":1979,"children":1981},{"className":1980},[1568,1606,1607],[1982],{"type":10,"tag":18,"props":1983,"children":1985},{"className":1984},[1568],[1986],{"type":10,"tag":1634,"props":1987,"children":1988},{},[1989],{"type":16,"value":1709},{"type":10,"tag":1599,"props":1991,"children":1992},{},[1993,2006],{"type":10,"tag":1625,"props":1994,"children":1996},{"className":1995},[1568,1606,1607],[1997],{"type":10,"tag":18,"props":1998,"children":2000},{"className":1999},[1568],[2001],{"type":10,"tag":1634,"props":2002,"children":2003},{},[2004],{"type":16,"value":2005},"VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT",{"type":10,"tag":1625,"props":2007,"children":2009},{"className":2008},[1568,1606,1607],[2010],{"type":10,"tag":18,"props":2011,"children":2013},{"className":2012},[1568],[2014,2018,2019,2023,2024],{"type":10,"tag":1634,"props":2015,"children":2016},{},[2017],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2020,"children":2021},{},[2022],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2025,"children":2026},{},[2027],{"type":16,"value":2028},"VK_QUEUE_TRANSFER_BIT",{"type":10,"tag":1599,"props":2030,"children":2031},{},[2032,2045],{"type":10,"tag":1625,"props":2033,"children":2035},{"className":2034},[1568,1606,1607],[2036],{"type":10,"tag":18,"props":2037,"children":2039},{"className":2038},[1568],[2040],{"type":10,"tag":1634,"props":2041,"children":2042},{},[2043],{"type":16,"value":2044},"VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT",{"type":10,"tag":1625,"props":2046,"children":2048},{"className":2047},[1568,1606,1607],[2049],{"type":10,"tag":18,"props":2050,"children":2052},{"className":2051},[1568],[2053],{"type":16,"value":1648},{"type":10,"tag":1599,"props":2055,"children":2056},{},[2057,2070],{"type":10,"tag":1625,"props":2058,"children":2060},{"className":2059},[1568,1606,1607],[2061],{"type":10,"tag":18,"props":2062,"children":2064},{"className":2063},[1568],[2065],{"type":10,"tag":1634,"props":2066,"children":2067},{},[2068],{"type":16,"value":2069},"VK_PIPELINE_STAGE_2_HOST_BIT",{"type":10,"tag":1625,"props":2071,"children":2073},{"className":2072},[1568,1606,1607],[2074],{"type":10,"tag":18,"props":2075,"children":2077},{"className":2076},[1568],[2078],{"type":16,"value":1648},{"type":10,"tag":1599,"props":2080,"children":2081},{},[2082,2095],{"type":10,"tag":1625,"props":2083,"children":2085},{"className":2084},[1568,1606,1607],[2086],{"type":10,"tag":18,"props":2087,"children":2089},{"className":2088},[1568],[2090],{"type":10,"tag":1634,"props":2091,"children":2092},{},[2093],{"type":16,"value":2094},"VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT",{"type":10,"tag":1625,"props":2096,"children":2098},{"className":2097},[1568,1606,1607],[2099],{"type":10,"tag":18,"props":2100,"children":2102},{"className":2101},[1568],[2103],{"type":10,"tag":1634,"props":2104,"children":2105},{},[2106],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2108,"children":2109},{},[2110,2123],{"type":10,"tag":1625,"props":2111,"children":2113},{"className":2112},[1568,1606,1607],[2114],{"type":10,"tag":18,"props":2115,"children":2117},{"className":2116},[1568],[2118],{"type":10,"tag":1634,"props":2119,"children":2120},{},[2121],{"type":16,"value":2122},"VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT",{"type":10,"tag":1625,"props":2124,"children":2126},{"className":2125},[1568,1606,1607],[2127],{"type":10,"tag":18,"props":2128,"children":2130},{"className":2129},[1568],[2131],{"type":16,"value":1648},{"type":10,"tag":1599,"props":2133,"children":2134},{},[2135,2148],{"type":10,"tag":1625,"props":2136,"children":2138},{"className":2137},[1568,1606,1607],[2139],{"type":10,"tag":18,"props":2140,"children":2142},{"className":2141},[1568],[2143],{"type":10,"tag":1634,"props":2144,"children":2145},{},[2146],{"type":16,"value":2147},"VK_PIPELINE_STAGE_2_COPY_BIT",{"type":10,"tag":1625,"props":2149,"children":2151},{"className":2150},[1568,1606,1607],[2152],{"type":10,"tag":18,"props":2153,"children":2155},{"className":2154},[1568],[2156,2160,2161,2165,2166],{"type":10,"tag":1634,"props":2157,"children":2158},{},[2159],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2162,"children":2163},{},[2164],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2167,"children":2168},{},[2169],{"type":16,"value":2028},{"type":10,"tag":1599,"props":2171,"children":2172},{},[2173,2186],{"type":10,"tag":1625,"props":2174,"children":2176},{"className":2175},[1568,1606,1607],[2177],{"type":10,"tag":18,"props":2178,"children":2180},{"className":2179},[1568],[2181],{"type":10,"tag":1634,"props":2182,"children":2183},{},[2184],{"type":16,"value":2185},"VK_PIPELINE_STAGE_2_RESOLVE_BIT",{"type":10,"tag":1625,"props":2187,"children":2189},{"className":2188},[1568,1606,1607],[2190],{"type":10,"tag":18,"props":2191,"children":2193},{"className":2192},[1568],[2194,2198,2199,2203,2204],{"type":10,"tag":1634,"props":2195,"children":2196},{},[2197],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2200,"children":2201},{},[2202],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2205,"children":2206},{},[2207],{"type":16,"value":2028},{"type":10,"tag":1599,"props":2209,"children":2210},{},[2211,2224],{"type":10,"tag":1625,"props":2212,"children":2214},{"className":2213},[1568,1606,1607],[2215],{"type":10,"tag":18,"props":2216,"children":2218},{"className":2217},[1568],[2219],{"type":10,"tag":1634,"props":2220,"children":2221},{},[2222],{"type":16,"value":2223},"VK_PIPELINE_STAGE_2_BLIT_BIT",{"type":10,"tag":1625,"props":2225,"children":2227},{"className":2226},[1568,1606,1607],[2228],{"type":10,"tag":18,"props":2229,"children":2231},{"className":2230},[1568],[2232,2236,2237,2241,2242],{"type":10,"tag":1634,"props":2233,"children":2234},{},[2235],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2238,"children":2239},{},[2240],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2243,"children":2244},{},[2245],{"type":16,"value":2028},{"type":10,"tag":1599,"props":2247,"children":2248},{},[2249,2262],{"type":10,"tag":1625,"props":2250,"children":2252},{"className":2251},[1568,1606,1607],[2253],{"type":10,"tag":18,"props":2254,"children":2256},{"className":2255},[1568],[2257],{"type":10,"tag":1634,"props":2258,"children":2259},{},[2260],{"type":16,"value":2261},"VK_PIPELINE_STAGE_2_CLEAR_BIT",{"type":10,"tag":1625,"props":2263,"children":2265},{"className":2264},[1568,1606,1607],[2266],{"type":10,"tag":18,"props":2267,"children":2269},{"className":2268},[1568],[2270,2274,2275,2279,2280],{"type":10,"tag":1634,"props":2271,"children":2272},{},[2273],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2276,"children":2277},{},[2278],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2281,"children":2282},{},[2283],{"type":16,"value":2028},{"type":10,"tag":1599,"props":2285,"children":2286},{},[2287,2300],{"type":10,"tag":1625,"props":2288,"children":2290},{"className":2289},[1568,1606,1607],[2291],{"type":10,"tag":18,"props":2292,"children":2294},{"className":2293},[1568],[2295],{"type":10,"tag":1634,"props":2296,"children":2297},{},[2298],{"type":16,"value":2299},"VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT",{"type":10,"tag":1625,"props":2301,"children":2303},{"className":2302},[1568,1606,1607],[2304],{"type":10,"tag":18,"props":2305,"children":2307},{"className":2306},[1568],[2308],{"type":10,"tag":1634,"props":2309,"children":2310},{},[2311],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2313,"children":2314},{},[2315,2328],{"type":10,"tag":1625,"props":2316,"children":2318},{"className":2317},[1568,1606,1607],[2319],{"type":10,"tag":18,"props":2320,"children":2322},{"className":2321},[1568],[2323],{"type":10,"tag":1634,"props":2324,"children":2325},{},[2326],{"type":16,"value":2327},"VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT",{"type":10,"tag":1625,"props":2329,"children":2331},{"className":2330},[1568,1606,1607],[2332],{"type":10,"tag":18,"props":2333,"children":2335},{"className":2334},[1568],[2336],{"type":10,"tag":1634,"props":2337,"children":2338},{},[2339],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2341,"children":2342},{},[2343,2356],{"type":10,"tag":1625,"props":2344,"children":2346},{"className":2345},[1568,1606,1607],[2347],{"type":10,"tag":18,"props":2348,"children":2350},{"className":2349},[1568],[2351],{"type":10,"tag":1634,"props":2352,"children":2353},{},[2354],{"type":16,"value":2355},"VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT",{"type":10,"tag":1625,"props":2357,"children":2359},{"className":2358},[1568,1606,1607],[2360],{"type":10,"tag":18,"props":2361,"children":2363},{"className":2362},[1568],[2364],{"type":10,"tag":1634,"props":2365,"children":2366},{},[2367],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2369,"children":2370},{},[2371,2384],{"type":10,"tag":1625,"props":2372,"children":2374},{"className":2373},[1568,1606,1607],[2375],{"type":10,"tag":18,"props":2376,"children":2378},{"className":2377},[1568],[2379],{"type":10,"tag":1634,"props":2380,"children":2381},{},[2382],{"type":16,"value":2383},"VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR",{"type":10,"tag":1625,"props":2385,"children":2387},{"className":2386},[1568,1606,1607],[2388],{"type":10,"tag":18,"props":2389,"children":2391},{"className":2390},[1568],[2392],{"type":10,"tag":1634,"props":2393,"children":2394},{},[2395],{"type":16,"value":2396},"VK_QUEUE_VIDEO_DECODE_BIT_KHR",{"type":10,"tag":1599,"props":2398,"children":2399},{},[2400,2413],{"type":10,"tag":1625,"props":2401,"children":2403},{"className":2402},[1568,1606,1607],[2404],{"type":10,"tag":18,"props":2405,"children":2407},{"className":2406},[1568],[2408],{"type":10,"tag":1634,"props":2409,"children":2410},{},[2411],{"type":16,"value":2412},"VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR",{"type":10,"tag":1625,"props":2414,"children":2416},{"className":2415},[1568,1606,1607],[2417],{"type":10,"tag":18,"props":2418,"children":2420},{"className":2419},[1568],[2421],{"type":10,"tag":1634,"props":2422,"children":2423},{},[2424],{"type":16,"value":2425},"VK_QUEUE_VIDEO_ENCODE_BIT_KHR",{"type":10,"tag":1599,"props":2427,"children":2428},{},[2429,2442],{"type":10,"tag":1625,"props":2430,"children":2432},{"className":2431},[1568,1606,1607],[2433],{"type":10,"tag":18,"props":2434,"children":2436},{"className":2435},[1568],[2437],{"type":10,"tag":1634,"props":2438,"children":2439},{},[2440],{"type":16,"value":2441},"VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT",{"type":10,"tag":1625,"props":2443,"children":2445},{"className":2444},[1568,1606,1607],[2446],{"type":10,"tag":18,"props":2447,"children":2449},{"className":2448},[1568],[2450],{"type":10,"tag":1634,"props":2451,"children":2452},{},[2453],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2455,"children":2456},{},[2457,2470],{"type":10,"tag":1625,"props":2458,"children":2460},{"className":2459},[1568,1606,1607],[2461],{"type":10,"tag":18,"props":2462,"children":2464},{"className":2463},[1568],[2465],{"type":10,"tag":1634,"props":2466,"children":2467},{},[2468],{"type":16,"value":2469},"VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT",{"type":10,"tag":1625,"props":2471,"children":2473},{"className":2472},[1568,1606,1607],[2474],{"type":10,"tag":18,"props":2475,"children":2477},{"className":2476},[1568],[2478,2482,2483],{"type":10,"tag":1634,"props":2479,"children":2480},{},[2481],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2484,"children":2485},{},[2486],{"type":16,"value":1709},{"type":10,"tag":1599,"props":2488,"children":2489},{},[2490,2503],{"type":10,"tag":1625,"props":2491,"children":2493},{"className":2492},[1568,1606,1607],[2494],{"type":10,"tag":18,"props":2495,"children":2497},{"className":2496},[1568],[2498],{"type":10,"tag":1634,"props":2499,"children":2500},{},[2501],{"type":16,"value":2502},"VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV",{"type":10,"tag":1625,"props":2504,"children":2506},{"className":2505},[1568,1606,1607],[2507],{"type":10,"tag":18,"props":2508,"children":2510},{"className":2509},[1568],[2511,2515,2516],{"type":10,"tag":1634,"props":2512,"children":2513},{},[2514],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2517,"children":2518},{},[2519],{"type":16,"value":1709},{"type":10,"tag":1599,"props":2521,"children":2522},{},[2523,2536],{"type":10,"tag":1625,"props":2524,"children":2526},{"className":2525},[1568,1606,1607],[2527],{"type":10,"tag":18,"props":2528,"children":2530},{"className":2529},[1568],[2531],{"type":10,"tag":1634,"props":2532,"children":2533},{},[2534],{"type":16,"value":2535},"VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR",{"type":10,"tag":1625,"props":2537,"children":2539},{"className":2538},[1568,1606,1607],[2540],{"type":10,"tag":18,"props":2541,"children":2543},{"className":2542},[1568],[2544],{"type":10,"tag":1634,"props":2545,"children":2546},{},[2547],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2549,"children":2550},{},[2551,2564],{"type":10,"tag":1625,"props":2552,"children":2554},{"className":2553},[1568,1606,1607],[2555],{"type":10,"tag":18,"props":2556,"children":2558},{"className":2557},[1568],[2559],{"type":10,"tag":1634,"props":2560,"children":2561},{},[2562],{"type":16,"value":2563},"VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR",{"type":10,"tag":1625,"props":2565,"children":2567},{"className":2566},[1568,1606,1607],[2568],{"type":10,"tag":18,"props":2569,"children":2571},{"className":2570},[1568],[2572],{"type":10,"tag":1634,"props":2573,"children":2574},{},[2575],{"type":16,"value":1709},{"type":10,"tag":1599,"props":2577,"children":2578},{},[2579,2592],{"type":10,"tag":1625,"props":2580,"children":2582},{"className":2581},[1568,1606,1607],[2583],{"type":10,"tag":18,"props":2584,"children":2586},{"className":2585},[1568],[2587],{"type":10,"tag":1634,"props":2588,"children":2589},{},[2590],{"type":16,"value":2591},"VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR",{"type":10,"tag":1625,"props":2593,"children":2595},{"className":2594},[1568,1606,1607],[2596],{"type":10,"tag":18,"props":2597,"children":2599},{"className":2598},[1568],[2600],{"type":10,"tag":1634,"props":2601,"children":2602},{},[2603],{"type":16,"value":1709},{"type":10,"tag":1599,"props":2605,"children":2606},{},[2607,2620],{"type":10,"tag":1625,"props":2608,"children":2610},{"className":2609},[1568,1606,1607],[2611],{"type":10,"tag":18,"props":2612,"children":2614},{"className":2613},[1568],[2615],{"type":10,"tag":1634,"props":2616,"children":2617},{},[2618],{"type":16,"value":2619},"VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT",{"type":10,"tag":1625,"props":2621,"children":2623},{"className":2622},[1568,1606,1607],[2624],{"type":10,"tag":18,"props":2625,"children":2627},{"className":2626},[1568],[2628],{"type":10,"tag":1634,"props":2629,"children":2630},{},[2631],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2633,"children":2634},{},[2635,2648],{"type":10,"tag":1625,"props":2636,"children":2638},{"className":2637},[1568,1606,1607],[2639],{"type":10,"tag":18,"props":2640,"children":2642},{"className":2641},[1568],[2643],{"type":10,"tag":1634,"props":2644,"children":2645},{},[2646],{"type":16,"value":2647},"VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_EXT",{"type":10,"tag":1625,"props":2649,"children":2651},{"className":2650},[1568,1606,1607],[2652],{"type":10,"tag":18,"props":2653,"children":2655},{"className":2654},[1568],[2656],{"type":10,"tag":1634,"props":2657,"children":2658},{},[2659],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2661,"children":2662},{},[2663,2676],{"type":10,"tag":1625,"props":2664,"children":2666},{"className":2665},[1568,1606,1607],[2667],{"type":10,"tag":18,"props":2668,"children":2670},{"className":2669},[1568],[2671],{"type":10,"tag":1634,"props":2672,"children":2673},{},[2674],{"type":16,"value":2675},"VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_EXT",{"type":10,"tag":1625,"props":2677,"children":2679},{"className":2678},[1568,1606,1607],[2680],{"type":10,"tag":18,"props":2681,"children":2683},{"className":2682},[1568],[2684],{"type":10,"tag":1634,"props":2685,"children":2686},{},[2687],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2689,"children":2690},{},[2691,2704],{"type":10,"tag":1625,"props":2692,"children":2694},{"className":2693},[1568,1606,1607],[2695],{"type":10,"tag":18,"props":2696,"children":2698},{"className":2697},[1568],[2699],{"type":10,"tag":1634,"props":2700,"children":2701},{},[2702],{"type":16,"value":2703},"VK_PIPELINE_STAGE_2_SUBPASS_SHADER_BIT_HUAWEI",{"type":10,"tag":1625,"props":2705,"children":2707},{"className":2706},[1568,1606,1607],[2708],{"type":10,"tag":18,"props":2709,"children":2711},{"className":2710},[1568],[2712],{"type":10,"tag":1634,"props":2713,"children":2714},{},[2715],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2717,"children":2718},{},[2719,2732],{"type":10,"tag":1625,"props":2720,"children":2722},{"className":2721},[1568,1606,1607],[2723],{"type":10,"tag":18,"props":2724,"children":2726},{"className":2725},[1568],[2727],{"type":10,"tag":1634,"props":2728,"children":2729},{},[2730],{"type":16,"value":2731},"VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI",{"type":10,"tag":1625,"props":2733,"children":2735},{"className":2734},[1568,1606,1607],[2736],{"type":10,"tag":18,"props":2737,"children":2739},{"className":2738},[1568],[2740],{"type":10,"tag":1634,"props":2741,"children":2742},{},[2743],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2745,"children":2746},{},[2747,2760],{"type":10,"tag":1625,"props":2748,"children":2750},{"className":2749},[1568,1606,1607],[2751],{"type":10,"tag":18,"props":2752,"children":2754},{"className":2753},[1568],[2755],{"type":10,"tag":1634,"props":2756,"children":2757},{},[2758],{"type":16,"value":2759},"VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_COPY_BIT_KHR",{"type":10,"tag":1625,"props":2761,"children":2763},{"className":2762},[1568,1606,1607],[2764],{"type":10,"tag":18,"props":2765,"children":2767},{"className":2766},[1568],[2768,2772,2773,2777,2778],{"type":10,"tag":1634,"props":2769,"children":2770},{},[2771],{"type":16,"value":1702},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2774,"children":2775},{},[2776],{"type":16,"value":1709},{"type":16,"value":1704},{"type":10,"tag":1634,"props":2779,"children":2780},{},[2781],{"type":16,"value":2028},{"type":10,"tag":1599,"props":2783,"children":2784},{},[2785,2798],{"type":10,"tag":1625,"props":2786,"children":2788},{"className":2787},[1568,1606,1607],[2789],{"type":10,"tag":18,"props":2790,"children":2792},{"className":2791},[1568],[2793],{"type":10,"tag":1634,"props":2794,"children":2795},{},[2796],{"type":16,"value":2797},"VK_PIPELINE_STAGE_2_MICROMAP_BUILD_BIT_EXT",{"type":10,"tag":1625,"props":2799,"children":2801},{"className":2800},[1568,1606,1607],[2802],{"type":10,"tag":18,"props":2803,"children":2805},{"className":2804},[1568],[2806],{"type":10,"tag":1634,"props":2807,"children":2808},{},[2809],{"type":16,"value":1709},{"type":10,"tag":1599,"props":2811,"children":2812},{},[2813,2826],{"type":10,"tag":1625,"props":2814,"children":2816},{"className":2815},[1568,1606,1607],[2817],{"type":10,"tag":18,"props":2818,"children":2820},{"className":2819},[1568],[2821],{"type":10,"tag":1634,"props":2822,"children":2823},{},[2824],{"type":16,"value":2825},"VK_PIPELINE_STAGE_2_CLUSTER_CULLING_SHADER_BIT_HUAWEI",{"type":10,"tag":1625,"props":2827,"children":2829},{"className":2828},[1568,1606,1607],[2830],{"type":10,"tag":18,"props":2831,"children":2833},{"className":2832},[1568],[2834],{"type":10,"tag":1634,"props":2835,"children":2836},{},[2837],{"type":16,"value":1702},{"type":10,"tag":1599,"props":2839,"children":2840},{},[2841,2854],{"type":10,"tag":1625,"props":2842,"children":2844},{"className":2843},[1568,1606,1607],[2845],{"type":10,"tag":18,"props":2846,"children":2848},{"className":2847},[1568],[2849],{"type":10,"tag":1634,"props":2850,"children":2851},{},[2852],{"type":16,"value":2853},"VK_PIPELINE_STAGE_2_OPTICAL_FLOW_BIT_NV",{"type":10,"tag":1625,"props":2855,"children":2857},{"className":2856},[1568,1606,1607],[2858],{"type":10,"tag":18,"props":2859,"children":2861},{"className":2860},[1568],[2862],{"type":10,"tag":1634,"props":2863,"children":2864},{},[2865],{"type":16,"value":2866},"VK_QUEUE_OPTICAL_FLOW_BIT_NV",{"type":10,"tag":187,"props":2868,"children":2870},{"id":2869},"synchronization-pipeline-stages-order",[],{"type":10,"tag":18,"props":2872,"children":2873},{},[2874,2876,2879,2881,2889],{"type":16,"value":2875},"Pipeline stages that execute as a result of a command logically complete\nexecution in a specific order, such that completion of a logically later\npipeline stage ",{"type":10,"tag":45,"props":2877,"children":2878},{"type":226},[],{"type":16,"value":2880}," not happen-before completion of a logically earlier\nstage.\nThis means that including any stage in the source stage mask for a\nparticular synchronization command also implies that any logically earlier\nstages are included in ",{"type":10,"tag":158,"props":2882,"children":2883},{},[2884,2885],{"type":16,"value":295},{"type":10,"tag":258,"props":2886,"children":2887},{},[2888],{"type":16,"value":300},{"type":16,"value":2890}," for that command.",{"type":10,"tag":18,"props":2892,"children":2893},{},[2894,2896,2899,2901,2909],{"type":16,"value":2895},"Similarly, initiation of a logically earlier pipeline stage ",{"type":10,"tag":45,"props":2897,"children":2898},{"type":226},[],{"type":16,"value":2900}," not\nhappen-after initiation of a logically later pipeline stage.\nIncluding any given stage in the destination stage mask for a particular\nsynchronization command also implies that any logically later stages are\nincluded in ",{"type":10,"tag":158,"props":2902,"children":2903},{},[2904,2905],{"type":16,"value":295},{"type":10,"tag":258,"props":2906,"children":2907},{},[2908],{"type":16,"value":310},{"type":16,"value":2890},{"type":10,"tag":1008,"props":2911,"children":2912},{},[2913,2933,2943],{"type":10,"tag":18,"props":2914,"children":2915},{},[2916,2918,2921,2923,2926,2928,2931],{"type":16,"value":2917},"Implementations ",{"type":10,"tag":45,"props":2919,"children":2920},{"type":1058},[],{"type":16,"value":2922}," not support synchronization at every pipeline stage for\nevery synchronization operation.\nIf a pipeline stage that an implementation does not support synchronization\nfor appears in a source stage mask, it ",{"type":10,"tag":45,"props":2924,"children":2925},{"type":1058},[],{"type":16,"value":2927}," substitute any logically later\nstage in its place for the first synchronization scope.\nIf a pipeline stage that an implementation does not support synchronization\nfor appears in a destination stage mask, it ",{"type":10,"tag":45,"props":2929,"children":2930},{"type":1058},[],{"type":16,"value":2932}," substitute any logically\nearlier stage in its place for the second synchronization scope.",{"type":10,"tag":18,"props":2934,"children":2935},{},[2936,2938,2941],{"type":16,"value":2937},"For example, if an implementation is unable to signal an event immediately\nafter vertex shader execution is complete, it ",{"type":10,"tag":45,"props":2939,"children":2940},{"type":1058},[],{"type":16,"value":2942}," instead signal the event\nafter color attachment output has completed.",{"type":10,"tag":18,"props":2944,"children":2945},{},[2946,2948,2951],{"type":16,"value":2947},"If an implementation makes such a substitution, it ",{"type":10,"tag":45,"props":2949,"children":2950},{"type":226},[],{"type":16,"value":2952}," not affect the\nsemantics of execution or memory dependencies or image and buffer memory\nbarriers.",{"type":10,"tag":18,"props":2954,"children":2955},{},[2956,2960],{"type":10,"tag":187,"props":2957,"children":2959},{"id":2958},"synchronization-pipeline-stages-types",[],{"type":16,"value":2961},":anchor{id=\"synchronization-pipeline-graphics\"}",{"type":10,"tag":18,"props":2963,"children":2964},{},[2965,2971,2973,2978,2980,2983,2985,2990],{"type":10,"tag":33,"props":2966,"children":2968},{"href":2967},"/chapters/pipelines#pipelines-graphics",[2969],{"type":16,"value":2970},"Graphics pipelines",{"type":16,"value":2972}," are executable on queues\nsupporting ",{"type":10,"tag":1085,"props":2974,"children":2976},{"className":2975},[],[2977],{"type":16,"value":1702},{"type":16,"value":2979},".\nStages executed by graphics pipelines ",{"type":10,"tag":45,"props":2981,"children":2982},{"type":47},[],{"type":16,"value":2984}," only be specified in commands\nrecorded for queues supporting ",{"type":10,"tag":1085,"props":2986,"children":2988},{"className":2987},[],[2989],{"type":16,"value":1702},{"type":16,"value":185},{"type":10,"tag":18,"props":2992,"children":2993},{},[2994],{"type":16,"value":2995},"The graphics\nprimitive\npipeline executes the following stages, with the logical ordering of the\nstages matching the order specified here:",{"type":10,"tag":243,"props":2997,"children":2998},{},[2999,3007,3015,3023,3031,3039,3047,3055,3063,3071,3079,3087,3095],{"type":10,"tag":247,"props":3000,"children":3001},{},[3002],{"type":10,"tag":1085,"props":3003,"children":3005},{"className":3004},[],[3006],{"type":16,"value":1689},{"type":10,"tag":247,"props":3008,"children":3009},{},[3010],{"type":10,"tag":1085,"props":3011,"children":3013},{"className":3012},[],[3014],{"type":16,"value":2299},{"type":10,"tag":247,"props":3016,"children":3017},{},[3018],{"type":10,"tag":1085,"props":3019,"children":3021},{"className":3020},[],[3022],{"type":16,"value":2327},{"type":10,"tag":247,"props":3024,"children":3025},{},[3026],{"type":10,"tag":1085,"props":3027,"children":3029},{"className":3028},[],[3030],{"type":16,"value":1753},{"type":10,"tag":247,"props":3032,"children":3033},{},[3034],{"type":10,"tag":1085,"props":3035,"children":3037},{"className":3036},[],[3038],{"type":16,"value":1781},{"type":10,"tag":247,"props":3040,"children":3041},{},[3042],{"type":10,"tag":1085,"props":3043,"children":3045},{"className":3044},[],[3046],{"type":16,"value":1809},{"type":10,"tag":247,"props":3048,"children":3049},{},[3050],{"type":10,"tag":1085,"props":3051,"children":3053},{"className":3052},[],[3054],{"type":16,"value":1837},{"type":10,"tag":247,"props":3056,"children":3057},{},[3058],{"type":10,"tag":1085,"props":3059,"children":3061},{"className":3060},[],[3062],{"type":16,"value":2441},{"type":10,"tag":247,"props":3064,"children":3065},{},[3066],{"type":10,"tag":1085,"props":3067,"children":3069},{"className":3068},[],[3070],{"type":16,"value":2535},{"type":10,"tag":247,"props":3072,"children":3073},{},[3074],{"type":10,"tag":1085,"props":3075,"children":3077},{"className":3076},[],[3078],{"type":16,"value":1893},{"type":10,"tag":247,"props":3080,"children":3081},{},[3082],{"type":10,"tag":1085,"props":3083,"children":3085},{"className":3084},[],[3086],{"type":16,"value":1865},{"type":10,"tag":247,"props":3088,"children":3089},{},[3090],{"type":10,"tag":1085,"props":3091,"children":3093},{"className":3092},[],[3094],{"type":16,"value":1921},{"type":10,"tag":247,"props":3096,"children":3097},{},[3098],{"type":10,"tag":1085,"props":3099,"children":3101},{"className":3100},[],[3102],{"type":16,"value":1949},{"type":10,"tag":18,"props":3104,"children":3105},{},[3106],{"type":16,"value":3107},"The graphics mesh pipeline executes the following stages, with the logical\nordering of the stages matching the order specified here:",{"type":10,"tag":243,"props":3109,"children":3110},{},[3111,3119,3127,3135,3143,3151,3159,3167],{"type":10,"tag":247,"props":3112,"children":3113},{},[3114],{"type":10,"tag":1085,"props":3115,"children":3117},{"className":3116},[],[3118],{"type":16,"value":1689},{"type":10,"tag":247,"props":3120,"children":3121},{},[3122],{"type":10,"tag":1085,"props":3123,"children":3125},{"className":3124},[],[3126],{"type":16,"value":2647},{"type":10,"tag":247,"props":3128,"children":3129},{},[3130],{"type":10,"tag":1085,"props":3131,"children":3133},{"className":3132},[],[3134],{"type":16,"value":2675},{"type":10,"tag":247,"props":3136,"children":3137},{},[3138],{"type":10,"tag":1085,"props":3139,"children":3141},{"className":3140},[],[3142],{"type":16,"value":2535},{"type":10,"tag":247,"props":3144,"children":3145},{},[3146],{"type":10,"tag":1085,"props":3147,"children":3149},{"className":3148},[],[3150],{"type":16,"value":1893},{"type":10,"tag":247,"props":3152,"children":3153},{},[3154],{"type":10,"tag":1085,"props":3155,"children":3157},{"className":3156},[],[3158],{"type":16,"value":1865},{"type":10,"tag":247,"props":3160,"children":3161},{},[3162],{"type":10,"tag":1085,"props":3163,"children":3165},{"className":3164},[],[3166],{"type":16,"value":1921},{"type":10,"tag":247,"props":3168,"children":3169},{},[3170],{"type":10,"tag":1085,"props":3171,"children":3173},{"className":3172},[],[3174],{"type":16,"value":1949},{"type":10,"tag":18,"props":3176,"children":3177},{},[3178],{"type":16,"value":3179},"For the compute pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3181,"children":3182},{},[3183,3191],{"type":10,"tag":247,"props":3184,"children":3185},{},[3186],{"type":10,"tag":1085,"props":3187,"children":3189},{"className":3188},[],[3190],{"type":16,"value":1689},{"type":10,"tag":247,"props":3192,"children":3193},{},[3194],{"type":10,"tag":1085,"props":3195,"children":3197},{"className":3196},[],[3198],{"type":16,"value":1977},{"type":10,"tag":18,"props":3200,"children":3201},{},[3202],{"type":16,"value":3203},"For the subpass shading pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3205,"children":3206},{},[3207],{"type":10,"tag":247,"props":3208,"children":3209},{},[3210],{"type":10,"tag":1085,"props":3211,"children":3213},{"className":3212},[],[3214],{"type":16,"value":2703},{"type":10,"tag":18,"props":3216,"children":3217},{},[3218,3220,3226],{"type":16,"value":3219},"For graphics pipeline commands executing in a render pass with a fragment\ndensity map attachment, the following pipeline stage where the fragment\ndensity map read happens has no particular order relative to the other\nstages, except that it is logically earlier than\n",{"type":10,"tag":1085,"props":3221,"children":3223},{"className":3222},[],[3224],{"type":16,"value":3225},"VK_PIPELINE_STAGE_EARLY_FRAGMENT_TESTS_BIT",{"type":16,"value":748},{"type":10,"tag":243,"props":3228,"children":3229},{},[3230,3239],{"type":10,"tag":247,"props":3231,"children":3232},{},[3233],{"type":10,"tag":1085,"props":3234,"children":3236},{"className":3235},[],[3237],{"type":16,"value":3238},"VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT",{"type":10,"tag":247,"props":3240,"children":3241},{},[3242],{"type":10,"tag":1085,"props":3243,"children":3245},{"className":3244},[],[3246],{"type":16,"value":3225},{"type":10,"tag":18,"props":3248,"children":3249},{},[3250],{"type":16,"value":3251},"The conditional rendering stage is formally part of both the graphics, and\nthe compute pipeline.\nThe pipeline stage where the predicate read happens has unspecified order\nrelative to other stages of these pipelines:",{"type":10,"tag":243,"props":3253,"children":3254},{},[3255],{"type":10,"tag":247,"props":3256,"children":3257},{},[3258],{"type":10,"tag":1085,"props":3259,"children":3261},{"className":3260},[],[3262],{"type":16,"value":3263},"VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT",{"type":10,"tag":18,"props":3265,"children":3266},{},[3267],{"type":16,"value":3268},"For the transfer pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3270,"children":3271},{},[3272],{"type":10,"tag":247,"props":3273,"children":3274},{},[3275],{"type":10,"tag":1085,"props":3276,"children":3278},{"className":3277},[],[3279],{"type":16,"value":3280},"VK_PIPELINE_STAGE_2_TRANSFER_BIT",{"type":10,"tag":18,"props":3282,"children":3283},{},[3284],{"type":16,"value":3285},"For host operations, only one pipeline stage occurs, so no order is\nguaranteed:",{"type":10,"tag":243,"props":3287,"children":3288},{},[3289],{"type":10,"tag":247,"props":3290,"children":3291},{},[3292],{"type":10,"tag":1085,"props":3293,"children":3295},{"className":3294},[],[3296],{"type":16,"value":2069},{"type":10,"tag":18,"props":3298,"children":3299},{},[3300],{"type":16,"value":3301},"For the command preprocessing pipeline, the following stages occur in this\norder:",{"type":10,"tag":243,"props":3303,"children":3304},{},[3305],{"type":10,"tag":247,"props":3306,"children":3307},{},[3308],{"type":10,"tag":1085,"props":3309,"children":3311},{"className":3310},[],[3312],{"type":16,"value":2502},{"type":10,"tag":18,"props":3314,"children":3315},{},[3316],{"type":16,"value":3317},"For acceleration structure build operations, only one pipeline stage occurs,\nso no order is guaranteed:",{"type":10,"tag":243,"props":3319,"children":3320},{},[3321],{"type":10,"tag":247,"props":3322,"children":3323},{},[3324],{"type":10,"tag":1085,"props":3325,"children":3327},{"className":3326},[],[3328],{"type":16,"value":2563},{"type":10,"tag":18,"props":3330,"children":3331},{},[3332],{"type":16,"value":3333},"For acceleration structure copy operations, only one pipeline stage occurs,\nso no order is guaranteed:",{"type":10,"tag":243,"props":3335,"children":3336},{},[3337],{"type":10,"tag":247,"props":3338,"children":3339},{},[3340],{"type":10,"tag":1085,"props":3341,"children":3343},{"className":3342},[],[3344],{"type":16,"value":2759},{"type":10,"tag":18,"props":3346,"children":3347},{},[3348],{"type":16,"value":3349},"For opacity micromap build operations, only one pipeline stage occurs, so no\norder is guaranteed:",{"type":10,"tag":243,"props":3351,"children":3352},{},[3353],{"type":10,"tag":247,"props":3354,"children":3355},{},[3356],{"type":10,"tag":1085,"props":3357,"children":3359},{"className":3358},[],[3360],{"type":16,"value":2797},{"type":10,"tag":18,"props":3362,"children":3363},{},[3364],{"type":16,"value":3365},"For the ray tracing pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3367,"children":3368},{},[3369,3377],{"type":10,"tag":247,"props":3370,"children":3371},{},[3372],{"type":10,"tag":1085,"props":3373,"children":3375},{"className":3374},[],[3376],{"type":16,"value":1689},{"type":10,"tag":247,"props":3378,"children":3379},{},[3380],{"type":10,"tag":1085,"props":3381,"children":3383},{"className":3382},[],[3384],{"type":16,"value":2591},{"type":10,"tag":18,"props":3386,"children":3387},{},[3388],{"type":16,"value":3389},"For the video decode pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3391,"children":3392},{},[3393],{"type":10,"tag":247,"props":3394,"children":3395},{},[3396],{"type":10,"tag":1085,"props":3397,"children":3399},{"className":3398},[],[3400],{"type":16,"value":2383},{"type":10,"tag":18,"props":3402,"children":3403},{},[3404],{"type":16,"value":3405},"For the video encode pipeline, the following stages occur in this order:",{"type":10,"tag":243,"props":3407,"children":3408},{},[3409],{"type":10,"tag":247,"props":3410,"children":3411},{},[3412],{"type":10,"tag":1085,"props":3413,"children":3415},{"className":3414},[],[3416],{"type":16,"value":2412},{"type":10,"tag":1017,"props":3418,"children":3420},{"id":3419},"synchronization-access-types",[3421],{"type":16,"value":3422},"Access Types",{"type":10,"tag":18,"props":3424,"children":3425},{},[3426,3428,3431,3433,3438,3440,3446],{"type":16,"value":3427},"Memory in Vulkan ",{"type":10,"tag":45,"props":3429,"children":3430},{"type":47},[],{"type":16,"value":3432}," be accessed from within shader invocations and via\nsome fixed-function stages of the pipeline.\nThe ",{"type":10,"tag":158,"props":3434,"children":3435},{},[3436],{"type":16,"value":3437},"access type",{"type":16,"value":3439}," is a function of the ",{"type":10,"tag":33,"props":3441,"children":3443},{"href":3442},"/chapters/descriptorsets#descriptorsets",[3444],{"type":16,"value":3445},"descriptor type",{"type":16,"value":3447},"\nused, or how a fixed-function stage accesses memory.",{"type":10,"tag":187,"props":3449,"children":3451},{"id":3450},"synchronization-access-masks",[],{"type":10,"tag":18,"props":3453,"children":3454},{},[3455,3457,3461,3463,3468,3470,3474,3476,3481,3483,3488],{"type":16,"value":3456},"Some synchronization commands take sets of access types as parameters to\ndefine the ",{"type":10,"tag":33,"props":3458,"children":3459},{"href":1495},[3460],{"type":16,"value":713},{"type":16,"value":3462}," of\na memory dependency.\nIf a synchronization command includes a ",{"type":10,"tag":158,"props":3464,"children":3465},{},[3466],{"type":16,"value":3467},"source access mask",{"type":16,"value":3469},", its first\n",{"type":10,"tag":33,"props":3471,"children":3472},{"href":1495},[3473],{"type":16,"value":1498},{"type":16,"value":3475}," only includes\naccesses via the access types specified in that mask.\nSimilarly, if a synchronization command includes a ",{"type":10,"tag":158,"props":3477,"children":3478},{},[3479],{"type":16,"value":3480},"destination access\nmask",{"type":16,"value":3482},", its second ",{"type":10,"tag":33,"props":3484,"children":3485},{"href":1495},[3486],{"type":16,"value":3487},"access\nscope",{"type":16,"value":3489}," only includes accesses via the access types specified in that mask.",{"type":10,"tag":1432,"props":3491,"children":3493},{"name":3492,"type":1435},"VkAccessFlagBits2",[3494],{"type":10,"tag":18,"props":3495,"children":3496},{},[3497],{"type":16,"value":3498},"Access flags for VkAccessFlags2",{"type":10,"tag":1432,"props":3500,"children":3502},{"name":3501,"type":1445},"VkAccessFlags2",[3503],{"type":10,"tag":18,"props":3504,"children":3505},{},[3506],{"type":16,"value":3507},"64-bit mask of access flags",{"type":10,"tag":1432,"props":3509,"children":3511},{"name":3510,"type":1435},"VkAccessFlagBits",[3512],{"type":10,"tag":18,"props":3513,"children":3514},{},[3515],{"type":16,"value":3516},"Bitmask specifying memory access types that will participate in a memory dependency",{"type":10,"tag":1432,"props":3518,"children":3520},{"name":3519,"type":1445},"VkAccessFlags",[3521],{"type":10,"tag":18,"props":3522,"children":3523},{},[3524],{"type":16,"value":3525},"Bitmask of VkAccessFlagBits",{"type":10,"tag":187,"props":3527,"children":3529},{"id":3528},"synchronization-host-access-types",[],{"type":10,"tag":18,"props":3531,"children":3532},{},[3533,3535,3541,3543,3549,3550,3553,3555,3558,3560,3566,3567,3570],{"type":16,"value":3534},"If a memory object does not have the\n",{"type":10,"tag":1085,"props":3536,"children":3538},{"className":3537},[],[3539],{"type":16,"value":3540},"VK_MEMORY_PROPERTY_HOST_COHERENT_BIT",{"type":16,"value":3542}," property, then\n",{"type":10,"tag":33,"props":3544,"children":3546},{"href":3545},"/man/vkFlushMappedMemoryRanges",[3547],{"type":16,"value":3548},"vkFlushMappedMemoryRanges",{"type":16,"value":229},{"type":10,"tag":45,"props":3551,"children":3552},{"type":226},[],{"type":16,"value":3554}," be called in order to guarantee that\nwrites to the memory object from the host are made available to the host\ndomain, where they ",{"type":10,"tag":45,"props":3556,"children":3557},{"type":47},[],{"type":16,"value":3559}," be further made available to the device domain via a\ndomain operation.\nSimilarly, ",{"type":10,"tag":33,"props":3561,"children":3563},{"href":3562},"/man/vkInvalidateMappedMemoryRanges",[3564],{"type":16,"value":3565},"vkInvalidateMappedMemoryRanges",{"type":16,"value":229},{"type":10,"tag":45,"props":3568,"children":3569},{"type":226},[],{"type":16,"value":3571}," be called to guarantee\nthat writes which are available to the host domain are made visible to host\noperations.",{"type":10,"tag":18,"props":3573,"children":3574},{},[3575,3577,3582],{"type":16,"value":3576},"If the memory object does have the\n",{"type":10,"tag":1085,"props":3578,"children":3580},{"className":3579},[],[3581],{"type":16,"value":3540},{"type":16,"value":3583}," property flag, writes to the\nmemory object from the host are automatically made available to the host\ndomain.\nSimilarly, writes made available to the host domain are automatically made\nvisible to the host.",{"type":10,"tag":1008,"props":3585,"children":3586},{},[3587],{"type":10,"tag":18,"props":3588,"children":3589},{},[3590,3596,3598,3604,3606,3609],{"type":10,"tag":33,"props":3591,"children":3593},{"href":3592},"/chapters/devsandqueues#devsandqueues-submission",[3594],{"type":16,"value":3595},"Queue submission commands",{"type":16,"value":3597}," automatically\nperform a ",{"type":10,"tag":33,"props":3599,"children":3601},{"href":3600},"/chapters/synchronization#synchronization-submission-host-writes",[3602],{"type":16,"value":3603},"domain operation from\nhost to device",{"type":16,"value":3605}," for all writes performed before the command executes, so in\nmost cases an explicit memory barrier is not needed for this case.\nIn the few circumstances where a submit does not occur between the host\nwrite and the device read access, writes ",{"type":10,"tag":45,"props":3607,"children":3608},{"type":47},[],{"type":16,"value":3610}," be made available by using an\nexplicit memory barrier.",{"type":10,"tag":1017,"props":3612,"children":3614},{"id":3613},"synchronization-framebuffer-regions",[3615],{"type":16,"value":3616},"Framebuffer Region Dependencies",{"type":10,"tag":18,"props":3618,"children":3619},{},[3620,3625,3627,3632],{"type":10,"tag":33,"props":3621,"children":3622},{"href":203},[3623],{"type":16,"value":3624},"Pipeline stages",{"type":16,"value":3626}," that operate on, or\nwith respect to, the framebuffer are collectively the ",{"type":10,"tag":158,"props":3628,"children":3629},{},[3630],{"type":16,"value":3631},"framebuffer-space",{"type":16,"value":3633},"\npipeline stages.\nThese stages are:",{"type":10,"tag":243,"props":3635,"children":3636},{},[3637,3646,3654,3663],{"type":10,"tag":247,"props":3638,"children":3639},{},[3640],{"type":10,"tag":1085,"props":3641,"children":3643},{"className":3642},[],[3644],{"type":16,"value":3645},"VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT",{"type":10,"tag":247,"props":3647,"children":3648},{},[3649],{"type":10,"tag":1085,"props":3650,"children":3652},{"className":3651},[],[3653],{"type":16,"value":3225},{"type":10,"tag":247,"props":3655,"children":3656},{},[3657],{"type":10,"tag":1085,"props":3658,"children":3660},{"className":3659},[],[3661],{"type":16,"value":3662},"VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT",{"type":10,"tag":247,"props":3664,"children":3665},{},[3666],{"type":10,"tag":1085,"props":3667,"children":3669},{"className":3668},[],[3670],{"type":16,"value":3671},"VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT",{"type":10,"tag":18,"props":3673,"children":3674},{},[3675,3677,3680,3682,3687,3689,3694],{"type":16,"value":3676},"For these pipeline stages, an execution or memory dependency from the first\nset of operations to the second set ",{"type":10,"tag":45,"props":3678,"children":3679},{"type":47},[],{"type":16,"value":3681}," either be a single\n",{"type":10,"tag":158,"props":3683,"children":3684},{},[3685],{"type":16,"value":3686},"framebuffer-global",{"type":16,"value":3688}," dependency, or split into multiple ",{"type":10,"tag":158,"props":3690,"children":3691},{},[3692],{"type":16,"value":3693},"framebuffer-local",{"type":16,"value":3695},"\ndependencies.\nA dependency with non-framebuffer-space pipeline stages is neither\nframebuffer-global nor framebuffer-local.",{"type":10,"tag":18,"props":3697,"children":3698},{},[3699,3700,3705,3707,3710],{"type":16,"value":664},{"type":10,"tag":158,"props":3701,"children":3702},{},[3703],{"type":16,"value":3704},"framebuffer region",{"type":16,"value":3706}," is a subset of the entire framebuffer, and ",{"type":10,"tag":45,"props":3708,"children":3709},{"type":47},[],{"type":16,"value":3711},"\neither be:",{"type":10,"tag":243,"props":3713,"children":3714},{},[3715,3726],{"type":10,"tag":247,"props":3716,"children":3717},{},[3718,3719,3724],{"type":16,"value":664},{"type":10,"tag":158,"props":3720,"children":3721},{},[3722],{"type":16,"value":3723},"sample region",{"type":16,"value":3725},", which is set of sample (x, y, layer, sample)\ncoordinates that is a subset of the entire framebuffer, or",{"type":10,"tag":247,"props":3727,"children":3728},{},[3729,3730,3735],{"type":16,"value":664},{"type":10,"tag":158,"props":3731,"children":3732},{},[3733],{"type":16,"value":3734},"fragment region",{"type":16,"value":3736},", which is a set of fragment (x, y, layer)\ncoordinates that is a subset of the entire framebuffer.",{"type":10,"tag":18,"props":3738,"children":3739},{},[3740,3742,3746],{"type":16,"value":3741},"Both ",{"type":10,"tag":33,"props":3743,"children":3744},{"href":1372},[3745],{"type":16,"value":183},{"type":16,"value":3747}," of a\nframebuffer-local dependency include only the operations performed within\ncorresponding framebuffer regions (as defined below).\nNo ordering guarantees are made between different framebuffer regions for a\nframebuffer-local dependency.",{"type":10,"tag":18,"props":3749,"children":3750},{},[3751,3752,3756],{"type":16,"value":3741},{"type":10,"tag":33,"props":3753,"children":3754},{"href":1372},[3755],{"type":16,"value":183},{"type":16,"value":3757}," of a\nframebuffer-global dependency include operations on all framebuffer-regions.",{"type":10,"tag":18,"props":3759,"children":3760},{},[3761,3763,3769,3771,3776,3778,3784],{"type":16,"value":3762},"If the first synchronization scope includes operations on pixels/fragments\nwith N samples and the second synchronization scope includes operations on\npixels/fragments with M samples, where N does not equal M, then a\nframebuffer region containing all samples at a given (x, y, layer)\ncoordinate in the first synchronization scope corresponds to a region\ncontaining all samples at the same coordinate in the second synchronization\nscope.\nIn other words, the framebuffer region is a fragment region and it is a\npixel granularity dependency.\nIf N equals M,\nand if the ",{"type":10,"tag":1085,"props":3764,"children":3766},{"className":3765},[],[3767],{"type":16,"value":3768},"VkSubpassDescription",{"type":16,"value":3770},"::",{"type":10,"tag":1085,"props":3772,"children":3774},{"className":3773},[],[3775],{"type":16,"value":1445},{"type":16,"value":3777}," does not specify the\n",{"type":10,"tag":1085,"props":3779,"children":3781},{"className":3780},[],[3782],{"type":16,"value":3783},"VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM",{"type":16,"value":3785}," flag,\nthen a framebuffer region containing a single (x, y, layer, sample)\ncoordinate in the first synchronization scope corresponds to a region\ncontaining the same sample at the same coordinate in the second\nsynchronization scope.\nIn other words, the framebuffer region is a sample region and it is a sample\ngranularity dependency.",{"type":10,"tag":18,"props":3787,"children":3788},{},[3789,3791,3797,3799,3805,3807,3813],{"type":16,"value":3790},"If the pipeline performing the operation was created with\n",{"type":10,"tag":1085,"props":3792,"children":3794},{"className":3793},[],[3795],{"type":16,"value":3796},"VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_EXT",{"type":16,"value":3798},",\n",{"type":10,"tag":1085,"props":3800,"children":3802},{"className":3801},[],[3803],{"type":16,"value":3804},"VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_EXT",{"type":16,"value":3806},",\nor\n",{"type":10,"tag":1085,"props":3808,"children":3810},{"className":3809},[],[3811],{"type":16,"value":3812},"VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_EXT",{"type":16,"value":3814},",\nthe framebuffer region is a fragment region and it is a pixel granularity\ndependency.",{"type":10,"tag":1008,"props":3816,"children":3817},{},[3818],{"type":10,"tag":18,"props":3819,"children":3820},{},[3821,3823,3826],{"type":16,"value":3822},"Since fragment shader invocations are not specified to run in any particular\ngroupings, the size of a framebuffer region is implementation-dependent, not\nknown to the application, and ",{"type":10,"tag":45,"props":3824,"children":3825},{"type":226},[],{"type":16,"value":3827}," be assumed to be no larger than\nspecified above.",{"type":10,"tag":1008,"props":3829,"children":3830},{},[3831,3873],{"type":10,"tag":18,"props":3832,"children":3833},{},[3834,3836,3842,3844,3847,3849,3852,3854,3860,3862,3867,3868],{"type":16,"value":3835},"Practically, the pixel vs. sample granularity dependency means that if an\ninput attachment has a different number of samples than the pipeline’s\n",{"type":10,"tag":1085,"props":3837,"children":3839},{"className":3838},[],[3840],{"type":16,"value":3841},"rasterizationSamples",{"type":16,"value":3843},", then a fragment ",{"type":10,"tag":45,"props":3845,"children":3846},{"type":47},[],{"type":16,"value":3848}," access any sample in the\ninput attachment’s pixel even if it only uses framebuffer-local\ndependencies.\nIf the input attachment has the same number of samples, then the fragment\n",{"type":10,"tag":45,"props":3850,"children":3851},{"type":47},[],{"type":16,"value":3853}," only access the covered samples in its input ",{"type":10,"tag":1085,"props":3855,"children":3857},{"className":3856},[],[3858],{"type":16,"value":3859},"SampleMask",{"type":16,"value":3861}," (i.e. the\nfragment operations happen-after a framebuffer-local dependency for each\nsample the fragment covers).\nTo access samples that are not covered,\neither the ",{"type":10,"tag":1085,"props":3863,"children":3865},{"className":3864},[],[3866],{"type":16,"value":3768},{"type":16,"value":3770},{"type":10,"tag":1085,"props":3869,"children":3871},{"className":3870},[],[3872],{"type":16,"value":1445},{"type":10,"tag":18,"props":3874,"children":3875},{},[3876,3881],{"type":10,"tag":1085,"props":3877,"children":3879},{"className":3878},[],[3880],{"type":16,"value":3783},{"type":16,"value":3882}," flag is required, or\na framebuffer-global dependency is required.",{"type":10,"tag":18,"props":3884,"children":3885},{},[3886,3888,3894,3896,3902,3904,3909,3911,3916,3918,3923],{"type":16,"value":3887},"If a synchronization command includes a ",{"type":10,"tag":1085,"props":3889,"children":3891},{"className":3890},[],[3892],{"type":16,"value":3893},"dependencyFlags",{"type":16,"value":3895}," parameter, and\nspecifies the ",{"type":10,"tag":1085,"props":3897,"children":3899},{"className":3898},[],[3900],{"type":16,"value":3901},"VK_DEPENDENCY_BY_REGION_BIT",{"type":16,"value":3903}," flag, then it defines\nframebuffer-local dependencies for the framebuffer-space pipeline stages in\nthat synchronization command, for all framebuffer regions.\nIf no ",{"type":10,"tag":1085,"props":3905,"children":3907},{"className":3906},[],[3908],{"type":16,"value":3893},{"type":16,"value":3910}," parameter is included, or the\n",{"type":10,"tag":1085,"props":3912,"children":3914},{"className":3913},[],[3915],{"type":16,"value":3901},{"type":16,"value":3917}," flag is not specified, then a\nframebuffer-global dependency is specified for those stages.\nThe ",{"type":10,"tag":1085,"props":3919,"children":3921},{"className":3920},[],[3922],{"type":16,"value":3901},{"type":16,"value":3924}," flag does not affect the dependencies\nbetween non-framebuffer-space pipeline stages, nor does it affect the\ndependencies between framebuffer-space and non-framebuffer-space pipeline\nstages.",{"type":10,"tag":1008,"props":3926,"children":3927},{},[3928],{"type":10,"tag":18,"props":3929,"children":3930},{},[3931],{"type":16,"value":3932},"Framebuffer-local dependencies are more efficient for most architectures;\nparticularly tile-based architectures - which can keep framebuffer-regions\nentirely in on-chip registers and thus avoid external bandwidth across such\na dependency.\nIncluding a framebuffer-global dependency in your rendering will usually\nforce all implementations to flush data to memory, or to a higher level\ncache, breaking any potential locality optimizations.",{"type":10,"tag":1017,"props":3934,"children":3936},{"id":3935},"synchronization-view-local-dependencies",[3937],{"type":16,"value":3938},"View-Local Dependencies",{"type":10,"tag":18,"props":3940,"children":3941},{},[3942,3944,3950,3952,3955],{"type":16,"value":3943},"In a render pass instance that has ",{"type":10,"tag":33,"props":3945,"children":3947},{"href":3946},"/chapters/renderpass#renderpass-multiview",[3948],{"type":16,"value":3949},"multiview",{"type":16,"value":3951},"\nenabled, dependencies ",{"type":10,"tag":45,"props":3953,"children":3954},{"type":47},[],{"type":16,"value":3956}," be either view-local or view-global.",{"type":10,"tag":18,"props":3958,"children":3959},{},[3960,3962,3968,3970,3975],{"type":16,"value":3961},"A view-local dependency only includes operations from a single\n",{"type":10,"tag":33,"props":3963,"children":3965},{"href":3964},"/man/VkRenderPassMultiviewCreateInfo#renderpass-multiview-view-local",[3966],{"type":16,"value":3967},"source view",{"type":16,"value":3969}," from the source subpass in\nthe first synchronization scope, and only includes operations from a single\n",{"type":10,"tag":33,"props":3971,"children":3972},{"href":3964},[3973],{"type":16,"value":3974},"destination view",{"type":16,"value":3976}," from the destination\nsubpass in the second synchronization scope.\nA view-global dependency includes all views in the view mask of the source\nand destination subpasses in the corresponding synchronization scopes.",{"type":10,"tag":18,"props":3978,"children":3979},{},[3980,3981,3986,3988,3994,3996,4001,4003,4008],{"type":16,"value":3887},{"type":10,"tag":1085,"props":3982,"children":3984},{"className":3983},[],[3985],{"type":16,"value":3893},{"type":16,"value":3987}," parameter and\nspecifies the ",{"type":10,"tag":1085,"props":3989,"children":3991},{"className":3990},[],[3992],{"type":16,"value":3993},"VK_DEPENDENCY_VIEW_LOCAL_BIT",{"type":16,"value":3995}," flag, then it defines\nview-local dependencies for that synchronization command, for all views.\nIf no ",{"type":10,"tag":1085,"props":3997,"children":3999},{"className":3998},[],[4000],{"type":16,"value":3893},{"type":16,"value":4002}," parameter is included or the\n",{"type":10,"tag":1085,"props":4004,"children":4006},{"className":4005},[],[4007],{"type":16,"value":3993},{"type":16,"value":4009}," flag is not specified, then a view-global\ndependency is specified.",{"type":10,"tag":1017,"props":4011,"children":4013},{"id":4012},"synchronization-device-local-dependencies",[4014],{"type":16,"value":4015},"Device-Local Dependencies",{"type":10,"tag":18,"props":4017,"children":4018},{},[4019,4021,4024,4026,4032,4033,4039],{"type":16,"value":4020},"Dependencies ",{"type":10,"tag":45,"props":4022,"children":4023},{"type":47},[],{"type":16,"value":4025}," be either device-local or non-device-local.\nA device-local dependency acts as multiple separate dependencies, one for\neach physical device that executes the synchronization command, where each\ndependency only includes operations from that physical device in both\nsynchronization scopes.\nA non-device-local dependency is a single dependency where both\nsynchronization scopes include operations from all physical devices that\nparticipate in the synchronization command.\nFor subpass dependencies, all physical devices in the\n",{"type":10,"tag":33,"props":4027,"children":4029},{"href":4028},"/man/VkDeviceGroupRenderPassBeginInfo",[4030],{"type":16,"value":4031},"VkDeviceGroupRenderPassBeginInfo",{"type":16,"value":3770},{"type":10,"tag":1085,"props":4034,"children":4036},{"className":4035},[],[4037],{"type":16,"value":4038},"deviceMask",{"type":16,"value":4040}," participate in the\ndependency, and for pipeline barriers all physical devices that are set in\nthe command buffer’s current device mask participate in the dependency.",{"type":10,"tag":18,"props":4042,"children":4043},{},[4044,4045,4050,4051,4057,4059,4064,4065,4070],{"type":16,"value":3887},{"type":10,"tag":1085,"props":4046,"children":4048},{"className":4047},[],[4049],{"type":16,"value":3893},{"type":16,"value":3987},{"type":10,"tag":1085,"props":4052,"children":4054},{"className":4053},[],[4055],{"type":16,"value":4056},"VK_DEPENDENCY_DEVICE_GROUP_BIT",{"type":16,"value":4058}," flag, then it defines a\nnon-device-local dependency for that synchronization command.\nIf no ",{"type":10,"tag":1085,"props":4060,"children":4062},{"className":4061},[],[4063],{"type":16,"value":3893},{"type":16,"value":4002},{"type":10,"tag":1085,"props":4066,"children":4068},{"className":4067},[],[4069],{"type":16,"value":4056},{"type":16,"value":4071}," flag is not specified, then it defines\ndevice-local dependencies for that synchronization command, for all\nparticipating physical devices.",{"type":10,"tag":18,"props":4073,"children":4074},{},[4075],{"type":16,"value":4076},"Semaphore and event dependencies are device-local and only execute on the\none physical device that performs the dependency.",{"type":10,"tag":146,"props":4078,"children":4080},{"id":4079},"synchronization-implicit",[4081],{"type":16,"value":4082},"Implicit Synchronization Guarantees",{"type":10,"tag":18,"props":4084,"children":4085},{},[4086],{"type":16,"value":4087},"A small number of implicit ordering guarantees are provided by Vulkan,\nensuring that the order in which commands are submitted is meaningful, and\navoiding unnecessary complexity in common operations.",{"type":10,"tag":187,"props":4089,"children":4091},{"id":4090},"synchronization-submission-order",[],{"type":10,"tag":18,"props":4093,"children":4094},{},[4095,4100,4102,4107],{"type":10,"tag":158,"props":4096,"children":4097},{},[4098],{"type":16,"value":4099},"Submission order",{"type":16,"value":4101}," is a fundamental ordering in Vulkan, giving meaning to\nthe order in which ",{"type":10,"tag":33,"props":4103,"children":4104},{"href":1343},[4105],{"type":16,"value":4106},"action and\nsynchronization commands",{"type":16,"value":4108}," are recorded and submitted to a single queue.\nExplicit and implicit ordering guarantees between commands in Vulkan all\nwork on the premise that this ordering is meaningful.\nThis order does not itself define any execution or memory dependencies;\nsynchronization commands and other orderings within the API use this\nordering to define their scopes.",{"type":10,"tag":18,"props":4110,"children":4111},{},[4112],{"type":16,"value":4113},"Submission order for any given set of commands is based on the order in\nwhich they were recorded to command buffers and then submitted.\nThis order is determined as follows:",{"type":10,"tag":4115,"props":4116,"children":4117},"ol",{},[4118,4138,4184,4209,4214],{"type":10,"tag":247,"props":4119,"children":4120},{},[4121,4123,4129,4130,4136],{"type":16,"value":4122},"The initial order is determined by the order in which\n",{"type":10,"tag":33,"props":4124,"children":4126},{"href":4125},"/man/vkQueueSubmit",[4127],{"type":16,"value":4128},"vkQueueSubmit",{"type":16,"value":1555},{"type":10,"tag":33,"props":4131,"children":4133},{"href":4132},"/man/vkQueueSubmit2",[4134],{"type":16,"value":4135},"vkQueueSubmit2",{"type":16,"value":4137},"\ncommands are executed on the host, for a single queue, from first to\nlast.",{"type":10,"tag":247,"props":4139,"children":4140},{},[4141,4143,4149,4151,4157,4159,4163,4165,4171,4172,4177,4178,4182],{"type":16,"value":4142},"The order in which ",{"type":10,"tag":33,"props":4144,"children":4146},{"href":4145},"/man/VkSubmitInfo",[4147],{"type":16,"value":4148},"VkSubmitInfo",{"type":16,"value":4150}," structures are specified in the\n",{"type":10,"tag":1085,"props":4152,"children":4154},{"className":4153},[],[4155],{"type":16,"value":4156},"pSubmits",{"type":16,"value":4158}," parameter of ",{"type":10,"tag":33,"props":4160,"children":4161},{"href":4125},[4162],{"type":16,"value":4128},{"type":16,"value":4164},",\nor in which ",{"type":10,"tag":33,"props":4166,"children":4168},{"href":4167},"/man/VkSubmitInfo2",[4169],{"type":16,"value":4170},"VkSubmitInfo2",{"type":16,"value":4150},{"type":10,"tag":1085,"props":4173,"children":4175},{"className":4174},[],[4176],{"type":16,"value":4156},{"type":16,"value":4158},{"type":10,"tag":33,"props":4179,"children":4180},{"href":4132},[4181],{"type":16,"value":4135},{"type":16,"value":4183},",\nfrom lowest index to highest.",{"type":10,"tag":247,"props":4185,"children":4186},{},[4187,4189,4195,4197,4201,4203,4207],{"type":16,"value":4188},"The order in which command buffers are specified in the\n",{"type":10,"tag":1085,"props":4190,"children":4192},{"className":4191},[],[4193],{"type":16,"value":4194},"pCommandBuffers",{"type":16,"value":4196}," member of ",{"type":10,"tag":33,"props":4198,"children":4199},{"href":4145},[4200],{"type":16,"value":4148},{"type":16,"value":4202},"\nor ",{"type":10,"tag":33,"props":4204,"children":4205},{"href":4167},[4206],{"type":16,"value":4170},{"type":16,"value":4208},"\nfrom lowest index to highest.",{"type":10,"tag":247,"props":4210,"children":4211},{},[4212],{"type":16,"value":4213},"The order in which commands outside of a render pass were recorded to a\ncommand buffer on the host, from first to last.",{"type":10,"tag":247,"props":4215,"children":4216},{},[4217],{"type":16,"value":4218},"The order in which commands inside a single subpass were recorded to a\ncommand buffer on the host, from first to last.",{"type":10,"tag":1008,"props":4220,"children":4221},{},[4222],{"type":10,"tag":18,"props":4223,"children":4224},{},[4225,4227,4232],{"type":16,"value":4226},"When using a ",{"type":10,"tag":33,"props":4228,"children":4229},{"href":127},[4230],{"type":16,"value":4231},"render pass object",{"type":16,"value":4233}," with multiple\nsubpasses, commands in different subpasses have no defined submission order\nrelative to each other, regardless of the order in which the subpasses were\nrecorded.\nCommands within a subpass are still ordered relative to other commands in\nthe same subpass, and those outside of the render pass.",{"type":10,"tag":18,"props":4235,"children":4236},{},[4237,4242,4244,4249],{"type":10,"tag":33,"props":4238,"children":4239},{"href":1343},[4240],{"type":16,"value":4241},"State commands",{"type":16,"value":4243}," do not execute\nany operations on the device, instead they set the state of the command\nbuffer when they execute on the host, in the order that they are recorded.\n",{"type":10,"tag":33,"props":4245,"children":4246},{"href":1343},[4247],{"type":16,"value":4248},"Action commands",{"type":16,"value":4250}," consume the\ncurrent state of the command buffer when they are recorded, and will execute\nstate changes on the device as required to match the recorded state.",{"type":10,"tag":18,"props":4252,"children":4253},{},[4254,4260,4261,4267],{"type":10,"tag":33,"props":4255,"children":4257},{"href":4256},"/chapters/drawing#drawing-primitive-order",[4258],{"type":16,"value":4259},"The order of primitives passing through the\ngraphics pipeline",{"type":16,"value":342},{"type":10,"tag":33,"props":4262,"children":4264},{"href":4263},"/chapters/synchronization#synchronization-image-barrier-layout-transition-order",[4265],{"type":16,"value":4266},"image layout\ntransitions as part of an image memory barrier",{"type":16,"value":4268}," provide additional\nguarantees based on submission order.",{"type":10,"tag":18,"props":4270,"children":4271},{},[4272,4274,4278],{"type":16,"value":4273},"Execution of ",{"type":10,"tag":33,"props":4275,"children":4276},{"href":1403},[4277],{"type":16,"value":206},{"type":16,"value":4279},"\nwithin a given command also has a loose ordering, dependent only on a single\ncommand.",{"type":10,"tag":187,"props":4281,"children":4283},{"id":4282},"synchronization-signal-operation-order",[],{"type":10,"tag":18,"props":4285,"children":4286},{},[4287,4292],{"type":10,"tag":158,"props":4288,"children":4289},{},[4290],{"type":16,"value":4291},"Signal operation order",{"type":16,"value":4293}," is a fundamental ordering in Vulkan, giving meaning\nto the order in which semaphore and fence signal operations occur when\nsubmitted to a single queue.\nThe signal operation order for queue operations is determined as follows:",{"type":10,"tag":4115,"props":4295,"children":4296},{},[4297,4311,4347],{"type":10,"tag":247,"props":4298,"children":4299},{},[4300,4301,4305,4306,4310],{"type":16,"value":4122},{"type":10,"tag":33,"props":4302,"children":4303},{"href":4125},[4304],{"type":16,"value":4128},{"type":16,"value":1555},{"type":10,"tag":33,"props":4307,"children":4308},{"href":4132},[4309],{"type":16,"value":4135},{"type":16,"value":4137},{"type":10,"tag":247,"props":4312,"children":4313},{},[4314,4315,4319,4320,4325,4326,4330,4331,4335,4336,4341,4342,4346],{"type":16,"value":4142},{"type":10,"tag":33,"props":4316,"children":4317},{"href":4145},[4318],{"type":16,"value":4148},{"type":16,"value":4150},{"type":10,"tag":1085,"props":4321,"children":4323},{"className":4322},[],[4324],{"type":16,"value":4156},{"type":16,"value":4158},{"type":10,"tag":33,"props":4327,"children":4328},{"href":4125},[4329],{"type":16,"value":4128},{"type":16,"value":4164},{"type":10,"tag":33,"props":4332,"children":4333},{"href":4167},[4334],{"type":16,"value":4170},{"type":16,"value":4150},{"type":10,"tag":1085,"props":4337,"children":4339},{"className":4338},[],[4340],{"type":16,"value":4156},{"type":16,"value":4158},{"type":10,"tag":33,"props":4343,"children":4344},{"href":4132},[4345],{"type":16,"value":4135},{"type":16,"value":4183},{"type":10,"tag":247,"props":4348,"children":4349},{},[4350,4352,4358,4360,4364,4365,4369,4370,4376],{"type":16,"value":4351},"The fence signal operation defined by the ",{"type":10,"tag":1085,"props":4353,"children":4355},{"className":4354},[],[4356],{"type":16,"value":4357},"fence",{"type":16,"value":4359}," parameter of a\n",{"type":10,"tag":33,"props":4361,"children":4362},{"href":4125},[4363],{"type":16,"value":4128},{"type":16,"value":4202},{"type":10,"tag":33,"props":4366,"children":4367},{"href":4132},[4368],{"type":16,"value":4135},{"type":16,"value":4202},{"type":10,"tag":33,"props":4371,"children":4373},{"href":4372},"/man/vkQueueBindSparse",[4374],{"type":16,"value":4375},"vkQueueBindSparse",{"type":16,"value":4377},"\ncommand is ordered after all semaphore signal operations defined by that\ncommand.",{"type":10,"tag":18,"props":4379,"children":4380},{},[4381,4383,4387,4388,4392,4393,4399],{"type":16,"value":4382},"Semaphore signal operations defined by a single ",{"type":10,"tag":33,"props":4384,"children":4385},{"href":4145},[4386],{"type":16,"value":4148},{"type":16,"value":4202},{"type":10,"tag":33,"props":4389,"children":4390},{"href":4167},[4391],{"type":16,"value":4170},{"type":16,"value":4202},{"type":10,"tag":33,"props":4394,"children":4396},{"href":4395},"/man/VkBindSparseInfo",[4397],{"type":16,"value":4398},"VkBindSparseInfo",{"type":16,"value":4400},"\nstructure are unordered with respect to other semaphore signal operations\ndefined within the same structure.",{"type":10,"tag":18,"props":4402,"children":4403},{},[4404,4406,4412,4414,4418,4420,4424],{"type":16,"value":4405},"The ",{"type":10,"tag":33,"props":4407,"children":4409},{"href":4408},"/man/vkSignalSemaphore",[4410],{"type":16,"value":4411},"vkSignalSemaphore",{"type":16,"value":4413}," command does not execute on a queue but instead\nperforms the signal operation from the host.\nThe semaphore signal operation defined by executing a\n",{"type":10,"tag":33,"props":4415,"children":4416},{"href":4408},[4417],{"type":16,"value":4411},{"type":16,"value":4419}," command happens-after the ",{"type":10,"tag":33,"props":4421,"children":4422},{"href":4408},[4423],{"type":16,"value":4411},{"type":16,"value":4425},"\ncommand is invoked and happens-before the command returns.",{"type":10,"tag":1008,"props":4427,"children":4428},{},[4429,4434,4439],{"type":10,"tag":18,"props":4430,"children":4431},{},[4432],{"type":16,"value":4433},"When signaling timeline semaphores, it is the responsibility of the\napplication to ensure that they are ordered such that the semaphore value is\nstrictly increasing.\nBecause the first synchronization scope for a semaphore signal operation\ncontains all semaphore signal operations which occur earlier in submission\norder, all semaphore signal operations contained in any given batch are\nguaranteed to happen-after all semaphore signal operations contained in any\nprevious batches.\nHowever, no ordering guarantee is provided between the semaphore signal\noperations defined within a single batch.\nThis, combined with the requirement that timeline semaphore values strictly\nincrease, means that it is invalid to signal the same timeline semaphore\ntwice within a single batch.",{"type":10,"tag":18,"props":4435,"children":4436},{},[4437],{"type":16,"value":4438},"If an application wishes to ensure that some semaphore signal operation\nhappens-after some other semaphore signal operation, it can submit a\nseparate batch containing only semaphore signal operations, which will\nhappen-after the semaphore signal operations in any earlier batches.",{"type":10,"tag":18,"props":4440,"children":4441},{},[4442,4444,4448,4450,4455,4457,4462,4464,4469,4471,4476],{"type":16,"value":4443},"When signaling a semaphore from the host, the only ordering guarantee is\nthat the signal operation happens-after when ",{"type":10,"tag":33,"props":4445,"children":4446},{"href":4408},[4447],{"type":16,"value":4411},{"type":16,"value":4449}," is\ncalled and happens-before it returns.\nTherefore, it is invalid to call ",{"type":10,"tag":1085,"props":4451,"children":4453},{"className":4452},[],[4454],{"type":16,"value":4411},{"type":16,"value":4456}," while there are any\noutstanding signal operations on that semaphore from any queue submissions\nunless those queue submissions have some dependency which ensures that they\nhappen-after the host signal operation.\nOne example of this would be if the pending signal operation is, itself,\nwaiting on the same semaphore at a lower value and the call to\n",{"type":10,"tag":1085,"props":4458,"children":4460},{"className":4459},[],[4461],{"type":16,"value":4411},{"type":16,"value":4463}," signals that lower value.\nFurthermore, if there are two or more processes or threads signaling the\nsame timeline semaphore from the host, the application must ensure that the\n",{"type":10,"tag":1085,"props":4465,"children":4467},{"className":4466},[],[4468],{"type":16,"value":4411},{"type":16,"value":4470}," with the lower semaphore value returns before\n",{"type":10,"tag":1085,"props":4472,"children":4474},{"className":4473},[],[4475],{"type":16,"value":4411},{"type":16,"value":4477}," is called with the higher value.",{"type":10,"tag":146,"props":4479,"children":4481},{"id":4480},"synchronization-fences",[4482],{"type":16,"value":38},{"type":10,"tag":1432,"props":4484,"children":4487},{"name":4485,"type":4486},"VkFence","handles",[4488],{"type":10,"tag":18,"props":4489,"children":4490},{},[4491],{"type":16,"value":4492},"Opaque handle to a fence object",{"type":10,"tag":1432,"props":4494,"children":4497},{"name":4495,"type":4496},"vkCreateFence","protos",[4498],{"type":10,"tag":18,"props":4499,"children":4500},{},[4501],{"type":16,"value":4502},"Create a new fence object",{"type":10,"tag":1432,"props":4504,"children":4507},{"name":4505,"type":4506},"VkFenceCreateInfo","structs",[4508],{"type":10,"tag":18,"props":4509,"children":4510},{},[4511],{"type":16,"value":4512},"Structure specifying parameters of a newly created fence",{"type":10,"tag":1432,"props":4514,"children":4516},{"name":4515,"type":1435},"VkFenceCreateFlagBits",[4517],{"type":10,"tag":18,"props":4518,"children":4519},{},[4520],{"type":16,"value":4521},"Bitmask specifying initial state and behavior of a fence",{"type":10,"tag":1432,"props":4523,"children":4525},{"name":4524,"type":1445},"VkFenceCreateFlags",[4526],{"type":10,"tag":18,"props":4527,"children":4528},{},[4529],{"type":16,"value":4530},"Bitmask of VkFenceCreateFlagBits",{"type":10,"tag":1432,"props":4532,"children":4534},{"name":4533,"type":4506},"VkExportFenceCreateInfo",[4535],{"type":10,"tag":18,"props":4536,"children":4537},{},[4538],{"type":16,"value":4539},"Structure specifying handle types that can be exported from a fence",{"type":10,"tag":1432,"props":4541,"children":4543},{"name":4542,"type":4506},"VkExportFenceWin32HandleInfoKHR",[4544],{"type":10,"tag":18,"props":4545,"children":4546},{},[4547],{"type":16,"value":4548},"Structure specifying additional attributes of Windows handles exported from a fence",{"type":10,"tag":1432,"props":4550,"children":4552},{"name":4551,"type":4496},"vkGetFenceWin32HandleKHR",[4553],{"type":10,"tag":18,"props":4554,"children":4555},{},[4556],{"type":16,"value":4557},"Get a Windows HANDLE for a fence",{"type":10,"tag":1432,"props":4559,"children":4561},{"name":4560,"type":4506},"VkFenceGetWin32HandleInfoKHR",[4562],{"type":10,"tag":18,"props":4563,"children":4564},{},[4565],{"type":16,"value":4566},"Structure describing a Win32 handle fence export operation",{"type":10,"tag":1432,"props":4568,"children":4570},{"name":4569,"type":4496},"vkGetFenceFdKHR",[4571],{"type":10,"tag":18,"props":4572,"children":4573},{},[4574],{"type":16,"value":4575},"Get a POSIX file descriptor handle for a fence",{"type":10,"tag":1432,"props":4577,"children":4579},{"name":4578,"type":4506},"VkFenceGetFdInfoKHR",[4580],{"type":10,"tag":18,"props":4581,"children":4582},{},[4583],{"type":16,"value":4584},"Structure describing a POSIX FD fence export operation",{"type":10,"tag":1432,"props":4586,"children":4588},{"name":4587,"type":4496},"vkDestroyFence",[4589],{"type":10,"tag":18,"props":4590,"children":4591},{},[4592],{"type":16,"value":4593},"Destroy a fence object",{"type":10,"tag":1432,"props":4595,"children":4597},{"name":4596,"type":4496},"vkGetFenceStatus",[4598],{"type":10,"tag":18,"props":4599,"children":4600},{},[4601],{"type":16,"value":4602},"Return the status of a fence",{"type":10,"tag":187,"props":4604,"children":4606},{"id":4605},"synchronization-fences-unsignaling",[],{"type":10,"tag":1432,"props":4608,"children":4610},{"name":4609,"type":4496},"vkResetFences",[4611],{"type":10,"tag":18,"props":4612,"children":4613},{},[4614],{"type":16,"value":4615},"Resets one or more fence objects",{"type":10,"tag":187,"props":4617,"children":4619},{"id":4618},"synchronization-fences-signaling",[],{"type":10,"tag":18,"props":4621,"children":4622},{},[4623,4625,4630,4632,4637],{"type":16,"value":4624},"When a fence is submitted to a queue as part of a\n",{"type":10,"tag":33,"props":4626,"children":4627},{"href":3592},[4628],{"type":16,"value":4629},"queue submission",{"type":16,"value":4631}," command, it defines a memory\ndependency on the batches that were submitted as part of that command, and\ndefines a ",{"type":10,"tag":158,"props":4633,"children":4634},{},[4635],{"type":16,"value":4636},"fence signal operation",{"type":16,"value":4638}," which sets the fence to the signaled\nstate.",{"type":10,"tag":18,"props":4640,"children":4641},{},[4642,4644,4648,4650,4655,4657,4661,4662,4666,4668,4672,4674,4678,4679,4683,4684,4688,4690,4696],{"type":16,"value":4643},"The first ",{"type":10,"tag":33,"props":4645,"children":4646},{"href":1372},[4647],{"type":16,"value":1483},{"type":16,"value":4649},"\nincludes every batch submitted in the same ",{"type":10,"tag":33,"props":4651,"children":4652},{"href":3592},[4653],{"type":16,"value":4654},"queue\nsubmission",{"type":16,"value":4656}," command.\nFence signal operations that are defined by ",{"type":10,"tag":33,"props":4658,"children":4659},{"href":4125},[4660],{"type":16,"value":4128},{"type":16,"value":4202},{"type":10,"tag":33,"props":4663,"children":4664},{"href":4132},[4665],{"type":16,"value":4135},{"type":16,"value":4667},"\nadditionally include in the first synchronization scope all commands that\noccur earlier in ",{"type":10,"tag":33,"props":4669,"children":4670},{"href":1211},[4671],{"type":16,"value":1214},{"type":16,"value":4673},".\nFence signal operations that are defined by ",{"type":10,"tag":33,"props":4675,"children":4676},{"href":4125},[4677],{"type":16,"value":4128},{"type":16,"value":4202},{"type":10,"tag":33,"props":4680,"children":4681},{"href":4132},[4682],{"type":16,"value":4135},{"type":16,"value":4202},{"type":10,"tag":33,"props":4685,"children":4686},{"href":4372},[4687],{"type":16,"value":4375},{"type":16,"value":4689},"\nadditionally include in the first synchronization scope any semaphore and\nfence signal operations that occur earlier in\n",{"type":10,"tag":33,"props":4691,"children":4693},{"href":4692},"/chapters/synchronization#synchronization-signal-operation-order",[4694],{"type":16,"value":4695},"signal operation order",{"type":16,"value":185},{"type":10,"tag":18,"props":4698,"children":4699},{},[4700,4702,4706],{"type":16,"value":4701},"The second ",{"type":10,"tag":33,"props":4703,"children":4704},{"href":1372},[4705],{"type":16,"value":1483},{"type":16,"value":4707},"\nonly includes the fence signal operation.",{"type":10,"tag":18,"props":4709,"children":4710},{},[4711,4712,4716],{"type":16,"value":4643},{"type":10,"tag":33,"props":4713,"children":4714},{"href":1495},[4715],{"type":16,"value":1498},{"type":16,"value":4717},"\nincludes all memory access performed by the device.",{"type":10,"tag":18,"props":4719,"children":4720},{},[4721,4722,4726],{"type":16,"value":4701},{"type":10,"tag":33,"props":4723,"children":4724},{"href":1495},[4725],{"type":16,"value":1498},{"type":16,"value":4727}," is\nempty.",{"type":10,"tag":1432,"props":4729,"children":4731},{"name":4730,"type":4496},"vkWaitForFences",[4732],{"type":10,"tag":18,"props":4733,"children":4734},{},[4735],{"type":16,"value":4736},"Wait for one or more fences to become signaled",{"type":10,"tag":187,"props":4738,"children":4740},{"id":4739},"synchronization-fences-waiting",[],{"type":10,"tag":18,"props":4742,"children":4743},{},[4744,4746,4751,4753,4758],{"type":16,"value":4745},"An execution dependency is defined by waiting for a fence to become\nsignaled, either via ",{"type":10,"tag":33,"props":4747,"children":4749},{"href":4748},"/man/vkWaitForFences",[4750],{"type":16,"value":4730},{"type":16,"value":4752}," or by polling on\n",{"type":10,"tag":33,"props":4754,"children":4756},{"href":4755},"/man/vkGetFenceStatus",[4757],{"type":16,"value":4596},{"type":16,"value":185},{"type":10,"tag":18,"props":4760,"children":4761},{},[4762,4763,4767],{"type":16,"value":4643},{"type":10,"tag":33,"props":4764,"children":4765},{"href":1372},[4766],{"type":16,"value":1483},{"type":16,"value":4768},"\nincludes only the fence signal operation.",{"type":10,"tag":18,"props":4770,"children":4771},{},[4772,4773,4777,4779,4783,4784,4788],{"type":16,"value":4701},{"type":10,"tag":33,"props":4774,"children":4775},{"href":1372},[4776],{"type":16,"value":1483},{"type":16,"value":4778},"\nincludes the host operations of ",{"type":10,"tag":33,"props":4780,"children":4781},{"href":4748},[4782],{"type":16,"value":4730},{"type":16,"value":1280},{"type":10,"tag":33,"props":4785,"children":4786},{"href":4755},[4787],{"type":16,"value":4596},{"type":16,"value":4789}," indicating that the fence has become signaled.",{"type":10,"tag":1008,"props":4791,"children":4792},{},[4793],{"type":10,"tag":18,"props":4794,"children":4795},{},[4796,4798,4804,4806,4809,4811,4817],{"type":16,"value":4797},"Signaling a fence and waiting on the host does not guarantee that the\nresults of memory accesses will be visible to the host, as the access scope\nof a memory dependency defined by a fence only includes device access.\nA ",{"type":10,"tag":33,"props":4799,"children":4801},{"href":4800},"/chapters/synchronization#synchronization-memory-barriers",[4802],{"type":16,"value":4803},"memory barrier",{"type":16,"value":4805}," or other memory\ndependency ",{"type":10,"tag":45,"props":4807,"children":4808},{"type":226},[],{"type":16,"value":4810}," be used to guarantee this.\nSee the description of ",{"type":10,"tag":33,"props":4812,"children":4814},{"href":4813},"/chapters/synchronization#synchronization-host-access-types",[4815],{"type":16,"value":4816},"host access\ntypes",{"type":16,"value":4818}," for more information.",{"type":10,"tag":1017,"props":4820,"children":4822},{"id":4821},"_alternate_methods_to_signal_fences",[4823],{"type":16,"value":4824},"Alternate Methods to Signal Fences",{"type":10,"tag":18,"props":4826,"children":4827},{},[4828,4830,4834,4836,4839],{"type":16,"value":4829},"Besides submitting a fence to a queue as part of a\n",{"type":10,"tag":33,"props":4831,"children":4832},{"href":3592},[4833],{"type":16,"value":4629},{"type":16,"value":4835}," command, a fence ",{"type":10,"tag":45,"props":4837,"children":4838},{"type":1058},[],{"type":16,"value":4840}," also be\nsignaled when a particular event occurs on a device or display.",{"type":10,"tag":1432,"props":4842,"children":4844},{"name":4843,"type":4496},"vkRegisterDeviceEventEXT",[4845],{"type":10,"tag":18,"props":4846,"children":4847},{},[4848],{"type":16,"value":4849},"Signal a fence when a device event occurs",{"type":10,"tag":1432,"props":4851,"children":4853},{"name":4852,"type":4506},"VkDeviceEventInfoEXT",[4854],{"type":10,"tag":18,"props":4855,"children":4856},{},[4857],{"type":16,"value":4858},"Describe a device event to create",{"type":10,"tag":1432,"props":4860,"children":4862},{"name":4861,"type":1435},"VkDeviceEventTypeEXT",[4863],{"type":10,"tag":18,"props":4864,"children":4865},{},[4866],{"type":16,"value":4867},"Events that can occur on a device object",{"type":10,"tag":1432,"props":4869,"children":4871},{"name":4870,"type":4496},"vkRegisterDisplayEventEXT",[4872],{"type":10,"tag":18,"props":4873,"children":4874},{},[4875],{"type":16,"value":4876},"Signal a fence when a display event occurs",{"type":10,"tag":1432,"props":4878,"children":4880},{"name":4879,"type":4506},"VkDisplayEventInfoEXT",[4881],{"type":10,"tag":18,"props":4882,"children":4883},{},[4884],{"type":16,"value":4885},"Describe a display event to create",{"type":10,"tag":1432,"props":4887,"children":4889},{"name":4888,"type":1435},"VkDisplayEventTypeEXT",[4890],{"type":10,"tag":18,"props":4891,"children":4892},{},[4893],{"type":16,"value":4894},"Events that can occur on a display object",{"type":10,"tag":1017,"props":4896,"children":4898},{"id":4897},"synchronization-fences-importing",[4899],{"type":16,"value":4900},"Importing Fence Payloads",{"type":10,"tag":18,"props":4902,"children":4903},{},[4904,4905,4908,4910,4915,4917,4922],{"type":16,"value":1182},{"type":10,"tag":45,"props":4906,"children":4907},{"type":47},[],{"type":16,"value":4909}," import a fence payload into an existing fence using an\nexternal fence handle.\nThe effects of the import operation will be either temporary or permanent,\nas specified by the application.\nIf the import is temporary, the fence will be ",{"type":10,"tag":158,"props":4911,"children":4912},{},[4913],{"type":16,"value":4914},"restored",{"type":16,"value":4916}," to its permanent\nstate the next time that fence is passed to ",{"type":10,"tag":33,"props":4918,"children":4920},{"href":4919},"/man/vkResetFences",[4921],{"type":16,"value":4609},{"type":16,"value":185},{"type":10,"tag":1008,"props":4924,"children":4925},{},[4926],{"type":10,"tag":18,"props":4927,"children":4928},{},[4929,4931,4935],{"type":16,"value":4930},"Restoring a fence to its prior permanent payload is a distinct operation\nfrom resetting a fence payload.\nSee ",{"type":10,"tag":33,"props":4932,"children":4933},{"href":4919},[4934],{"type":16,"value":4609},{"type":16,"value":4936}," for more detail.",{"type":10,"tag":18,"props":4938,"children":4939},{},[4940,4942,4945,4947,4952,4954,4959],{"type":16,"value":4941},"Performing a subsequent temporary import on a fence before resetting it has\nno effect on this requirement; the next unsignal of the fence ",{"type":10,"tag":45,"props":4943,"children":4944},{"type":226},[],{"type":16,"value":4946}," still\nrestore its last permanent state.\nA permanent payload import behaves as if the target fence was destroyed, and\na new fence was created with the same handle but the imported payload.\nBecause importing a fence payload temporarily or permanently detaches the\nexisting payload from a fence, similar usage restrictions to those applied\nto ",{"type":10,"tag":1085,"props":4948,"children":4950},{"className":4949},[],[4951],{"type":16,"value":4587},{"type":16,"value":4953}," are applied to any command that imports a fence\npayload.\nWhich of these import types is used is referred to as the import operation’s\n",{"type":10,"tag":158,"props":4955,"children":4956},{},[4957],{"type":16,"value":4958},"permanence",{"type":16,"value":4960},".\nEach handle type supports either one or both types of permanence.",{"type":10,"tag":18,"props":4962,"children":4963},{},[4964,4966,4969,4971,4976,4978,4981,4983,4986],{"type":16,"value":4965},"The implementation ",{"type":10,"tag":45,"props":4967,"children":4968},{"type":226},[],{"type":16,"value":4970}," perform the import operation by either referencing\nor copying the payload referred to by the specified external fence handle,\ndepending on the handle’s type.\nThe import method used is referred to as the handle type’s ",{"type":10,"tag":158,"props":4972,"children":4973},{},[4974],{"type":16,"value":4975},"transference",{"type":16,"value":4977},".\nWhen using handle types with reference transference, importing a payload to\na fence adds the fence to the set of all fences sharing that payload.\nThis set includes the fence from which the payload was exported.\nFence signaling, waiting, and resetting operations performed on any fence in\nthe set ",{"type":10,"tag":45,"props":4979,"children":4980},{"type":226},[],{"type":16,"value":4982}," behave as if the set were a single fence.\nImporting a payload using handle types with copy transference creates a\nduplicate copy of the payload at the time of import, but makes no further\nreference to it.\nFence signaling, waiting, and resetting operations performed on the target\nof copy imports ",{"type":10,"tag":45,"props":4984,"children":4985},{"type":226},[],{"type":16,"value":4987}," not affect any other fence or payload.",{"type":10,"tag":18,"props":4989,"children":4990},{},[4991],{"type":16,"value":4992},"Export operations have the same transference as the specified handle type’s\nimport operations.\nAdditionally, exporting a fence payload to a handle with copy transference\nhas the same side effects on the source fence’s payload as executing a fence\nreset operation.\nIf the fence was using a temporarily imported payload, the fence’s prior\npermanent payload will be restored.",{"type":10,"tag":1008,"props":4994,"children":4995},{},[4996],{"type":10,"tag":18,"props":4997,"children":4998},{},[4999,5001,5013,5015,5026],{"type":16,"value":5000},"The\ntables\n",{"type":10,"tag":33,"props":5002,"children":5004},{"href":5003},"/404#synchronization-fence-handletypes-win32",[5005,5007],{"type":16,"value":5006},"Handle Types Supported by\n",{"type":10,"tag":1085,"props":5008,"children":5010},{"className":5009},[],[5011],{"type":16,"value":5012},"VkImportFenceWin32HandleInfoKHR",{"type":16,"value":5014},"\nand\n",{"type":10,"tag":33,"props":5016,"children":5018},{"href":5017},"/man/VkImportFenceFdInfoKHR#synchronization-fence-handletypes-fd",[5019,5020],{"type":16,"value":5006},{"type":10,"tag":1085,"props":5021,"children":5023},{"className":5022},[],[5024],{"type":16,"value":5025},"VkImportFenceFdInfoKHR",{"type":16,"value":5027},"\ndefine\nthe permanence and transference of each handle type.",{"type":10,"tag":18,"props":5029,"children":5030},{},[5031,5037,5039,5044],{"type":10,"tag":33,"props":5032,"children":5034},{"href":5033},"/chapters/fundamentals#fundamentals-threadingbehavior",[5035],{"type":16,"value":5036},"External synchronization",{"type":16,"value":5038}," allows\nimplementations to modify an object’s internal state, i.e. payload, without\ninternal synchronization.\nHowever, for fences sharing a payload across processes, satisfying the\nexternal synchronization requirements of ",{"type":10,"tag":1085,"props":5040,"children":5042},{"className":5041},[],[5043],{"type":16,"value":4485},{"type":16,"value":5045}," parameters as if all\nfences in the set were the same object is sometimes infeasible.\nSatisfying valid usage constraints on the state of a fence would similarly\nrequire impractical coordination or levels of trust between processes.\nTherefore, these constraints only apply to a specific fence handle, not to\nits payload.\nFor distinct fence objects which share a payload:",{"type":10,"tag":243,"props":5047,"children":5048},{},[5049,5054,5059,5069],{"type":10,"tag":247,"props":5050,"children":5051},{},[5052],{"type":16,"value":5053},"If multiple commands which queue a signal operation, or which unsignal a\nfence, are called concurrently, behavior will be as if the commands were\ncalled in an arbitrary sequential order.",{"type":10,"tag":247,"props":5055,"children":5056},{},[5057],{"type":16,"value":5058},"If a queue submission command is called with a fence that is sharing a\npayload, and the payload is already associated with another queue\ncommand that has not yet completed execution, either one or both of the\ncommands will cause the fence to become signaled when they complete\nexecution.",{"type":10,"tag":247,"props":5060,"children":5061},{},[5062,5064,5067],{"type":16,"value":5063},"If a fence payload is reset while it is associated with a queue command\nthat has not yet completed execution, the payload will become\nunsignaled, but ",{"type":10,"tag":45,"props":5065,"children":5066},{"type":1058},[],{"type":16,"value":5068}," become signaled again when the command completes\nexecution.",{"type":10,"tag":247,"props":5070,"children":5071},{},[5072,5074,5077,5079,5082,5084,5090],{"type":16,"value":5073},"In the preceding cases, any of the devices associated with the fences\nsharing the payload ",{"type":10,"tag":45,"props":5075,"children":5076},{"type":1058},[],{"type":16,"value":5078}," be lost, or any of the queue submission or\nfence reset commands ",{"type":10,"tag":45,"props":5080,"children":5081},{"type":1058},[],{"type":16,"value":5083}," return ",{"type":10,"tag":1085,"props":5085,"children":5087},{"className":5086},[],[5088],{"type":16,"value":5089},"VK_ERROR_INITIALIZATION_FAILED",{"type":16,"value":185},{"type":10,"tag":18,"props":5092,"children":5093},{},[5094],{"type":16,"value":5095},"Other than these non-deterministic results, behavior is well defined.\nIn particular:",{"type":10,"tag":243,"props":5097,"children":5098},{},[5099,5108],{"type":10,"tag":247,"props":5100,"children":5101},{},[5102,5103,5106],{"type":16,"value":4965},{"type":10,"tag":45,"props":5104,"children":5105},{"type":226},[],{"type":16,"value":5107}," not crash or enter an internally inconsistent\nstate where future valid Vulkan commands might cause undefined: results,",{"type":10,"tag":247,"props":5109,"children":5110},{},[5111,5113,5116],{"type":16,"value":5112},"Timeouts on future wait commands on fences sharing the payload ",{"type":10,"tag":45,"props":5114,"children":5115},{"type":226},[],{"type":16,"value":5117}," be\neffective.",{"type":10,"tag":1008,"props":5119,"children":5120},{},[5121],{"type":10,"tag":18,"props":5122,"children":5123},{},[5124],{"type":16,"value":5125},"These rules allow processes to synchronize access to shared memory without\ntrusting each other.\nHowever, such processes must still be cautious not to use the shared fence\nfor more than synchronizing access to the shared memory.\nFor example, a process should not use a fence with shared payload to tell\nwhen commands it submitted to a queue have completed and objects used by\nthose commands may be destroyed, since the other process can accidentally or\nmaliciously cause the fence to signal before the commands actually complete.",{"type":10,"tag":18,"props":5127,"children":5128},{},[5129,5131,5136,5137,5143,5145,5151,5152,5158,5160,5163,5165,5171],{"type":16,"value":5130},"When a fence is using an imported payload, its\n",{"type":10,"tag":33,"props":5132,"children":5134},{"href":5133},"/man/VkExportFenceCreateInfo",[5135],{"type":16,"value":4533},{"type":16,"value":3770},{"type":10,"tag":1085,"props":5138,"children":5140},{"className":5139},[],[5141],{"type":16,"value":5142},"handleTypes",{"type":16,"value":5144}," value is specified when\ncreating the fence from which the payload was exported, rather than\nspecified when creating the fence.\nAdditionally,\n",{"type":10,"tag":33,"props":5146,"children":5148},{"href":5147},"/man/VkExternalFenceProperties",[5149],{"type":16,"value":5150},"VkExternalFenceProperties",{"type":16,"value":3770},{"type":10,"tag":1085,"props":5153,"children":5155},{"className":5154},[],[5156],{"type":16,"value":5157},"exportFromImportedHandleTypes",{"type":16,"value":5159},"\nrestricts which handle types ",{"type":10,"tag":45,"props":5161,"children":5162},{"type":47},[],{"type":16,"value":5164}," be exported from such a fence based on the\nspecific handle type used to import the current payload.\nPassing a fence to ",{"type":10,"tag":33,"props":5166,"children":5168},{"href":5167},"/man/vkAcquireNextImageKHR",[5169],{"type":16,"value":5170},"vkAcquireNextImageKHR",{"type":16,"value":5172}," is equivalent to temporarily\nimporting a fence payload to that fence.",{"type":10,"tag":1008,"props":5174,"children":5175},{},[5176],{"type":10,"tag":18,"props":5177,"children":5178},{},[5179,5181,5185,5187,5190,5192,5195,5197,5201],{"type":16,"value":5180},"Because the exportable handle types of an imported fence correspond to its\ncurrent imported payload, and ",{"type":10,"tag":33,"props":5182,"children":5183},{"href":5167},[5184],{"type":16,"value":5170},{"type":16,"value":5186}," behaves the same\nas a temporary import operation for which the source fence is opaque to the\napplication, applications have no way of determining whether any external\nhandle types ",{"type":10,"tag":45,"props":5188,"children":5189},{"type":47},[],{"type":16,"value":5191}," be exported from a fence in this state.\nTherefore, applications ",{"type":10,"tag":45,"props":5193,"children":5194},{"type":226},[],{"type":16,"value":5196}," not attempt to export handles from fences\nusing a temporarily imported payload from ",{"type":10,"tag":33,"props":5198,"children":5199},{"href":5167},[5200],{"type":16,"value":5170},{"type":16,"value":185},{"type":10,"tag":18,"props":5203,"children":5204},{},[5205,5207,5210,5212,5215,5217,5223],{"type":16,"value":5206},"When importing a fence payload, it is the responsibility of the application\nto ensure the external handles meet all valid usage requirements.\nHowever, implementations ",{"type":10,"tag":45,"props":5208,"children":5209},{"type":226},[],{"type":16,"value":5211}," perform sufficient validation of external\nhandles to ensure that the operation results in a valid fence which will not\ncause program termination, device loss, queue stalls, host thread stalls, or\ncorruption of other resources when used as allowed according to its import\nparameters.\nIf the external handle provided does not meet these requirements, the\nimplementation ",{"type":10,"tag":45,"props":5213,"children":5214},{"type":226},[],{"type":16,"value":5216}," fail the fence payload import operation with the error\ncode ",{"type":10,"tag":1085,"props":5218,"children":5220},{"className":5219},[],[5221],{"type":16,"value":5222},"VK_ERROR_INVALID_EXTERNAL_HANDLE",{"type":16,"value":185},{"type":10,"tag":1432,"props":5225,"children":5227},{"name":5226,"type":4496},"vkImportFenceWin32HandleKHR",[5228],{"type":10,"tag":18,"props":5229,"children":5230},{},[5231],{"type":16,"value":5232},"Import a fence from a Windows HANDLE",{"type":10,"tag":1432,"props":5234,"children":5235},{"name":5012,"type":4506},[5236],{"type":10,"tag":18,"props":5237,"children":5238},{},[5239],{"type":16,"value":5240},"(None)",{"type":10,"tag":1432,"props":5242,"children":5244},{"name":5243,"type":4496},"vkImportFenceFdKHR",[5245],{"type":10,"tag":18,"props":5246,"children":5247},{},[5248],{"type":16,"value":5249},"Import a fence from a POSIX file descriptor",{"type":10,"tag":1432,"props":5251,"children":5252},{"name":5025,"type":4506},[5253],{"type":10,"tag":18,"props":5254,"children":5255},{},[5256],{"type":16,"value":5240},{"type":10,"tag":1432,"props":5258,"children":5260},{"name":5259,"type":1435},"VkFenceImportFlagBits",[5261],{"type":10,"tag":18,"props":5262,"children":5263},{},[5264],{"type":16,"value":5265},"Bitmask specifying additional parameters of fence payload import",{"type":10,"tag":1432,"props":5267,"children":5269},{"name":5268,"type":1445},"VkFenceImportFlags",[5270],{"type":10,"tag":18,"props":5271,"children":5272},{},[5273],{"type":16,"value":5274},"Bitmask of VkFenceImportFlagBits",{"type":10,"tag":146,"props":5276,"children":5278},{"id":5277},"synchronization-semaphores",[5279],{"type":16,"value":60},{"type":10,"tag":1432,"props":5281,"children":5283},{"name":5282,"type":4486},"VkSemaphore",[5284],{"type":10,"tag":18,"props":5285,"children":5286},{},[5287],{"type":16,"value":5288},"Opaque handle to a semaphore object",{"type":10,"tag":1432,"props":5290,"children":5292},{"name":5291,"type":4496},"vkCreateSemaphore",[5293],{"type":10,"tag":18,"props":5294,"children":5295},{},[5296],{"type":16,"value":5297},"Create a new queue semaphore object",{"type":10,"tag":1432,"props":5299,"children":5301},{"name":5300,"type":4506},"VkSemaphoreCreateInfo",[5302],{"type":10,"tag":18,"props":5303,"children":5304},{},[5305],{"type":16,"value":5306},"Structure specifying parameters of a newly created semaphore",{"type":10,"tag":1432,"props":5308,"children":5310},{"name":5309,"type":1445},"VkSemaphoreCreateFlags",[5311],{"type":10,"tag":18,"props":5312,"children":5313},{},[5314],{"type":16,"value":5315},"Reserved for future use",{"type":10,"tag":1432,"props":5317,"children":5319},{"name":5318,"type":4506},"VkSemaphoreTypeCreateInfo",[5320],{"type":10,"tag":18,"props":5321,"children":5322},{},[5323],{"type":16,"value":5324},"Structure specifying the type of a newly created semaphore",{"type":10,"tag":1432,"props":5326,"children":5328},{"name":5327,"type":1435},"VkSemaphoreType",[5329],{"type":10,"tag":18,"props":5330,"children":5331},{},[5332],{"type":16,"value":5333},"Specifies the type of a semaphore object",{"type":10,"tag":1432,"props":5335,"children":5337},{"name":5336,"type":4506},"VkExportSemaphoreCreateInfo",[5338],{"type":10,"tag":18,"props":5339,"children":5340},{},[5341],{"type":16,"value":5342},"Structure specifying handle types that can be exported from a semaphore",{"type":10,"tag":1432,"props":5344,"children":5346},{"name":5345,"type":4506},"VkExportSemaphoreWin32HandleInfoKHR",[5347],{"type":10,"tag":18,"props":5348,"children":5349},{},[5350],{"type":16,"value":5351},"Structure specifying additional attributes of Windows handles exported from a semaphore",{"type":10,"tag":1432,"props":5353,"children":5355},{"name":5354,"type":4496},"vkGetSemaphoreWin32HandleKHR",[5356],{"type":10,"tag":18,"props":5357,"children":5358},{},[5359],{"type":16,"value":5360},"Get a Windows HANDLE for a semaphore",{"type":10,"tag":1432,"props":5362,"children":5364},{"name":5363,"type":4506},"VkSemaphoreGetWin32HandleInfoKHR",[5365],{"type":10,"tag":18,"props":5366,"children":5367},{},[5368],{"type":16,"value":5369},"Structure describing a Win32 handle semaphore export operation",{"type":10,"tag":1432,"props":5371,"children":5373},{"name":5372,"type":4506},"VkQueryLowLatencySupportNV",[5374],{"type":10,"tag":18,"props":5375,"children":5376},{},[5377],{"type":16,"value":5378},"Structure used for NVIDIA Reflex Support",{"type":10,"tag":1432,"props":5380,"children":5382},{"name":5381,"type":4496},"vkGetSemaphoreFdKHR",[5383],{"type":10,"tag":18,"props":5384,"children":5385},{},[5386],{"type":16,"value":5387},"Get a POSIX file descriptor handle for a semaphore",{"type":10,"tag":1432,"props":5389,"children":5391},{"name":5390,"type":4506},"VkSemaphoreGetFdInfoKHR",[5392],{"type":10,"tag":18,"props":5393,"children":5394},{},[5395],{"type":16,"value":5396},"Structure describing a POSIX FD semaphore export operation",{"type":10,"tag":1432,"props":5398,"children":5400},{"name":5399,"type":4496},"vkGetSemaphoreZirconHandleFUCHSIA",[5401],{"type":10,"tag":18,"props":5402,"children":5403},{},[5404],{"type":16,"value":5405},"Get a Zircon event handle for a semaphore",{"type":10,"tag":1432,"props":5407,"children":5409},{"name":5408,"type":4506},"VkSemaphoreGetZirconHandleInfoFUCHSIA",[5410],{"type":10,"tag":18,"props":5411,"children":5412},{},[5413],{"type":16,"value":5414},"Structure describing a Zircon event handle semaphore export operation",{"type":10,"tag":1432,"props":5416,"children":5418},{"name":5417,"type":4496},"vkDestroySemaphore",[5419],{"type":10,"tag":18,"props":5420,"children":5421},{},[5422],{"type":16,"value":5423},"Destroy a semaphore object",{"type":10,"tag":1017,"props":5425,"children":5427},{"id":5426},"synchronization-semaphores-signaling",[5428],{"type":16,"value":5429},"Semaphore Signaling",{"type":10,"tag":18,"props":5431,"children":5432},{},[5433,5435,5439,5441,5446],{"type":16,"value":5434},"When a batch is submitted to a queue via a ",{"type":10,"tag":33,"props":5436,"children":5437},{"href":3592},[5438],{"type":16,"value":4654},{"type":16,"value":5440},", and it includes semaphores to be signaled, it defines a memory\ndependency on the batch, and defines ",{"type":10,"tag":158,"props":5442,"children":5443},{},[5444],{"type":16,"value":5445},"semaphore signal operations",{"type":16,"value":5447}," which set\nthe semaphores to the signaled state.",{"type":10,"tag":18,"props":5449,"children":5450},{},[5451,5453,5458,5460,5466,5468,5474,5475,5481],{"type":16,"value":5452},"In case of semaphores created with a ",{"type":10,"tag":33,"props":5454,"children":5456},{"href":5455},"/man/VkSemaphoreType",[5457],{"type":16,"value":5327},{"type":16,"value":5459}," of\n",{"type":10,"tag":1085,"props":5461,"children":5463},{"className":5462},[],[5464],{"type":16,"value":5465},"VK_SEMAPHORE_TYPE_TIMELINE",{"type":16,"value":5467}," the semaphore is considered signaled with\nrespect to the counter value set to be signaled as specified in\n",{"type":10,"tag":33,"props":5469,"children":5471},{"href":5470},"/man/VkTimelineSemaphoreSubmitInfo",[5472],{"type":16,"value":5473},"VkTimelineSemaphoreSubmitInfo",{"type":16,"value":1704},{"type":10,"tag":33,"props":5476,"children":5478},{"href":5477},"/man/VkSemaphoreSignalInfo",[5479],{"type":16,"value":5480},"VkSemaphoreSignalInfo",{"type":16,"value":185},{"type":10,"tag":18,"props":5483,"children":5484},{},[5485,5486,5490,5492,5496,5498,5504,5505,5511,5513,5517,5518,5522,5524,5528,5529,5533,5534,5538,5539,5543,5544,5548],{"type":16,"value":4643},{"type":10,"tag":33,"props":5487,"children":5488},{"href":1372},[5489],{"type":16,"value":1483},{"type":16,"value":5491},"\nincludes every command submitted in the same batch.\nIn the case of ",{"type":10,"tag":33,"props":5493,"children":5494},{"href":4132},[5495],{"type":16,"value":4135},{"type":16,"value":5497},", the first synchronization scope is\nlimited to the pipeline stage specified by\n",{"type":10,"tag":33,"props":5499,"children":5501},{"href":5500},"/man/VkSemaphoreSubmitInfo",[5502],{"type":16,"value":5503},"VkSemaphoreSubmitInfo",{"type":16,"value":3770},{"type":10,"tag":1085,"props":5506,"children":5508},{"className":5507},[],[5509],{"type":16,"value":5510},"stageMask",{"type":16,"value":5512},".\nSemaphore signal operations that are defined by ",{"type":10,"tag":33,"props":5514,"children":5515},{"href":4125},[5516],{"type":16,"value":4128},{"type":16,"value":4202},{"type":10,"tag":33,"props":5519,"children":5520},{"href":4132},[5521],{"type":16,"value":4135},{"type":16,"value":5523},"\nadditionally include all commands that occur earlier in\n",{"type":10,"tag":33,"props":5525,"children":5526},{"href":1211},[5527],{"type":16,"value":1214},{"type":16,"value":5512},{"type":10,"tag":33,"props":5530,"children":5531},{"href":4125},[5532],{"type":16,"value":4128},{"type":16,"value":4202},{"type":10,"tag":33,"props":5535,"children":5536},{"href":4132},[5537],{"type":16,"value":4135},{"type":16,"value":4202},{"type":10,"tag":33,"props":5540,"children":5541},{"href":4372},[5542],{"type":16,"value":4375},{"type":16,"value":4689},{"type":10,"tag":33,"props":5545,"children":5546},{"href":4692},[5547],{"type":16,"value":4695},{"type":16,"value":185},{"type":10,"tag":18,"props":5550,"children":5551},{},[5552,5553,5557],{"type":16,"value":4701},{"type":10,"tag":33,"props":5554,"children":5555},{"href":1372},[5556],{"type":16,"value":1483},{"type":16,"value":5558},"\nincludes only the semaphore signal operation.",{"type":10,"tag":18,"props":5560,"children":5561},{},[5562,5563,5567],{"type":16,"value":4643},{"type":10,"tag":33,"props":5564,"children":5565},{"href":1495},[5566],{"type":16,"value":1498},{"type":16,"value":4717},{"type":10,"tag":18,"props":5569,"children":5570},{},[5571,5572,5576],{"type":16,"value":4701},{"type":10,"tag":33,"props":5573,"children":5574},{"href":1495},[5575],{"type":16,"value":1498},{"type":16,"value":4727},{"type":10,"tag":1017,"props":5578,"children":5580},{"id":5579},"synchronization-semaphores-waiting",[5581],{"type":16,"value":5582},"Semaphore Waiting",{"type":10,"tag":18,"props":5584,"children":5585},{},[5586,5587,5591,5593,5598],{"type":16,"value":5434},{"type":10,"tag":33,"props":5588,"children":5589},{"href":3592},[5590],{"type":16,"value":4654},{"type":16,"value":5592},", and it includes semaphores to be waited on, it defines a\nmemory dependency between prior semaphore signal operations and the batch,\nand defines ",{"type":10,"tag":158,"props":5594,"children":5595},{},[5596],{"type":16,"value":5597},"semaphore wait operations",{"type":16,"value":185},{"type":10,"tag":18,"props":5600,"children":5601},{},[5602,5604,5608,5610,5616,5618,5622,5623,5628,5630,5634],{"type":16,"value":5603},"Such semaphore wait operations set the semaphores\ncreated with a ",{"type":10,"tag":33,"props":5605,"children":5606},{"href":5455},[5607],{"type":16,"value":5327},{"type":16,"value":5609}," of ",{"type":10,"tag":1085,"props":5611,"children":5613},{"className":5612},[],[5614],{"type":16,"value":5615},"VK_SEMAPHORE_TYPE_BINARY",{"type":16,"value":5617},"\nto the unsignaled state.\nIn case of semaphores created with a ",{"type":10,"tag":33,"props":5619,"children":5620},{"href":5455},[5621],{"type":16,"value":5327},{"type":16,"value":5459},{"type":10,"tag":1085,"props":5624,"children":5626},{"className":5625},[],[5627],{"type":16,"value":5465},{"type":16,"value":5629}," a prior semaphore signal operation defines\na memory dependency with a semaphore wait operation if the value the\nsemaphore is signaled with is greater than or equal to the value the\nsemaphore is waited with, thus the semaphore will continue to be considered\nsignaled with respect to the counter value waited on as specified in\n",{"type":10,"tag":33,"props":5631,"children":5632},{"href":5470},[5633],{"type":16,"value":5473},{"type":16,"value":185},{"type":10,"tag":18,"props":5636,"children":5637},{},[5638],{"type":16,"value":5639},"The first synchronization scope includes all semaphore signal operations\nthat operate on semaphores waited on in the same batch, and that\nhappen-before the wait completes.",{"type":10,"tag":18,"props":5641,"children":5642},{},[5643,5644,5648,5649,5653,5655,5661,5663,5669,5671,5675,5677,5681,5682,5687,5689,5693,5694,5698,5700,5704],{"type":16,"value":4701},{"type":10,"tag":33,"props":5645,"children":5646},{"href":1372},[5647],{"type":16,"value":1483},{"type":16,"value":5491},{"type":10,"tag":33,"props":5650,"children":5651},{"href":4125},[5652],{"type":16,"value":4128},{"type":16,"value":5654},", the second synchronization scope is\nlimited to operations on the pipeline stages determined by the\n",{"type":10,"tag":33,"props":5656,"children":5658},{"href":5657},"/chapters/synchronization#synchronization-pipeline-stages-masks",[5659],{"type":16,"value":5660},"destination stage mask",{"type":16,"value":5662}," specified\nby the corresponding element of ",{"type":10,"tag":1085,"props":5664,"children":5666},{"className":5665},[],[5667],{"type":16,"value":5668},"pWaitDstStageMask",{"type":16,"value":5670},".\nIn the case of ",{"type":10,"tag":33,"props":5672,"children":5673},{"href":4132},[5674],{"type":16,"value":4135},{"type":16,"value":5676},", the second synchronization scope is\nlimited to the pipeline stage specified by\n",{"type":10,"tag":33,"props":5678,"children":5679},{"href":5500},[5680],{"type":16,"value":5503},{"type":16,"value":3770},{"type":10,"tag":1085,"props":5683,"children":5685},{"className":5684},[],[5686],{"type":16,"value":5510},{"type":16,"value":5688},".\nAlso, in the case of\neither ",{"type":10,"tag":33,"props":5690,"children":5691},{"href":4132},[5692],{"type":16,"value":4135},{"type":16,"value":1280},{"type":10,"tag":33,"props":5695,"children":5696},{"href":4125},[5697],{"type":16,"value":4128},{"type":16,"value":5699},", the second synchronization scope additionally includes\nall commands that occur later in\n",{"type":10,"tag":33,"props":5701,"children":5702},{"href":1211},[5703],{"type":16,"value":1214},{"type":16,"value":185},{"type":10,"tag":18,"props":5706,"children":5707},{},[5708,5709,5713],{"type":16,"value":4643},{"type":10,"tag":33,"props":5710,"children":5711},{"href":1495},[5712],{"type":16,"value":1498},{"type":16,"value":4727},{"type":10,"tag":18,"props":5715,"children":5716},{},[5717,5718,5722],{"type":16,"value":4701},{"type":10,"tag":33,"props":5719,"children":5720},{"href":1495},[5721],{"type":16,"value":1498},{"type":16,"value":4717},{"type":10,"tag":18,"props":5724,"children":5725},{},[5726],{"type":16,"value":5727},"The semaphore wait operation happens-after the first set of operations in\nthe execution dependency, and happens-before the second set of operations in\nthe execution dependency.",{"type":10,"tag":1008,"props":5729,"children":5730},{},[5731],{"type":10,"tag":18,"props":5732,"children":5733},{},[5734,5736,5739],{"type":16,"value":5735},"Unlike\ntimeline semaphores,\nfences or events, waiting for a binary semaphore also unsignals that\nsemaphore when the wait completes.\nApplications ",{"type":10,"tag":45,"props":5737,"children":5738},{"type":226},[],{"type":16,"value":5740}," ensure that between two such wait operations, the\nsemaphore is signaled again, with execution dependencies used to ensure\nthese occur in order.\nBinary semaphore waits and signals should thus occur in discrete 1:1 pairs.",{"type":10,"tag":1008,"props":5742,"children":5743},{},[5744,5786,5808,5909,5932],{"type":10,"tag":18,"props":5745,"children":5746},{},[5747,5749,5754,5756,5762,5764,5767,5769,5772,5774,5779,5781,5784],{"type":16,"value":5748},"A common scenario for using ",{"type":10,"tag":1085,"props":5750,"children":5752},{"className":5751},[],[5753],{"type":16,"value":5668},{"type":16,"value":5755}," with values other than\n",{"type":10,"tag":1085,"props":5757,"children":5759},{"className":5758},[],[5760],{"type":16,"value":5761},"VK_PIPELINE_STAGE_ALL_COMMANDS_BIT",{"type":16,"value":5763}," is when synchronizing a window\nsystem presentation operation against subsequent command buffers which\nrender the next frame.\nIn this case, a presentation image ",{"type":10,"tag":45,"props":5765,"children":5766},{"type":226},[],{"type":16,"value":5768}," not be overwritten until the\npresentation operation completes, but other pipeline stages ",{"type":10,"tag":45,"props":5770,"children":5771},{"type":47},[],{"type":16,"value":5773}," execute\nwithout waiting.\nA mask of ",{"type":10,"tag":1085,"props":5775,"children":5777},{"className":5776},[],[5778],{"type":16,"value":3671},{"type":16,"value":5780}," prevents\nsubsequent color attachment writes from executing until the semaphore\nsignals.\nSome implementations ",{"type":10,"tag":45,"props":5782,"children":5783},{"type":1058},[],{"type":16,"value":5785}," be able to execute transfer operations and/or\npre-rasterization work before the semaphore is signaled.",{"type":10,"tag":18,"props":5787,"children":5788},{},[5789,5791,5794,5796,5799,5801,5806],{"type":16,"value":5790},"If an image layout transition needs to be performed on a presentable image\nbefore it is used in a framebuffer, that ",{"type":10,"tag":45,"props":5792,"children":5793},{"type":47},[],{"type":16,"value":5795}," be performed as the first\noperation submitted to the queue after acquiring the image, and ",{"type":10,"tag":45,"props":5797,"children":5798},{"type":1127},[],{"type":16,"value":5800}," not\nprevent other work from overlapping with the presentation operation.\nFor example, a ",{"type":10,"tag":1085,"props":5802,"children":5804},{"className":5803},[],[5805],{"type":16,"value":1286},{"type":16,"value":5807}," could use:",{"type":10,"tag":243,"props":5809,"children":5810},{},[5811,5827,5838,5853,5878,5893],{"type":10,"tag":247,"props":5812,"children":5813},{},[5814,5820,5822],{"type":10,"tag":1085,"props":5815,"children":5817},{"className":5816},[],[5818],{"type":16,"value":5819},"srcStageMask",{"type":16,"value":5821}," = ",{"type":10,"tag":1085,"props":5823,"children":5825},{"className":5824},[],[5826],{"type":16,"value":3671},{"type":10,"tag":247,"props":5828,"children":5829},{},[5830,5836],{"type":10,"tag":1085,"props":5831,"children":5833},{"className":5832},[],[5834],{"type":16,"value":5835},"srcAccessMask",{"type":16,"value":5837}," = 0",{"type":10,"tag":247,"props":5839,"children":5840},{},[5841,5847,5848],{"type":10,"tag":1085,"props":5842,"children":5844},{"className":5843},[],[5845],{"type":16,"value":5846},"dstStageMask",{"type":16,"value":5821},{"type":10,"tag":1085,"props":5849,"children":5851},{"className":5850},[],[5852],{"type":16,"value":3671},{"type":10,"tag":247,"props":5854,"children":5855},{},[5856,5862,5863,5869,5871,5877],{"type":10,"tag":1085,"props":5857,"children":5859},{"className":5858},[],[5860],{"type":16,"value":5861},"dstAccessMask",{"type":16,"value":5821},{"type":10,"tag":1085,"props":5864,"children":5866},{"className":5865},[],[5867],{"type":16,"value":5868},"VK_ACCESS_COLOR_ATTACHMENT_READ_BIT",{"type":16,"value":5870}," |\n",{"type":10,"tag":1085,"props":5872,"children":5874},{"className":5873},[],[5875],{"type":16,"value":5876},"VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT",{"type":16,"value":185},{"type":10,"tag":247,"props":5879,"children":5880},{},[5881,5886,5887],{"type":10,"tag":1085,"props":5882,"children":5884},{"className":5883},[],[5885],{"type":16,"value":1321},{"type":16,"value":5821},{"type":10,"tag":1085,"props":5888,"children":5890},{"className":5889},[],[5891],{"type":16,"value":5892},"VK_IMAGE_LAYOUT_PRESENT_SRC_KHR",{"type":10,"tag":247,"props":5894,"children":5895},{},[5896,5902,5903],{"type":10,"tag":1085,"props":5897,"children":5899},{"className":5898},[],[5900],{"type":16,"value":5901},"newLayout",{"type":16,"value":5821},{"type":10,"tag":1085,"props":5904,"children":5906},{"className":5905},[],[5907],{"type":16,"value":5908},"VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL",{"type":10,"tag":18,"props":5910,"children":5911},{},[5912,5914,5919,5920,5923,5925,5930],{"type":16,"value":5913},"Alternatively, ",{"type":10,"tag":1085,"props":5915,"children":5917},{"className":5916},[],[5918],{"type":16,"value":1321},{"type":16,"value":229},{"type":10,"tag":45,"props":5921,"children":5922},{"type":47},[],{"type":16,"value":5924}," be ",{"type":10,"tag":1085,"props":5926,"children":5928},{"className":5927},[],[5929],{"type":16,"value":1090},{"type":16,"value":5931},", if\nthe image’s contents need not be preserved.",{"type":10,"tag":18,"props":5933,"children":5934},{},[5935,5937,5943,5945,5950],{"type":16,"value":5936},"This barrier accomplishes a dependency chain between previous presentation\noperations and subsequent color attachment output operations, with the\nlayout transition performed in between, and does not introduce a dependency\nbetween previous work and any\n",{"type":10,"tag":33,"props":5938,"children":5940},{"href":5939},"/man/VkGraphicsPipelineCreateInfo#pipelines-graphics-subsets-pre-rasterization",[5941],{"type":16,"value":5942},"pre-rasterization shader\nstage",{"type":16,"value":5944},"s.\nMore precisely, the semaphore signals after the presentation operation\ncompletes, the semaphore wait stalls the\n",{"type":10,"tag":1085,"props":5946,"children":5948},{"className":5947},[],[5949],{"type":16,"value":3671},{"type":16,"value":5951}," stage, and there is a\ndependency from that same stage to itself with the layout transition\nperformed in between.",{"type":10,"tag":1017,"props":5953,"children":5955},{"id":5954},"synchronization-semaphores-waiting-state",[5956],{"type":16,"value":5957},"Semaphore State Requirements for Wait Operations",{"type":10,"tag":18,"props":5959,"children":5960},{},[5961,5963,5966,5968,5974],{"type":16,"value":5962},"Before waiting on a semaphore, the application ",{"type":10,"tag":45,"props":5964,"children":5965},{"type":226},[],{"type":16,"value":5967}," ensure the semaphore is\nin a valid state for a wait operation.\nSpecifically, when a ",{"type":10,"tag":33,"props":5969,"children":5971},{"href":5970},"/chapters/synchronization#synchronization-semaphores-waiting",[5972],{"type":16,"value":5973},"semaphore wait\noperation",{"type":16,"value":5975}," is submitted to a queue:",{"type":10,"tag":243,"props":5977,"children":5978},{},[5979,5997,6013],{"type":10,"tag":247,"props":5980,"children":5981},{},[5982,5984,5987,5989,5995],{"type":16,"value":5983},"A binary semaphore ",{"type":10,"tag":45,"props":5985,"children":5986},{"type":226},[],{"type":16,"value":5988}," be signaled, or have an associated\n",{"type":10,"tag":33,"props":5990,"children":5992},{"href":5991},"/chapters/synchronization#synchronization-semaphores-signaling",[5993],{"type":16,"value":5994},"semaphore signal operation",{"type":16,"value":5996}," that\nis pending execution.",{"type":10,"tag":247,"props":5998,"children":5999},{},[6000,6002,6006,6008,6011],{"type":16,"value":6001},"Any ",{"type":10,"tag":33,"props":6003,"children":6004},{"href":5991},[6005],{"type":16,"value":5445},{"type":16,"value":6007},"\non which the pending binary semaphore signal operation depends ",{"type":10,"tag":45,"props":6009,"children":6010},{"type":226},[],{"type":16,"value":6012},"\nalso be completed or pending execution.",{"type":10,"tag":247,"props":6014,"children":6015},{},[6016,6018,6021],{"type":16,"value":6017},"There ",{"type":10,"tag":45,"props":6019,"children":6020},{"type":226},[],{"type":16,"value":6022}," be no other queue waiting on the same binary semaphore when\nthe operation executes.",{"type":10,"tag":1017,"props":6024,"children":6026},{"id":6025},"synchronization-semaphores-hostops",[6027],{"type":16,"value":6028},"Host Operations on Semaphores",{"type":10,"tag":18,"props":6030,"children":6031},{},[6032,6034,6039,6040,6045],{"type":16,"value":6033},"In addition to ",{"type":10,"tag":33,"props":6035,"children":6036},{"href":5991},[6037],{"type":16,"value":6038},"semaphore signal\noperations",{"type":16,"value":264},{"type":10,"tag":33,"props":6041,"children":6042},{"href":5970},[6043],{"type":16,"value":6044},"semaphore wait\noperations",{"type":16,"value":6046}," submitted to device queues, timeline semaphores support the\nfollowing host operations:",{"type":10,"tag":243,"props":6048,"children":6049},{},[6050,6063,6075],{"type":10,"tag":247,"props":6051,"children":6052},{},[6053,6055,6061],{"type":16,"value":6054},"Query the current counter value of the semaphore using the\n",{"type":10,"tag":33,"props":6056,"children":6058},{"href":6057},"/man/vkGetSemaphoreCounterValue",[6059],{"type":16,"value":6060},"vkGetSemaphoreCounterValue",{"type":16,"value":6062}," command.",{"type":10,"tag":247,"props":6064,"children":6065},{},[6066,6068,6074],{"type":16,"value":6067},"Wait for a set of semaphores to reach particular counter values using\nthe ",{"type":10,"tag":33,"props":6069,"children":6071},{"href":6070},"/man/vkWaitSemaphores",[6072],{"type":16,"value":6073},"vkWaitSemaphores",{"type":16,"value":6062},{"type":10,"tag":247,"props":6076,"children":6077},{},[6078,6080,6084],{"type":16,"value":6079},"Signal the semaphore with a particular counter value from the host using\nthe ",{"type":10,"tag":33,"props":6081,"children":6082},{"href":4408},[6083],{"type":16,"value":4411},{"type":16,"value":6062},{"type":10,"tag":1432,"props":6086,"children":6087},{"name":6060,"type":4496},[6088],{"type":10,"tag":18,"props":6089,"children":6090},{},[6091],{"type":16,"value":6092},"Query the current state of a timeline semaphore",{"type":10,"tag":1432,"props":6094,"children":6095},{"name":6073,"type":4496},[6096],{"type":10,"tag":18,"props":6097,"children":6098},{},[6099],{"type":16,"value":6100},"Wait for timeline semaphores on the host",{"type":10,"tag":1432,"props":6102,"children":6104},{"name":6103,"type":4506},"VkSemaphoreWaitInfo",[6105],{"type":10,"tag":18,"props":6106,"children":6107},{},[6108],{"type":16,"value":6109},"Structure containing information about the semaphore wait condition",{"type":10,"tag":1432,"props":6111,"children":6113},{"name":6112,"type":1435},"VkSemaphoreWaitFlagBits",[6114],{"type":10,"tag":18,"props":6115,"children":6116},{},[6117],{"type":16,"value":6118},"Bitmask specifying additional parameters of a semaphore wait operation",{"type":10,"tag":1432,"props":6120,"children":6122},{"name":6121,"type":1445},"VkSemaphoreWaitFlags",[6123],{"type":10,"tag":18,"props":6124,"children":6125},{},[6126],{"type":16,"value":6127},"Bitmask of VkSemaphoreWaitFlagBits",{"type":10,"tag":1432,"props":6129,"children":6130},{"name":4411,"type":4496},[6131],{"type":10,"tag":18,"props":6132,"children":6133},{},[6134],{"type":16,"value":6135},"Signal a timeline semaphore on the host",{"type":10,"tag":1432,"props":6137,"children":6138},{"name":5480,"type":4506},[6139],{"type":10,"tag":18,"props":6140,"children":6141},{},[6142],{"type":16,"value":6143},"Structure containing information about a semaphore signal operation",{"type":10,"tag":1017,"props":6145,"children":6147},{"id":6146},"synchronization-semaphores-importing",[6148],{"type":16,"value":6149},"Importing Semaphore Payloads",{"type":10,"tag":18,"props":6151,"children":6152},{},[6153,6154,6157,6159,6162,6164,6167,6169,6174,6176,6180],{"type":16,"value":1182},{"type":10,"tag":45,"props":6155,"children":6156},{"type":47},[],{"type":16,"value":6158}," import a semaphore payload into an existing semaphore\nusing an external semaphore handle.\nThe effects of the import operation will be either temporary or permanent,\nas specified by the application.\nIf the import is temporary, the implementation ",{"type":10,"tag":45,"props":6160,"children":6161},{"type":226},[],{"type":16,"value":6163}," restore the semaphore\nto its prior permanent state after submitting the next semaphore wait\noperation.\nPerforming a subsequent temporary import on a semaphore before performing a\nsemaphore wait has no effect on this requirement; the next wait submitted on\nthe semaphore ",{"type":10,"tag":45,"props":6165,"children":6166},{"type":226},[],{"type":16,"value":6168}," still restore its last permanent state.\nA permanent payload import behaves as if the target semaphore was destroyed,\nand a new semaphore was created with the same handle but the imported\npayload.\nBecause importing a semaphore payload temporarily or permanently detaches\nthe existing payload from a semaphore, similar usage restrictions to those\napplied to ",{"type":10,"tag":1085,"props":6170,"children":6172},{"className":6171},[],[6173],{"type":16,"value":5417},{"type":16,"value":6175}," are applied to any command that imports\na semaphore payload.\nWhich of these import types is used is referred to as the import operation’s\n",{"type":10,"tag":158,"props":6177,"children":6178},{},[6179],{"type":16,"value":4958},{"type":16,"value":4960},{"type":10,"tag":18,"props":6182,"children":6183},{},[6184,6185,6188,6190,6194,6196,6199,6201,6204],{"type":16,"value":4965},{"type":10,"tag":45,"props":6186,"children":6187},{"type":226},[],{"type":16,"value":6189}," perform the import operation by either referencing\nor copying the payload referred to by the specified external semaphore\nhandle, depending on the handle’s type.\nThe import method used is referred to as the handle type’s ",{"type":10,"tag":158,"props":6191,"children":6192},{},[6193],{"type":16,"value":4975},{"type":16,"value":6195},".\nWhen using handle types with reference transference, importing a payload to\na semaphore adds the semaphore to the set of all semaphores sharing that\npayload.\nThis set includes the semaphore from which the payload was exported.\nSemaphore signaling and waiting operations performed on any semaphore in the\nset ",{"type":10,"tag":45,"props":6197,"children":6198},{"type":226},[],{"type":16,"value":6200}," behave as if the set were a single semaphore.\nImporting a payload using handle types with copy transference creates a\nduplicate copy of the payload at the time of import, but makes no further\nreference to it.\nSemaphore signaling and waiting operations performed on the target of copy\nimports ",{"type":10,"tag":45,"props":6202,"children":6203},{"type":226},[],{"type":16,"value":6205}," not affect any other semaphore or payload.",{"type":10,"tag":18,"props":6207,"children":6208},{},[6209],{"type":16,"value":6210},"Export operations have the same transference as the specified handle type’s\nimport operations.\nAdditionally, exporting a semaphore payload to a handle with copy\ntransference has the same side effects on the source semaphore’s payload as\nexecuting a semaphore wait operation.\nIf the semaphore was using a temporarily imported payload, the semaphore’s\nprior permanent payload will be restored.",{"type":10,"tag":1008,"props":6212,"children":6213},{},[6214,6219],{"type":10,"tag":18,"props":6215,"children":6216},{},[6217],{"type":16,"value":6218},"The permanence and transference of handle types can be found in:",{"type":10,"tag":243,"props":6220,"children":6221},{},[6222,6236,6250],{"type":10,"tag":247,"props":6223,"children":6224},{},[6225],{"type":10,"tag":33,"props":6226,"children":6228},{"href":6227},"/404#synchronization-semaphore-handletypes-win32",[6229,6230],{"type":16,"value":5006},{"type":10,"tag":1085,"props":6231,"children":6233},{"className":6232},[],[6234],{"type":16,"value":6235},"VkImportSemaphoreWin32HandleInfoKHR",{"type":10,"tag":247,"props":6237,"children":6238},{},[6239],{"type":10,"tag":33,"props":6240,"children":6242},{"href":6241},"/man/VkImportSemaphoreFdInfoKHR#synchronization-semaphore-handletypes-fd",[6243,6244],{"type":16,"value":5006},{"type":10,"tag":1085,"props":6245,"children":6247},{"className":6246},[],[6248],{"type":16,"value":6249},"VkImportSemaphoreFdInfoKHR",{"type":10,"tag":247,"props":6251,"children":6252},{},[6253],{"type":10,"tag":33,"props":6254,"children":6256},{"href":6255},"/man/VkImportSemaphoreZirconHandleInfoFUCHSIA#synchronization-semaphore-handletypes-fuchsia",[6257,6259],{"type":16,"value":6258},"Handle Types Supported\nby ",{"type":10,"tag":1085,"props":6260,"children":6262},{"className":6261},[],[6263],{"type":16,"value":6264},"VkImportSemaphoreZirconHandleInfoFUCHSIA",{"type":10,"tag":18,"props":6266,"children":6267},{},[6268,6272,6274,6279,6281,6287,6289,6294,6296,6299],{"type":10,"tag":33,"props":6269,"children":6270},{"href":5033},[6271],{"type":16,"value":5036},{"type":16,"value":6273}," allows\nimplementations to modify an object’s internal state, i.e. payload, without\ninternal synchronization.\nHowever, for semaphores sharing a payload across processes, satisfying the\nexternal synchronization requirements of ",{"type":10,"tag":1085,"props":6275,"children":6277},{"className":6276},[],[6278],{"type":16,"value":5282},{"type":16,"value":6280}," parameters as if\nall semaphores in the set were the same object is sometimes infeasible.\nSatisfying the ",{"type":10,"tag":33,"props":6282,"children":6284},{"href":6283},"/chapters/synchronization#synchronization-semaphores-waiting-state",[6285],{"type":16,"value":6286},"wait operation\nstate requirements",{"type":16,"value":6288}," would similarly require impractical coordination or\nlevels of trust between processes.\nTherefore, these constraints only apply to a specific semaphore handle, not\nto its payload.\nFor distinct semaphore objects which share a payload, if the semaphores are\npassed to separate queue submission commands concurrently, behavior will be\nas if the commands were called in an arbitrary sequential order.\nIf the ",{"type":10,"tag":33,"props":6290,"children":6291},{"href":6283},[6292],{"type":16,"value":6293},"wait operation state\nrequirements",{"type":16,"value":6295}," are violated for the shared payload by a queue submission\ncommand, or if a signal operation is queued for a shared payload that is\nalready signaled or has a pending signal operation, effects ",{"type":10,"tag":45,"props":6297,"children":6298},{"type":226},[],{"type":16,"value":6300}," be limited\nto one or more of the following:",{"type":10,"tag":243,"props":6302,"children":6303},{},[6304,6316,6329],{"type":10,"tag":247,"props":6305,"children":6306},{},[6307,6309,6314],{"type":16,"value":6308},"Returning ",{"type":10,"tag":1085,"props":6310,"children":6312},{"className":6311},[],[6313],{"type":16,"value":5089},{"type":16,"value":6315}," from the command which\nresulted in the violation.",{"type":10,"tag":247,"props":6317,"children":6318},{},[6319,6321,6327],{"type":16,"value":6320},"Losing the logical device on which the violation occurred immediately or\nat a future time, resulting in a ",{"type":10,"tag":1085,"props":6322,"children":6324},{"className":6323},[],[6325],{"type":16,"value":6326},"VK_ERROR_DEVICE_LOST",{"type":16,"value":6328}," error from\nsubsequent commands, including the one causing the violation.",{"type":10,"tag":247,"props":6330,"children":6331},{},[6332,6334,6337],{"type":16,"value":6333},"Continuing execution of the violating command or operation as if the\nsemaphore wait completed successfully after an implementation-dependent\ntimeout.\nIn this case, the state of the payload becomes undefined:, and future\noperations on semaphores sharing the payload will be subject to these\nsame rules.\nThe semaphore ",{"type":10,"tag":45,"props":6335,"children":6336},{"type":226},[],{"type":16,"value":6338}," be destroyed or have its payload replaced by an\nimport operation to again have a well-defined state.",{"type":10,"tag":1008,"props":6340,"children":6341},{},[6342],{"type":10,"tag":18,"props":6343,"children":6344},{},[6345],{"type":16,"value":6346},"These rules allow processes to synchronize access to shared memory without\ntrusting each other.\nHowever, such processes must still be cautious not to use the shared\nsemaphore for more than synchronizing access to the shared memory.\nFor example, a process should not use a shared semaphore as part of an\nexecution dependency chain that, when complete, leads to objects being\ndestroyed, if it does not trust other processes sharing the semaphore\npayload.",{"type":10,"tag":18,"props":6348,"children":6349},{},[6350,6352,6357,6358,6363,6365,6371,6372,6377,6378,6381,6383,6387],{"type":16,"value":6351},"When a semaphore is using an imported payload, its\n",{"type":10,"tag":33,"props":6353,"children":6355},{"href":6354},"/man/VkExportSemaphoreCreateInfo",[6356],{"type":16,"value":5336},{"type":16,"value":3770},{"type":10,"tag":1085,"props":6359,"children":6361},{"className":6360},[],[6362],{"type":16,"value":5142},{"type":16,"value":6364}," value is specified when\ncreating the semaphore from which the payload was exported, rather than\nspecified when creating the semaphore.\nAdditionally,\n",{"type":10,"tag":33,"props":6366,"children":6368},{"href":6367},"/man/VkExternalSemaphoreProperties",[6369],{"type":16,"value":6370},"VkExternalSemaphoreProperties",{"type":16,"value":3770},{"type":10,"tag":1085,"props":6373,"children":6375},{"className":6374},[],[6376],{"type":16,"value":5157},{"type":16,"value":5159},{"type":10,"tag":45,"props":6379,"children":6380},{"type":47},[],{"type":16,"value":6382}," be exported from such a semaphore based on\nthe specific handle type used to import the current payload.\nPassing a semaphore to ",{"type":10,"tag":33,"props":6384,"children":6385},{"href":5167},[6386],{"type":16,"value":5170},{"type":16,"value":6388}," is equivalent to\ntemporarily importing a semaphore payload to that semaphore.",{"type":10,"tag":1008,"props":6390,"children":6391},{},[6392],{"type":10,"tag":18,"props":6393,"children":6394},{},[6395,6397,6401,6403,6406,6408,6411,6413,6417],{"type":16,"value":6396},"Because the exportable handle types of an imported semaphore correspond to\nits current imported payload, and ",{"type":10,"tag":33,"props":6398,"children":6399},{"href":5167},[6400],{"type":16,"value":5170},{"type":16,"value":6402}," behaves the\nsame as a temporary import operation for which the source semaphore is\nopaque to the application, applications have no way of determining whether\nany external handle types ",{"type":10,"tag":45,"props":6404,"children":6405},{"type":47},[],{"type":16,"value":6407}," be exported from a semaphore in this state.\nTherefore, applications ",{"type":10,"tag":45,"props":6409,"children":6410},{"type":226},[],{"type":16,"value":6412}," not attempt to export external handles from\nsemaphores using a temporarily imported payload from\n",{"type":10,"tag":33,"props":6414,"children":6415},{"href":5167},[6416],{"type":16,"value":5170},{"type":16,"value":185},{"type":10,"tag":18,"props":6419,"children":6420},{},[6421,6423,6426,6428,6433,6435,6438,6440,6445],{"type":16,"value":6422},"When importing a semaphore payload, it is the responsibility of the\napplication to ensure the external handles meet all valid usage\nrequirements.\nHowever, implementations ",{"type":10,"tag":45,"props":6424,"children":6425},{"type":226},[],{"type":16,"value":6427}," perform sufficient validation of external\nhandles to ensure that the operation results in a valid semaphore which will\nnot cause program termination, device loss, queue stalls, or corruption of\nother resources when used as allowed according to its import parameters, and\nexcepting those side effects allowed for violations of the\n",{"type":10,"tag":33,"props":6429,"children":6430},{"href":6283},[6431],{"type":16,"value":6432},"valid semaphore state for wait\noperations",{"type":16,"value":6434}," rules.\nIf the external handle provided does not meet these requirements, the\nimplementation ",{"type":10,"tag":45,"props":6436,"children":6437},{"type":226},[],{"type":16,"value":6439}," fail the semaphore payload import operation with the\nerror code ",{"type":10,"tag":1085,"props":6441,"children":6443},{"className":6442},[],[6444],{"type":16,"value":5222},{"type":16,"value":185},{"type":10,"tag":18,"props":6447,"children":6448},{},[6449,6451,6455,6457,6460,6462,6467],{"type":16,"value":6450},"In addition, when importing a semaphore payload that is not compatible with\nthe payload type corresponding to the ",{"type":10,"tag":33,"props":6452,"children":6453},{"href":5455},[6454],{"type":16,"value":5327},{"type":16,"value":6456}," the semaphore\nwas created with, the implementation ",{"type":10,"tag":45,"props":6458,"children":6459},{"type":1058},[],{"type":16,"value":6461}," fail the semaphore payload import\noperation with the error code ",{"type":10,"tag":1085,"props":6463,"children":6465},{"className":6464},[],[6466],{"type":16,"value":5222},{"type":16,"value":185},{"type":10,"tag":1008,"props":6469,"children":6470},{},[6471],{"type":10,"tag":18,"props":6472,"children":6473},{},[6474,6476,6482,6484,6488,6489,6494,6496,6499,6501,6505,6506,6511],{"type":16,"value":6475},"As the introduction of the external semaphore handle type\n",{"type":10,"tag":1085,"props":6477,"children":6479},{"className":6478},[],[6480],{"type":16,"value":6481},"VK_EXTERNAL_SEMAPHORE_HANDLE_TYPE_D3D12_FENCE_BIT",{"type":16,"value":6483}," predates that of\ntimeline semaphores, support for importing semaphore payloads from external\nhandles of that type into semaphores created (implicitly or explicitly) with\na ",{"type":10,"tag":33,"props":6485,"children":6486},{"href":5455},[6487],{"type":16,"value":5327},{"type":16,"value":5609},{"type":10,"tag":1085,"props":6490,"children":6492},{"className":6491},[],[6493],{"type":16,"value":5615},{"type":16,"value":6495}," is preserved for\nbackwards compatibility.\nHowever, applications ",{"type":10,"tag":45,"props":6497,"children":6498},{"type":1127},[],{"type":16,"value":6500}," prefer importing such handle types into\nsemaphores created with a ",{"type":10,"tag":33,"props":6502,"children":6503},{"href":5455},[6504],{"type":16,"value":5327},{"type":16,"value":5459},{"type":10,"tag":1085,"props":6507,"children":6509},{"className":6508},[],[6510],{"type":16,"value":5465},{"type":16,"value":185},{"type":10,"tag":1432,"props":6513,"children":6515},{"name":6514,"type":4496},"vkImportSemaphoreWin32HandleKHR",[6516],{"type":10,"tag":18,"props":6517,"children":6518},{},[6519],{"type":16,"value":6520},"Import a semaphore from a Windows HANDLE",{"type":10,"tag":1432,"props":6522,"children":6523},{"name":6235,"type":4506},[6524],{"type":10,"tag":18,"props":6525,"children":6526},{},[6527],{"type":16,"value":6528},"Structure specifying Windows handle to import to a semaphore",{"type":10,"tag":1432,"props":6530,"children":6532},{"name":6531,"type":4496},"vkImportSemaphoreFdKHR",[6533],{"type":10,"tag":18,"props":6534,"children":6535},{},[6536],{"type":16,"value":6537},"Import a semaphore from a POSIX file descriptor",{"type":10,"tag":1432,"props":6539,"children":6540},{"name":6249,"type":4506},[6541],{"type":10,"tag":18,"props":6542,"children":6543},{},[6544],{"type":16,"value":6545},"Structure specifying POSIX file descriptor to import to a semaphore",{"type":10,"tag":1432,"props":6547,"children":6549},{"name":6548,"type":4496},"vkImportSemaphoreZirconHandleFUCHSIA",[6550],{"type":10,"tag":18,"props":6551,"children":6552},{},[6553],{"type":16,"value":6554},"Import a semaphore from a Zircon event handle",{"type":10,"tag":1432,"props":6556,"children":6557},{"name":6264,"type":4506},[6558],{"type":10,"tag":18,"props":6559,"children":6560},{},[6561],{"type":16,"value":6562},"Structure specifying Zircon event handle to import to a semaphore",{"type":10,"tag":1432,"props":6564,"children":6566},{"name":6565,"type":1435},"VkSemaphoreImportFlagBits",[6567],{"type":10,"tag":18,"props":6568,"children":6569},{},[6570],{"type":16,"value":6571},"Bitmask specifying additional parameters of semaphore payload import",{"type":10,"tag":1432,"props":6573,"children":6575},{"name":6574,"type":1445},"VkSemaphoreImportFlags",[6576],{"type":10,"tag":18,"props":6577,"children":6578},{},[6579],{"type":16,"value":6580},"Bitmask of VkSemaphoreImportFlagBits",{"type":10,"tag":146,"props":6582,"children":6584},{"id":6583},"synchronization-events",[6585],{"type":16,"value":80},{"type":10,"tag":1432,"props":6587,"children":6589},{"name":6588,"type":4486},"VkEvent",[6590],{"type":10,"tag":18,"props":6591,"children":6592},{},[6593],{"type":16,"value":6594},"Opaque handle to an event object",{"type":10,"tag":1432,"props":6596,"children":6598},{"name":6597,"type":4496},"vkCreateEvent",[6599],{"type":10,"tag":18,"props":6600,"children":6601},{},[6602],{"type":16,"value":6603},"Create a new event object",{"type":10,"tag":1432,"props":6605,"children":6607},{"name":6606,"type":4506},"VkEventCreateInfo",[6608],{"type":10,"tag":18,"props":6609,"children":6610},{},[6611],{"type":16,"value":6612},"Structure specifying parameters of a newly created event",{"type":10,"tag":1432,"props":6614,"children":6616},{"name":6615,"type":1435},"VkEventCreateFlagBits",[6617],{"type":10,"tag":18,"props":6618,"children":6619},{},[6620],{"type":16,"value":6621},"Event creation flag bits",{"type":10,"tag":1432,"props":6623,"children":6625},{"name":6624,"type":1445},"VkEventCreateFlags",[6626],{"type":10,"tag":18,"props":6627,"children":6628},{},[6629],{"type":16,"value":6630},"Bitmask of event creation flag bits",{"type":10,"tag":1432,"props":6632,"children":6634},{"name":6633,"type":4496},"vkDestroyEvent",[6635],{"type":10,"tag":18,"props":6636,"children":6637},{},[6638],{"type":16,"value":6639},"Destroy an event object",{"type":10,"tag":1432,"props":6641,"children":6643},{"name":6642,"type":4496},"vkGetEventStatus",[6644],{"type":10,"tag":18,"props":6645,"children":6646},{},[6647],{"type":16,"value":6648},"Retrieve the status of an event object",{"type":10,"tag":187,"props":6650,"children":6652},{"id":6651},"synchronization-events-signaling-host",[],{"type":10,"tag":1432,"props":6654,"children":6656},{"name":6655,"type":4496},"vkSetEvent",[6657],{"type":10,"tag":18,"props":6658,"children":6659},{},[6660],{"type":16,"value":6661},"Set an event to signaled state",{"type":10,"tag":187,"props":6663,"children":6665},{"id":6664},"synchronization-events-unsignaling-host",[],{"type":10,"tag":1432,"props":6667,"children":6669},{"name":6668,"type":4496},"vkResetEvent",[6670],{"type":10,"tag":18,"props":6671,"children":6672},{},[6673],{"type":16,"value":6674},"Reset an event to non-signaled state",{"type":10,"tag":18,"props":6676,"children":6677},{},[6678,6680,6683],{"type":16,"value":6679},"The state of an event ",{"type":10,"tag":45,"props":6681,"children":6682},{"type":47},[],{"type":16,"value":6684}," also be updated on the device by commands\ninserted in command buffers.",{"type":10,"tag":187,"props":6686,"children":6688},{"id":6687},"synchronization-events-signaling-device",[],{"type":10,"tag":1432,"props":6690,"children":6692},{"name":6691,"type":4496},"vkCmdSetEvent2",[6693],{"type":10,"tag":18,"props":6694,"children":6695},{},[6696],{"type":16,"value":6697},"Set an event object to signaled state",{"type":10,"tag":1432,"props":6699,"children":6701},{"name":6700,"type":4506},"VkDependencyInfo",[6702],{"type":10,"tag":18,"props":6703,"children":6704},{},[6705],{"type":16,"value":6706},"Structure specifying dependency information for a synchronization command",{"type":10,"tag":1432,"props":6708,"children":6710},{"name":6709,"type":4496},"vkCmdSetEvent",[6711],{"type":10,"tag":18,"props":6712,"children":6713},{},[6714],{"type":16,"value":6697},{"type":10,"tag":187,"props":6716,"children":6718},{"id":6717},"synchronization-events-unsignaling-device",[],{"type":10,"tag":1432,"props":6720,"children":6722},{"name":6721,"type":4496},"vkCmdResetEvent2",[6723],{"type":10,"tag":18,"props":6724,"children":6725},{},[6726],{"type":16,"value":6727},"Reset an event object to non-signaled state",{"type":10,"tag":1432,"props":6729,"children":6731},{"name":6730,"type":4496},"vkCmdResetEvent",[6732],{"type":10,"tag":18,"props":6733,"children":6734},{},[6735],{"type":16,"value":6727},{"type":10,"tag":1432,"props":6737,"children":6739},{"name":6738,"type":4496},"vkCmdWaitEvents2",[6740],{"type":10,"tag":18,"props":6741,"children":6742},{},[6743],{"type":16,"value":6744},"Wait for one or more events",{"type":10,"tag":1432,"props":6746,"children":6748},{"name":6747,"type":4496},"vkCmdWaitEvents",[6749],{"type":10,"tag":18,"props":6750,"children":6751},{},[6752],{"type":16,"value":6753},"Wait for one or more events and insert a set of memory",{"type":10,"tag":146,"props":6755,"children":6757},{"id":6756},"synchronization-pipeline-barriers",[6758],{"type":16,"value":110},{"type":10,"tag":1432,"props":6760,"children":6762},{"name":6761,"type":4496},"vkCmdPipelineBarrier2",[6763],{"type":10,"tag":18,"props":6764,"children":6765},{},[6766],{"type":16,"value":6767},"Insert a memory dependency",{"type":10,"tag":1432,"props":6769,"children":6771},{"name":6770,"type":4496},"vkCmdPipelineBarrier",[6772],{"type":10,"tag":18,"props":6773,"children":6774},{},[6775],{"type":16,"value":6767},{"type":10,"tag":1432,"props":6777,"children":6779},{"name":6778,"type":1435},"VkDependencyFlagBits",[6780],{"type":10,"tag":18,"props":6781,"children":6782},{},[6783],{"type":16,"value":6784},"Bitmask specifying how execution and memory dependencies are formed",{"type":10,"tag":1432,"props":6786,"children":6788},{"name":6787,"type":1445},"VkDependencyFlags",[6789],{"type":10,"tag":18,"props":6790,"children":6791},{},[6792],{"type":16,"value":6793},"Bitmask of VkDependencyFlagBits",{"type":10,"tag":146,"props":6795,"children":6797},{"id":6796},"synchronization-memory-barriers",[6798],{"type":16,"value":6799},"Memory Barriers",{"type":10,"tag":18,"props":6801,"children":6802},{},[6803,6808,6810,6816,6817,6823,6825,6830,6832,6838,6840,6844],{"type":10,"tag":158,"props":6804,"children":6805},{},[6806],{"type":16,"value":6807},"Memory barriers",{"type":16,"value":6809}," are used to explicitly control access to buffer and image\nsubresource ranges.\nMemory barriers are used to ",{"type":10,"tag":33,"props":6811,"children":6813},{"href":6812},"/chapters/synchronization#synchronization-queue-transfers",[6814],{"type":16,"value":6815},"transfer\nownership between queue families",{"type":16,"value":3798},{"type":10,"tag":33,"props":6818,"children":6820},{"href":6819},"/chapters/synchronization#synchronization-image-layout-transitions",[6821],{"type":16,"value":6822},"change image layouts",{"type":16,"value":6824},", and\ndefine ",{"type":10,"tag":33,"props":6826,"children":6827},{"href":1069},[6828],{"type":16,"value":6829},"availability\nand visibility operations",{"type":16,"value":6831},".\nThey explicitly define the ",{"type":10,"tag":33,"props":6833,"children":6835},{"href":6834},"/chapters/synchronization#synchronization-access-types",[6836],{"type":16,"value":6837},"access types",{"type":16,"value":6839},"\nand buffer and image subresource ranges that are included in the\n",{"type":10,"tag":33,"props":6841,"children":6842},{"href":1495},[6843],{"type":16,"value":713},{"type":16,"value":6845}," of a memory\ndependency that is created by a synchronization command that includes them.",{"type":10,"tag":1017,"props":6847,"children":6849},{"id":6848},"synchronization-global-memory-barriers",[6850],{"type":16,"value":6851},"Global Memory Barriers",{"type":10,"tag":18,"props":6853,"children":6854},{},[6855],{"type":16,"value":6856},"Global memory barriers apply to memory accesses involving all memory objects\nthat exist at the time of its execution.",{"type":10,"tag":1432,"props":6858,"children":6860},{"name":6859,"type":4506},"VkMemoryBarrier2",[6861],{"type":10,"tag":18,"props":6862,"children":6863},{},[6864],{"type":16,"value":6865},"Structure specifying a global memory barrier",{"type":10,"tag":1432,"props":6867,"children":6869},{"name":6868,"type":4506},"VkMemoryBarrier",[6870],{"type":10,"tag":18,"props":6871,"children":6872},{},[6873],{"type":16,"value":6865},{"type":10,"tag":1017,"props":6875,"children":6877},{"id":6876},"synchronization-buffer-memory-barriers",[6878],{"type":16,"value":6879},"Buffer Memory Barriers",{"type":10,"tag":18,"props":6881,"children":6882},{},[6883,6885,6890,6892,6895,6897,6902],{"type":16,"value":6884},"Buffer memory barriers only apply to memory accesses involving a specific\nbuffer range.\nThat is, a memory dependency formed from a buffer memory barrier is\n",{"type":10,"tag":33,"props":6886,"children":6887},{"href":1495},[6888],{"type":16,"value":6889},"scoped",{"type":16,"value":6891}," to access via the\nspecified buffer range.\nBuffer memory barriers ",{"type":10,"tag":45,"props":6893,"children":6894},{"type":47},[],{"type":16,"value":6896}," also be used to define a\n",{"type":10,"tag":33,"props":6898,"children":6899},{"href":6812},[6900],{"type":16,"value":6901},"queue family ownership transfer",{"type":16,"value":6903}," for the\nspecified buffer range.",{"type":10,"tag":1432,"props":6905,"children":6907},{"name":6906,"type":4506},"VkBufferMemoryBarrier2",[6908],{"type":10,"tag":18,"props":6909,"children":6910},{},[6911],{"type":16,"value":6912},"Structure specifying a buffer memory barrier",{"type":10,"tag":1432,"props":6914,"children":6916},{"name":6915,"type":4506},"VkBufferMemoryBarrier",[6917],{"type":10,"tag":18,"props":6918,"children":6919},{},[6920],{"type":16,"value":6912},{"type":10,"tag":1432,"props":6922,"children":6925},{"name":6923,"type":6924},"VK\\_WHOLE\\_SIZE","consts",[6926],{"type":10,"tag":18,"props":6927,"children":6928},{},[6929],{"type":16,"value":6930},"Sentinel value to use entire remaining array length",{"type":10,"tag":1017,"props":6932,"children":6934},{"id":6933},"synchronization-image-memory-barriers",[6935],{"type":16,"value":6936},"Image Memory Barriers",{"type":10,"tag":18,"props":6938,"children":6939},{},[6940,6942,6946,6948,6951,6953,6958,6960,6964],{"type":16,"value":6941},"Image memory barriers only apply to memory accesses involving a specific\nimage subresource range.\nThat is, a memory dependency formed from an image memory barrier is\n",{"type":10,"tag":33,"props":6943,"children":6944},{"href":1495},[6945],{"type":16,"value":6889},{"type":16,"value":6947}," to access via the\nspecified image subresource range.\nImage memory barriers ",{"type":10,"tag":45,"props":6949,"children":6950},{"type":47},[],{"type":16,"value":6952}," also be used to define\n",{"type":10,"tag":33,"props":6954,"children":6955},{"href":6819},[6956],{"type":16,"value":6957},"image layout transitions",{"type":16,"value":6959}," or a\n",{"type":10,"tag":33,"props":6961,"children":6962},{"href":6812},[6963],{"type":16,"value":6901},{"type":16,"value":6965}," for the\nspecified image subresource range.",{"type":10,"tag":1432,"props":6967,"children":6968},{"name":1278,"type":4506},[6969],{"type":10,"tag":18,"props":6970,"children":6971},{},[6972],{"type":16,"value":6973},"Structure specifying an image memory barrier",{"type":10,"tag":1432,"props":6975,"children":6976},{"name":1286,"type":4506},[6977],{"type":10,"tag":18,"props":6978,"children":6979},{},[6980],{"type":16,"value":6981},"Structure specifying the parameters of an image memory barrier",{"type":10,"tag":18,"props":6983,"children":6984},{},[6985],{"type":16,"value":6986},"To facilitate usage of images whose memory is initialized on the host,\nVulkan allows image layout transitions to be performed by the host as well,\nalbeit supporting limited layouts.",{"type":10,"tag":1432,"props":6988,"children":6990},{"name":6989,"type":4496},"vkTransitionImageLayoutEXT",[6991],{"type":10,"tag":18,"props":6992,"children":6993},{},[6994],{"type":16,"value":6995},"Perform an image layout transition on the host",{"type":10,"tag":1432,"props":6997,"children":6999},{"name":6998,"type":4506},"VkHostImageLayoutTransitionInfoEXT",[7000],{"type":10,"tag":18,"props":7001,"children":7002},{},[7003],{"type":16,"value":7004},"Structure specifying the parameters of a host-side image layout transition",{"type":10,"tag":1017,"props":7006,"children":7008},{"id":7007},"synchronization-queue-transfers",[7009],{"type":16,"value":7010},"Queue Family Ownership Transfer",{"type":10,"tag":18,"props":7012,"children":7013},{},[7014,7016,7022,7023,7029,7030,7033],{"type":16,"value":7015},"Resources created with a ",{"type":10,"tag":33,"props":7017,"children":7019},{"href":7018},"/man/VkSharingMode",[7020],{"type":16,"value":7021},"VkSharingMode",{"type":16,"value":5459},{"type":10,"tag":1085,"props":7024,"children":7026},{"className":7025},[],[7027],{"type":16,"value":7028},"VK_SHARING_MODE_EXCLUSIVE",{"type":16,"value":229},{"type":10,"tag":45,"props":7031,"children":7032},{"type":226},[],{"type":16,"value":7034}," have their ownership explicitly\ntransferred from one queue family to another in order to access their\ncontent in a well-defined manner on a queue in a different queue family.",{"type":10,"tag":1432,"props":7036,"children":7038},{"name":7037,"type":6924},"VK\\_QUEUE\\_FAMILY\\_IGNORED",[7039],{"type":10,"tag":18,"props":7040,"children":7041},{},[7042],{"type":16,"value":7043},"Ignored queue family index sentinel",{"type":10,"tag":18,"props":7045,"children":7046},{},[7047,7049,7052,7054,7058],{"type":16,"value":7048},"Resources shared with external APIs or instances using external memory ",{"type":10,"tag":45,"props":7050,"children":7051},{"type":226},[],{"type":16,"value":7053},"\nalso explicitly manage ownership transfers between local and external queues\n(or equivalent constructs in external APIs) regardless of the\n",{"type":10,"tag":33,"props":7055,"children":7056},{"href":7018},[7057],{"type":16,"value":7021},{"type":16,"value":7059}," specified when creating them.",{"type":10,"tag":1432,"props":7061,"children":7063},{"name":7062,"type":6924},"VK\\_QUEUE\\_FAMILY\\_EXTERNAL",[7064],{"type":10,"tag":18,"props":7065,"children":7066},{},[7067],{"type":16,"value":7068},"External queue family index sentinel",{"type":10,"tag":1432,"props":7070,"children":7072},{"name":7071,"type":6924},"VK\\_QUEUE\\_FAMILY\\_FOREIGN\\_EXT",[7073],{"type":10,"tag":18,"props":7074,"children":7075},{},[7076],{"type":16,"value":7077},"Foreign queue family index sentinel",{"type":10,"tag":18,"props":7079,"children":7080},{},[7081],{"type":16,"value":7082},"If memory dependencies are correctly expressed between uses of such a\nresource between two queues in different families, but no ownership transfer\nis defined, the contents of that resource are undefined: for any read\naccesses performed by the second queue family.",{"type":10,"tag":1008,"props":7084,"children":7085},{},[7086],{"type":10,"tag":18,"props":7087,"children":7088},{},[7089,7091,7094],{"type":16,"value":7090},"If an application does not need the contents of a resource to remain valid\nwhen transferring from one queue family to another, then the ownership\ntransfer ",{"type":10,"tag":45,"props":7092,"children":7093},{"type":1127},[],{"type":16,"value":7095}," be skipped.",{"type":10,"tag":1008,"props":7097,"children":7098},{},[7099],{"type":10,"tag":18,"props":7100,"children":7101},{},[7102,7104,7110,7112,7118],{"type":16,"value":7103},"Applications should expect transfers to/from\n",{"type":10,"tag":1085,"props":7105,"children":7107},{"className":7106},[],[7108],{"type":16,"value":7109},"VK_QUEUE_FAMILY_FOREIGN_EXT",{"type":16,"value":7111}," to be more expensive than transfers\nto/from ",{"type":10,"tag":1085,"props":7113,"children":7115},{"className":7114},[],[7116],{"type":16,"value":7117},"VK_QUEUE_FAMILY_EXTERNAL_KHR",{"type":16,"value":185},{"type":10,"tag":18,"props":7120,"children":7121},{},[7122],{"type":16,"value":7123},"A queue family ownership transfer consists of two distinct parts:",{"type":10,"tag":4115,"props":7125,"children":7126},{},[7127,7132],{"type":10,"tag":247,"props":7128,"children":7129},{},[7130],{"type":16,"value":7131},"Release exclusive ownership from the source queue family",{"type":10,"tag":247,"props":7133,"children":7134},{},[7135],{"type":16,"value":7136},"Acquire exclusive ownership for the destination queue family",{"type":10,"tag":18,"props":7138,"children":7139},{},[7140,7142,7145],{"type":16,"value":7141},"An application ",{"type":10,"tag":45,"props":7143,"children":7144},{"type":226},[],{"type":16,"value":7146}," ensure that these operations occur in the correct order\nby defining an execution dependency between them, e.g. using a semaphore.",{"type":10,"tag":18,"props":7148,"children":7149},{},[7150,7154,7156,7161,7163,7169,7171,7176,7178,7184,7186,7189,7191,7197,7199,7204,7206,7211,7213,7219,7220,7226],{"type":10,"tag":187,"props":7151,"children":7153},{"id":7152},"synchronization-queue-transfers-release",[],{"type":16,"value":7155}," A ",{"type":10,"tag":158,"props":7157,"children":7158},{},[7159],{"type":16,"value":7160},"release operation",{"type":16,"value":7162}," is used to\nrelease exclusive ownership of a range of a buffer or image subresource\nrange.\nA release operation is defined by executing a\n",{"type":10,"tag":33,"props":7164,"children":7166},{"href":7165},"/chapters/synchronization#synchronization-buffer-memory-barriers",[7167],{"type":16,"value":7168},"buffer memory barrier",{"type":16,"value":7170}," (for a\nbuffer range) or an ",{"type":10,"tag":33,"props":7172,"children":7173},{"href":1050},[7174],{"type":16,"value":7175},"image memory\nbarrier",{"type":16,"value":7177}," (for an image subresource range) using a pipeline barrier command,\non a queue from the source queue family.\nThe ",{"type":10,"tag":1085,"props":7179,"children":7181},{"className":7180},[],[7182],{"type":16,"value":7183},"srcQueueFamilyIndex",{"type":16,"value":7185}," parameter of the barrier ",{"type":10,"tag":45,"props":7187,"children":7188},{"type":226},[],{"type":16,"value":7190}," be set to the\nsource queue family index, and the ",{"type":10,"tag":1085,"props":7192,"children":7194},{"className":7193},[],[7195],{"type":16,"value":7196},"dstQueueFamilyIndex",{"type":16,"value":7198}," parameter to\nthe destination queue family index.\n",{"type":10,"tag":1085,"props":7200,"children":7202},{"className":7201},[],[7203],{"type":16,"value":5861},{"type":16,"value":7205}," is ignored for such a barrier, such that no visibility\noperation is executed - the value of this mask does not affect the validity\nof the barrier.\nThe release operation happens-after the availability operation.\n",{"type":10,"tag":1085,"props":7207,"children":7209},{"className":7208},[],[7210],{"type":16,"value":5846},{"type":16,"value":7212}," is also ignored for such a barrier as defined by\n",{"type":10,"tag":33,"props":7214,"children":7216},{"href":7215},"/man/VkBufferMemoryBarrier#buffer-memory-barrier-ownership-transfer",[7217],{"type":16,"value":7218},"buffer memory ownership\ntransfer",{"type":16,"value":264},{"type":10,"tag":33,"props":7221,"children":7223},{"href":7222},"/man/VkImageMemoryBarrier#image-memory-barrier-ownership-transfer",[7224],{"type":16,"value":7225},"image memory\nownership transfer",{"type":16,"value":185},{"type":10,"tag":18,"props":7228,"children":7229},{},[7230,7234,7236,7241,7243,7247,7248,7252,7254,7257,7259,7264,7265,7268,7269,7274,7275,7280,7282,7287,7288,7292,7293,7297,7299,7302,7304,7309],{"type":10,"tag":187,"props":7231,"children":7233},{"id":7232},"synchronization-queue-transfers-acquire",[],{"type":16,"value":7235}," An ",{"type":10,"tag":158,"props":7237,"children":7238},{},[7239],{"type":16,"value":7240},"acquire operation",{"type":16,"value":7242}," is used\nto acquire exclusive ownership of a range of a buffer or image subresource\nrange.\nAn acquire operation is defined by executing a\n",{"type":10,"tag":33,"props":7244,"children":7245},{"href":7165},[7246],{"type":16,"value":7168},{"type":16,"value":7170},{"type":10,"tag":33,"props":7249,"children":7250},{"href":1050},[7251],{"type":16,"value":7175},{"type":16,"value":7253}," (for an image subresource range) using a pipeline barrier command,\non a queue from the destination queue family.\nThe buffer range or image subresource range specified in an acquire\noperation ",{"type":10,"tag":45,"props":7255,"children":7256},{"type":226},[],{"type":16,"value":7258}," match exactly that of a previous release operation.\nThe ",{"type":10,"tag":1085,"props":7260,"children":7262},{"className":7261},[],[7263],{"type":16,"value":7183},{"type":16,"value":7185},{"type":10,"tag":45,"props":7266,"children":7267},{"type":226},[],{"type":16,"value":7190},{"type":10,"tag":1085,"props":7270,"children":7272},{"className":7271},[],[7273],{"type":16,"value":7196},{"type":16,"value":7198},{"type":10,"tag":1085,"props":7276,"children":7278},{"className":7277},[],[7279],{"type":16,"value":5835},{"type":16,"value":7281}," is ignored for such a barrier, such that no availability\noperation is executed - the value of this mask does not affect the validity\nof the barrier.\nThe acquire operation happens-before the visibility operation.\n",{"type":10,"tag":1085,"props":7283,"children":7285},{"className":7284},[],[7286],{"type":16,"value":5819},{"type":16,"value":7212},{"type":10,"tag":33,"props":7289,"children":7290},{"href":7215},[7291],{"type":16,"value":7218},{"type":16,"value":264},{"type":10,"tag":33,"props":7294,"children":7295},{"href":7222},[7296],{"type":16,"value":7225},{"type":16,"value":7298},".\nAs the first synchronization scope for an acquire operation is empty there\nis no happens-before dependency.\nSuch a dependency ",{"type":10,"tag":45,"props":7300,"children":7301},{"type":47},[],{"type":16,"value":7303}," be introduced by using\n",{"type":10,"tag":1085,"props":7305,"children":7307},{"className":7306},[],[7308],{"type":16,"value":5761},{"type":16,"value":185},{"type":10,"tag":1008,"props":7311,"children":7312},{},[7313],{"type":10,"tag":18,"props":7314,"children":7315},{},[7316,7318,7321],{"type":16,"value":7317},"Whilst it is not invalid to provide destination or source access masks for\nmemory barriers used for release or acquire operations, respectively, they\nhave no practical effect.\nAccess after a release operation has undefined: results, and so visibility\nfor those accesses has no practical effect.\nSimilarly, write access before an acquire operation will produce undefined:\nresults for future access, so availability of those writes has no practical\nuse.\nIn an earlier version of the specification, these were required to match on\nboth sides - but this was subsequently relaxed.\nThese masks ",{"type":10,"tag":45,"props":7319,"children":7320},{"type":1127},[],{"type":16,"value":7322}," be set to 0.",{"type":10,"tag":1008,"props":7324,"children":7325},{},[7326],{"type":10,"tag":18,"props":7327,"children":7328},{},[7329,7331,7336,7338,7343,7345,7349,7351,7356,7358,7362,7363,7368,7370,7375,7377,7382],{"type":16,"value":7330},"Since a release and acquire operation does not synchronize with second and\nfirst scopes respectively, the ",{"type":10,"tag":1085,"props":7332,"children":7334},{"className":7333},[],[7335],{"type":16,"value":5761},{"type":16,"value":7337},"\nstage must be used to wait for a release operation to complete.\nTypically, a release and acquire pair is performed by a ",{"type":10,"tag":33,"props":7339,"children":7341},{"href":7340},"/man/VkSemaphore",[7342],{"type":16,"value":5282},{"type":16,"value":7344},"\nsignal and wait in their respective queues.\nSignaling a semaphore with ",{"type":10,"tag":33,"props":7346,"children":7347},{"href":4125},[7348],{"type":16,"value":4128},{"type":16,"value":7350}," waits for\n",{"type":10,"tag":1085,"props":7352,"children":7354},{"className":7353},[],[7355],{"type":16,"value":5761},{"type":16,"value":7357},".\nWith ",{"type":10,"tag":33,"props":7359,"children":7360},{"href":4132},[7361],{"type":16,"value":4135},{"type":16,"value":397},{"type":10,"tag":1085,"props":7364,"children":7366},{"className":7365},[],[7367],{"type":16,"value":5510},{"type":16,"value":7369}," for the signal semaphore must be\n",{"type":10,"tag":1085,"props":7371,"children":7373},{"className":7372},[],[7374],{"type":16,"value":5761},{"type":16,"value":7376},".\nSimilarly, for the acquire operation, waiting for a semaphore must use\n",{"type":10,"tag":1085,"props":7378,"children":7380},{"className":7379},[],[7381],{"type":16,"value":5761},{"type":16,"value":7383}," to make sure the acquire operation\nis synchronized.",{"type":10,"tag":18,"props":7385,"children":7386},{},[7387,7389,7394,7396,7401,7402,7407,7409,7413,7415,7418,7420,7425,7426,7431,7433,7437,7439,7444,7446,7450],{"type":16,"value":7388},"If the transfer is via an image memory barrier, and an\n",{"type":10,"tag":33,"props":7390,"children":7391},{"href":6819},[7392],{"type":16,"value":7393},"image layout transition",{"type":16,"value":7395}," is\ndesired, then the values of ",{"type":10,"tag":1085,"props":7397,"children":7399},{"className":7398},[],[7400],{"type":16,"value":1321},{"type":16,"value":264},{"type":10,"tag":1085,"props":7403,"children":7405},{"className":7404},[],[7406],{"type":16,"value":5901},{"type":16,"value":7408}," in the\n",{"type":10,"tag":158,"props":7410,"children":7411},{},[7412],{"type":16,"value":7160},{"type":16,"value":7414},"'s memory barrier ",{"type":10,"tag":45,"props":7416,"children":7417},{"type":226},[],{"type":16,"value":7419}," be equal to values of\n",{"type":10,"tag":1085,"props":7421,"children":7423},{"className":7422},[],[7424],{"type":16,"value":1321},{"type":16,"value":264},{"type":10,"tag":1085,"props":7427,"children":7429},{"className":7428},[],[7430],{"type":16,"value":5901},{"type":16,"value":7432}," in the ",{"type":10,"tag":158,"props":7434,"children":7435},{},[7436],{"type":16,"value":7240},{"type":16,"value":7438},"'s memory\nbarrier.\nAlthough the image layout transition is submitted twice, it will only be\nexecuted once.\nA layout transition specified in this way happens-after the ",{"type":10,"tag":158,"props":7440,"children":7441},{},[7442],{"type":16,"value":7443},"release\noperation",{"type":16,"value":7445}," and happens-before the ",{"type":10,"tag":158,"props":7447,"children":7448},{},[7449],{"type":16,"value":7240},{"type":16,"value":185},{"type":10,"tag":18,"props":7452,"children":7453},{},[7454,7456,7461,7462,7467,7469,7475],{"type":16,"value":7455},"If the values of ",{"type":10,"tag":1085,"props":7457,"children":7459},{"className":7458},[],[7460],{"type":16,"value":7183},{"type":16,"value":264},{"type":10,"tag":1085,"props":7463,"children":7465},{"className":7464},[],[7466],{"type":16,"value":7196},{"type":16,"value":7468}," are\nequal, no ownership transfer is performed, and the barrier operates as if\nthey were both set to ",{"type":10,"tag":1085,"props":7470,"children":7472},{"className":7471},[],[7473],{"type":16,"value":7474},"VK_QUEUE_FAMILY_IGNORED",{"type":16,"value":185},{"type":10,"tag":18,"props":7477,"children":7478},{},[7479,7481,7484,7486,7489,7491,7495],{"type":16,"value":7480},"Queue family ownership transfers ",{"type":10,"tag":45,"props":7482,"children":7483},{"type":1058},[],{"type":16,"value":7485}," perform read and write accesses on all\nmemory bound to the image subresource or buffer range, so applications ",{"type":10,"tag":45,"props":7487,"children":7488},{"type":226},[],{"type":16,"value":7490},"\nensure that all memory writes have been made\n",{"type":10,"tag":33,"props":7492,"children":7493},{"href":1069},[7494],{"type":16,"value":604},{"type":16,"value":7496}," before a\nqueue family ownership transfer is executed.\nAvailable memory is automatically made visible to queue family release and\nacquire operations, and writes performed by those operations are\nautomatically made available.",{"type":10,"tag":18,"props":7498,"children":7499},{},[7500,7502,7507],{"type":16,"value":7501},"Once a queue family has acquired ownership of a buffer range or image\nsubresource range of a ",{"type":10,"tag":1085,"props":7503,"children":7505},{"className":7504},[],[7506],{"type":16,"value":7028},{"type":16,"value":7508}," resource, its\ncontents are undefined: to other queue families unless ownership is\ntransferred.\nThe contents of any portion of another resource which aliases memory that is\nbound to the transferred buffer or image subresource range are undefined:\nafter a release or acquire operation.",{"type":10,"tag":1008,"props":7510,"children":7511},{},[7512],{"type":10,"tag":18,"props":7513,"children":7514},{},[7515,7517,7521,7522,7526,7528,7533,7535,7539,7541,7544,7546,7551],{"type":16,"value":7516},"Because ",{"type":10,"tag":33,"props":7518,"children":7519},{"href":77},[7520],{"type":16,"value":73},{"type":16,"value":229},{"type":10,"tag":45,"props":7523,"children":7525},{"type":7524},"cannot",[],{"type":16,"value":7527}," be used directly for\ninter-queue synchronization, and because ",{"type":10,"tag":33,"props":7529,"children":7531},{"href":7530},"/man/vkCmdSetEvent",[7532],{"type":16,"value":6709},{"type":16,"value":7534}," does not have\nthe queue family index or memory barrier parameters needed by a ",{"type":10,"tag":158,"props":7536,"children":7537},{},[7538],{"type":16,"value":7443},{"type":16,"value":7540},", the release and acquire operations of a queue family ownership\ntransfer ",{"type":10,"tag":45,"props":7542,"children":7543},{"type":47},[],{"type":16,"value":7545}," only be performed using ",{"type":10,"tag":33,"props":7547,"children":7549},{"href":7548},"/man/vkCmdPipelineBarrier",[7550],{"type":16,"value":6770},{"type":16,"value":185},{"type":10,"tag":1432,"props":7553,"children":7555},{"name":7554,"type":4506},"VkExternalMemoryAcquireUnmodifiedEXT",[7556],{"type":10,"tag":18,"props":7557,"children":7558},{},[7559],{"type":16,"value":7560},"Structure specifying that external memory has remained unmodified since releasing ownership",{"type":10,"tag":146,"props":7562,"children":7564},{"id":7563},"synchronization-wait-idle",[7565],{"type":16,"value":7566},"Wait Idle Operations",{"type":10,"tag":1432,"props":7568,"children":7570},{"name":7569,"type":4496},"vkQueueWaitIdle",[7571],{"type":10,"tag":18,"props":7572,"children":7573},{},[7574],{"type":16,"value":7575},"Wait for a queue to become idle",{"type":10,"tag":1432,"props":7577,"children":7579},{"name":7578,"type":4496},"vkDeviceWaitIdle",[7580],{"type":10,"tag":18,"props":7581,"children":7582},{},[7583],{"type":16,"value":7584},"Wait for a device to become idle",{"type":10,"tag":146,"props":7586,"children":7588},{"id":7587},"synchronization-submission-host-writes",[7589],{"type":16,"value":7590},"Host Write Ordering Guarantees",{"type":10,"tag":18,"props":7592,"children":7593},{},[7594,7596,7601],{"type":16,"value":7595},"When batches of command buffers are submitted to a queue via a\n",{"type":10,"tag":33,"props":7597,"children":7598},{"href":3592},[7599],{"type":16,"value":7600},"queue submission command",{"type":16,"value":7602},", it defines a memory\ndependency with prior host operations, and execution of command buffers\nsubmitted to the queue.",{"type":10,"tag":18,"props":7604,"children":7605},{},[7606,7607,7611,7613,7617],{"type":16,"value":4643},{"type":10,"tag":33,"props":7608,"children":7609},{"href":1372},[7610],{"type":16,"value":1483},{"type":16,"value":7612},"\nincludes execution of ",{"type":10,"tag":33,"props":7614,"children":7615},{"href":4125},[7616],{"type":16,"value":4128},{"type":16,"value":7618}," on the host and anything that\nhappened-before it, as defined by the host memory model.",{"type":10,"tag":1008,"props":7620,"children":7621},{},[7622],{"type":10,"tag":18,"props":7623,"children":7624},{},[7625,7627,7633],{"type":16,"value":7626},"Some systems allow writes that do not directly integrate with the host\nmemory model; these have to be synchronized by the application manually.\nOne example of this is non-temporal store instructions on x86; to ensure\nthese happen-before submission, applications should call ",{"type":10,"tag":1085,"props":7628,"children":7630},{"className":7629},[],[7631],{"type":16,"value":7632},"_mm_sfence()",{"type":16,"value":185},{"type":10,"tag":18,"props":7635,"children":7636},{},[7637,7638,7642,7644,7648,7650,7654],{"type":16,"value":4701},{"type":10,"tag":33,"props":7639,"children":7640},{"href":1372},[7641],{"type":16,"value":1483},{"type":16,"value":7643},"\nincludes all commands submitted in the same ",{"type":10,"tag":33,"props":7645,"children":7646},{"href":3592},[7647],{"type":16,"value":4629},{"type":16,"value":7649},", and all commands that occur later in\n",{"type":10,"tag":33,"props":7651,"children":7652},{"href":1211},[7653],{"type":16,"value":1214},{"type":16,"value":185},{"type":10,"tag":18,"props":7656,"children":7657},{},[7658,7659,7663],{"type":16,"value":4643},{"type":10,"tag":33,"props":7660,"children":7661},{"href":1495},[7662],{"type":16,"value":1498},{"type":16,"value":7664},"\nincludes all host writes to mappable device memory that are available to the\nhost memory domain.",{"type":10,"tag":18,"props":7666,"children":7667},{},[7668,7669,7673],{"type":16,"value":4701},{"type":10,"tag":33,"props":7670,"children":7671},{"href":1495},[7672],{"type":16,"value":1498},{"type":16,"value":4717},{"type":10,"tag":146,"props":7675,"children":7677},{"id":7676},"synchronization-device-group",[7678],{"type":16,"value":7679},"Synchronization and Multiple Physical Devices",{"type":10,"tag":18,"props":7681,"children":7682},{},[7683],{"type":16,"value":7684},"If a logical device includes more than one physical device, then fences,\nsemaphores, and events all still have a single instance of the signaled\nstate.",{"type":10,"tag":18,"props":7686,"children":7687},{},[7688],{"type":16,"value":7689},"A fence becomes signaled when all physical devices complete the necessary\nqueue operations.",{"type":10,"tag":18,"props":7691,"children":7692},{},[7693,7695,7701,7702,7708],{"type":16,"value":7694},"Semaphore wait and signal operations all include a device index that is the\nsole physical device that performs the operation.\nThese indices are provided in the ",{"type":10,"tag":33,"props":7696,"children":7698},{"href":7697},"/man/VkDeviceGroupSubmitInfo",[7699],{"type":16,"value":7700},"VkDeviceGroupSubmitInfo",{"type":16,"value":1555},{"type":10,"tag":33,"props":7703,"children":7705},{"href":7704},"/man/VkDeviceGroupBindSparseInfo",[7706],{"type":16,"value":7707},"VkDeviceGroupBindSparseInfo",{"type":16,"value":7709},"\nstructures.\nSemaphores are not exclusively owned by any physical device.\nFor example, a semaphore can be signaled by one physical device and then\nwaited on by a different physical device.",{"type":10,"tag":18,"props":7711,"children":7712},{},[7713,7715,7718],{"type":16,"value":7714},"An event ",{"type":10,"tag":45,"props":7716,"children":7717},{"type":47},[],{"type":16,"value":7719}," only be waited on by the same physical device that signaled it\n(or the host).",{"type":10,"tag":146,"props":7721,"children":7723},{"id":7722},"calibrated-timestamps",[7724],{"type":16,"value":7725},"Calibrated Timestamps",{"type":10,"tag":1432,"props":7727,"children":7729},{"name":7728,"type":4496},"vkGetCalibratedTimestampsKHR",[7730],{"type":10,"tag":18,"props":7731,"children":7732},{},[7733],{"type":16,"value":7734},"Query calibrated timestamps",{"type":10,"tag":1432,"props":7736,"children":7738},{"name":7737,"type":4506},"VkCalibratedTimestampInfoKHR",[7739],{"type":10,"tag":18,"props":7740,"children":7741},{},[7742],{"type":16,"value":7743},"Structure specifying the input parameters of a calibrated timestamp query",{"type":10,"tag":1432,"props":7745,"children":7747},{"name":7746,"type":1435},"VkTimeDomainKHR",[7748],{"type":10,"tag":18,"props":7749,"children":7750},{},[7751],{"type":16,"value":7752},"Supported time domains",{"title":7754,"searchDepth":7755,"depth":7755,"links":7756},"",2,[7757,7766,7767,7771,7778,7779,7780,7786,7787,7788,7789],{"id":148,"depth":7755,"text":151,"children":7758},[7759,7761,7762,7763,7764,7765],{"id":1019,"depth":7760,"text":1022},3,{"id":1332,"depth":7760,"text":1335},{"id":3419,"depth":7760,"text":3422},{"id":3613,"depth":7760,"text":3616},{"id":3935,"depth":7760,"text":3938},{"id":4012,"depth":7760,"text":4015},{"id":4079,"depth":7755,"text":4082},{"id":4480,"depth":7755,"text":38,"children":7768},[7769,7770],{"id":4821,"depth":7760,"text":4824},{"id":4897,"depth":7760,"text":4900},{"id":5277,"depth":7755,"text":60,"children":7772},[7773,7774,7775,7776,7777],{"id":5426,"depth":7760,"text":5429},{"id":5579,"depth":7760,"text":5582},{"id":5954,"depth":7760,"text":5957},{"id":6025,"depth":7760,"text":6028},{"id":6146,"depth":7760,"text":6149},{"id":6583,"depth":7755,"text":80},{"id":6756,"depth":7755,"text":110},{"id":6796,"depth":7755,"text":6799,"children":7781},[7782,7783,7784,7785],{"id":6848,"depth":7760,"text":6851},{"id":6876,"depth":7760,"text":6879},{"id":6933,"depth":7760,"text":6936},{"id":7007,"depth":7760,"text":7010},{"id":7563,"depth":7755,"text":7566},{"id":7587,"depth":7755,"text":7590},{"id":7676,"depth":7755,"text":7679},{"id":7722,"depth":7755,"text":7725},"markdown","chapters-synchronization",[7793,7798,7802,7805,7808,7812,7816,7818,7822,7826,7830,7834,7838,7842,7846,7850,7854,7858,7862,7866,7870,7874,7878,7882,7886,7890,7894,7898,7902,7906,7910,7914,7918,7922,7926,7930,7934,7938,7942,7946,7950,7954,7958,7962,7966,7970,7974,7978,7982,7986,7990,7994,7996,7999,8002,8005,8008,8011,8014],{"index":7794,"title":7795,"id":7796,"appendix":7797},0,"Preamble","preamble",false,{"index":7799,"title":7800,"id":7801,"appendix":7797},1,"Introduction","introduction",{"index":7755,"title":7803,"id":7804,"appendix":7797},"Fundamentals","fundamentals",{"index":7760,"title":7806,"id":7807,"appendix":7797},"Initialization","initialization",{"index":7809,"title":7810,"id":7811,"appendix":7797},4,"Devices and Queues","devsandqueues",{"index":7813,"title":7814,"id":7815,"appendix":7797},5,"Command Buffers","commandbuffers",{"index":7817,"title":4,"id":13,"appendix":7797},6,{"index":7819,"title":7820,"id":7821,"appendix":7797},7,"Render Pass","renderpass",{"index":7823,"title":7824,"id":7825,"appendix":7797},8,"Shaders","shaders",{"index":7827,"title":7828,"id":7829,"appendix":7797},9,"Pipelines","pipelines",{"index":7831,"title":7832,"id":7833,"appendix":7797},10,"Memory Allocation","memory",{"index":7835,"title":7836,"id":7837,"appendix":7797},11,"Resource Creation","resources",{"index":7839,"title":7840,"id":7841,"appendix":7797},12,"Samplers","samplers",{"index":7843,"title":7844,"id":7845,"appendix":7797},13,"Resource Descriptors","descriptorsets",{"index":7847,"title":7848,"id":7849,"appendix":7797},14,"Shader Interfaces","interfaces",{"index":7851,"title":7852,"id":7853,"appendix":7797},15,"Image Operations","textures",{"index":7855,"title":7856,"id":7857,"appendix":7797},16,"Fragment Density Map Operations","fragmentdensitymapops",{"index":7859,"title":7860,"id":7861,"appendix":7797},17,"Queries","queries",{"index":7863,"title":7864,"id":7865,"appendix":7797},18,"Clear Commands","clears",{"index":7867,"title":7868,"id":7869,"appendix":7797},19,"Copy Commands","copies",{"index":7871,"title":7872,"id":7873,"appendix":7797},20,"Drawing Commands","drawing",{"index":7875,"title":7876,"id":7877,"appendix":7797},21,"Fixed-Function Vertex Processing","fxvertex",{"index":7879,"title":7880,"id":7881,"appendix":7797},22,"Tessellation","tessellation",{"index":7883,"title":7884,"id":7885,"appendix":7797},23,"Geometry Shading","geometry",{"index":7887,"title":7888,"id":7889,"appendix":7797},24,"Mesh Shading","mesh",{"index":7891,"title":7892,"id":7893,"appendix":7797},25,"Cluster Culling Shading","cluster-culling",{"index":7895,"title":7896,"id":7897,"appendix":7797},26,"Fixed-Function Vertex Post-Processing","vertexpostproc",{"index":7899,"title":7900,"id":7901,"appendix":7797},27,"Rasterization","primsrast",{"index":7903,"title":7904,"id":7905,"appendix":7797},28,"Fragment Operations","fragops",{"index":7907,"title":7908,"id":7909,"appendix":7797},29,"The Framebuffer","framebuffer",{"index":7911,"title":7912,"id":7913,"appendix":7797},30,"Dispatching Commands","dispatch",{"index":7915,"title":7916,"id":7917,"appendix":7797},31,"Device-Generated Commands","device-generated-commands",{"index":7919,"title":7920,"id":7921,"appendix":7797},32,"Sparse Resources","sparsememory",{"index":7923,"title":7924,"id":7925,"appendix":7797},33,"Window System Integration (WSI)","wsi",{"index":7927,"title":7928,"id":7929,"appendix":7797},34,"Deferred Host Operations","deferred-host-operations",{"index":7931,"title":7932,"id":7933,"appendix":7797},35,"Private Data","private-data",{"index":7935,"title":7936,"id":7937,"appendix":7797},36,"Acceleration Structures","acceleration-structure",{"index":7939,"title":7940,"id":7941,"appendix":7797},37,"Micromap","micromap",{"index":7943,"title":7944,"id":7945,"appendix":7797},38,"Ray Traversal","ray-traversal",{"index":7947,"title":7948,"id":7949,"appendix":7797},39,"Ray Tracing","ray-tracing",{"index":7951,"title":7952,"id":7953,"appendix":7797},40,"Memory Decompression","memory-decompression",{"index":7955,"title":7956,"id":7957,"appendix":7797},41,"Video Coding","video-coding",{"index":7959,"title":7960,"id":7961,"appendix":7797},42,"Optical Flow","opticalflow",{"index":7963,"title":7964,"id":7965,"appendix":7797},43,"Execution Graphs","executiongraphs",{"index":7967,"title":7968,"id":7969,"appendix":7797},44,"Extending Vulkan","extendingvulkan",{"index":7971,"title":7972,"id":7973,"appendix":7797},45,"Features","features",{"index":7975,"title":7976,"id":7977,"appendix":7797},46,"Limits","limits",{"index":7979,"title":7980,"id":7981,"appendix":7797},47,"Formats","formats",{"index":7983,"title":7984,"id":7985,"appendix":7797},48,"Additional Capabilities","capabilities",{"index":7987,"title":7988,"id":7989,"appendix":7797},49,"Debugging","debugging",{"index":7794,"title":7991,"id":7992,"appendix":7993},"Vulkan Environment for SPIR-V","spirvenv",true,{"index":7799,"title":646,"id":7995,"appendix":7993},"memory-model",{"index":7755,"title":7997,"id":7998,"appendix":7993},"Compressed Image Formats","compressed_image_formats",{"index":7760,"title":8000,"id":8001,"appendix":7993},"Core Revisions (Informative)","versions",{"index":7809,"title":8003,"id":8004,"appendix":7993},"Layers & Extensions (Informative)","extensions",{"index":7813,"title":8006,"id":8007,"appendix":7993},"API Boilerplate","boilerplate",{"index":7817,"title":8009,"id":8010,"appendix":7993},"Invariance","invariance",{"index":7819,"title":8012,"id":8013,"appendix":7993},"Lexicon","lexicon",{"index":7823,"title":8015,"id":8016,"appendix":7993},"Credits (Informative)","credits",[8018,8026,8030,8035,8039,8044,8047,8050,8053,8057,8061,8064,8067,8070,8072,8074,8077,8080,8084,8086,8090,8092,8095,8097,8100,8108,8112,8118,8122,8127,8129,8133,8139,8145,8151,8153,8156,8162,8165,8169,8175,8179,8183,8188,8192,8195,8198,8204,8207,8210,8214,8218,8222,8225,8227,8231,8236,8242,8245,8249,8252,8258,8261,8265,8268,8272,8275,8279,8282,8287,8291,8294,8299,8302,8305,8308,8312,8317,8322,8326,8330,8334,8338,8342,8346,8350,8353,8356,8360,8363,8366,8369,8373,8378,8382,8385,8389,8394,8398,8403,8406,8409,8414,8419,8423,8426,8430,8435,8438,8443,8448,8451,8454,8458,8462,8466,8471,8475,8478,8483,8487,8490,8494,8498,8502,8505,8507,8511,8514,8517,8520,8523,8526,8529,8532,8535,8538,8542,8546,8549,8552,8555,8558,8561,8564,8568,8572,8576,8579,8583,8586,8589,8592,8594,8598,8603,8607,8611,8613,8617,8620,8627,8631,8635,8639,8645,8648,8652,8656,8659,8662,8666,8671,8677,8681,8683,8688,8691,8696,8700,8705,8709,8713,8715,8718,8721,8723,8728,8731,8734,8739,8743,8747,8752,8756,8760,8762,8764,8767,8769,8772,8775,8779,8783,8785,8789,8792,8796,8799,8801,8804,8808,8810,8814,8817,8820,8823,8827,8830,8833,8835,8838,8840,8843,8847,8850,8852,8854,8856,8858,8862,8864,8867,8872,8876,8879,8881,8884,8886,8890,8893,8896,8899,8903,8906,8911,8915,8918,8922,8925,8928,8932,8936,8938,8943,8946,8950,8953,8956,8959,8961,8964,8968,8971,8975,8978,8982,8986,8989,8992,8995,8998,9002,9004,9007,9009,9014,9015,9019,9022,9025,9028,9031,9033,9037,9040,9043,9046,9050,9052,9054,9058,9060,9063,9067,9071,9073,9077,9080,9083,9086,9089,9093,9098,9103,9107,9113,9117,9120,9124,9128,9131,9135,9139,9142,9146,9149,9154,9158,9160,9166,9169,9172,9175,9179,9182,9186,9190,9194,9196,9199,9201,9204,9206,9208,9211,9214,9217,9220,9223,9226,9228,9232,9236,9240,9244,9247,9250,9254,9257,9261,9263,9267,9271,9274,9277,9280,9283,9286,9289,9292,9295,9298,9301,9304,9307,9310,9313,9317,9320,9324,9328,9331,9334,9337,9340,9343,9346,9350,9353,9356,9362,9366,9370,9374],{"number":8019,"type":8020,"author":8021,"provisional":7993,"depends":8022,"platform":8023,"contact":8024,"extension":8025,"proposal":7993},135,"device","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":8027,"type":8020,"author":8021,"provisional":7797,"contact":8028,"extension":8029,"proposal":7993},477,"Stu Smith","VK_AMD_anti_lag",{"number":8031,"type":8020,"author":8021,"provisional":7797,"specialuse":8032,"contact":8033,"extension":8034,"proposal":7797},180,"devtools","Daniel Rakos @drakos-amd","VK_AMD_buffer_marker",{"number":8036,"type":8020,"author":8021,"provisional":7797,"depends":8037,"contact":8024,"extension":8038,"proposal":7797},230,"VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","VK_AMD_device_coherent_memory",{"number":8040,"type":8020,"author":8021,"provisional":7797,"depends":8041,"contact":8042,"extension":8043,"proposal":7797},214,"(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":7927,"type":8020,"author":8021,"promotedto":8045,"provisional":7797,"contact":8033,"extension":8046,"proposal":7797},"VK_KHR_draw_indirect_count","VK_AMD_draw_indirect_count",{"number":7895,"type":8020,"author":8021,"provisional":7797,"contact":8048,"extension":8049,"proposal":7797},"Dominik Witczak @dominikwitczakamd","VK_AMD_gcn_shader",{"number":7939,"type":8020,"author":8021,"deprecatedby":8051,"provisional":7797,"contact":8048,"extension":8052,"proposal":7797},"VK_KHR_shader_float16_int8","VK_AMD_gpu_shader_half_float",{"number":8054,"type":8020,"author":8021,"deprecatedby":8051,"provisional":7797,"contact":8055,"extension":8056,"proposal":7797},133,"Qun Lin @linqun","VK_AMD_gpu_shader_int16",{"number":8058,"type":8020,"author":8021,"provisional":7797,"contact":8059,"extension":8060,"proposal":7797},190,"Martin Dinkov @mdinkov","VK_AMD_memory_overallocation_behavior",{"number":8062,"type":8020,"author":8021,"provisional":7797,"contact":8042,"extension":8063,"proposal":7797},137,"VK_AMD_mixed_attachment_samples",{"number":7935,"type":8020,"author":8021,"obsoletedby":8065,"provisional":7797,"contact":8042,"extension":8066,"proposal":7797},"VK_KHR_maintenance1","VK_AMD_negative_viewport_height",{"number":8068,"type":8020,"author":8021,"provisional":7797,"contact":8042,"extension":8069,"proposal":7797},184,"VK_AMD_pipeline_compiler_control",{"number":7867,"type":8020,"author":8021,"provisional":7797,"contact":8033,"extension":8071,"proposal":7797},"VK_AMD_rasterization_order",{"number":7943,"type":8020,"author":8021,"provisional":7797,"contact":8048,"extension":8073,"proposal":7797},"VK_AMD_shader_ballot",{"number":8075,"type":8020,"author":8021,"provisional":7797,"depends":8037,"contact":8059,"extension":8076,"proposal":7797},186,"VK_AMD_shader_core_properties",{"number":8078,"type":8020,"author":8021,"provisional":7797,"depends":8076,"contact":8042,"extension":8079,"proposal":7797},228,"VK_AMD_shader_core_properties2",{"number":8081,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8024,"extension":8083,"proposal":7993},322,"EXT","VK_AMD_shader_early_and_late_fragment_tests",{"number":7879,"type":8020,"author":8021,"provisional":7797,"contact":8055,"extension":8085,"proposal":7797},"VK_AMD_shader_explicit_vertex_parameter",{"number":8087,"type":8020,"author":8021,"provisional":7797,"contact":8088,"extension":8089,"proposal":7797},138,"Aaron Hagan @AaronHaganAMD","VK_AMD_shader_fragment_mask",{"number":7979,"type":8020,"author":8021,"provisional":7797,"contact":8048,"extension":8091,"proposal":7797},"VK_AMD_shader_image_load_store_lod",{"number":7963,"type":8020,"author":8021,"provisional":7797,"specialuse":8032,"contact":8093,"extension":8094,"proposal":7797},"Jaakko Konttinen @jaakkoamd","VK_AMD_shader_info",{"number":7875,"type":8020,"author":8021,"provisional":7797,"contact":8055,"extension":8096,"proposal":7797},"VK_AMD_shader_trinary_minmax",{"number":7959,"type":8020,"author":8021,"provisional":7797,"depends":8037,"contact":8098,"extension":8099,"proposal":7797},"Rex Xu @amdrexu","VK_AMD_texture_gather_bias_lod",{"number":8101,"type":8020,"author":8102,"provisional":7797,"depends":8103,"platform":8104,"specialuse":8105,"contact":8106,"extension":8107,"proposal":7993},469,"ANDROID","VK_ANDROID_external_memory_android_hardware_buffer","android","glemulation","Chris Forbes @chrisforbes","VK_ANDROID_external_format_resolve",{"number":8109,"type":8020,"author":8102,"provisional":7797,"depends":8110,"platform":8104,"contact":8111,"extension":8103,"proposal":7797},130,"((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":8113,"type":8020,"author":8114,"promotedto":8115,"provisional":7797,"depends":8037,"contact":8116,"extension":8117,"proposal":7797},343,"ARM","VK_EXT_rasterization_order_attachment_access","Jan-Harald Fredriksen @janharaldfredriksen-arm","VK_ARM_rasterization_order_attachment_access",{"number":8119,"type":8020,"author":8114,"provisional":7797,"depends":8120,"contact":8116,"extension":8121,"proposal":7993},425,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_ARM_render_pass_striped",{"number":8123,"type":8020,"author":8114,"provisional":7797,"depends":8124,"contact":8125,"extension":8126,"proposal":7797},418,"VK_ARM_shader_core_builtins","Kevin Petit @kpet","VK_ARM_scheduling_controls",{"number":8128,"type":8020,"author":8114,"provisional":7797,"depends":8037,"contact":8125,"extension":8124,"proposal":7797},498,{"number":8130,"type":8020,"author":8114,"provisional":7797,"depends":8131,"contact":8116,"extension":8132,"proposal":7797},416,"VK_VERSION_1_1","VK_ARM_shader_core_properties",{"number":8134,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8137,"extension":8138,"proposal":7797},341,"VK_VERSION_1_3","vulkansc","Joshua Ashton @Joshua-Ashton","VK_EXT_4444_formats",{"number":8140,"type":8141,"author":8082,"provisional":7797,"depends":8142,"contact":8143,"extension":8144,"proposal":7797},286,"instance","VK_EXT_direct_mode_display","Drew DeVault sir@cmpwn.com","VK_EXT_acquire_drm_display",{"number":8146,"type":8141,"author":8147,"provisional":7797,"depends":8142,"platform":8148,"contact":8149,"extension":8150,"proposal":7797},90,"NV","xlib_xrandr","James Jones @cubanismo","VK_EXT_acquire_xlib_display",{"extension":8152,"proposal":7797},"VK_EXT_application_parameters",{"number":8154,"type":8020,"author":8114,"provisional":7797,"depends":8037,"contact":8116,"extension":8155,"proposal":7797},68,"VK_EXT_astc_decode_mode",{"number":8157,"type":8020,"author":8082,"provisional":7797,"depends":8158,"ratified":8159,"contact":8160,"extension":8161,"proposal":7993},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":8163,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8137,"extension":8164,"proposal":7993},340,"VK_EXT_attachment_feedback_loop_layout",{"number":8166,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8168,"proposal":7797},149,"Jeff Bolz @jeffbolznv","VK_EXT_blend_operation_advanced",{"number":8170,"type":8020,"author":8082,"provisional":7797,"depends":8171,"specialuse":8172,"contact":8173,"extension":8174,"proposal":7797},412,"VK_EXT_custom_border_color","glemulation,d3demulation","Piers Daniell @pdaniell-nv","VK_EXT_border_color_swizzle",{"number":8176,"type":8020,"author":8147,"deprecatedby":8177,"provisional":7797,"depends":8037,"contact":8167,"extension":8178,"proposal":7797},245,"VK_KHR_buffer_device_address","VK_EXT_buffer_device_address",{"number":8180,"type":8020,"author":8082,"promotedto":8181,"provisional":7797,"depends":8037,"contact":8033,"extension":8182,"proposal":7993},185,"VK_KHR_calibrated_timestamps","VK_EXT_calibrated_timestamps",{"number":8184,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8185,"contact":8186,"extension":8187,"proposal":7797},382,"vulkan,vulkansc","Sharif Elcott @selcott","VK_EXT_color_write_enable",{"number":8189,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":8190,"extension":8191,"proposal":7797},82,"Vikram Kushwaha @vkushwaha","VK_EXT_conditional_rendering",{"number":8193,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8159,"contact":8173,"extension":8194,"proposal":7797},102,"VK_EXT_conservative_rasterization",{"number":8196,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8185,"specialuse":8172,"contact":8197,"extension":8171,"proposal":7797},288,"Liam Middlebrook @liam-middlebrook",{"number":7883,"type":8020,"author":8199,"promotedto":8200,"provisional":7797,"depends":8201,"specialuse":7989,"contact":8202,"extension":8203,"proposal":7797},"Baldur Karlsson","VK_EXT_debug_utils","VK_EXT_debug_report","Baldur Karlsson @baldurk","VK_EXT_debug_marker",{"number":7839,"type":8141,"author":8205,"deprecatedby":8200,"provisional":7797,"specialuse":7989,"contact":8206,"extension":8201,"proposal":7797},"GOOGLE","Courtney Goeltzenleuchter @courtney-g",{"number":8208,"type":8141,"author":8082,"provisional":7797,"specialuse":7989,"contact":8209,"extension":8200,"proposal":7797},129,"Mark Young @marky-lunarg",{"number":8211,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8212,"contact":8137,"extension":8213,"proposal":7993},284,"d3demulation","VK_EXT_depth_bias_control",{"number":8215,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8216,"extension":8217,"proposal":7797},422,"Graeme Leese @gnl21","VK_EXT_depth_clamp_zero_one",{"number":8219,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8105,"contact":8220,"extension":8221,"proposal":7797},356,"Shahbaz Youssefi @syoussefi","VK_EXT_depth_clip_control",{"number":8223,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8185,"specialuse":8212,"contact":8173,"extension":8224,"proposal":7797},103,"VK_EXT_depth_clip_enable",{"number":7847,"type":8020,"author":8147,"provisional":7797,"ratified":8185,"contact":8173,"extension":8226,"proposal":7797},"VK_EXT_depth_range_unrestricted",{"number":8228,"type":8020,"author":8082,"provisional":7797,"depends":8229,"contact":8024,"extension":8230,"proposal":7993},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":8232,"type":8020,"author":8147,"promotedto":8233,"provisional":7797,"depends":8234,"contact":8167,"extension":8235,"proposal":7797},162,"VK_VERSION_1_2","(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance3),VK_VERSION_1_1","VK_EXT_descriptor_indexing",{"number":8237,"type":8020,"author":8082,"provisional":7797,"depends":8238,"specialuse":8239,"contact":8240,"extension":8241,"proposal":7797},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":8243,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8240,"extension":8244,"proposal":7993},342,"VK_EXT_device_fault",{"number":8246,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8032,"contact":8247,"extension":8248,"proposal":7797},285,"Yiwei Zhang @zhangyiwei","VK_EXT_device_memory_report",{"number":8250,"type":8141,"author":8147,"provisional":7797,"depends":8251,"contact":8149,"extension":8142,"proposal":7797},89,"VK_KHR_display",{"number":8253,"type":8141,"author":8082,"provisional":7797,"depends":8254,"platform":8255,"contact":8256,"extension":8257,"proposal":7797},347,"VK_KHR_surface","directfb","Nicolas Caramelli @caramelli","VK_EXT_directfb_surface",{"number":8259,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8185,"contact":8173,"extension":8260,"proposal":7797},100,"VK_EXT_discard_rectangles",{"number":8262,"type":8020,"author":8147,"provisional":7797,"depends":8263,"ratified":8159,"contact":8149,"extension":8264,"proposal":7797},92,"VK_EXT_display_surface_counter+VK_KHR_swapchain","VK_EXT_display_control",{"number":8266,"type":8141,"author":8147,"provisional":7797,"depends":8251,"ratified":8159,"contact":8149,"extension":8267,"proposal":7797},91,"VK_EXT_display_surface_counter",{"number":8269,"type":8020,"author":8082,"provisional":7797,"depends":8270,"ratified":8159,"contact":8173,"extension":8271,"proposal":7993},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":8273,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8173,"extension":8274,"proposal":7797},268,"VK_EXT_extended_dynamic_state",{"number":8276,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8277,"extension":8278,"proposal":7797},378,"Vikram Kushwaha @vkushwaha-nv","VK_EXT_extended_dynamic_state2",{"number":8280,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8159,"contact":8173,"extension":8281,"proposal":7993},456,"VK_EXT_extended_dynamic_state3",{"number":8283,"type":8020,"author":8082,"provisional":7797,"depends":8284,"ratified":8159,"contact":8285,"extension":8286,"proposal":7993},454,"VK_KHR_external_memory,VK_VERSION_1_1","Lina Versace @versalinyaa","VK_EXT_external_memory_acquire_unmodified",{"number":8288,"type":8020,"author":8082,"provisional":7797,"depends":8289,"ratified":8185,"contact":8285,"extension":8290,"proposal":7797},126,"VK_KHR_external_memory_fd","VK_EXT_external_memory_dma_buf",{"number":8292,"type":8020,"author":8082,"provisional":7797,"depends":8284,"ratified":8185,"contact":8033,"extension":8293,"proposal":7797},179,"VK_EXT_external_memory_host",{"number":8295,"type":8020,"author":8296,"provisional":7797,"ratified":8159,"contact":8297,"extension":8298,"proposal":7797},171,"QCOM","Matthew Netsch @mnetsch","VK_EXT_filter_cubic",{"number":8300,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8297,"extension":8301,"proposal":7797},219,"VK_EXT_fragment_density_map",{"number":8303,"type":8020,"author":8082,"provisional":7797,"depends":8301,"contact":8297,"extension":8304,"proposal":7797},333,"VK_EXT_fragment_density_map2",{"number":8306,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8173,"extension":8307,"proposal":7797},252,"VK_EXT_fragment_shader_interlock",{"number":8309,"type":8020,"author":8082,"provisional":7797,"ratified":8159,"contact":8310,"extension":8311,"proposal":7993},376,"James Fitzpatrick @jamesfitzpatrick","VK_EXT_frame_boundary",{"number":8313,"type":8020,"author":8082,"provisional":7797,"depends":8314,"platform":8315,"ratified":8159,"contact":8149,"extension":8316,"proposal":7797},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":8318,"type":8020,"author":8082,"promotedto":8319,"provisional":7797,"contact":8320,"extension":8321,"proposal":7797},175,"VK_KHR_global_priority","Andres Rodriguez @lostgoat","VK_EXT_global_priority",{"number":8323,"type":8020,"author":8082,"promotedto":8319,"provisional":7797,"depends":8324,"contact":8247,"extension":8325,"proposal":7797},389,"VK_EXT_global_priority+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_global_priority_query",{"number":8327,"type":8020,"author":8021,"provisional":7797,"depends":8328,"contact":8024,"extension":8329,"proposal":7993},321,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_pipeline_library","VK_EXT_graphics_pipeline_library",{"number":8331,"type":8020,"author":8205,"provisional":7797,"depends":8332,"ratified":8185,"contact":8206,"extension":8333,"proposal":7797},106,"VK_KHR_swapchain","VK_EXT_hdr_metadata",{"number":8335,"type":8141,"author":8082,"provisional":7797,"depends":8254,"contact":8336,"extension":8337,"proposal":7797},257,"Lisa Wu @chengtianww","VK_EXT_headless_surface",{"number":8339,"type":8020,"author":8082,"provisional":7797,"depends":8340,"ratified":8159,"contact":8220,"extension":8341,"proposal":7993},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":8343,"type":8020,"author":8082,"promotedto":8233,"provisional":7797,"depends":8037,"contact":8344,"extension":8345,"proposal":7797},262,"Bas Nieuwenhuizen @BNieuwenhuizen","VK_EXT_host_query_reset",{"number":8347,"type":8020,"author":8082,"provisional":7797,"depends":8348,"specialuse":8105,"contact":8160,"extension":8349,"proposal":7797},394,"(VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2),VK_VERSION_1_1","VK_EXT_image_2d_view_of_3d",{"number":8351,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8116,"extension":8352,"proposal":7993},339,"VK_EXT_image_compression_control",{"number":8354,"type":8020,"author":8082,"provisional":7797,"depends":8352,"contact":8116,"extension":8355,"proposal":7797},438,"VK_EXT_image_compression_control_swapchain",{"number":8357,"type":8020,"author":8082,"provisional":7797,"depends":8358,"ratified":8159,"contact":8285,"extension":8359,"proposal":7797},159,"(((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":8361,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8216,"extension":8362,"proposal":7797},336,"VK_EXT_image_robustness",{"number":8364,"type":8020,"author":8082,"provisional":7797,"depends":8348,"specialuse":8212,"contact":8160,"extension":8365,"proposal":7993},419,"VK_EXT_image_sliced_view_of_3d",{"number":8367,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8137,"extension":8368,"proposal":7797},392,"VK_EXT_image_view_min_lod",{"number":8370,"type":8020,"author":8082,"promotedto":8371,"provisional":7797,"depends":8037,"contact":8173,"extension":8372,"proposal":7797},266,"VK_KHR_index_type_uint8","VK_EXT_index_type_uint8",{"number":8374,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8375,"contact":8376,"extension":8377,"proposal":7797},139,"(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance1),VK_VERSION_1_1","Daniel Rakos @aqnuep","VK_EXT_inline_uniform_block",{"number":8379,"type":8141,"author":8082,"provisional":7797,"ratified":8159,"contact":8380,"extension":8381,"proposal":7993},497,"Christophe Riccio @christophe","VK_EXT_layer_settings",{"number":8383,"type":8020,"author":8082,"provisional":7797,"depends":8037,"specialuse":8105,"contact":8220,"extension":8384,"proposal":7993},466,"VK_EXT_legacy_dithering",{"number":8386,"type":8020,"author":8082,"provisional":7797,"depends":8387,"ratified":8159,"specialuse":8105,"contact":8160,"extension":8388,"proposal":7993},496,"VK_EXT_vertex_input_dynamic_state","VK_EXT_legacy_vertex_attributes",{"number":8390,"type":8020,"author":8082,"promotedto":8391,"provisional":7797,"depends":8037,"specialuse":8392,"contact":8167,"extension":8393,"proposal":7797},260,"VK_KHR_line_rasterization","cadsupport","VK_EXT_line_rasterization",{"number":8395,"type":8020,"author":8082,"promotedto":8396,"provisional":7797,"ratified":8159,"contact":8220,"extension":8397,"proposal":7797},401,"VK_KHR_load_store_op_none","VK_EXT_load_store_op_none",{"number":8399,"type":8020,"author":8082,"provisional":7797,"depends":8400,"ratified":8159,"contact":8401,"extension":8402,"proposal":7993},273,"VK_KHR_map_memory2","Faith Ekstrand @gfxstrand","VK_EXT_map_memory_placed",{"number":8404,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8405,"proposal":7797},238,"VK_EXT_memory_budget",{"number":8407,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8408,"proposal":7797},239,"VK_EXT_memory_priority",{"number":8410,"type":8020,"author":8082,"provisional":7797,"depends":8411,"contact":8412,"extension":8413,"proposal":7993},329,"VK_KHR_spirv_1_4","Christoph Kubisch @pixeljetstream","VK_EXT_mesh_shader",{"number":8415,"type":8020,"author":8082,"provisional":7797,"platform":8416,"contact":8417,"extension":8418,"proposal":7993},312,"metal","Bill Hollings @billhollings","VK_EXT_metal_objects",{"number":8420,"type":8141,"author":8082,"provisional":7797,"depends":8254,"platform":8416,"contact":8421,"extension":8422,"proposal":7797},218,"Dzmitry Malyshau @kvark","VK_EXT_metal_surface",{"number":8424,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8160,"extension":8425,"proposal":7797},393,"VK_EXT_multi_draw",{"number":8427,"type":8020,"author":8082,"provisional":7797,"depends":8428,"contact":8220,"extension":8429,"proposal":7993},377,"(VK_KHR_create_renderpass2+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_EXT_multisampled_render_to_single_sampled",{"number":8431,"type":8020,"author":8082,"provisional":7797,"depends":8432,"specialuse":8212,"contact":8433,"extension":8434,"proposal":7993},495,"VK_KHR_maintenance3","Joshua Ashton @Joshua-Ashton,Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_mutable_descriptor_type",{"number":8436,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8173,"extension":8437,"proposal":7797},452,"VK_EXT_nested_command_buffer",{"number":8439,"type":8020,"author":8082,"provisional":7797,"depends":8037,"specialuse":8440,"contact":8441,"extension":8442,"proposal":7993},423,"d3demulation,glemulation","Georg Lehmann @DadSchoorse","VK_EXT_non_seamless_cube_map",{"number":8444,"type":8020,"author":8082,"provisional":7797,"depends":8445,"ratified":8159,"contact":8446,"extension":8447,"proposal":7993},397,"VK_KHR_acceleration_structure+(VK_KHR_synchronization2,VK_VERSION_1_3)","Christoph Kubisch @pixeljetstream, Eric Werness","VK_EXT_opacity_micromap",{"number":8449,"type":8020,"author":8082,"provisional":7797,"depends":8408,"contact":8173,"extension":8450,"proposal":7797},413,"VK_EXT_pageable_device_local_memory",{"number":8452,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8185,"contact":8042,"extension":8453,"proposal":7797},213,"VK_EXT_pci_bus_info",{"number":8455,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8456,"extension":8457,"proposal":7797},354,"Simon Ser @emersion","VK_EXT_physical_device_drm",{"number":8459,"type":8020,"author":8021,"promotedto":8135,"provisional":7797,"depends":8037,"contact":8460,"extension":8461,"proposal":7797},298,"Gregory Grebe @grgrebe_amd","VK_EXT_pipeline_creation_cache_control",{"number":8463,"type":8020,"author":8205,"promotedto":8135,"provisional":7797,"specialuse":8032,"contact":8464,"extension":8465,"proposal":7797},193,"Jean-Francois Roy @jfroy","VK_EXT_pipeline_creation_feedback",{"number":8467,"type":8020,"author":8082,"provisional":7797,"depends":8468,"contact":8469,"extension":8470,"proposal":7993},499,"VK_KHR_ray_tracing_pipeline+VK_KHR_pipeline_library","Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_pipeline_library_group_handles",{"number":8472,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8473,"extension":8474,"proposal":7797},373,"Mukund Keshava @mkeshavanv","VK_EXT_pipeline_properties",{"number":8476,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8220,"extension":8477,"proposal":7993},467,"VK_EXT_pipeline_protected_access",{"number":8479,"type":8020,"author":8480,"provisional":7797,"depends":8037,"contact":8481,"extension":8482,"proposal":7797},69,"IMG","Jarred Davies","VK_EXT_pipeline_robustness",{"number":8484,"type":8020,"author":8147,"provisional":7797,"ratified":8159,"contact":8485,"extension":8486,"proposal":7797},156,"Daniel Koch @dgkoch","VK_EXT_post_depth_coverage",{"number":8488,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8105,"contact":8220,"extension":8489,"proposal":7797},357,"VK_EXT_primitive_topology_list_restart",{"number":8491,"type":8020,"author":8082,"provisional":7797,"depends":8492,"specialuse":8105,"contact":8220,"extension":8493,"proposal":7993},383,"VK_EXT_transform_feedback","VK_EXT_primitives_generated_query",{"number":8495,"type":8020,"author":8147,"promotedto":8135,"provisional":7797,"depends":8037,"contact":8496,"extension":8497,"proposal":7797},296,"Matthew Rusch @mattruschnv","VK_EXT_private_data",{"number":8499,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8105,"contact":8500,"extension":8501,"proposal":7797},255,"Jesse Hall @jessehall","VK_EXT_provoking_vertex",{"number":8503,"type":8020,"author":8082,"provisional":7797,"depends":8284,"ratified":8185,"contact":8285,"extension":8504,"proposal":7797},127,"VK_EXT_queue_family_foreign",{"number":8506,"type":8020,"author":8114,"provisional":7797,"depends":8037,"contact":8116,"extension":8115,"proposal":7993},464,{"number":8508,"type":8020,"author":8082,"provisional":7797,"depends":8509,"contact":8116,"extension":8510,"proposal":7797},345,"VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1","VK_EXT_rgba10x6_formats",{"number":8512,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8185,"contact":8197,"extension":8513,"proposal":7797},287,"VK_EXT_robustness2",{"number":8515,"type":8020,"author":8021,"provisional":7797,"depends":8037,"ratified":8185,"contact":8033,"extension":8516,"proposal":7797},144,"VK_EXT_sample_locations",{"number":8518,"type":8020,"author":8147,"promotedto":8233,"provisional":7797,"depends":8037,"contact":8167,"extension":8519,"proposal":7797},131,"VK_EXT_sampler_filter_minmax",{"number":8521,"type":8020,"author":8082,"promotedto":8233,"provisional":7797,"depends":8037,"contact":8024,"extension":8522,"proposal":7797},222,"VK_EXT_scalar_block_layout",{"number":8524,"type":8020,"author":8082,"promotedto":8233,"provisional":7797,"contact":8033,"extension":8525,"proposal":7797},247,"VK_EXT_separate_stencil_usage",{"number":8527,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8185,"contact":8277,"extension":8528,"proposal":7797},261,"VK_EXT_shader_atomic_float",{"number":8530,"type":8020,"author":8082,"provisional":7797,"depends":8528,"ratified":8159,"contact":8401,"extension":8531,"proposal":7797},274,"VK_EXT_shader_atomic_float2",{"number":8533,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8167,"extension":8534,"proposal":7797},277,"VK_EXT_shader_demote_to_helper_invocation",{"number":8536,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8024,"extension":8537,"proposal":7797},235,"VK_EXT_shader_image_atomic_int64",{"number":8539,"type":8020,"author":8082,"provisional":7797,"depends":8540,"contact":8469,"extension":8541,"proposal":7993},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":8543,"type":8020,"author":8082,"provisional":7797,"depends":8270,"ratified":8159,"contact":8544,"extension":8545,"proposal":7993},483,"Daniel Story @daniel-story","VK_EXT_shader_object",{"number":8547,"type":8020,"author":8082,"provisional":7797,"ratified":8159,"contact":8125,"extension":8548,"proposal":7993},565,"VK_EXT_shader_replicated_composites",{"number":8550,"type":8020,"author":8082,"provisional":7797,"ratified":8185,"contact":8048,"extension":8551,"proposal":7797},141,"VK_EXT_shader_stencil_export",{"number":8553,"type":8020,"author":8147,"deprecatedby":8233,"provisional":7797,"contact":8485,"extension":8554,"proposal":7797},65,"VK_EXT_shader_subgroup_ballot",{"number":8556,"type":8020,"author":8147,"deprecatedby":8131,"provisional":7797,"contact":8485,"extension":8557,"proposal":7797},66,"VK_EXT_shader_subgroup_vote",{"number":8559,"type":8020,"author":8082,"provisional":7797,"depends":8135,"ratified":8159,"contact":8116,"extension":8560,"proposal":7993},396,"VK_EXT_shader_tile_image",{"number":8562,"type":8020,"author":8147,"promotedto":8233,"provisional":7797,"contact":8485,"extension":8563,"proposal":7797},163,"VK_EXT_shader_viewport_index_layer",{"number":8565,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8131,"ratified":8136,"contact":8566,"extension":8567,"proposal":7797},226,"Neil Henning @sheredom","VK_EXT_subgroup_size_control",{"number":8569,"type":8020,"author":8082,"provisional":7797,"depends":8037,"contact":8570,"extension":8571,"proposal":7993},459,"Ting Wei @catweiting","VK_EXT_subpass_merge_feedback",{"number":8573,"type":8141,"author":8082,"provisional":7797,"depends":8574,"contact":8220,"extension":8575,"proposal":7993},275,"VK_KHR_surface+VK_KHR_get_surface_capabilities2","VK_EXT_surface_maintenance1",{"number":8577,"type":8141,"author":8205,"provisional":7797,"depends":8254,"contact":8206,"extension":8578,"proposal":7797},105,"VK_EXT_swapchain_colorspace",{"number":8580,"type":8020,"author":8082,"provisional":7797,"depends":8581,"contact":8220,"extension":8582,"proposal":7993},276,"VK_KHR_swapchain+VK_EXT_surface_maintenance1+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_swapchain_maintenance1",{"number":8584,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8167,"extension":8585,"proposal":7797},282,"VK_EXT_texel_buffer_alignment",{"number":8587,"type":8020,"author":8114,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8136,"contact":8116,"extension":8588,"proposal":7797},67,"VK_EXT_texture_compression_astc_hdr",{"number":8590,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"contact":8024,"extension":8591,"proposal":7797},246,"VK_EXT_tooling_info",{"number":7907,"type":8020,"author":8147,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8593,"contact":8173,"extension":8492,"proposal":7797},"glemulation,d3demulation,devtools",{"number":8595,"type":8020,"author":8205,"provisional":7797,"contact":8596,"extension":8597,"proposal":7797},161,"Cort Stratton @cdwfs","VK_EXT_validation_cache",{"number":8599,"type":8141,"author":8600,"deprecatedby":8381,"provisional":7797,"specialuse":7989,"contact":8601,"extension":8602,"proposal":7797},248,"LUNARG","Karl Schultz @karl-lunarg","VK_EXT_validation_features",{"number":8604,"type":8141,"author":8205,"deprecatedby":8381,"provisional":7797,"specialuse":7989,"contact":8605,"extension":8606,"proposal":7797},62,"Tobin Ehlis @tobine","VK_EXT_validation_flags",{"number":8608,"type":8020,"author":8147,"promotedto":8609,"provisional":7797,"depends":8037,"contact":8190,"extension":8610,"proposal":7797},191,"VK_KHR_vertex_attribute_divisor","VK_EXT_vertex_attribute_divisor",{"number":8612,"type":8020,"author":8082,"provisional":7797,"depends":8037,"ratified":8159,"contact":8173,"extension":8387,"proposal":7797},353,{"number":8614,"type":8020,"author":8082,"promotedto":8135,"provisional":7797,"depends":8509,"ratified":8136,"contact":8615,"extension":8616,"proposal":7797},331,"Tony Zlatinski @tzlatinski","VK_EXT_ycbcr_2plane_444_formats",{"number":8618,"type":8020,"author":8082,"provisional":7797,"depends":8509,"ratified":8185,"contact":8173,"extension":8619,"proposal":7797},253,"VK_EXT_ycbcr_image_arrays",{"number":8621,"type":8020,"author":8622,"provisional":7797,"depends":8623,"platform":8624,"contact":8625,"extension":8626,"proposal":7797},367,"FUCHSIA","VK_FUCHSIA_external_memory+(VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1)","fuchsia","John Rosasco @rosasco","VK_FUCHSIA_buffer_collection",{"number":8628,"type":8020,"author":8622,"provisional":7797,"depends":8629,"platform":8624,"contact":8625,"extension":8630,"proposal":7797},365,"(VK_KHR_external_memory_capabilities+VK_KHR_external_memory),VK_VERSION_1_1","VK_FUCHSIA_external_memory",{"number":8632,"type":8020,"author":8622,"provisional":7797,"depends":8633,"platform":8624,"contact":8625,"extension":8634,"proposal":7797},366,"VK_KHR_external_semaphore_capabilities+VK_KHR_external_semaphore","VK_FUCHSIA_external_semaphore",{"number":8636,"type":8141,"author":8622,"provisional":7797,"depends":8254,"platform":8624,"contact":8637,"extension":8638,"proposal":7797},215,"Craig Stout @cdotstout","VK_FUCHSIA_imagepipe_surface",{"number":8640,"type":8020,"author":8641,"provisional":7797,"depends":8642,"platform":8643,"contact":8464,"extension":8644,"proposal":7797},192,"GGP","VK_KHR_swapchain+VK_GGP_stream_descriptor_surface","ggp","VK_GGP_frame_token",{"number":8646,"type":8141,"author":8641,"provisional":7797,"depends":8254,"platform":8643,"contact":8464,"extension":8647,"proposal":7797},50,"VK_GGP_stream_descriptor_surface",{"number":8649,"type":8020,"author":8205,"provisional":7797,"contact":8650,"extension":8651,"proposal":7797},225,"Hai Nguyen @chaoticbob","VK_GOOGLE_decorate_string",{"number":8653,"type":8020,"author":8205,"provisional":7797,"depends":8332,"contact":8654,"extension":8655,"proposal":7797},93,"Ian Elliott @ianelliottus","VK_GOOGLE_display_timing",{"number":8657,"type":8020,"author":8205,"provisional":7797,"contact":8650,"extension":8658,"proposal":7797},224,"VK_GOOGLE_hlsl_functionality1",{"number":8660,"type":8141,"author":8205,"provisional":7797,"depends":8254,"specialuse":8105,"contact":8220,"extension":8661,"proposal":7993},434,"VK_GOOGLE_surfaceless_query",{"number":8663,"type":8020,"author":8205,"provisional":7797,"contact":8664,"extension":8665,"proposal":7797},290,"Kaye Mason @chaleur","VK_GOOGLE_user_type",{"number":8667,"type":8020,"author":8668,"provisional":7797,"depends":8037,"contact":8669,"extension":8670,"proposal":7993},405,"HUAWEI","Yuchang Wang @richard_Wang2","VK_HUAWEI_cluster_culling_shader",{"number":8672,"type":8020,"author":8673,"provisional":7797,"depends":8674,"contact":8675,"extension":8676,"proposal":7993},371,"Huawei","VK_KHR_ray_tracing_pipeline+(VK_KHR_synchronization2,VK_VERSION_1_3)","Pan Gao @PanGao-h","VK_HUAWEI_invocation_mask",{"number":8678,"type":8020,"author":8668,"provisional":7797,"depends":8679,"contact":8675,"extension":8680,"proposal":7797},370,"((VK_KHR_create_renderpass2,VK_VERSION_1_2)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_HUAWEI_subpass_shading",{"number":7855,"type":8020,"author":8480,"provisional":7797,"contact":8024,"extension":8682,"proposal":7797},"VK_IMG_filter_cubic",{"number":8684,"type":8020,"author":8480,"deprecatedby":8685,"provisional":7797,"contact":8686,"extension":8687,"proposal":7797},55,null,"Stuart Smith","VK_IMG_format_pvrtc",{"number":8689,"type":8020,"author":8480,"provisional":7797,"depends":8037,"specialuse":8105,"contact":8310,"extension":8690,"proposal":7797},111,"VK_IMG_relaxed_line_rasterization",{"number":8692,"type":8020,"author":8693,"provisional":7797,"specialuse":8032,"contact":8694,"extension":8695,"proposal":7797},211,"INTEL","Lionel Landwerlin @llandwerlin","VK_INTEL_performance_query",{"number":8697,"type":8020,"author":8693,"provisional":7797,"depends":8037,"contact":8698,"extension":8699,"proposal":7797},210,"Ian Romanick @ianromanick","VK_INTEL_shader_integer_functions2",{"number":8701,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8703,"ratified":8159,"contact":8116,"extension":8704,"proposal":7797},84,"KHR","(VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class),VK_VERSION_1_1","VK_KHR_16bit_storage",{"number":8706,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8703,"ratified":8159,"contact":8707,"extension":8708,"proposal":7797},178,"Alexander Galazin @alegal-arm","VK_KHR_8bit_storage",{"number":8710,"type":8020,"author":8702,"provisional":7797,"depends":8711,"ratified":8159,"contact":8485,"extension":8712,"proposal":7797},151,"((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":7827,"type":8141,"author":8702,"provisional":7797,"depends":8254,"platform":8104,"ratified":8159,"contact":8111,"extension":8714,"proposal":7797},"VK_KHR_android_surface",{"number":8716,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8024,"extension":8717,"proposal":7797},158,"VK_KHR_bind_memory2",{"number":8719,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8720,"ratified":8159,"contact":8167,"extension":8177,"proposal":7797},258,"(VK_KHR_get_physical_device_properties2+VK_KHR_device_group),VK_VERSION_1_1",{"number":8722,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8376,"extension":8181,"proposal":7797},544,{"number":8724,"type":8020,"author":8702,"provisional":7797,"depends":8725,"ratified":8159,"contact":8726,"extension":8727,"proposal":7993},512,"VK_KHR_get_physical_device_properties2","Jean-Noe Morissette @MagicPoncho","VK_KHR_compute_shader_derivatives",{"number":8729,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"contact":8125,"extension":8730,"proposal":7993},507,"VK_KHR_cooperative_matrix",{"number":8732,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8185,"contact":8297,"extension":8733,"proposal":7797},338,"VK_KHR_copy_commands2",{"number":8735,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8736,"ratified":8159,"contact":8737,"extension":8738,"proposal":7797},110,"(VK_KHR_multiview+VK_KHR_maintenance2),VK_VERSION_1_1","Tobias Hector @tobias","VK_KHR_create_renderpass2",{"number":8740,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8741,"ratified":8159,"contact":8149,"extension":8742,"proposal":7797},128,"VK_KHR_get_memory_requirements2,VK_VERSION_1_1","VK_KHR_dedicated_allocation",{"number":8744,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8745,"extension":8746,"proposal":7797},269,"Josh Barczak @jbarczak","VK_KHR_deferred_host_operations",{"number":8748,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8749,"ratified":8159,"contact":8750,"extension":8751,"proposal":7797},200,"VK_KHR_create_renderpass2,VK_VERSION_1_2","Jan-Harald Fredriksen @janharald","VK_KHR_depth_stencil_resolve",{"number":8753,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8754,"extension":8755,"proposal":7797},86,"Markus Tavenrath @mtavenrath","VK_KHR_descriptor_update_template",{"number":8757,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8758,"ratified":8159,"contact":8167,"extension":8759,"proposal":7797},61,"VK_KHR_device_group_creation","VK_KHR_device_group",{"number":8761,"type":8141,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8167,"extension":8758,"proposal":7797},71,{"number":7760,"type":8141,"author":8702,"provisional":7797,"depends":8254,"ratified":8185,"contact":8763,"extension":8251,"proposal":7797},"James Jones @cubanismo,Norbert Nopper @FslNopper",{"number":7809,"type":8020,"author":8702,"provisional":7797,"depends":8765,"ratified":8185,"contact":8149,"extension":8766,"proposal":7797},"VK_KHR_swapchain+VK_KHR_display","VK_KHR_display_swapchain",{"number":8768,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"ratified":8159,"contact":8173,"extension":8045,"proposal":7797},170,{"number":8770,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8033,"extension":8771,"proposal":7797},197,"VK_KHR_driver_properties",{"number":7971,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8773,"ratified":8159,"contact":8024,"extension":8774,"proposal":7993},"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_KHR_dynamic_rendering",{"number":8776,"type":8020,"author":8021,"provisional":7797,"depends":8777,"ratified":8159,"contact":8024,"extension":8778,"proposal":7993},233,"VK_KHR_dynamic_rendering,VK_VERSION_1_3","VK_KHR_dynamic_rendering_local_read",{"number":8780,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8781,"ratified":8159,"contact":8111,"extension":8782,"proposal":7797},114,"VK_KHR_external_fence_capabilities","VK_KHR_external_fence",{"number":8784,"type":8141,"author":8702,"promotedto":8131,"provisional":7797,"depends":8037,"ratified":8159,"contact":8111,"extension":8781,"proposal":7797},113,{"number":8786,"type":8020,"author":8702,"provisional":7797,"depends":8787,"ratified":8185,"contact":8111,"extension":8788,"proposal":7797},116,"VK_KHR_external_fence,VK_VERSION_1_1","VK_KHR_external_fence_fd",{"number":8790,"type":8020,"author":8702,"provisional":7797,"depends":8782,"platform":8315,"ratified":8159,"contact":8111,"extension":8791,"proposal":7797},115,"VK_KHR_external_fence_win32",{"number":8793,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8794,"ratified":8159,"contact":8149,"extension":8795,"proposal":7797},73,"VK_KHR_external_memory_capabilities,VK_VERSION_1_1","VK_KHR_external_memory",{"number":8797,"type":8141,"author":8702,"promotedto":8131,"provisional":7797,"depends":8037,"ratified":8159,"contact":8149,"extension":8798,"proposal":7797},72,"VK_KHR_external_memory_capabilities",{"number":8800,"type":8020,"author":8702,"provisional":7797,"depends":8284,"ratified":8185,"contact":8149,"extension":8289,"proposal":7797},75,{"number":8802,"type":8020,"author":8702,"provisional":7797,"depends":8284,"platform":8315,"ratified":8159,"contact":8149,"extension":8803,"proposal":7797},74,"VK_KHR_external_memory_win32",{"number":8805,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8806,"ratified":8159,"contact":8149,"extension":8807,"proposal":7797},78,"VK_KHR_external_semaphore_capabilities","VK_KHR_external_semaphore",{"number":8809,"type":8141,"author":8702,"promotedto":8131,"provisional":7797,"depends":8037,"ratified":8159,"contact":8149,"extension":8806,"proposal":7797},77,{"number":8811,"type":8020,"author":8702,"provisional":7797,"depends":8812,"ratified":8185,"contact":8149,"extension":8813,"proposal":7797},80,"VK_KHR_external_semaphore,VK_VERSION_1_1","VK_KHR_external_semaphore_fd",{"number":8815,"type":8020,"author":8702,"provisional":7797,"depends":8807,"platform":8315,"ratified":8159,"contact":8149,"extension":8816,"proposal":7797},79,"VK_KHR_external_semaphore_win32",{"number":8818,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8159,"contact":8694,"extension":8819,"proposal":7797},361,"VK_KHR_format_feature_flags2",{"number":8821,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"contact":8028,"extension":8822,"proposal":7993},323,"VK_KHR_fragment_shader_barycentric",{"number":8824,"type":8020,"author":8702,"provisional":7797,"depends":8825,"ratified":8185,"contact":8024,"extension":8826,"proposal":7993},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":8828,"type":8141,"author":8702,"provisional":7797,"depends":8251,"ratified":8185,"contact":8149,"extension":8829,"proposal":7797},122,"VK_KHR_get_display_properties2",{"number":8831,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8401,"extension":8832,"proposal":7797},147,"VK_KHR_get_memory_requirements2",{"number":8834,"type":8141,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8167,"extension":8725,"proposal":7797},60,{"number":8836,"type":8141,"author":8702,"provisional":7797,"depends":8254,"ratified":8185,"contact":8149,"extension":8837,"proposal":7797},120,"VK_KHR_get_surface_capabilities2",{"number":8839,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8024,"extension":8319,"proposal":7797},189,{"number":8841,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"ratified":8159,"contact":8401,"extension":8842,"proposal":7797},148,"VK_KHR_image_format_list",{"number":8844,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8845,"ratified":8159,"contact":8737,"extension":8846,"proposal":7797},109,"(((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":8848,"type":8020,"author":8702,"provisional":7797,"depends":8332,"ratified":8185,"contact":8654,"extension":8849,"proposal":7797},85,"VK_KHR_incremental_present",{"number":8851,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8173,"extension":8371,"proposal":7797},534,{"number":8853,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8173,"extension":8391,"proposal":7797},535,{"number":8855,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8220,"extension":8396,"proposal":7993},527,{"number":8857,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8173,"extension":8065,"proposal":7797},70,{"number":8859,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8860,"extension":8861,"proposal":7797},118,"Michael Worcester @michaelworcester","VK_KHR_maintenance2",{"number":8863,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8432,"proposal":7797},169,{"number":8865,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8131,"ratified":8159,"contact":8173,"extension":8866,"proposal":7797},414,"VK_KHR_maintenance4",{"number":8868,"type":8020,"author":8702,"provisional":7797,"depends":8869,"ratified":8159,"contact":8870,"extension":8871,"proposal":7993},471,"(VK_VERSION_1_1+VK_KHR_dynamic_rendering),VK_VERSION_1_3","Stu Smith @stu-s","VK_KHR_maintenance5",{"number":8873,"type":8020,"author":8702,"provisional":7797,"depends":8131,"ratified":8159,"contact":8874,"extension":8875,"proposal":7993},546,"Jon Leech @oddhack","VK_KHR_maintenance6",{"number":8877,"type":8020,"author":8702,"provisional":7797,"depends":8131,"ratified":8159,"contact":8160,"extension":8878,"proposal":7993},563,"VK_KHR_maintenance7",{"number":8880,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8401,"extension":8400,"proposal":7993},272,{"number":8882,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8883,"proposal":7797},54,"VK_KHR_multiview",{"extension":8885,"proposal":7797},"VK_KHR_object_refresh",{"number":8887,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"specialuse":8032,"contact":8888,"extension":8889,"proposal":7797},117,"Alon Or-bach @alonorbach","VK_KHR_performance_query",{"number":8891,"type":8020,"author":8702,"provisional":7797,"depends":8871,"ratified":8159,"contact":8870,"extension":8892,"proposal":7993},484,"VK_KHR_pipeline_binary",{"number":8894,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"specialuse":8032,"contact":8401,"extension":8895,"proposal":7797},270,"VK_KHR_pipeline_executable_properties",{"number":8897,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8412,"extension":8898,"proposal":7797},291,"VK_KHR_pipeline_library",{"number":8900,"type":8141,"author":8702,"provisional":7797,"ratified":8159,"contact":8901,"extension":8902,"proposal":7797},395,"Charles Giessen @charles-lunarg","VK_KHR_portability_enumeration",{"number":8904,"type":8020,"author":8702,"provisional":7993,"depends":8037,"platform":8023,"ratified":8159,"contact":8417,"extension":8905,"proposal":7797},164,"VK_KHR_portability_subset",{"number":8907,"type":8020,"author":8702,"provisional":7797,"depends":8908,"ratified":8159,"contact":8909,"extension":8910,"proposal":7797},295,"VK_KHR_swapchain+VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","Keith Packard @keithp","VK_KHR_present_id",{"number":8912,"type":8020,"author":8702,"provisional":7797,"depends":8913,"ratified":8159,"contact":8909,"extension":8914,"proposal":7797},249,"VK_KHR_swapchain+VK_KHR_present_id","VK_KHR_present_wait",{"number":8916,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":8917,"proposal":7797},81,"VK_KHR_push_descriptor",{"number":8919,"type":8020,"author":8702,"provisional":7797,"depends":8920,"ratified":8159,"contact":8485,"extension":8921,"proposal":7797},349,"VK_KHR_spirv_1_4+VK_KHR_acceleration_structure","VK_KHR_ray_query",{"number":8923,"type":8020,"author":8702,"provisional":7797,"depends":8712,"ratified":8159,"contact":8485,"extension":8924,"proposal":7797},387,"VK_KHR_ray_tracing_maintenance1",{"number":8926,"type":8020,"author":8702,"provisional":7797,"depends":8920,"ratified":8159,"contact":8485,"extension":8927,"proposal":7797},348,"VK_KHR_ray_tracing_pipeline",{"number":8929,"type":8020,"author":8702,"provisional":7797,"depends":8712,"ratified":8159,"contact":8930,"extension":8931,"proposal":7993},482,"Eric Werness","VK_KHR_ray_tracing_position_fetch",{"number":8933,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8934,"extension":8935,"proposal":7797},145,"John Kessenich @johnkslang","VK_KHR_relaxed_block_layout",{"number":7851,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"ratified":8159,"contact":8024,"extension":8937,"proposal":7797},"VK_KHR_sampler_mirror_clamp_to_edge",{"number":8939,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8940,"ratified":8159,"contact":8941,"extension":8942,"proposal":7797},157,"(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":8944,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8825,"ratified":8159,"contact":8173,"extension":8945,"proposal":7797},242,"VK_KHR_separate_depth_stencil_layouts",{"number":8947,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8948,"extension":8949,"proposal":7797},181,"Aaron Hagan @ahagan","VK_KHR_shader_atomic_int64",{"number":8951,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8948,"extension":8952,"proposal":7797},182,"VK_KHR_shader_clock",{"number":8954,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8485,"extension":8955,"proposal":7797},64,"VK_KHR_shader_draw_parameters",{"number":8957,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"contact":8125,"extension":8958,"proposal":7993},545,"VK_KHR_shader_expect_assume",{"number":8960,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8707,"extension":8051,"proposal":7797},83,{"number":8962,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8707,"extension":8963,"proposal":7797},198,"VK_KHR_shader_float_controls",{"number":8965,"type":8020,"author":8702,"provisional":7797,"depends":8966,"ratified":8159,"contact":8216,"extension":8967,"proposal":7993},529,"VK_VERSION_1_1+VK_KHR_shader_float_controls","VK_KHR_shader_float_controls2",{"number":8969,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8159,"contact":8125,"extension":8970,"proposal":7993},281,"VK_KHR_shader_integer_dot_product",{"number":8972,"type":8020,"author":8702,"provisional":7797,"depends":8131,"ratified":8159,"contact":8973,"extension":8974,"proposal":7993},435,"Alan Baker @alan-baker","VK_KHR_shader_maximal_reconvergence",{"number":8976,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"ratified":8159,"contact":8202,"extension":8977,"proposal":7797},294,"VK_KHR_shader_non_semantic_info",{"number":8979,"type":8020,"author":8702,"provisional":7797,"depends":8980,"ratified":8159,"contact":8024,"extension":8981,"proposal":7993},236,"VK_VERSION_1_1+VK_KHR_vulkan_memory_model+VK_KHR_shader_maximal_reconvergence","VK_KHR_shader_quad_control",{"number":8983,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8984,"extension":8985,"proposal":7993},559,"Nathan Gauër @Keenuts","VK_KHR_shader_relaxed_extended_instruction",{"number":8987,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8131,"ratified":8159,"contact":8566,"extension":8988,"proposal":7797},176,"VK_KHR_shader_subgroup_extended_types",{"number":8990,"type":8020,"author":8702,"provisional":7797,"ratified":8159,"contact":8125,"extension":8991,"proposal":7993},417,"VK_KHR_shader_subgroup_rotate",{"number":8993,"type":8020,"author":8702,"provisional":7797,"depends":8131,"ratified":8159,"contact":8973,"extension":8994,"proposal":7797},324,"VK_KHR_shader_subgroup_uniform_control_flow",{"number":8996,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8185,"contact":8111,"extension":8997,"proposal":7797},216,"VK_KHR_shader_terminate_invocation",{"number":8999,"type":8020,"author":8702,"provisional":7797,"depends":9000,"ratified":8185,"contact":8888,"extension":9001,"proposal":7797},112,"VK_KHR_swapchain+VK_KHR_get_surface_capabilities2+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_KHR_shared_presentable_image",{"number":9003,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8966,"ratified":8159,"contact":8111,"extension":8411,"proposal":7797},237,{"number":9005,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"ratified":8159,"contact":8707,"extension":9006,"proposal":7797},132,"VK_KHR_storage_buffer_storage_class",{"number":7799,"type":8141,"author":8702,"provisional":7797,"ratified":8185,"contact":9008,"extension":8254,"proposal":7797},"James Jones @cubanismo,Ian Elliott @ianelliottus",{"number":9010,"type":8141,"author":8702,"provisional":7797,"depends":9011,"ratified":8159,"contact":9012,"extension":9013,"proposal":7797},240,"VK_VERSION_1_1+VK_KHR_get_surface_capabilities2","Sandeep Shinde @sashinde","VK_KHR_surface_protected_capabilities",{"number":7755,"type":8020,"author":8702,"provisional":7797,"depends":8254,"ratified":8185,"contact":9008,"extension":8332,"proposal":7797},{"number":9016,"type":8020,"author":8702,"provisional":7797,"depends":9017,"ratified":8185,"contact":8033,"extension":9018,"proposal":7797},201,"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":9020,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8185,"contact":8024,"extension":9021,"proposal":7797},315,"VK_KHR_synchronization2",{"number":9023,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8401,"extension":9024,"proposal":7797},208,"VK_KHR_timeline_semaphore",{"number":9026,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8216,"extension":9027,"proposal":7797},254,"VK_KHR_uniform_buffer_standard_layout",{"number":9029,"type":8020,"author":8702,"promotedto":8131,"provisional":7797,"depends":8703,"ratified":8159,"contact":8111,"extension":9030,"proposal":7797},121,"VK_KHR_variable_pointers",{"number":9032,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8185,"contact":8220,"extension":8609,"proposal":7993},526,{"number":9034,"type":8020,"author":8702,"provisional":7797,"depends":9035,"ratified":8159,"contact":8376,"extension":9036,"proposal":7993},513,"VK_KHR_video_decode_queue","VK_KHR_video_decode_av1",{"number":7955,"type":8020,"author":8702,"provisional":7797,"depends":9035,"ratified":8159,"contact":9038,"extension":9039,"proposal":7993},"peter.fang@amd.com","VK_KHR_video_decode_h264",{"number":9041,"type":8020,"author":8702,"provisional":7797,"depends":9035,"ratified":8159,"contact":9038,"extension":9042,"proposal":7993},188,"VK_KHR_video_decode_h265",{"number":7891,"type":8020,"author":8702,"provisional":7797,"depends":9044,"ratified":8159,"contact":9045,"extension":9035,"proposal":7993},"VK_KHR_video_queue+(VK_KHR_synchronization2,VK_VERSION_1_3)","jake.beju@amd.com",{"number":7947,"type":8020,"author":8702,"provisional":7797,"depends":9047,"ratified":8159,"contact":9048,"extension":9049,"proposal":7993},"VK_KHR_video_encode_queue","Ahmed Abdelkhalek @aabdelkh","VK_KHR_video_encode_h264",{"number":7951,"type":8020,"author":8702,"provisional":7797,"depends":9047,"ratified":8159,"contact":9048,"extension":9051,"proposal":7993},"VK_KHR_video_encode_h265",{"number":9053,"type":8020,"author":8702,"provisional":7797,"depends":9044,"ratified":8159,"contact":9048,"extension":9047,"proposal":7993},300,{"number":9055,"type":8020,"author":8702,"provisional":7797,"depends":9056,"ratified":8159,"contact":8376,"extension":9057,"proposal":7993},516,"VK_KHR_video_queue","VK_KHR_video_maintenance1",{"number":7887,"type":8020,"author":8702,"provisional":7797,"depends":9059,"ratified":8159,"contact":8615,"extension":9056,"proposal":7993},"(VK_VERSION_1_1+VK_KHR_synchronization2),VK_VERSION_1_3",{"number":9061,"type":8020,"author":8702,"promotedto":8233,"provisional":7797,"depends":8037,"ratified":8159,"contact":8167,"extension":9062,"proposal":7797},212,"VK_KHR_vulkan_memory_model",{"number":7819,"type":8141,"author":8702,"provisional":7797,"depends":8254,"platform":9064,"ratified":8159,"contact":9065,"extension":9066,"proposal":7797},"wayland","Jesse Hall @critsec,Ian Elliott @ianelliottus","VK_KHR_wayland_surface",{"number":9068,"type":8020,"author":8702,"provisional":7797,"depends":8803,"platform":8315,"ratified":8159,"contact":9069,"extension":9070,"proposal":7797},76,"Carsten Rohde @crohde","VK_KHR_win32_keyed_mutex",{"number":7831,"type":8141,"author":8702,"provisional":7797,"depends":8254,"platform":8315,"ratified":8159,"contact":9065,"extension":9072,"proposal":7797},"VK_KHR_win32_surface",{"number":9074,"type":8020,"author":8702,"provisional":7797,"depends":8037,"ratified":8159,"contact":9075,"extension":9076,"proposal":7797},337,"Caio Marcelo de Oliveira Filho @cmarcelo","VK_KHR_workgroup_memory_explicit_layout",{"number":7817,"type":8141,"author":8702,"provisional":7797,"depends":8254,"platform":9078,"ratified":8159,"contact":9065,"extension":9079,"proposal":7797},"xcb","VK_KHR_xcb_surface",{"number":7813,"type":8141,"author":8702,"provisional":7797,"depends":8254,"platform":9081,"ratified":8159,"contact":9065,"extension":9082,"proposal":7797},"xlib","VK_KHR_xlib_surface",{"number":9084,"type":8020,"author":8702,"promotedto":8135,"provisional":7797,"depends":8037,"ratified":8159,"contact":8973,"extension":9085,"proposal":7797},326,"VK_KHR_zero_initialize_workgroup_memory",{"number":9087,"type":8141,"author":8600,"provisional":7797,"contact":8901,"extension":9088,"proposal":7993},460,"VK_LUNARG_direct_driver_loading",{"number":9090,"type":8020,"author":9091,"provisional":7797,"depends":8037,"specialuse":8212,"contact":8469,"extension":9092,"proposal":7797},576,"MESA","VK_MESA_image_alignment_control",{"number":9094,"type":8020,"author":9095,"provisional":7797,"depends":8037,"contact":9096,"extension":9097,"proposal":7993},531,"MSFT","Jesse Natalie @jenatali","VK_MSFT_layered_driver",{"number":9099,"type":8141,"author":9100,"deprecatedby":8422,"provisional":7797,"depends":8254,"platform":9101,"contact":8417,"extension":9102,"proposal":7797},123,"MVK","ios","VK_MVK_ios_surface",{"number":9104,"type":8141,"author":9100,"deprecatedby":8422,"provisional":7797,"depends":8254,"platform":9105,"contact":8417,"extension":9106,"proposal":7797},124,"macos","VK_MVK_macos_surface",{"number":9108,"type":8141,"author":9109,"provisional":7797,"depends":8254,"platform":9110,"contact":9111,"extension":9112,"proposal":7797},63,"NN","vi","Mathias Heyer gitlab:@mheyer","VK_NN_vi_surface",{"number":7911,"type":8020,"author":9114,"provisional":7797,"contact":9115,"extension":9116,"proposal":7797},"NVX","Eric Werness @ewerness-nv,Liam Middlebrook @liam-middlebrook","VK_NVX_binary_import",{"number":7915,"type":8020,"author":9114,"provisional":7797,"contact":9118,"extension":9119,"proposal":7797},"Eric Werness @ewerness-nv","VK_NVX_image_view_handle",{"number":9121,"type":8020,"author":9114,"provisional":7797,"depends":9122,"contact":8167,"extension":9123,"proposal":7797},98,"VK_KHR_multiview,VK_VERSION_1_1","VK_NVX_multiview_per_view_attributes",{"number":9125,"type":8020,"author":8147,"provisional":7797,"depends":8142,"platform":8315,"contact":9126,"extension":9127,"proposal":7797},346,"Jeff Juliano @jjuliano","VK_NV_acquire_winrt_display",{"number":9129,"type":8020,"author":8147,"provisional":7797,"contact":9118,"extension":9130,"proposal":7797},88,"VK_NV_clip_space_w_scaling",{"number":9132,"type":8020,"author":8147,"provisional":7797,"contact":9133,"extension":9134,"proposal":7797},560,"Lujin Wang @lujinwangnv","VK_NV_command_buffer_inheritance",{"number":9136,"type":8020,"author":8147,"promotedto":8727,"provisional":7797,"depends":8037,"contact":9137,"extension":9138,"proposal":7797},202,"Pat Brown @nvpbrown","VK_NV_compute_shader_derivatives",{"number":9140,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":8167,"extension":9141,"proposal":7797},250,"VK_NV_cooperative_matrix",{"number":9143,"type":8020,"author":8147,"provisional":7797,"depends":9144,"contact":8277,"extension":9145,"proposal":7797},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":9147,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":8485,"extension":9148,"proposal":7797},51,"VK_NV_corner_sampled_image",{"number":9150,"type":8020,"author":8147,"provisional":7797,"depends":9151,"contact":9152,"extension":9153,"proposal":7797},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":9155,"type":8020,"author":8147,"provisional":7993,"contact":9156,"extension":9157,"proposal":7797},308,"Tristan Lorach @tlorach","VK_NV_cuda_kernel_launch",{"number":7899,"type":8020,"author":8147,"deprecatedby":8742,"provisional":7797,"contact":8167,"extension":9159,"proposal":7797},"VK_NV_dedicated_allocation",{"number":9161,"type":8020,"author":9162,"provisional":7797,"depends":9163,"contact":9164,"extension":9165,"proposal":7797},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":9167,"type":8020,"author":8147,"provisional":7797,"depends":8131,"contact":8173,"extension":9168,"proposal":7797},547,"VK_NV_descriptor_pool_overallocation",{"number":9170,"type":8020,"author":9162,"provisional":7797,"depends":8037,"contact":9164,"extension":9171,"proposal":7797},207,"VK_NV_device_diagnostic_checkpoints",{"number":9173,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9152,"extension":9174,"proposal":7797},301,"VK_NV_device_diagnostics_config",{"number":9176,"type":8020,"author":8147,"provisional":7797,"depends":9177,"contact":8412,"extension":9178,"proposal":7797},278,"(VK_VERSION_1_1+VK_KHR_buffer_device_address),VK_VERSION_1_2","VK_NV_device_generated_commands",{"number":9180,"type":8020,"author":8147,"provisional":7797,"depends":9178,"contact":8277,"extension":9181,"proposal":7797},429,"VK_NV_device_generated_commands_compute",{"number":9183,"type":8020,"author":8147,"provisional":7993,"depends":8447,"platform":8023,"contact":9184,"extension":9185,"proposal":7797},398,"Christoph Kubisch @pixeljetstream, Eric Werness @ewerness-nv","VK_NV_displacement_micromap",{"number":9187,"type":8020,"author":8147,"provisional":7797,"contact":9188,"extension":9189,"proposal":7797},493,"Russell Chou @russellcnv","VK_NV_extended_sparse_address_space",{"number":9191,"type":8020,"author":8147,"deprecatedby":8795,"provisional":7797,"depends":9192,"contact":8149,"extension":9193,"proposal":7797},57,"VK_NV_external_memory_capabilities","VK_NV_external_memory",{"number":9195,"type":8141,"author":8147,"deprecatedby":8798,"provisional":7797,"contact":8149,"extension":9192,"proposal":7797},56,{"number":9197,"type":8020,"author":8147,"provisional":7797,"depends":8284,"contact":9069,"extension":9198,"proposal":7797},372,"VK_NV_external_memory_rdma",{"extension":9200,"proposal":7797},"VK_NV_external_memory_sci_buf",{"number":9202,"type":8020,"author":8147,"deprecatedby":8803,"provisional":7797,"depends":9193,"platform":8315,"contact":8149,"extension":9203,"proposal":7797},58,"VK_NV_external_memory_win32",{"extension":9205,"proposal":7797},"VK_NV_external_sci_sync",{"extension":9207,"proposal":7797},"VK_NV_external_sci_sync2",{"number":9209,"type":8020,"author":8147,"provisional":7797,"contact":8167,"extension":9210,"proposal":7797},154,"VK_NV_fill_rectangle",{"number":9212,"type":8020,"author":8147,"provisional":7797,"contact":8167,"extension":9213,"proposal":7797},150,"VK_NV_fragment_coverage_to_color",{"number":9215,"type":8020,"author":8147,"promotedto":8822,"provisional":7797,"depends":8037,"contact":9137,"extension":9216,"proposal":7797},204,"VK_NV_fragment_shader_barycentric",{"number":9218,"type":8020,"author":8147,"provisional":7797,"depends":8826,"contact":9137,"extension":9219,"proposal":7797},327,"VK_NV_fragment_shading_rate_enums",{"number":9221,"type":8020,"author":8147,"provisional":7797,"contact":8167,"extension":9222,"proposal":7797},153,"VK_NV_framebuffer_mixed_samples",{"number":9224,"type":8020,"author":8147,"provisional":7797,"contact":8485,"extension":9225,"proposal":7797},96,"VK_NV_geometry_shader_passthrough",{"number":7843,"type":8020,"author":8147,"deprecatedby":8685,"provisional":7797,"contact":8173,"extension":9227,"proposal":7797},"VK_NV_glsl_shader",{"number":9229,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9230,"extension":9231,"proposal":7797},279,"David Zhao Akeley @akeley98","VK_NV_inherited_viewport_scissor",{"number":9233,"type":8020,"author":9162,"provisional":7797,"depends":8037,"contact":9234,"extension":9235,"proposal":7797},431,"sourav parmar @souravpNV","VK_NV_linear_color_attachment",{"number":9237,"type":8020,"author":8147,"provisional":7797,"contact":9238,"extension":9239,"proposal":7797},311,"Charles Hansen @cshansen","VK_NV_low_latency",{"number":9241,"type":8020,"author":8147,"provisional":7797,"depends":9242,"contact":9238,"extension":9243,"proposal":7797},506,"VK_VERSION_1_2,VK_KHR_timeline_semaphore","VK_NV_low_latency2",{"number":9245,"type":8020,"author":8147,"provisional":7797,"depends":9144,"contact":8277,"extension":9246,"proposal":7797},428,"VK_NV_memory_decompression",{"number":9248,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":8412,"extension":9249,"proposal":7797},203,"VK_NV_mesh_shader",{"number":9251,"type":8020,"author":8147,"provisional":7797,"depends":9252,"contact":9069,"extension":9253,"proposal":7797},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":9255,"type":8020,"author":8147,"provisional":7797,"depends":8875,"contact":8173,"extension":9256,"proposal":7797},517,"VK_NV_per_stage_descriptor_set",{"number":9258,"type":8020,"author":8147,"provisional":7797,"depends":8314,"contact":9259,"extension":9260,"proposal":7797},293,"Liya Li @liyli","VK_NV_present_barrier",{"extension":9262,"proposal":7797},"VK_NV_private_vendor_info",{"number":9264,"type":8020,"author":8147,"provisional":7797,"contact":9265,"extension":9266,"proposal":7797},556,"Rodrigo Locatti @rlocatti","VK_NV_raw_access_chains",{"number":9268,"type":8020,"author":8147,"deprecatedby":8927,"provisional":7797,"depends":9269,"contact":9118,"extension":9270,"proposal":7797},166,"(VK_KHR_get_physical_device_properties2+VK_KHR_get_memory_requirements2),VK_VERSION_1_1","VK_NV_ray_tracing",{"number":9272,"type":8020,"author":8147,"provisional":7797,"depends":8927,"contact":9118,"extension":9273,"proposal":7797},491,"VK_NV_ray_tracing_invocation_reorder",{"number":9275,"type":8020,"author":8147,"provisional":7797,"depends":8927,"contact":8930,"extension":9276,"proposal":7797},328,"VK_NV_ray_tracing_motion_blur",{"number":9278,"type":8020,"author":8147,"provisional":7797,"contact":8277,"extension":9279,"proposal":7993},569,"VK_NV_ray_tracing_validation",{"number":9281,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9152,"extension":9282,"proposal":7797},167,"VK_NV_representative_fragment_test",{"number":9284,"type":8020,"author":8147,"provisional":7797,"contact":8173,"extension":9285,"proposal":7797},95,"VK_NV_sample_mask_override_coverage",{"number":9287,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9137,"extension":9288,"proposal":7797},206,"VK_NV_scissor_exclusive",{"number":9290,"type":8020,"author":8147,"provisional":7797,"contact":8167,"extension":9291,"proposal":7797},564,"VK_NV_shader_atomic_float16_vector",{"number":9293,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9137,"extension":9294,"proposal":7797},205,"VK_NV_shader_image_footprint",{"number":9296,"type":8020,"author":8147,"provisional":7797,"depends":8131,"contact":8485,"extension":9297,"proposal":7797},155,"VK_NV_shader_sm_builtins",{"number":9299,"type":8020,"author":8147,"provisional":7797,"depends":8131,"contact":8167,"extension":9300,"proposal":7797},199,"VK_NV_shader_subgroup_partitioned",{"number":9302,"type":8020,"author":8147,"provisional":7797,"depends":8037,"contact":9137,"extension":9303,"proposal":7797},165,"VK_NV_shading_rate_image",{"number":9305,"type":8020,"author":8147,"provisional":7797,"contact":8485,"extension":9306,"proposal":7797},97,"VK_NV_viewport_array2",{"number":9308,"type":8020,"author":8147,"provisional":7797,"contact":8173,"extension":9309,"proposal":7797},99,"VK_NV_viewport_swizzle",{"number":9311,"type":8020,"author":8147,"promotedto":9070,"provisional":7797,"depends":9203,"platform":8315,"contact":9069,"extension":9312,"proposal":7797},59,"VK_NV_win32_keyed_mutex",{"number":9314,"type":8020,"author":8296,"provisional":7797,"depends":9315,"contact":8297,"extension":9316,"proposal":7797},522,"(VK_EXT_filter_cubic)+(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)","VK_QCOM_filter_cubic_clamp",{"number":9318,"type":8020,"author":8296,"provisional":7797,"depends":8298,"contact":8297,"extension":9319,"proposal":7797},520,"VK_QCOM_filter_cubic_weights",{"number":9321,"type":8020,"author":8296,"provisional":7797,"depends":9322,"contact":8297,"extension":9323,"proposal":7797},426,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_fragment_density_map","VK_QCOM_fragment_density_map_offset",{"number":9325,"type":8020,"author":8296,"provisional":7797,"depends":9326,"contact":8297,"extension":9327,"proposal":7993},441,"VK_KHR_format_feature_flags2,VK_VERSION_1_3","VK_QCOM_image_processing",{"number":9329,"type":8020,"author":8296,"provisional":7797,"depends":9327,"contact":8297,"extension":9330,"proposal":7797},519,"VK_QCOM_image_processing2",{"number":9332,"type":8020,"author":8296,"provisional":7797,"contact":8297,"extension":9333,"proposal":7797},511,"VK_QCOM_multiview_per_view_render_areas",{"number":9335,"type":8020,"author":8296,"provisional":7797,"depends":8037,"contact":8297,"extension":9336,"proposal":7797},489,"VK_QCOM_multiview_per_view_viewports",{"number":9338,"type":8020,"author":8296,"provisional":7797,"contact":8297,"extension":9339,"proposal":7797},172,"VK_QCOM_render_pass_shader_resolve",{"number":9341,"type":8020,"author":8296,"provisional":7797,"contact":8297,"extension":9342,"proposal":7797},302,"VK_QCOM_render_pass_store_ops",{"number":9344,"type":8020,"author":8296,"provisional":7797,"contact":8297,"extension":9345,"proposal":7797},283,"VK_QCOM_render_pass_transform",{"number":9347,"type":8020,"author":8296,"provisional":7797,"depends":9348,"contact":8297,"extension":9349,"proposal":7797},334,"VK_KHR_copy_commands2,VK_VERSION_1_3","VK_QCOM_rotated_copy_commands",{"number":9351,"type":8020,"author":8296,"provisional":7797,"depends":8037,"contact":8297,"extension":9352,"proposal":7993},485,"VK_QCOM_tile_properties",{"number":9354,"type":8020,"author":8296,"provisional":7797,"contact":8297,"extension":9355,"proposal":7797},521,"VK_QCOM_ycbcr_degamma",{"number":9357,"type":8020,"author":9358,"provisional":7797,"depends":8110,"platform":9359,"contact":9360,"extension":9361,"proposal":7797},530,"QNX","screen","Mike Gorchak @mgorchak-blackberry, Aaron Ruby @aruby-blackberry","VK_QNX_external_memory_screen_buffer",{"number":9363,"type":8141,"author":9358,"provisional":7797,"depends":8254,"platform":9359,"contact":9364,"extension":9365,"proposal":7797},379,"Mike Gorchak @mgorchak-blackberry","VK_QNX_screen_surface",{"number":9367,"type":8020,"author":9368,"provisional":7797,"depends":8037,"contact":8240,"extension":9369,"proposal":7797},486,"SEC","VK_SEC_amigo_profiling",{"number":9371,"type":8020,"author":9372,"provisional":7797,"depends":8037,"specialuse":8212,"contact":8469,"extension":9373,"proposal":7797},421,"VALVE","VK_VALVE_descriptor_set_host_mapping",{"number":9375,"type":8020,"author":9372,"promotedto":8434,"provisional":7797,"depends":8432,"specialuse":8212,"contact":8433,"extension":9376,"proposal":7797},352,"VK_VALVE_mutable_descriptor_type",1725732624484]