[{"data":1,"prerenderedAt":5060},["ShallowReactive",2],{"rS5EoRAbdL":3,"VyF3Mmj32r":3475,"N9m89Rcq0G":3701},{"title":4,"description":5,"body":6,"_type":3473,"_id":3474},"Memory Model","",{"type":7,"children":8,"toc":3436},"root",[9,17,36,43,54,62,74,80,119,132,146,152,165,173,179,184,236,244,250,267,330,347,353,373,429,442,448,453,469,475,480,520,526,536,548,554,574,609,621,649,660,678,691,697,709,722,738,744,754,784,821,826,875,891,903,926,931,944,952,965,973,990,1013,1025,1035,1041,1053,1066,1079,1095,1101,1111,1116,1139,1168,1173,1214,1219,1251,1256,1316,1331,1353,1361,1411,1440,1475,1479,1491,1496,1502,1512,1525,1541,1553,1572,1578,1597,1609,1614,1620,1632,1665,1671,1683,1696,1706,1734,1758,1764,1787,1806,1942,1947,1961,1996,2014,2019,2031,2036,2048,2059,2070,2087,2105,2111,2116,2129,2183,2194,2205,2214,2220,2225,2230,2235,2309,2314,2320,2331,2342,2350,2365,2370,2416,2457,2469,2782,2813,2819,2829,2839,2847,2853,2876,2900,2910,2924,2930,2947,2957,2979,2995,3002,3007,3055,3061,3156,3164,3170,3194,3214,3219,3225,3230,3235,3258,3263,3275,3280,3286,3306,3330,3371,3409,3415],{"type":10,"tag":11,"props":12,"children":14},"element","h1",{"id":13},"memory-model",[15],{"type":16,"value":4},"text",{"type":10,"tag":18,"props":19,"children":20},"note",{},[21],{"type":10,"tag":22,"props":23,"children":24},"p",{},[25,27,34],{"type":16,"value":26},"This memory model describes synchronizations provided by all\nimplementations; however, some of the synchronizations defined require extra\nfeatures to be supported by the implementation.\nSee ",{"type":10,"tag":28,"props":29,"children":31},"a",{"href":30},"/man/VkPhysicalDeviceVulkanMemoryModelFeatures",[32],{"type":16,"value":33},"VkPhysicalDeviceVulkanMemoryModelFeatures",{"type":16,"value":35},".",{"type":10,"tag":37,"props":38,"children":40},"h2",{"id":39},"memory-model-agent",[41],{"type":16,"value":42},"Agent",{"type":10,"tag":22,"props":44,"children":45},{},[46,52],{"type":10,"tag":47,"props":48,"children":49},"em",{},[50],{"type":16,"value":51},"Operation",{"type":16,"value":53}," is a general term for any task that is executed on the system.",{"type":10,"tag":18,"props":55,"children":56},{},[57],{"type":10,"tag":22,"props":58,"children":59},{},[60],{"type":16,"value":61},"An operation is by definition something that is executed.\nThus if an instruction is skipped due to control flow, it does not\nconstitute an operation.",{"type":10,"tag":22,"props":63,"children":64},{},[65,67,72],{"type":16,"value":66},"Each operation is executed by a particular ",{"type":10,"tag":47,"props":68,"children":69},{},[70],{"type":16,"value":71},"agent",{"type":16,"value":73},".\nPossible agents include each shader invocation, each host thread, and each\nfixed-function stage of the pipeline.",{"type":10,"tag":37,"props":75,"children":77},{"id":76},"memory-model-memory-location",[78],{"type":16,"value":79},"Memory Location",{"type":10,"tag":22,"props":81,"children":82},{},[83,85,90,92,97,99,104,106,111,113,117],{"type":16,"value":84},"A ",{"type":10,"tag":47,"props":86,"children":87},{},[88],{"type":16,"value":89},"memory location",{"type":16,"value":91}," identifies unique storage for 8 bits of data.\nMemory operations access a ",{"type":10,"tag":47,"props":93,"children":94},{},[95],{"type":16,"value":96},"set of memory locations",{"type":16,"value":98}," consisting of one or\nmore memory locations at a time, e.g. an operation accessing a 32-bit\ninteger in memory would read/write a set of four memory locations.\nMemory operations that access whole aggregates ",{"type":10,"tag":100,"props":101,"children":103},"normative",{"type":102},"may",[],{"type":16,"value":105}," access any padding bytes\nbetween elements or members, but no padding bytes at the end of the\naggregate.\nTwo sets of memory locations ",{"type":10,"tag":47,"props":107,"children":108},{},[109],{"type":16,"value":110},"overlap",{"type":16,"value":112}," if the intersection of their sets of\nmemory locations is non-empty.\nA memory operation ",{"type":10,"tag":100,"props":114,"children":116},{"type":115},"must",[],{"type":16,"value":118}," not affect memory at a memory location not within\nits set of memory locations.",{"type":10,"tag":22,"props":120,"children":121},{},[122,124,130],{"type":16,"value":123},"Memory locations for buffers and images are explicitly allocated in\n",{"type":10,"tag":28,"props":125,"children":127},{"href":126},"/man/VkDeviceMemory",[128],{"type":16,"value":129},"VkDeviceMemory",{"type":16,"value":131}," objects, and are implicitly allocated for SPIR-V\nvariables in each shader invocation.",{"type":10,"tag":22,"props":133,"children":134},{},[135,137,144],{"type":16,"value":136},"Variables with ",{"type":10,"tag":138,"props":139,"children":141},"code",{"className":140},[],[142],{"type":16,"value":143},"Workgroup",{"type":16,"value":145}," storage class that point to a block-decorated\ntype share a set of memory locations.",{"type":10,"tag":37,"props":147,"children":149},{"id":148},"memory-model-allocation",[150],{"type":16,"value":151},"Allocation",{"type":10,"tag":22,"props":153,"children":154},{},[155,157,163],{"type":16,"value":156},"The values stored in newly allocated memory locations are determined by a\nSPIR-V variable’s initializer, if present, or else are undefined:.\nAt the time an allocation is created there have been no\n",{"type":10,"tag":28,"props":158,"children":160},{"href":159},"/chapters/memory-model#memory-model-memory-operation",[161],{"type":16,"value":162},"memory operations",{"type":16,"value":164}," to any of its memory\nlocations.\nThe initialization is not considered to be a memory operation.",{"type":10,"tag":18,"props":166,"children":167},{},[168],{"type":10,"tag":22,"props":169,"children":170},{},[171],{"type":16,"value":172},"For tessellation control shader output variables, a consequence of\ninitialization not being considered a memory operation is that some\nimplementations may need to insert a barrier between the initialization of\nthe output variables and any reads of those variables.",{"type":10,"tag":37,"props":174,"children":176},{"id":175},"memory-model-memory-operation",[177],{"type":16,"value":178},"Memory Operation",{"type":10,"tag":22,"props":180,"children":181},{},[182],{"type":16,"value":183},"For an operation A and memory location M:",{"type":10,"tag":185,"props":186,"children":187},"ul",{},[188,206,221],{"type":10,"tag":189,"props":190,"children":191},"li",{},[192,197,199,204],{"type":10,"tag":193,"props":194,"children":196},"anchor",{"id":195},"memory-model-access-read",[],{"type":16,"value":198}," A ",{"type":10,"tag":47,"props":200,"children":201},{},[202],{"type":16,"value":203},"reads",{"type":16,"value":205}," M if and only if the data stored\nin M is an input to A.",{"type":10,"tag":189,"props":207,"children":208},{},[209,213,214,219],{"type":10,"tag":193,"props":210,"children":212},{"id":211},"memory-model-access-write",[],{"type":16,"value":198},{"type":10,"tag":47,"props":215,"children":216},{},[217],{"type":16,"value":218},"writes",{"type":16,"value":220}," M if and only if the data\noutput from A is stored to M.",{"type":10,"tag":189,"props":222,"children":223},{},[224,228,229,234],{"type":10,"tag":193,"props":225,"children":227},{"id":226},"memory-model-access-access",[],{"type":16,"value":198},{"type":10,"tag":47,"props":230,"children":231},{},[232],{"type":16,"value":233},"accesses",{"type":16,"value":235}," M if and only if it either\nreads or writes (or both) M.",{"type":10,"tag":18,"props":237,"children":238},{},[239],{"type":10,"tag":22,"props":240,"children":241},{},[242],{"type":16,"value":243},"A write whose value is the same as what was already in those memory\nlocations is still considered to be a write and has all the same effects.",{"type":10,"tag":37,"props":245,"children":247},{"id":246},"memory-model-references",[248],{"type":16,"value":249},"Reference",{"type":10,"tag":22,"props":251,"children":252},{},[253,254,259,261,265],{"type":16,"value":84},{"type":10,"tag":47,"props":255,"children":256},{},[257],{"type":16,"value":258},"reference",{"type":16,"value":260}," is an object that a particular agent ",{"type":10,"tag":100,"props":262,"children":264},{"type":263},"can",[],{"type":16,"value":266}," use to access a set\nof memory locations.\nOn the host, a reference is a host virtual address.\nOn the device, a reference is:",{"type":10,"tag":185,"props":268,"children":269},{},[270,280,301,313,325],{"type":10,"tag":189,"props":271,"children":272},{},[273,275,278],{"type":16,"value":274},"The descriptor that a variable is bound to, for variables in Image,\nUniform, or StorageBuffer storage classes.\nIf the variable is an array (or array of arrays, etc.) then each element\nof the array ",{"type":10,"tag":100,"props":276,"children":277},{"type":102},[],{"type":16,"value":279}," be a unique reference.",{"type":10,"tag":189,"props":281,"children":282},{},[283,285,291,293,299],{"type":16,"value":284},"The address range for a buffer in ",{"type":10,"tag":138,"props":286,"children":288},{"className":287},[],[289],{"type":16,"value":290},"PhysicalStorageBuffer",{"type":16,"value":292}," storage\nclass, where the base of the address range is queried with\n",{"type":10,"tag":28,"props":294,"children":296},{"href":295},"/man/vkGetBufferDeviceAddress",[297],{"type":16,"value":298},"vkGetBufferDeviceAddress",{"type":16,"value":300},"\nand the length of the range is the size of the buffer.",{"type":10,"tag":189,"props":302,"children":303},{},[304,306,311],{"type":16,"value":305},"A single common reference for all variables with ",{"type":10,"tag":138,"props":307,"children":309},{"className":308},[],[310],{"type":16,"value":143},{"type":16,"value":312}," storage\nclass that point to a block-decorated type.",{"type":10,"tag":189,"props":314,"children":315},{},[316,318,323],{"type":16,"value":317},"The variable itself for non-block-decorated type variables in\n",{"type":10,"tag":138,"props":319,"children":321},{"className":320},[],[322],{"type":16,"value":143},{"type":16,"value":324}," storage class.",{"type":10,"tag":189,"props":326,"children":327},{},[328],{"type":16,"value":329},"The variable itself for variables in other storage classes.",{"type":10,"tag":22,"props":331,"children":332},{},[333,335,338,340,346],{"type":16,"value":334},"Two memory accesses through distinct references ",{"type":10,"tag":100,"props":336,"children":337},{"type":102},[],{"type":16,"value":339}," require availability\nand visibility operations as defined\n",{"type":10,"tag":28,"props":341,"children":343},{"href":342},"/chapters/memory-model#memory-model-location-ordered",[344],{"type":16,"value":345},"below",{"type":16,"value":35},{"type":10,"tag":37,"props":348,"children":350},{"id":349},"memory-model-program-order",[351],{"type":16,"value":352},"Program-Order",{"type":10,"tag":22,"props":354,"children":355},{},[356,357,362,364,371],{"type":16,"value":84},{"type":10,"tag":47,"props":358,"children":359},{},[360],{"type":16,"value":361},"dynamic instance",{"type":16,"value":363}," of an instruction is defined in SPIR-V\n(",{"type":10,"tag":28,"props":365,"children":369},{"href":366,"rel":367},"https://registry.khronos.org/spir-v/specs/unified1/SPIRV.html#DynamicInstance",[368],"nofollow",[370],{"type":16,"value":366},{"type":16,"value":372},")\nas a way of referring to a particular execution of a static instruction.\nProgram-order is an ordering on dynamic instances of instructions executed\nby a single shader invocation:",{"type":10,"tag":185,"props":374,"children":375},{},[376,381,386,407,419,424],{"type":10,"tag":189,"props":377,"children":378},{},[379],{"type":16,"value":380},"(Basic block): If instructions A and B are in the same basic block, and\nA is listed in the module before B, then the n’th dynamic instance of A\nis program-ordered before the n’th dynamic instance of B.",{"type":10,"tag":189,"props":382,"children":383},{},[384],{"type":16,"value":385},"(Branch): The dynamic instance of a branch or switch instruction is\nprogram-ordered before the dynamic instance of the OpLabel instruction\nto which it transfers control.",{"type":10,"tag":189,"props":387,"children":388},{},[389,391,397,399,405],{"type":16,"value":390},"(Call entry): The dynamic instance of an ",{"type":10,"tag":138,"props":392,"children":394},{"className":393},[],[395],{"type":16,"value":396},"OpFunctionCall",{"type":16,"value":398}," instruction\nis program-ordered before the dynamic instances of the\n",{"type":10,"tag":138,"props":400,"children":402},{"className":401},[],[403],{"type":16,"value":404},"OpFunctionParameter",{"type":16,"value":406}," instructions and the body of the called\nfunction.",{"type":10,"tag":189,"props":408,"children":409},{},[410,412,417],{"type":16,"value":411},"(Call exit): The dynamic instance of the instruction following an\n",{"type":10,"tag":138,"props":413,"children":415},{"className":414},[],[416],{"type":16,"value":396},{"type":16,"value":418}," instruction is program-ordered after the dynamic\ninstance of the return instruction executed by the called function.",{"type":10,"tag":189,"props":420,"children":421},{},[422],{"type":16,"value":423},"(Transitive Closure): If dynamic instance A of any instruction is\nprogram-ordered before dynamic instance B of any instruction and B is\nprogram-ordered before dynamic instance C of any instruction then A is\nprogram-ordered before C.",{"type":10,"tag":189,"props":425,"children":426},{},[427],{"type":16,"value":428},"(Complete definition): No other dynamic instances are program-ordered.",{"type":10,"tag":22,"props":430,"children":431},{},[432,434,440],{"type":16,"value":433},"For instructions executed on the host, the source language defines the\nprogram-order relation (e.g. as ",{"type":10,"tag":138,"props":435,"children":437},{"className":436},[],[438],{"type":16,"value":439},"sequenced-before",{"type":16,"value":441},").",{"type":10,"tag":37,"props":443,"children":445},{"id":444},"shader-call-related",[446],{"type":16,"value":447},"Shader Call Related",{"type":10,"tag":22,"props":449,"children":450},{},[451],{"type":16,"value":452},"Shader-call-related is an equivalence relation on invocations defined as the\nsymmetric and transitive closure of:",{"type":10,"tag":185,"props":454,"children":455},{},[456],{"type":10,"tag":189,"props":457,"children":458},{},[459,461,467],{"type":16,"value":460},"A is shader-call-related to B if A is created by an\n",{"type":10,"tag":28,"props":462,"children":464},{"href":463},"/chapters/ray-tracing#ray-tracing-shader-call",[465],{"type":16,"value":466},"shader call",{"type":16,"value":468}," instruction executed by B.",{"type":10,"tag":37,"props":470,"children":472},{"id":471},"shader-call-order",[473],{"type":16,"value":474},"Shader Call Order",{"type":10,"tag":22,"props":476,"children":477},{},[478],{"type":16,"value":479},"Shader-call-order is a partial order on dynamic instances of instructions\nexecuted by invocations that are shader-call-related:",{"type":10,"tag":185,"props":481,"children":482},{},[483,488,499,510,515],{"type":10,"tag":189,"props":484,"children":485},{},[486],{"type":16,"value":487},"(Program order): If dynamic instance A is program-ordered before B, then\nA is shader-call-ordered before B.",{"type":10,"tag":189,"props":489,"children":490},{},[491,493,497],{"type":16,"value":492},"(Shader call entry): If A is a dynamic instance of an\n",{"type":10,"tag":28,"props":494,"children":495},{"href":463},[496],{"type":16,"value":466},{"type":16,"value":498}," instruction and B is a dynamic\ninstance executed by an invocation that is created by A, then A is\nshader-call-ordered before B.",{"type":10,"tag":189,"props":500,"children":501},{},[502,504,508],{"type":16,"value":503},"(Shader call exit): If A is a dynamic instance of an\n",{"type":10,"tag":28,"props":505,"children":506},{"href":463},[507],{"type":16,"value":466},{"type":16,"value":509}," instruction, B is the next\ndynamic instance executed by the same invocation, and C is a dynamic\ninstance executed by an invocation that is created by A, then C is\nshader-call-ordered before B.",{"type":10,"tag":189,"props":511,"children":512},{},[513],{"type":16,"value":514},"(Transitive closure): If A is shader-call-ordered-before B and B is\nshader-call-ordered-before C, then A is shader-call-ordered-before C.",{"type":10,"tag":189,"props":516,"children":517},{},[518],{"type":16,"value":519},"(Complete definition): No other dynamic instances are\nshader-call-ordered.",{"type":10,"tag":37,"props":521,"children":523},{"id":522},"memory-model-scope",[524],{"type":16,"value":525},"Scope",{"type":10,"tag":22,"props":527,"children":528},{},[529,531,534],{"type":16,"value":530},"Atomic and barrier instructions include scopes which identify sets of shader\ninvocations that ",{"type":10,"tag":100,"props":532,"children":533},{"type":115},[],{"type":16,"value":535}," obey the requested ordering and atomicity rules of\nthe operation, as defined below.",{"type":10,"tag":22,"props":537,"children":538},{},[539,541,547],{"type":16,"value":540},"The various scopes are described in detail in ",{"type":10,"tag":28,"props":542,"children":544},{"href":543},"/chapters/shaders#shaders-scope",[545],{"type":16,"value":546},"the Shaders\nchapter",{"type":16,"value":35},{"type":10,"tag":37,"props":549,"children":551},{"id":550},"memory-model-atomic-operation",[552],{"type":16,"value":553},"Atomic Operation",{"type":10,"tag":22,"props":555,"children":556},{},[557,559,564,566,572],{"type":16,"value":558},"An ",{"type":10,"tag":47,"props":560,"children":561},{},[562],{"type":16,"value":563},"atomic operation",{"type":16,"value":565}," on the device is any SPIR-V operation whose name\nbegins with ",{"type":10,"tag":138,"props":567,"children":569},{"className":568},[],[570],{"type":16,"value":571},"OpAtomic",{"type":16,"value":573},".\nAn atomic operation on the host is any operation performed with an\nstd::atomic typed object.",{"type":10,"tag":22,"props":575,"children":576},{},[577,579,585,587,593,595,599,601,607],{"type":16,"value":578},"Each atomic operation has a memory ",{"type":10,"tag":28,"props":580,"children":582},{"href":581},"/chapters/memory-model#memory-model-scope",[583],{"type":16,"value":584},"scope",{"type":16,"value":586}," and a\n",{"type":10,"tag":28,"props":588,"children":590},{"href":589},"/chapters/memory-model#memory-model-memory-semantics",[591],{"type":16,"value":592},"semantics",{"type":16,"value":594},".\nInformally, the scope determines which other agents it is atomic with\nrespect to, and the ",{"type":10,"tag":28,"props":596,"children":597},{"href":589},[598],{"type":16,"value":592},{"type":16,"value":600}," constrains\nits ordering against other memory accesses.\nDevice atomic operations have explicit scopes and semantics.\nEach host atomic operation implicitly uses the ",{"type":10,"tag":138,"props":602,"children":604},{"className":603},[],[605],{"type":16,"value":606},"CrossDevice",{"type":16,"value":608}," scope, and\nuses a memory semantics equivalent to a C++ std::memory_order value of\nrelaxed, acquire, release, acq_rel, or seq_cst.",{"type":10,"tag":22,"props":610,"children":611},{},[612,614,619],{"type":16,"value":613},"Two atomic operations A and B are ",{"type":10,"tag":47,"props":615,"children":616},{},[617],{"type":16,"value":618},"potentially-mutually-ordered",{"type":16,"value":620}," if and only\nif all of the following are true:",{"type":10,"tag":185,"props":622,"children":623},{},[624,629,634,639,644],{"type":10,"tag":189,"props":625,"children":626},{},[627],{"type":16,"value":628},"They access the same set of memory locations.",{"type":10,"tag":189,"props":630,"children":631},{},[632],{"type":16,"value":633},"They use the same reference.",{"type":10,"tag":189,"props":635,"children":636},{},[637],{"type":16,"value":638},"A is in the instance of B’s memory scope.",{"type":10,"tag":189,"props":640,"children":641},{},[642],{"type":16,"value":643},"B is in the instance of A’s memory scope.",{"type":10,"tag":189,"props":645,"children":646},{},[647],{"type":16,"value":648},"A and B are not the same operation (irreflexive).",{"type":10,"tag":22,"props":650,"children":651},{},[652,653,658],{"type":16,"value":613},{"type":10,"tag":47,"props":654,"children":655},{},[656],{"type":16,"value":657},"mutually-ordered",{"type":16,"value":659}," if and only if they are\npotentially-mutually-ordered and any of the following are true:",{"type":10,"tag":185,"props":661,"children":662},{},[663,668,673],{"type":10,"tag":189,"props":664,"children":665},{},[666],{"type":16,"value":667},"A and B are both device operations.",{"type":10,"tag":189,"props":669,"children":670},{},[671],{"type":16,"value":672},"A and B are both host operations.",{"type":10,"tag":189,"props":674,"children":675},{},[676],{"type":16,"value":677},"A is a device operation, B is a host operation, and the implementation\nsupports concurrent host- and device-atomics.",{"type":10,"tag":18,"props":679,"children":680},{},[681],{"type":10,"tag":22,"props":682,"children":683},{},[684,686,689],{"type":16,"value":685},"If two atomic operations are not mutually-ordered, and if their sets of\nmemory locations overlap, then each ",{"type":10,"tag":100,"props":687,"children":688},{"type":115},[],{"type":16,"value":690}," be synchronized against the other\nas if they were non-atomic operations.",{"type":10,"tag":37,"props":692,"children":694},{"id":693},"memory-model-scoped-modification-order",[695],{"type":16,"value":696},"Scoped Modification Order",{"type":10,"tag":22,"props":698,"children":699},{},[700,702,707],{"type":16,"value":701},"For a given atomic write A, all atomic writes that are mutually-ordered with\nA occur in an order known as A’s ",{"type":10,"tag":47,"props":703,"children":704},{},[705],{"type":16,"value":706},"scoped modification order",{"type":16,"value":708},".\nA’s scoped modification order relates no other operations.",{"type":10,"tag":18,"props":710,"children":711},{},[712],{"type":10,"tag":22,"props":713,"children":714},{},[715,717,720],{"type":16,"value":716},"Invocations outside the instance of A’s memory scope ",{"type":10,"tag":100,"props":718,"children":719},{"type":102},[],{"type":16,"value":721}," observe the values\nat A’s set of memory locations becoming visible to it in an order that\ndisagrees with the scoped modification order.",{"type":10,"tag":18,"props":723,"children":724},{},[725],{"type":10,"tag":22,"props":726,"children":727},{},[728,730,736],{"type":16,"value":729},"It is valid to have non-atomic operations or atomics in a different scope\ninstance to the same set of memory locations, as long as they are\nsynchronized against each other as if they were non-atomic (if they are not,\nit is treated as a ",{"type":10,"tag":28,"props":731,"children":733},{"href":732},"/chapters/memory-model#memory-model-access-data-race",[734],{"type":16,"value":735},"data race",{"type":16,"value":737},").\nThat means this definition of A’s scoped modification order could include\natomic operations that occur much later, after intervening non-atomics.\nThat is a bit non-intuitive, but it helps to keep this definition simple and\nnon-circular.",{"type":10,"tag":37,"props":739,"children":741},{"id":740},"memory-model-memory-semantics",[742],{"type":16,"value":743},"Memory Semantics",{"type":10,"tag":22,"props":745,"children":746},{},[747,749,752],{"type":16,"value":748},"Non-atomic memory operations, by default, ",{"type":10,"tag":100,"props":750,"children":751},{"type":102},[],{"type":16,"value":753}," be observed by one agent in a\ndifferent order than they were written by another agent.",{"type":10,"tag":22,"props":755,"children":756},{},[757,759,764,766,772,774,777,779,782],{"type":16,"value":758},"Atomics and some synchronization operations include ",{"type":10,"tag":47,"props":760,"children":761},{},[762],{"type":16,"value":763},"memory semantics",{"type":16,"value":765},",\nwhich are flags that constrain the order in which other memory accesses\n(including non-atomic memory accesses and\n",{"type":10,"tag":28,"props":767,"children":769},{"href":768},"/chapters/memory-model#memory-model-availability-visibility",[770],{"type":16,"value":771},"availability and visibility\noperations",{"type":16,"value":773},") performed by the same agent ",{"type":10,"tag":100,"props":775,"children":776},{"type":263},[],{"type":16,"value":778}," be observed by other agents,\nor ",{"type":10,"tag":100,"props":780,"children":781},{"type":263},[],{"type":16,"value":783}," observe accesses by other agents.",{"type":10,"tag":22,"props":785,"children":786},{},[787,789,795,797,803,805,811,813,819],{"type":16,"value":788},"Device instructions that include semantics are ",{"type":10,"tag":138,"props":790,"children":792},{"className":791},[],[793],{"type":16,"value":794},"OpAtomic*",{"type":16,"value":796},",\n",{"type":10,"tag":138,"props":798,"children":800},{"className":799},[],[801],{"type":16,"value":802},"OpControlBarrier",{"type":16,"value":804},", ",{"type":10,"tag":138,"props":806,"children":808},{"className":807},[],[809],{"type":16,"value":810},"OpMemoryBarrier",{"type":16,"value":812},", and ",{"type":10,"tag":138,"props":814,"children":816},{"className":815},[],[817],{"type":16,"value":818},"OpMemoryNamedBarrier",{"type":16,"value":820},".\nHost instructions that include semantics are some std::atomic methods and\nmemory fences.",{"type":10,"tag":22,"props":822,"children":823},{},[824],{"type":16,"value":825},"SPIR-V supports the following memory semantics:",{"type":10,"tag":185,"props":827,"children":828},{},[829,834,852,870],{"type":10,"tag":189,"props":830,"children":831},{},[832],{"type":16,"value":833},"Relaxed: No constraints on order of other memory accesses.",{"type":10,"tag":189,"props":835,"children":836},{},[837,839,844,846,851],{"type":16,"value":838},"Acquire: A memory read with this semantic performs an ",{"type":10,"tag":47,"props":840,"children":841},{},[842],{"type":16,"value":843},"acquire\noperation",{"type":16,"value":845},".\nA memory barrier with this semantic is an ",{"type":10,"tag":47,"props":847,"children":848},{},[849],{"type":16,"value":850},"acquire barrier",{"type":16,"value":35},{"type":10,"tag":189,"props":853,"children":854},{},[855,857,862,864,869],{"type":16,"value":856},"Release: A memory write with this semantic performs a ",{"type":10,"tag":47,"props":858,"children":859},{},[860],{"type":16,"value":861},"release\noperation",{"type":16,"value":863},".\nA memory barrier with this semantic is a ",{"type":10,"tag":47,"props":865,"children":866},{},[867],{"type":16,"value":868},"release barrier",{"type":16,"value":35},{"type":10,"tag":189,"props":871,"children":872},{},[873],{"type":16,"value":874},"AcquireRelease: A memory read-modify-write operation with this semantic\nperforms both an acquire operation and a release operation, and inherits\nthe limitations on ordering from both of those operations.\nA memory barrier with this semantic is both a release and acquire\nbarrier.",{"type":10,"tag":18,"props":876,"children":877},{},[878],{"type":10,"tag":22,"props":879,"children":880},{},[881,883,889],{"type":16,"value":882},"SPIR-V does not support ",{"type":10,"tag":138,"props":884,"children":886},{"className":885},[],[887],{"type":16,"value":888},"consume",{"type":16,"value":890}," semantics on the device.",{"type":10,"tag":22,"props":892,"children":893},{},[894,896,901],{"type":16,"value":895},"The memory semantics operand also includes ",{"type":10,"tag":47,"props":897,"children":898},{},[899],{"type":16,"value":900},"storage class semantics",{"type":16,"value":902}," which\nindicate which storage classes are constrained by the synchronization.\nSPIR-V storage class semantics include:",{"type":10,"tag":185,"props":904,"children":905},{},[906,911,916,921],{"type":10,"tag":189,"props":907,"children":908},{},[909],{"type":16,"value":910},"UniformMemory",{"type":10,"tag":189,"props":912,"children":913},{},[914],{"type":16,"value":915},"WorkgroupMemory",{"type":10,"tag":189,"props":917,"children":918},{},[919],{"type":16,"value":920},"ImageMemory",{"type":10,"tag":189,"props":922,"children":923},{},[924],{"type":16,"value":925},"OutputMemory",{"type":10,"tag":22,"props":927,"children":928},{},[929],{"type":16,"value":930},"Each SPIR-V memory operation accesses a single storage class.\nSemantics in synchronization operations can include a combination of storage\nclasses.",{"type":10,"tag":22,"props":932,"children":933},{},[934,936,942],{"type":16,"value":935},"The UniformMemory storage class semantic applies to accesses to memory in\nthe\nPhysicalStorageBuffer,\n",{"type":10,"tag":138,"props":937,"children":939},{"className":938},[],[940],{"type":16,"value":941},"ShaderRecordBufferKHR",{"type":16,"value":943},",\nUniform and StorageBuffer storage classes.\nThe WorkgroupMemory storage class semantic applies to accesses to memory in\nthe Workgroup storage class.\nThe ImageMemory storage class semantic applies to accesses to memory in the\nImage storage class.\nThe OutputMemory storage class semantic applies to accesses to memory in the\nOutput storage class.",{"type":10,"tag":18,"props":945,"children":946},{},[947],{"type":10,"tag":22,"props":948,"children":949},{},[950],{"type":16,"value":951},"Informally, these constraints limit how memory operations can be reordered,\nand these limits apply not only to the order of accesses as performed in the\nagent that executes the instruction, but also to the order the effects of\nwrites become visible to all other agents within the same instance of the\ninstruction’s memory scope.",{"type":10,"tag":18,"props":953,"children":954},{},[955],{"type":10,"tag":22,"props":956,"children":957},{},[958,960,963],{"type":16,"value":959},"Release and acquire operations in different threads ",{"type":10,"tag":100,"props":961,"children":962},{"type":263},[],{"type":16,"value":964}," act as\nsynchronization operations, to guarantee that writes that happened before\nthe release are visible after the acquire.\n(This is not a formal definition, just an Informative forward reference.)",{"type":10,"tag":18,"props":966,"children":967},{},[968],{"type":10,"tag":22,"props":969,"children":970},{},[971],{"type":16,"value":972},"The OutputMemory storage class semantic is only useful in tessellation\ncontrol shaders, which is the only execution model where output variables\nare shared between invocations.",{"type":10,"tag":22,"props":974,"children":975},{},[976,978,981,983,988],{"type":16,"value":977},"The memory semantics operand ",{"type":10,"tag":100,"props":979,"children":980},{"type":263},[],{"type":16,"value":982}," also include availability and visibility\nflags, which apply availability and visibility operations as described in\n",{"type":10,"tag":28,"props":984,"children":985},{"href":768},[986],{"type":16,"value":987},"availability and visibility",{"type":16,"value":989},".\nThe availability/visibility flags are:",{"type":10,"tag":185,"props":991,"children":992},{},[993,1003],{"type":10,"tag":189,"props":994,"children":995},{},[996,998,1001],{"type":16,"value":997},"MakeAvailable: Semantics ",{"type":10,"tag":100,"props":999,"children":1000},{"type":115},[],{"type":16,"value":1002}," be Release or AcquireRelease.\nPerforms an availability operation before the release operation or\nbarrier.",{"type":10,"tag":189,"props":1004,"children":1005},{},[1006,1008,1011],{"type":16,"value":1007},"MakeVisible: Semantics ",{"type":10,"tag":100,"props":1009,"children":1010},{"type":115},[],{"type":16,"value":1012}," be Acquire or AcquireRelease.\nPerforms a visibility operation after the acquire operation or barrier.",{"type":10,"tag":22,"props":1014,"children":1015},{},[1016,1018,1024],{"type":16,"value":1017},"The specifics of these operations are defined in\n",{"type":10,"tag":28,"props":1019,"children":1021},{"href":1020},"/chapters/memory-model#memory-model-availability-visibility-semantics",[1022],{"type":16,"value":1023},"Availability and Visibility\nSemantics",{"type":16,"value":35},{"type":10,"tag":22,"props":1026,"children":1027},{},[1028,1030,1033],{"type":16,"value":1029},"Host atomic operations ",{"type":10,"tag":100,"props":1031,"children":1032},{"type":102},[],{"type":16,"value":1034}," support a different list of memory semantics and\nsynchronization operations, depending on the host architecture and source\nlanguage.",{"type":10,"tag":37,"props":1036,"children":1038},{"id":1037},"memory-model-release-sequence",[1039],{"type":16,"value":1040},"Release Sequence",{"type":10,"tag":22,"props":1042,"children":1043},{},[1044,1046,1051],{"type":16,"value":1045},"After an atomic operation A performs a release operation on a set of memory\nlocations M, the ",{"type":10,"tag":47,"props":1047,"children":1048},{},[1049],{"type":16,"value":1050},"release sequence headed by A",{"type":16,"value":1052}," is the longest continuous\nsubsequence of A’s scoped modification order that consists of:",{"type":10,"tag":185,"props":1054,"children":1055},{},[1056,1061],{"type":10,"tag":189,"props":1057,"children":1058},{},[1059],{"type":16,"value":1060},"the atomic operation A as its first element",{"type":10,"tag":189,"props":1062,"children":1063},{},[1064],{"type":16,"value":1065},"atomic read-modify-write operations on M by any agent",{"type":10,"tag":18,"props":1067,"children":1068},{},[1069],{"type":10,"tag":22,"props":1070,"children":1071},{},[1072,1074,1077],{"type":16,"value":1073},"The atomics in the last bullet ",{"type":10,"tag":100,"props":1075,"children":1076},{"type":115},[],{"type":16,"value":1078}," be mutually-ordered with A by virtue of\nbeing in A’s scoped modification order.",{"type":10,"tag":18,"props":1080,"children":1081},{},[1082],{"type":10,"tag":22,"props":1083,"children":1084},{},[1085,1087,1093],{"type":16,"value":1086},"This intentionally omits ",{"type":10,"tag":138,"props":1088,"children":1090},{"className":1089},[],[1091],{"type":16,"value":1092},"atomic writes to M performed by the same agent that performed A",{"type":16,"value":1094},", which is present in the corresponding C++ definition.",{"type":10,"tag":37,"props":1096,"children":1098},{"id":1097},"memory-model-synchronizes-with",[1099],{"type":16,"value":1100},"Synchronizes-With",{"type":10,"tag":22,"props":1102,"children":1103},{},[1104,1109],{"type":10,"tag":47,"props":1105,"children":1106},{},[1107],{"type":16,"value":1108},"Synchronizes-with",{"type":16,"value":1110}," is a relation between operations, where each operation\nis either an atomic operation or a memory barrier (aka fence on the host).",{"type":10,"tag":22,"props":1112,"children":1113},{},[1114],{"type":16,"value":1115},"If A and B are atomic operations, then A synchronizes-with B if and only if\nall of the following are true:",{"type":10,"tag":185,"props":1117,"children":1118},{},[1119,1124,1129,1134],{"type":10,"tag":189,"props":1120,"children":1121},{},[1122],{"type":16,"value":1123},"A performs a release operation",{"type":10,"tag":189,"props":1125,"children":1126},{},[1127],{"type":16,"value":1128},"B performs an acquire operation",{"type":10,"tag":189,"props":1130,"children":1131},{},[1132],{"type":16,"value":1133},"A and B are mutually-ordered",{"type":10,"tag":189,"props":1135,"children":1136},{},[1137],{"type":16,"value":1138},"B reads a value written by A or by an operation in the release sequence\nheaded by A",{"type":10,"tag":22,"props":1140,"children":1141},{},[1142,1147,1148,1153,1154,1159,1161,1166],{"type":10,"tag":138,"props":1143,"children":1145},{"className":1144},[],[1146],{"type":16,"value":802},{"type":16,"value":804},{"type":10,"tag":138,"props":1149,"children":1151},{"className":1150},[],[1152],{"type":16,"value":810},{"type":16,"value":812},{"type":10,"tag":138,"props":1155,"children":1157},{"className":1156},[],[1158],{"type":16,"value":818},{"type":16,"value":1160},"\nare ",{"type":10,"tag":47,"props":1162,"children":1163},{},[1164],{"type":16,"value":1165},"memory barrier",{"type":16,"value":1167}," instructions in SPIR-V.",{"type":10,"tag":22,"props":1169,"children":1170},{},[1171],{"type":16,"value":1172},"If A is a release barrier and B is an atomic operation that performs an\nacquire operation, then A synchronizes-with B if and only if all of the\nfollowing are true:",{"type":10,"tag":185,"props":1174,"children":1175},{},[1176,1181,1186,1191,1204,1209],{"type":10,"tag":189,"props":1177,"children":1178},{},[1179],{"type":16,"value":1180},"there exists an atomic write X (with any memory semantics)",{"type":10,"tag":189,"props":1182,"children":1183},{},[1184],{"type":16,"value":1185},"A is program-ordered before X",{"type":10,"tag":189,"props":1187,"children":1188},{},[1189],{"type":16,"value":1190},"X and B are mutually-ordered",{"type":10,"tag":189,"props":1192,"children":1193},{},[1194,1196],{"type":16,"value":1195},"B reads a value written by X or by an operation in the release sequence\nheaded by X",{"type":10,"tag":185,"props":1197,"children":1198},{},[1199],{"type":10,"tag":189,"props":1200,"children":1201},{},[1202],{"type":16,"value":1203},"If X is relaxed, it is still considered to head a hypothetical release\nsequence for this rule",{"type":10,"tag":189,"props":1205,"children":1206},{},[1207],{"type":16,"value":1208},"A and B are in the instance of each other’s memory scopes",{"type":10,"tag":189,"props":1210,"children":1211},{},[1212],{"type":16,"value":1213},"X’s storage class is in A’s semantics.",{"type":10,"tag":22,"props":1215,"children":1216},{},[1217],{"type":16,"value":1218},"If A is an atomic operation that performs a release operation and B is an\nacquire barrier, then A synchronizes-with B if and only if all of the\nfollowing are true:",{"type":10,"tag":185,"props":1220,"children":1221},{},[1222,1227,1232,1237,1242,1246],{"type":10,"tag":189,"props":1223,"children":1224},{},[1225],{"type":16,"value":1226},"there exists an atomic read X (with any memory semantics)",{"type":10,"tag":189,"props":1228,"children":1229},{},[1230],{"type":16,"value":1231},"X is program-ordered before B",{"type":10,"tag":189,"props":1233,"children":1234},{},[1235],{"type":16,"value":1236},"X and A are mutually-ordered",{"type":10,"tag":189,"props":1238,"children":1239},{},[1240],{"type":16,"value":1241},"X reads a value written by A or by an operation in the release sequence\nheaded by A",{"type":10,"tag":189,"props":1243,"children":1244},{},[1245],{"type":16,"value":1208},{"type":10,"tag":189,"props":1247,"children":1248},{},[1249],{"type":16,"value":1250},"X’s storage class is in B’s semantics.",{"type":10,"tag":22,"props":1252,"children":1253},{},[1254],{"type":16,"value":1255},"If A is a release barrier and B is an acquire barrier, then A\nsynchronizes-with B if all of the following are true:",{"type":10,"tag":185,"props":1257,"children":1258},{},[1259,1263,1267,1272,1277,1282,1294,1298],{"type":10,"tag":189,"props":1260,"children":1261},{},[1262],{"type":16,"value":1180},{"type":10,"tag":189,"props":1264,"children":1265},{},[1266],{"type":16,"value":1185},{"type":10,"tag":189,"props":1268,"children":1269},{},[1270],{"type":16,"value":1271},"there exists an atomic read Y (with any memory semantics)",{"type":10,"tag":189,"props":1273,"children":1274},{},[1275],{"type":16,"value":1276},"Y is program-ordered before B",{"type":10,"tag":189,"props":1278,"children":1279},{},[1280],{"type":16,"value":1281},"X and Y are mutually-ordered",{"type":10,"tag":189,"props":1283,"children":1284},{},[1285,1287],{"type":16,"value":1286},"Y reads the value written by X or by an operation in the release\nsequence headed by X",{"type":10,"tag":185,"props":1288,"children":1289},{},[1290],{"type":10,"tag":189,"props":1291,"children":1292},{},[1293],{"type":16,"value":1203},{"type":10,"tag":189,"props":1295,"children":1296},{},[1297],{"type":16,"value":1208},{"type":10,"tag":189,"props":1299,"children":1300},{},[1301,1303],{"type":16,"value":1302},"X’s and Y’s storage class is in A’s and B’s semantics.",{"type":10,"tag":185,"props":1304,"children":1305},{},[1306],{"type":10,"tag":189,"props":1307,"children":1308},{},[1309,1311,1314],{"type":16,"value":1310},"NOTE: X and Y ",{"type":10,"tag":100,"props":1312,"children":1313},{"type":115},[],{"type":16,"value":1315}," have the same storage class, because they are\nmutually ordered.",{"type":10,"tag":22,"props":1317,"children":1318},{},[1319,1321,1324,1326,1329],{"type":16,"value":1320},"If A is a release barrier, B is an acquire barrier, and C is a control\nbarrier (where A ",{"type":10,"tag":100,"props":1322,"children":1323},{"type":263},[],{"type":16,"value":1325}," equal C, and B ",{"type":10,"tag":100,"props":1327,"children":1328},{"type":263},[],{"type":16,"value":1330}," equal C), then A synchronizes-with\nB if all of the following are true:",{"type":10,"tag":185,"props":1332,"children":1333},{},[1334,1339,1344,1348],{"type":10,"tag":189,"props":1335,"children":1336},{},[1337],{"type":16,"value":1338},"A is program-ordered before (or equals) C",{"type":10,"tag":189,"props":1340,"children":1341},{},[1342],{"type":16,"value":1343},"C is program-ordered before (or equals) B",{"type":10,"tag":189,"props":1345,"children":1346},{},[1347],{"type":16,"value":1208},{"type":10,"tag":189,"props":1349,"children":1350},{},[1351],{"type":16,"value":1352},"A and B are in the instance of C’s execution scope",{"type":10,"tag":18,"props":1354,"children":1355},{},[1356],{"type":10,"tag":22,"props":1357,"children":1358},{},[1359],{"type":16,"value":1360},"This is similar to the barrier-barrier synchronization above, but with a\ncontrol barrier filling the role of the relaxed atomics.",{"type":10,"tag":22,"props":1362,"children":1363},{},[1364,1366,1372,1374,1379,1381,1385,1387,1391,1393,1399,1400,1404,1406,1410],{"type":16,"value":1365},"Let F be an ordering of fragment shader invocations, such that invocation\nF",{"type":10,"tag":1367,"props":1368,"children":1369},"sub",{},[1370],{"type":16,"value":1371},"1",{"type":16,"value":1373}," is ordered before invocation F",{"type":10,"tag":1367,"props":1375,"children":1376},{},[1377],{"type":16,"value":1378},"2",{"type":16,"value":1380}," if and only if F",{"type":10,"tag":1367,"props":1382,"children":1383},{},[1384],{"type":16,"value":1371},{"type":16,"value":1386}," and F",{"type":10,"tag":1367,"props":1388,"children":1389},{},[1390],{"type":16,"value":1378},{"type":16,"value":1392}," overlap\nas described in ",{"type":10,"tag":28,"props":1394,"children":1396},{"href":1395},"/chapters/shaders#shaders-scope-fragment-interlock",[1397],{"type":16,"value":1398},"Fragment Shader\nInterlock",{"type":16,"value":1386},{"type":10,"tag":1367,"props":1401,"children":1402},{},[1403],{"type":16,"value":1371},{"type":16,"value":1405}," executes the interlocked code before F",{"type":10,"tag":1367,"props":1407,"children":1408},{},[1409],{"type":16,"value":1378},{"type":16,"value":35},{"type":10,"tag":22,"props":1412,"children":1413},{},[1414,1416,1422,1424,1430,1432,1438],{"type":16,"value":1415},"If A is an ",{"type":10,"tag":138,"props":1417,"children":1419},{"className":1418},[],[1420],{"type":16,"value":1421},"OpEndInvocationInterlockEXT",{"type":16,"value":1423}," instruction and B is an\n",{"type":10,"tag":138,"props":1425,"children":1427},{"className":1426},[],[1428],{"type":16,"value":1429},"OpBeginInvocationInterlockEXT",{"type":16,"value":1431}," instruction, then A synchronizes-with B\nif the agent that executes A is ordered before the agent that executes B in\nF. A and B are both considered to have ",{"type":10,"tag":138,"props":1433,"children":1435},{"className":1434},[],[1436],{"type":16,"value":1437},"FragmentInterlock",{"type":16,"value":1439}," memory scope\nand semantics of UniformMemory and ImageMemory, and A is considered to have\nRelease semantics and B is considered to have Acquire semantics.",{"type":10,"tag":18,"props":1441,"children":1442},{},[1443],{"type":10,"tag":22,"props":1444,"children":1445},{},[1446,1451,1453,1458,1460,1466,1468,1474],{"type":10,"tag":138,"props":1447,"children":1449},{"className":1448},[],[1450],{"type":16,"value":1429},{"type":16,"value":1452}," and ",{"type":10,"tag":138,"props":1454,"children":1456},{"className":1455},[],[1457],{"type":16,"value":1429},{"type":16,"value":1459}," do\nnot perform implicit availability or visibility operations.\nUsually, shaders using fragment shader interlock will declare the relevant\nresources as ",{"type":10,"tag":138,"props":1461,"children":1463},{"className":1462},[],[1464],{"type":16,"value":1465},"coherent",{"type":16,"value":1467}," to get implicit\n",{"type":10,"tag":28,"props":1469,"children":1471},{"href":1470},"/chapters/memory-model#memory-model-instruction-av-vis",[1472],{"type":16,"value":1473},"per-instruction availability and\nvisibility operations",{"type":16,"value":35},{"type":10,"tag":22,"props":1476,"children":1477},{},[1478],{"type":16,"value":1255},{"type":10,"tag":185,"props":1480,"children":1481},{},[1482,1487],{"type":10,"tag":189,"props":1483,"children":1484},{},[1485],{"type":16,"value":1486},"A is shader-call-ordered-before B",{"type":10,"tag":189,"props":1488,"children":1489},{},[1490],{"type":16,"value":1208},{"type":10,"tag":22,"props":1492,"children":1493},{},[1494],{"type":16,"value":1495},"No other release and acquire barriers synchronize-with each other.",{"type":10,"tag":37,"props":1497,"children":1499},{"id":1498},"memory-model-system-synchronizes-with",[1500],{"type":16,"value":1501},"System-Synchronizes-With",{"type":10,"tag":22,"props":1503,"children":1504},{},[1505,1510],{"type":10,"tag":47,"props":1506,"children":1507},{},[1508],{"type":16,"value":1509},"System-synchronizes-with",{"type":16,"value":1511}," is a relation between arbitrary operations on the\ndevice or host.\nCertain operations system-synchronize-with each other, which informally\nmeans the first operation occurs before the second and that the\nsynchronization is performed without using application-visible memory\naccesses.",{"type":10,"tag":22,"props":1513,"children":1514},{},[1515,1517,1523],{"type":16,"value":1516},"If there is an ",{"type":10,"tag":28,"props":1518,"children":1520},{"href":1519},"/chapters/synchronization#synchronization-dependencies-execution",[1521],{"type":16,"value":1522},"execution\ndependency",{"type":16,"value":1524}," between two operations A and B, then the operation in the first\nsynchronization scope system-synchronizes-with the operation in the second\nsynchronization scope.",{"type":10,"tag":18,"props":1526,"children":1527},{},[1528],{"type":10,"tag":22,"props":1529,"children":1530},{},[1531,1533,1539],{"type":16,"value":1532},"This covers all Vulkan synchronization primitives, including device\noperations executing before a synchronization primitive is signaled, wait\noperations happening before subsequent device operations, signal operations\nhappening before host operations that wait on them, and host operations\nhappening before ",{"type":10,"tag":28,"props":1534,"children":1536},{"href":1535},"/man/vkQueueSubmit",[1537],{"type":16,"value":1538},"vkQueueSubmit",{"type":16,"value":1540},".\nThe list is spread throughout the synchronization chapter, and is not\nrepeated here.",{"type":10,"tag":22,"props":1542,"children":1543},{},[1544,1546,1551],{"type":16,"value":1545},"System-synchronizes-with implicitly includes all storage class semantics and\nhas ",{"type":10,"tag":138,"props":1547,"children":1549},{"className":1548},[],[1550],{"type":16,"value":606},{"type":16,"value":1552}," scope.",{"type":10,"tag":22,"props":1554,"children":1555},{},[1556,1558,1563,1565,1570],{"type":16,"value":1557},"If A system-synchronizes-with B, we also say A is\n",{"type":10,"tag":47,"props":1559,"children":1560},{},[1561],{"type":16,"value":1562},"system-synchronized-before",{"type":16,"value":1564}," B and B is ",{"type":10,"tag":47,"props":1566,"children":1567},{},[1568],{"type":16,"value":1569},"system-synchronized-after",{"type":16,"value":1571}," A.",{"type":10,"tag":37,"props":1573,"children":1575},{"id":1574},"memory-model-non-private",[1576],{"type":16,"value":1577},"Private vs. Non-Private",{"type":10,"tag":22,"props":1579,"children":1580},{},[1581,1583,1588,1590,1595],{"type":16,"value":1582},"By default, non-atomic memory operations are treated as ",{"type":10,"tag":47,"props":1584,"children":1585},{},[1586],{"type":16,"value":1587},"private",{"type":16,"value":1589},", meaning\nsuch a memory operation is not intended to be used for communication with\nother agents.\nMemory operations with the NonPrivatePointer/NonPrivateTexel bit set are\ntreated as ",{"type":10,"tag":47,"props":1591,"children":1592},{},[1593],{"type":16,"value":1594},"non-private",{"type":16,"value":1596},", and are intended to be used for communication with\nother agents.",{"type":10,"tag":22,"props":1598,"children":1599},{},[1600,1602,1607],{"type":16,"value":1601},"More precisely, for private memory operations to be\n",{"type":10,"tag":28,"props":1603,"children":1604},{"href":342},[1605],{"type":16,"value":1606},"Location-Ordered",{"type":16,"value":1608}," between distinct agents\nrequires using system-synchronizes-with rather than shader-based\nsynchronization.\nPrivate memory operations still obey program-order.",{"type":10,"tag":22,"props":1610,"children":1611},{},[1612],{"type":16,"value":1613},"Atomic operations are always considered non-private.",{"type":10,"tag":37,"props":1615,"children":1617},{"id":1616},"memory-model-inter-thread-happens-before",[1618],{"type":16,"value":1619},"Inter-Thread-Happens-Before",{"type":10,"tag":22,"props":1621,"children":1622},{},[1623,1625,1630],{"type":16,"value":1624},"Let SC be a non-empty set of storage class semantics.\nThen (using template syntax) operation A ",{"type":10,"tag":47,"props":1626,"children":1627},{},[1628],{"type":16,"value":1629},"inter-thread-happens-before",{"type":16,"value":1631},"\u003CSC>\noperation B if and only if any of the following is true:",{"type":10,"tag":185,"props":1633,"children":1634},{},[1635,1640,1645,1650,1655,1660],{"type":10,"tag":189,"props":1636,"children":1637},{},[1638],{"type":16,"value":1639},"A system-synchronizes-with B",{"type":10,"tag":189,"props":1641,"children":1642},{},[1643],{"type":16,"value":1644},"A synchronizes-with B, and both A and B have all of SC in their\nsemantics",{"type":10,"tag":189,"props":1646,"children":1647},{},[1648],{"type":16,"value":1649},"A is an operation on memory in a storage class in SC or that has all of\nSC in its semantics, B is a release barrier or release atomic with all\nof SC in its semantics, and A is program-ordered before B",{"type":10,"tag":189,"props":1651,"children":1652},{},[1653],{"type":16,"value":1654},"A is an acquire barrier or acquire atomic with all of SC in its\nsemantics, B is an operation on memory in a storage class in SC or that\nhas all of SC in its semantics, and A is program-ordered before B",{"type":10,"tag":189,"props":1656,"children":1657},{},[1658],{"type":16,"value":1659},"A and B are both host operations and A inter-thread-happens-before B as\ndefined in the host language specification",{"type":10,"tag":189,"props":1661,"children":1662},{},[1663],{"type":16,"value":1664},"A inter-thread-happens-before\u003CSC> some X and X\ninter-thread-happens-before\u003CSC> B",{"type":10,"tag":37,"props":1666,"children":1668},{"id":1667},"memory-model-happens-before",[1669],{"type":16,"value":1670},"Happens-Before",{"type":10,"tag":22,"props":1672,"children":1673},{},[1674,1676,1681],{"type":16,"value":1675},"Operation A ",{"type":10,"tag":47,"props":1677,"children":1678},{},[1679],{"type":16,"value":1680},"happens-before",{"type":16,"value":1682}," operation B if and only if any of the following\nis true:",{"type":10,"tag":185,"props":1684,"children":1685},{},[1686,1691],{"type":10,"tag":189,"props":1687,"children":1688},{},[1689],{"type":16,"value":1690},"A is program-ordered before B",{"type":10,"tag":189,"props":1692,"children":1693},{},[1694],{"type":16,"value":1695},"A inter-thread-happens-before\u003CSC> B for some set of storage classes SC",{"type":10,"tag":22,"props":1697,"children":1698},{},[1699,1704],{"type":10,"tag":47,"props":1700,"children":1701},{},[1702],{"type":16,"value":1703},"Happens-after",{"type":16,"value":1705}," is defined similarly.",{"type":10,"tag":18,"props":1707,"children":1708},{},[1709],{"type":10,"tag":22,"props":1710,"children":1711},{},[1712,1714,1719,1721,1724,1726,1732],{"type":16,"value":1713},"Unlike C++, happens-before is not always sufficient for a write to be\nvisible to a read.\nAdditional ",{"type":10,"tag":28,"props":1715,"children":1716},{"href":768},[1717],{"type":16,"value":1718},"availability and\nvisibility",{"type":16,"value":1720}," operations ",{"type":10,"tag":100,"props":1722,"children":1723},{"type":102},[],{"type":16,"value":1725}," be required for writes to be\n",{"type":10,"tag":28,"props":1727,"children":1729},{"href":1728},"/chapters/memory-model#memory-model-visible-to",[1730],{"type":16,"value":1731},"visible-to",{"type":16,"value":1733}," other memory accesses.",{"type":10,"tag":18,"props":1735,"children":1736},{},[1737],{"type":10,"tag":22,"props":1738,"children":1739},{},[1740,1742,1748,1750,1756],{"type":16,"value":1741},"Happens-before is not transitive, but each of program-order and\ninter-thread-happens-before\u003CSC> are transitive.\nThese can be thought of as covering the ",{"type":10,"tag":138,"props":1743,"children":1745},{"className":1744},[],[1746],{"type":16,"value":1747},"single-threaded",{"type":16,"value":1749}," case and the\n",{"type":10,"tag":138,"props":1751,"children":1753},{"className":1752},[],[1754],{"type":16,"value":1755},"multi-threaded",{"type":16,"value":1757}," case, and it is not necessary (and not valid) to form\nchains between the two.",{"type":10,"tag":37,"props":1759,"children":1761},{"id":1760},"memory-model-availability-visibility",[1762],{"type":16,"value":1763},"Availability and Visibility",{"type":10,"tag":22,"props":1765,"children":1766},{},[1767,1772,1773,1778,1780,1785],{"type":10,"tag":47,"props":1768,"children":1769},{},[1770],{"type":16,"value":1771},"Availability",{"type":16,"value":1452},{"type":10,"tag":47,"props":1774,"children":1775},{},[1776],{"type":16,"value":1777},"visibility",{"type":16,"value":1779}," are states of a write operation, which\n(informally) track how far the write has permeated the system, i.e. which\nagents and references are able to observe the write.\nAvailability state is per ",{"type":10,"tag":47,"props":1781,"children":1782},{},[1783],{"type":16,"value":1784},"memory domain",{"type":16,"value":1786},".\nVisibility state is per (agent,reference) pair.\nAvailability and visibility states are per-memory location for each write.",{"type":10,"tag":22,"props":1788,"children":1789},{},[1790,1792,1797,1799,1804],{"type":16,"value":1791},"Memory domains are named according to the agents whose memory accesses use\nthe domain.\nDomains used by shader invocations are organized hierarchically into\nmultiple smaller memory domains which correspond to the different\n",{"type":10,"tag":28,"props":1793,"children":1794},{"href":543},[1795],{"type":16,"value":1796},"scopes",{"type":16,"value":1798},".\nEach memory domain is considered the ",{"type":10,"tag":47,"props":1800,"children":1801},{},[1802],{"type":16,"value":1803},"dual",{"type":16,"value":1805}," of a scope, and vice versa.\nThe memory domains defined in Vulkan include:",{"type":10,"tag":185,"props":1807,"children":1808},{},[1809,1819,1829,1847,1864,1886,1909,1925],{"type":10,"tag":189,"props":1810,"children":1811},{},[1812,1817],{"type":10,"tag":47,"props":1813,"children":1814},{},[1815],{"type":16,"value":1816},"host",{"type":16,"value":1818}," - accessible by host agents",{"type":10,"tag":189,"props":1820,"children":1821},{},[1822,1827],{"type":10,"tag":47,"props":1823,"children":1824},{},[1825],{"type":16,"value":1826},"device",{"type":16,"value":1828}," - accessible by all device agents for a particular device",{"type":10,"tag":189,"props":1830,"children":1831},{},[1832,1837,1839,1845],{"type":10,"tag":47,"props":1833,"children":1834},{},[1835],{"type":16,"value":1836},"shader",{"type":16,"value":1838}," - accessible by shader agents for a particular device,\ncorresponding to the ",{"type":10,"tag":138,"props":1840,"children":1842},{"className":1841},[],[1843],{"type":16,"value":1844},"Device",{"type":16,"value":1846}," scope",{"type":10,"tag":189,"props":1848,"children":1849},{},[1850,1855,1857,1863],{"type":10,"tag":47,"props":1851,"children":1852},{},[1853],{"type":16,"value":1854},"queue family instance",{"type":16,"value":1856}," - accessible by shader agents in a single queue\nfamily, corresponding to the ",{"type":10,"tag":138,"props":1858,"children":1860},{"className":1859},[],[1861],{"type":16,"value":1862},"QueueFamily",{"type":16,"value":1552},{"type":10,"tag":189,"props":1865,"children":1866},{},[1867,1872,1874,1878,1880,1885],{"type":10,"tag":47,"props":1868,"children":1869},{},[1870],{"type":16,"value":1871},"fragment interlock instance",{"type":16,"value":1873}," - accessible by fragment shader agents\nthat ",{"type":10,"tag":28,"props":1875,"children":1876},{"href":1395},[1877],{"type":16,"value":110},{"type":16,"value":1879},", corresponding to the\n",{"type":10,"tag":138,"props":1881,"children":1883},{"className":1882},[],[1884],{"type":16,"value":1437},{"type":16,"value":1552},{"type":10,"tag":189,"props":1887,"children":1888},{},[1889,1894,1896,1901,1902,1908],{"type":10,"tag":47,"props":1890,"children":1891},{},[1892],{"type":16,"value":1893},"shader call instance",{"type":16,"value":1895}," - accessible by shader agents that are\n",{"type":10,"tag":28,"props":1897,"children":1899},{"href":1898},"/chapters/memory-model#shader-call-related",[1900],{"type":16,"value":444},{"type":16,"value":1879},{"type":10,"tag":138,"props":1903,"children":1905},{"className":1904},[],[1906],{"type":16,"value":1907},"ShaderCallKHR",{"type":16,"value":1552},{"type":10,"tag":189,"props":1910,"children":1911},{},[1912,1917,1919,1924],{"type":10,"tag":47,"props":1913,"children":1914},{},[1915],{"type":16,"value":1916},"workgroup instance",{"type":16,"value":1918}," - accessible by shader agents in the same\nworkgroup, corresponding to the ",{"type":10,"tag":138,"props":1920,"children":1922},{"className":1921},[],[1923],{"type":16,"value":143},{"type":16,"value":1552},{"type":10,"tag":189,"props":1926,"children":1927},{},[1928,1933,1935,1941],{"type":10,"tag":47,"props":1929,"children":1930},{},[1931],{"type":16,"value":1932},"subgroup instance",{"type":16,"value":1934}," - accessible by shader agents in the same subgroup,\ncorresponding to the ",{"type":10,"tag":138,"props":1936,"children":1938},{"className":1937},[],[1939],{"type":16,"value":1940},"Subgroup",{"type":16,"value":1552},{"type":10,"tag":22,"props":1943,"children":1944},{},[1945],{"type":16,"value":1946},"The memory domains are nested in the order listed above,\nexcept for shader call instance domain,\nwith memory domains later in the list nested in the domains earlier in the\nlist.\nThe shader call instance domain is at an implementation-dependent location\nin the list, and is nested according to that location.\nThe shader call instance domain is not broader than the queue family\ninstance domain.",{"type":10,"tag":18,"props":1948,"children":1949},{},[1950],{"type":10,"tag":22,"props":1951,"children":1952},{},[1953,1955,1959],{"type":16,"value":1954},"Memory domains do not correspond to storage classes or device-local and\nhost-local ",{"type":10,"tag":28,"props":1956,"children":1957},{"href":126},[1958],{"type":16,"value":129},{"type":16,"value":1960}," allocations, rather they indicate whether a\nwrite can be made visible only to agents in the same subgroup, same\nworkgroup,\noverlapping fragment shader invocation,\nshader-call-related ray tracing invocation,\nin any shader invocation, or anywhere on the device, or host.\nThe shader, queue family instance,\nfragment interlock instance,\nshader call instance,\nworkgroup instance, and subgroup instance domains are only used for\nshader-based availability/visibility operations, in other cases writes can\nbe made available from/visible to the shader via the device domain.",{"type":10,"tag":22,"props":1962,"children":1963},{},[1964,1969,1970,1975,1976,1981,1983,1988,1990,1995],{"type":10,"tag":47,"props":1965,"children":1966},{},[1967],{"type":16,"value":1968},"Availability operations",{"type":16,"value":804},{"type":10,"tag":47,"props":1971,"children":1972},{},[1973],{"type":16,"value":1974},"visibility operations",{"type":16,"value":812},{"type":10,"tag":47,"props":1977,"children":1978},{},[1979],{"type":16,"value":1980},"memory domain\noperations",{"type":16,"value":1982}," alter the state of the write operations that happen-before them,\nand which are included in their ",{"type":10,"tag":47,"props":1984,"children":1985},{},[1986],{"type":16,"value":1987},"source scope",{"type":16,"value":1989}," to be available or visible to\ntheir ",{"type":10,"tag":47,"props":1991,"children":1992},{},[1993],{"type":16,"value":1994},"destination scope",{"type":16,"value":35},{"type":10,"tag":185,"props":1997,"children":1998},{},[1999,2004,2009],{"type":10,"tag":189,"props":2000,"children":2001},{},[2002],{"type":16,"value":2003},"For an availability operation, the source scope is a set of\n(agent,reference,memory location) tuples, and the destination scope is a\nset of memory domains.",{"type":10,"tag":189,"props":2005,"children":2006},{},[2007],{"type":16,"value":2008},"For a memory domain operation, the source scope is a memory domain and\nthe destination scope is a memory domain.",{"type":10,"tag":189,"props":2010,"children":2011},{},[2012],{"type":16,"value":2013},"For a visibility operation, the source scope is a set of memory domains\nand the destination scope is a set of (agent,reference,memory location)\ntuples.",{"type":10,"tag":22,"props":2015,"children":2016},{},[2017],{"type":16,"value":2018},"How the scopes are determined depends on the specific operation.\nAvailability and memory domain operations expand the set of memory domains\nto which the write is available.\nVisibility operations expand the set of (agent,reference,memory location)\ntuples to which the write is visible.",{"type":10,"tag":22,"props":2020,"children":2021},{},[2022,2024,2029],{"type":16,"value":2023},"Recall that availability and visibility states are per-memory location, and\nlet W be a write operation to one or more locations performed by agent A via\nreference R. Let L be one of the locations written.\n(W,L) (the write W to L), is initially not available to any memory domain\nand only visible to (A,R,L).\nAn availability operation AV that happens-after W and that includes (A,R,L)\nin its source scope makes (W,L) ",{"type":10,"tag":47,"props":2025,"children":2026},{},[2027],{"type":16,"value":2028},"available",{"type":16,"value":2030}," to the memory domains in its\ndestination scope.",{"type":10,"tag":22,"props":2032,"children":2033},{},[2034],{"type":16,"value":2035},"A memory domain operation DOM that happens-after AV and for which (W,L) is\navailable in the source scope makes (W,L) available in the destination\nmemory domain.",{"type":10,"tag":22,"props":2037,"children":2038},{},[2039,2041,2046],{"type":16,"value":2040},"A visibility operation VIS that happens-after AV (or DOM) and for which\n(W,L) is available in any domain in the source scope makes (W,L) ",{"type":10,"tag":47,"props":2042,"children":2043},{},[2044],{"type":16,"value":2045},"visible",{"type":16,"value":2047},"\nto all (agent,reference,L) tuples included in its destination scope.",{"type":10,"tag":22,"props":2049,"children":2050},{},[2051,2053,2057],{"type":16,"value":2052},"If write W",{"type":10,"tag":1367,"props":2054,"children":2055},{},[2056],{"type":16,"value":1378},{"type":16,"value":2058}," happens-after W, and their sets of memory locations overlap,\nthen W will not be available/visible to all agents/references for those\nmemory locations that overlap (and future AV/DOM/VIS ops cannot revive W’s\nwrite to those locations).",{"type":10,"tag":22,"props":2060,"children":2061},{},[2062,2064,2068],{"type":16,"value":2063},"Availability, memory domain, and visibility operations are treated like\nother non-atomic memory accesses for the purpose of\n",{"type":10,"tag":28,"props":2065,"children":2066},{"href":589},[2067],{"type":16,"value":763},{"type":16,"value":2069},", meaning they can be\nordered by release-acquire sequences or memory barriers.",{"type":10,"tag":22,"props":2071,"children":2072},{},[2073,2074,2079,2081,2085],{"type":16,"value":558},{"type":10,"tag":47,"props":2075,"children":2076},{},[2077],{"type":16,"value":2078},"availability chain",{"type":16,"value":2080}," is a sequence of availability operations to\nincreasingly broad memory domains, where element N+1 of the chain is\nperformed in the dual scope instance of the destination memory domain of\nelement N and element N happens-before element N+1.\nAn example is an availability operation with destination scope of the\nworkgroup instance domain that happens-before an availability operation to\nthe shader domain performed by an invocation in the same workgroup.\nAn availability chain AVC that happens-after W and that includes (A,R,L) in\nthe source scope makes (W,L) ",{"type":10,"tag":47,"props":2082,"children":2083},{},[2084],{"type":16,"value":2028},{"type":16,"value":2086}," to the memory domains in its final\ndestination scope.\nAn availability chain with a single element is just the availability\noperation.",{"type":10,"tag":22,"props":2088,"children":2089},{},[2090,2092,2097,2099,2103],{"type":16,"value":2091},"Similarly, a ",{"type":10,"tag":47,"props":2093,"children":2094},{},[2095],{"type":16,"value":2096},"visibility chain",{"type":16,"value":2098}," is a sequence of visibility operations from\nincreasingly narrow memory domains, where element N of the chain is\nperformed in the dual scope instance of the source memory domain of element\nN+1 and element N happens-before element N+1.\nAn example is a visibility operation with source scope of the shader domain\nthat happens-before a visibility operation with source scope of the\nworkgroup instance domain performed by an invocation in the same workgroup.\nA visibility chain VISC that happens-after AVC (or DOM) and for which (W,L)\nis available in any domain in the source scope makes (W,L) ",{"type":10,"tag":47,"props":2100,"children":2101},{},[2102],{"type":16,"value":2045},{"type":16,"value":2104}," to all\n(agent,reference,L) tuples included in its final destination scope.\nA visibility chain with a single element is just the visibility operation.",{"type":10,"tag":37,"props":2106,"children":2108},{"id":2107},"memory-model-vulkan-availability-visibility",[2109],{"type":16,"value":2110},"Availability, Visibility, and Domain Operations",{"type":10,"tag":22,"props":2112,"children":2113},{},[2114],{"type":16,"value":2115},"The following operations generate availability, visibility, and domain\noperations.\nWhen multiple availability/visibility/domain operations are described, they\nare system-synchronized-with each other in the order listed.",{"type":10,"tag":22,"props":2117,"children":2118},{},[2119,2121,2127],{"type":16,"value":2120},"An operation that performs a ",{"type":10,"tag":28,"props":2122,"children":2124},{"href":2123},"/chapters/synchronization#synchronization-dependencies-memory",[2125],{"type":16,"value":2126},"memory\ndependency",{"type":16,"value":2128}," generates:",{"type":10,"tag":185,"props":2130,"children":2131},{},[2132,2145,2158,2163],{"type":10,"tag":189,"props":2133,"children":2134},{},[2135,2137,2143],{"type":16,"value":2136},"If the source access mask includes ",{"type":10,"tag":138,"props":2138,"children":2140},{"className":2139},[],[2141],{"type":16,"value":2142},"VK_ACCESS_HOST_WRITE_BIT",{"type":16,"value":2144},", then\nthe dependency includes a memory domain operation from host domain to\ndevice domain.",{"type":10,"tag":189,"props":2146,"children":2147},{},[2148,2150,2156],{"type":16,"value":2149},"An availability operation with source scope of all writes in the first\n",{"type":10,"tag":28,"props":2151,"children":2153},{"href":2152},"/chapters/synchronization#synchronization-dependencies-access-scopes",[2154],{"type":16,"value":2155},"access scope",{"type":16,"value":2157}," of the\ndependency and a destination scope of the device domain.",{"type":10,"tag":189,"props":2159,"children":2160},{},[2161],{"type":16,"value":2162},"A visibility operation with source scope of the device domain and\ndestination scope of the second access scope of the dependency.",{"type":10,"tag":189,"props":2164,"children":2165},{},[2166,2168,2174,2176,2181],{"type":16,"value":2167},"If the destination access mask includes ",{"type":10,"tag":138,"props":2169,"children":2171},{"className":2170},[],[2172],{"type":16,"value":2173},"VK_ACCESS_HOST_READ_BIT",{"type":16,"value":2175}," or\n",{"type":10,"tag":138,"props":2177,"children":2179},{"className":2178},[],[2180],{"type":16,"value":2142},{"type":16,"value":2182},", then the dependency includes a memory\ndomain operation from device domain to host domain.",{"type":10,"tag":22,"props":2184,"children":2185},{},[2186,2192],{"type":10,"tag":28,"props":2187,"children":2189},{"href":2188},"/man/vkFlushMappedMemoryRanges",[2190],{"type":16,"value":2191},"vkFlushMappedMemoryRanges",{"type":16,"value":2193}," performs an availability operation, with a\nsource scope of (agents,references) = (all host threads, all mapped memory\nranges passed to the command), and destination scope of the host domain.",{"type":10,"tag":22,"props":2195,"children":2196},{},[2197,2203],{"type":10,"tag":28,"props":2198,"children":2200},{"href":2199},"/man/vkInvalidateMappedMemoryRanges",[2201],{"type":16,"value":2202},"vkInvalidateMappedMemoryRanges",{"type":16,"value":2204}," performs a visibility operation, with a\nsource scope of the host domain and a destination scope of\n(agents,references) = (all host threads, all mapped memory ranges passed to\nthe command).",{"type":10,"tag":22,"props":2206,"children":2207},{},[2208,2212],{"type":10,"tag":28,"props":2209,"children":2210},{"href":1535},[2211],{"type":16,"value":1538},{"type":16,"value":2213}," performs a memory domain operation from host to device,\nand a visibility operation with source scope of the device domain and\ndestination scope of all agents and references on the device.",{"type":10,"tag":37,"props":2215,"children":2217},{"id":2216},"memory-model-availability-visibility-semantics",[2218],{"type":16,"value":2219},"Availability and Visibility Semantics",{"type":10,"tag":22,"props":2221,"children":2222},{},[2223],{"type":16,"value":2224},"A memory barrier or atomic operation via agent A that includes MakeAvailable\nin its semantics performs an availability operation whose source scope\nincludes agent A and all references in the storage classes in that\ninstruction’s storage class semantics, and all memory locations, and whose\ndestination scope is a set of memory domains selected as specified below.\nThe implicit availability operation is program-ordered between the barrier\nor atomic and all other operations program-ordered before the barrier or\natomic.",{"type":10,"tag":22,"props":2226,"children":2227},{},[2228],{"type":16,"value":2229},"A memory barrier or atomic operation via agent A that includes MakeVisible\nin its semantics performs a visibility operation whose source scope is a set\nof memory domains selected as specified below, and whose destination scope\nincludes agent A and all references in the storage classes in that\ninstruction’s storage class semantics, and all memory locations.\nThe implicit visibility operation is program-ordered between the barrier or\natomic and all other operations program-ordered after the barrier or atomic.",{"type":10,"tag":22,"props":2231,"children":2232},{},[2233],{"type":16,"value":2234},"The memory domains are selected based on the memory scope of the instruction\nas follows:",{"type":10,"tag":185,"props":2236,"children":2237},{},[2238,2248,2258,2268,2278,2288,2298],{"type":10,"tag":189,"props":2239,"children":2240},{},[2241,2246],{"type":10,"tag":138,"props":2242,"children":2244},{"className":2243},[],[2245],{"type":16,"value":1844},{"type":16,"value":2247}," scope uses the shader domain",{"type":10,"tag":189,"props":2249,"children":2250},{},[2251,2256],{"type":10,"tag":138,"props":2252,"children":2254},{"className":2253},[],[2255],{"type":16,"value":1862},{"type":16,"value":2257}," scope uses the queue family instance domain",{"type":10,"tag":189,"props":2259,"children":2260},{},[2261,2266],{"type":10,"tag":138,"props":2262,"children":2264},{"className":2263},[],[2265],{"type":16,"value":1437},{"type":16,"value":2267}," scope uses the fragment interlock instance domain",{"type":10,"tag":189,"props":2269,"children":2270},{},[2271,2276],{"type":10,"tag":138,"props":2272,"children":2274},{"className":2273},[],[2275],{"type":16,"value":1907},{"type":16,"value":2277}," scope uses the shader call instance domain",{"type":10,"tag":189,"props":2279,"children":2280},{},[2281,2286],{"type":10,"tag":138,"props":2282,"children":2284},{"className":2283},[],[2285],{"type":16,"value":143},{"type":16,"value":2287}," scope uses the workgroup instance domain",{"type":10,"tag":189,"props":2289,"children":2290},{},[2291,2296],{"type":10,"tag":138,"props":2292,"children":2294},{"className":2293},[],[2295],{"type":16,"value":1940},{"type":16,"value":2297}," uses the subgroup instance domain",{"type":10,"tag":189,"props":2299,"children":2300},{},[2301,2307],{"type":10,"tag":138,"props":2302,"children":2304},{"className":2303},[],[2305],{"type":16,"value":2306},"Invocation",{"type":16,"value":2308}," perform no availability/visibility operations.",{"type":10,"tag":22,"props":2310,"children":2311},{},[2312],{"type":16,"value":2313},"When an availability operation performed by an agent A includes a memory\ndomain D in its destination scope, where D corresponds to scope instance S,\nit also includes the memory domains that correspond to each smaller scope\ninstance S' that is a subset of S and that includes A. Similarly for\nvisibility operations.",{"type":10,"tag":37,"props":2315,"children":2317},{"id":2316},"memory-model-instruction-av-vis",[2318],{"type":16,"value":2319},"Per-Instruction Availability and Visibility Semantics",{"type":10,"tag":22,"props":2321,"children":2322},{},[2323,2325,2329],{"type":16,"value":2324},"A memory write instruction that includes MakePointerAvailable, or an image\nwrite instruction that includes MakeTexelAvailable, performs an availability\noperation whose source scope includes the agent and reference used to\nperform the write and the memory locations written by the instruction, and\nwhose destination scope is a set of memory domains selected by the Scope\noperand specified in ",{"type":10,"tag":28,"props":2326,"children":2327},{"href":1020},[2328],{"type":16,"value":2219},{"type":16,"value":2330},".\nThe implicit availability operation is program-ordered between the write and\nall other operations program-ordered after the write.",{"type":10,"tag":22,"props":2332,"children":2333},{},[2334,2336,2340],{"type":16,"value":2335},"A memory read instruction that includes MakePointerVisible, or an image read\ninstruction that includes MakeTexelVisible, performs a visibility operation\nwhose source scope is a set of memory domains selected by the Scope operand\nas specified in ",{"type":10,"tag":28,"props":2337,"children":2338},{"href":1020},[2339],{"type":16,"value":2219},{"type":16,"value":2341},", and whose destination scope\nincludes the agent and reference used to perform the read and the memory\nlocations read by the instruction.\nThe implicit visibility operation is program-ordered between read and all\nother operations program-ordered before the read.",{"type":10,"tag":18,"props":2343,"children":2344},{},[2345],{"type":10,"tag":22,"props":2346,"children":2347},{},[2348],{"type":16,"value":2349},"Although reads with per-instruction visibility only perform visibility ops\nfrom the shader or\nfragment interlock instance or\nshader call instance or\nworkgroup instance or subgroup instance domain, they will also see writes\nthat were made visible via the device domain, i.e. those writes previously\nperformed by non-shader agents and made visible via API commands.",{"type":10,"tag":18,"props":2351,"children":2352},{},[2353],{"type":10,"tag":22,"props":2354,"children":2355},{},[2356,2358,2364],{"type":16,"value":2357},"It is expected that all invocations in a subgroup execute on the same\nprocessor with the same path to memory, and thus availability and visibility\noperations with subgroup scope can be expected to be ",{"type":10,"tag":138,"props":2359,"children":2361},{"className":2360},[],[2362],{"type":16,"value":2363},"free",{"type":16,"value":35},{"type":10,"tag":37,"props":2366,"children":2368},{"id":2367},"memory-model-location-ordered",[2369],{"type":16,"value":1606},{"type":10,"tag":22,"props":2371,"children":2372},{},[2373,2375,2380,2382,2386,2388,2393,2394,2398,2400,2406,2408,2414],{"type":16,"value":2374},"Let X and Y be memory accesses to overlapping sets of memory locations M,\nwhere X != Y. Let (A",{"type":10,"tag":1367,"props":2376,"children":2377},{},[2378],{"type":16,"value":2379},"X",{"type":16,"value":2381},",R",{"type":10,"tag":1367,"props":2383,"children":2384},{},[2385],{"type":16,"value":2379},{"type":16,"value":2387},") be the agent and reference used for X, and\n(A",{"type":10,"tag":1367,"props":2389,"children":2390},{},[2391],{"type":16,"value":2392},"Y",{"type":16,"value":2381},{"type":10,"tag":1367,"props":2395,"children":2396},{},[2397],{"type":16,"value":2392},{"type":16,"value":2399},") be the agent and reference used for Y. For now, let ",{"type":10,"tag":138,"props":2401,"children":2403},{"className":2402},[],[2404],{"type":16,"value":2405},"→",{"type":16,"value":2407},"\ndenote happens-before and →",{"type":10,"tag":2409,"props":2410,"children":2411},"sup",{},[2412],{"type":16,"value":2413},"rcpo",{"type":16,"value":2415}," denote the reflexive closure of\nprogram-ordered before.",{"type":10,"tag":22,"props":2417,"children":2418},{},[2419,2421,2425,2427,2431,2433,2437,2439,2443,2445,2449,2451,2455],{"type":16,"value":2420},"If D",{"type":10,"tag":1367,"props":2422,"children":2423},{},[2424],{"type":16,"value":1371},{"type":16,"value":2426}," and D",{"type":10,"tag":1367,"props":2428,"children":2429},{},[2430],{"type":16,"value":1378},{"type":16,"value":2432}," are different memory domains, then let DOM(D",{"type":10,"tag":1367,"props":2434,"children":2435},{},[2436],{"type":16,"value":1371},{"type":16,"value":2438},",D",{"type":10,"tag":1367,"props":2440,"children":2441},{},[2442],{"type":16,"value":1378},{"type":16,"value":2444},") be a\nmemory domain operation from D",{"type":10,"tag":1367,"props":2446,"children":2447},{},[2448],{"type":16,"value":1371},{"type":16,"value":2450}," to D",{"type":10,"tag":1367,"props":2452,"children":2453},{},[2454],{"type":16,"value":1378},{"type":16,"value":2456},".\nOtherwise, let DOM(D,D) be a placeholder such that X→DOM(D,D)→Y if and\nonly if X→Y.",{"type":10,"tag":22,"props":2458,"children":2459},{},[2460,2462,2467],{"type":16,"value":2461},"X is ",{"type":10,"tag":47,"props":2463,"children":2464},{},[2465],{"type":16,"value":2466},"location-ordered",{"type":16,"value":2468}," before Y for a location L in M if and only if any of\nthe following is true:",{"type":10,"tag":185,"props":2470,"children":2471},{},[2472,2509,2514,2519,2673],{"type":10,"tag":189,"props":2473,"children":2474},{},[2475,2477,2481,2483,2487,2489,2493,2495,2499,2501],{"type":16,"value":2476},"A",{"type":10,"tag":1367,"props":2478,"children":2479},{},[2480],{"type":16,"value":2379},{"type":16,"value":2482}," == A",{"type":10,"tag":1367,"props":2484,"children":2485},{},[2486],{"type":16,"value":2392},{"type":16,"value":2488}," and R",{"type":10,"tag":1367,"props":2490,"children":2491},{},[2492],{"type":16,"value":2379},{"type":16,"value":2494}," == R",{"type":10,"tag":1367,"props":2496,"children":2497},{},[2498],{"type":16,"value":2392},{"type":16,"value":2500}," and X→Y",{"type":10,"tag":185,"props":2502,"children":2503},{},[2504],{"type":10,"tag":189,"props":2505,"children":2506},{},[2507],{"type":16,"value":2508},"NOTE: this case means no availability/visibility ops are required when\nit is the same (agent,reference).",{"type":10,"tag":189,"props":2510,"children":2511},{},[2512],{"type":16,"value":2513},"X is a read, both X and Y are non-private, and X→Y",{"type":10,"tag":189,"props":2515,"children":2516},{},[2517],{"type":16,"value":2518},"X is a read, and X (transitively) system-synchronizes with Y",{"type":10,"tag":189,"props":2520,"children":2521},{},[2522,2524,2528,2529,2533,2535,2539,2540,2544,2546],{"type":16,"value":2523},"If R",{"type":10,"tag":1367,"props":2525,"children":2526},{},[2527],{"type":16,"value":2379},{"type":16,"value":2494},{"type":10,"tag":1367,"props":2530,"children":2531},{},[2532],{"type":16,"value":2392},{"type":16,"value":2534}," and A",{"type":10,"tag":1367,"props":2536,"children":2537},{},[2538],{"type":16,"value":2379},{"type":16,"value":2534},{"type":10,"tag":1367,"props":2541,"children":2542},{},[2543],{"type":16,"value":2392},{"type":16,"value":2545}," access a common memory domain D (e.g.\nare in the same workgroup instance if D is the workgroup instance\ndomain), and both X and Y are non-private:",{"type":10,"tag":185,"props":2547,"children":2548},{},[2549,2582,2641],{"type":10,"tag":189,"props":2550,"children":2551},{},[2552,2554,2558,2559,2563,2565,2569,2571,2575,2576,2580],{"type":16,"value":2553},"X is a write, Y is a write, AVC(A",{"type":10,"tag":1367,"props":2555,"children":2556},{},[2557],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2560,"children":2561},{},[2562],{"type":16,"value":2379},{"type":16,"value":2564},",D,L) is an availability chain\nmaking (X,L) available to domain D, and X→",{"type":10,"tag":2409,"props":2566,"children":2567},{},[2568],{"type":16,"value":2413},{"type":16,"value":2570},"AVC(A",{"type":10,"tag":1367,"props":2572,"children":2573},{},[2574],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2577,"children":2578},{},[2579],{"type":16,"value":2379},{"type":16,"value":2581},",D,L)→Y",{"type":10,"tag":189,"props":2583,"children":2584},{},[2585,2587,2591,2592,2596,2598,2602,2603,2607,2609,2613,2614,2618,2619,2623,2625,2629,2630,2634,2636,2640],{"type":16,"value":2586},"X is a write, Y is a read, AVC(A",{"type":10,"tag":1367,"props":2588,"children":2589},{},[2590],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2593,"children":2594},{},[2595],{"type":16,"value":2379},{"type":16,"value":2597},",D,L) is an availability chain\nmaking (X,L) available to domain D, VISC(A",{"type":10,"tag":1367,"props":2599,"children":2600},{},[2601],{"type":16,"value":2392},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2604,"children":2605},{},[2606],{"type":16,"value":2392},{"type":16,"value":2608},",D,L) is a visibility\nchain making writes to L available in domain D visible to Y, and\nX→",{"type":10,"tag":2409,"props":2610,"children":2611},{},[2612],{"type":16,"value":2413},{"type":16,"value":2570},{"type":10,"tag":1367,"props":2615,"children":2616},{},[2617],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2620,"children":2621},{},[2622],{"type":16,"value":2379},{"type":16,"value":2624},",D,L)→VISC(A",{"type":10,"tag":1367,"props":2626,"children":2627},{},[2628],{"type":16,"value":2392},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2631,"children":2632},{},[2633],{"type":16,"value":2392},{"type":16,"value":2635},",D,L)→",{"type":10,"tag":2409,"props":2637,"children":2638},{},[2639],{"type":16,"value":2413},{"type":16,"value":2392},{"type":10,"tag":189,"props":2642,"children":2643},{},[2644,2646,2650,2652,2658,2660,2666,2668,2671],{"type":16,"value":2645},"If\n",{"type":10,"tag":28,"props":2647,"children":2648},{"href":30},[2649],{"type":16,"value":33},{"type":16,"value":2651},"::",{"type":10,"tag":138,"props":2653,"children":2655},{"className":2654},[],[2656],{"type":16,"value":2657},"vulkanMemoryModelAvailabilityVisibilityChains",{"type":16,"value":2659},"\nis ",{"type":10,"tag":138,"props":2661,"children":2663},{"className":2662},[],[2664],{"type":16,"value":2665},"VK_FALSE",{"type":16,"value":2667},", then AVC and VISC ",{"type":10,"tag":100,"props":2669,"children":2670},{"type":115},[],{"type":16,"value":2672}," each only have a single\nelement in the chain, in each sub-bullet above.",{"type":10,"tag":189,"props":2674,"children":2675},{},[2676,2678,2682,2683,2687,2689,2693,2694,2698,2700],{"type":16,"value":2677},"Let D",{"type":10,"tag":1367,"props":2679,"children":2680},{},[2681],{"type":16,"value":2379},{"type":16,"value":2426},{"type":10,"tag":1367,"props":2684,"children":2685},{},[2686],{"type":16,"value":2392},{"type":16,"value":2688}," each be either the device domain or the host domain,\ndepending on whether A",{"type":10,"tag":1367,"props":2690,"children":2691},{},[2692],{"type":16,"value":2379},{"type":16,"value":2534},{"type":10,"tag":1367,"props":2695,"children":2696},{},[2697],{"type":16,"value":2392},{"type":16,"value":2699}," execute on the device or host:",{"type":10,"tag":185,"props":2701,"children":2702},{},[2703,2735],{"type":10,"tag":189,"props":2704,"children":2705},{},[2706,2708,2712,2713,2717,2718,2722,2724,2728,2729,2733],{"type":16,"value":2707},"X is a write and Y is a write, and\nX→AV(A",{"type":10,"tag":1367,"props":2709,"children":2710},{},[2711],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2714,"children":2715},{},[2716],{"type":16,"value":2379},{"type":16,"value":2438},{"type":10,"tag":1367,"props":2719,"children":2720},{},[2721],{"type":16,"value":2379},{"type":16,"value":2723},",L)→DOM(D",{"type":10,"tag":1367,"props":2725,"children":2726},{},[2727],{"type":16,"value":2379},{"type":16,"value":2438},{"type":10,"tag":1367,"props":2730,"children":2731},{},[2732],{"type":16,"value":2392},{"type":16,"value":2734},")→Y",{"type":10,"tag":189,"props":2736,"children":2737},{},[2738,2740,2744,2745,2749,2750,2754,2755,2759,2760,2764,2766,2770,2771,2775,2776,2780],{"type":16,"value":2739},"X is a write and Y is a read, and\nX→AV(A",{"type":10,"tag":1367,"props":2741,"children":2742},{},[2743],{"type":16,"value":2379},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2746,"children":2747},{},[2748],{"type":16,"value":2379},{"type":16,"value":2438},{"type":10,"tag":1367,"props":2751,"children":2752},{},[2753],{"type":16,"value":2379},{"type":16,"value":2723},{"type":10,"tag":1367,"props":2756,"children":2757},{},[2758],{"type":16,"value":2379},{"type":16,"value":2438},{"type":10,"tag":1367,"props":2761,"children":2762},{},[2763],{"type":16,"value":2392},{"type":16,"value":2765},")→VIS(A",{"type":10,"tag":1367,"props":2767,"children":2768},{},[2769],{"type":16,"value":2392},{"type":16,"value":2381},{"type":10,"tag":1367,"props":2772,"children":2773},{},[2774],{"type":16,"value":2392},{"type":16,"value":2438},{"type":10,"tag":1367,"props":2777,"children":2778},{},[2779],{"type":16,"value":2392},{"type":16,"value":2781},",L)→Y",{"type":10,"tag":18,"props":2783,"children":2784},{},[2785],{"type":10,"tag":22,"props":2786,"children":2787},{},[2788,2790,2796,2798,2804,2806,2812],{"type":16,"value":2789},"The final bullet (synchronization through device/host domain) requires\nAPI-level synchronization operations, since the device/host domains are not\naccessible via shader instructions.\nAnd ",{"type":10,"tag":138,"props":2791,"children":2793},{"className":2792},[],[2794],{"type":16,"value":2795},"device domain",{"type":16,"value":2797}," is not to be confused with ",{"type":10,"tag":138,"props":2799,"children":2801},{"className":2800},[],[2802],{"type":16,"value":2803},"device scope",{"type":16,"value":2805},", which\nsynchronizes through the ",{"type":10,"tag":138,"props":2807,"children":2809},{"className":2808},[],[2810],{"type":16,"value":2811},"shader domain",{"type":16,"value":35},{"type":10,"tag":37,"props":2814,"children":2816},{"id":2815},"memory-model-access-data-race",[2817],{"type":16,"value":2818},"Data Race",{"type":10,"tag":22,"props":2820,"children":2821},{},[2822,2824,2828],{"type":16,"value":2823},"Let X and Y be operations that access overlapping sets of memory locations\nM, where X != Y, and at least one of X and Y is a write, and X and Y are not\nmutually-ordered atomic operations.\nIf there does not exist a location-ordered relation between X and Y for each\nlocation in M, then there is a ",{"type":10,"tag":47,"props":2825,"children":2826},{},[2827],{"type":16,"value":735},{"type":16,"value":35},{"type":10,"tag":22,"props":2830,"children":2831},{},[2832,2834,2837],{"type":16,"value":2833},"Applications ",{"type":10,"tag":100,"props":2835,"children":2836},{"type":115},[],{"type":16,"value":2838}," ensure that no data races occur during the execution of\ntheir application.",{"type":10,"tag":18,"props":2840,"children":2841},{},[2842],{"type":10,"tag":22,"props":2843,"children":2844},{},[2845],{"type":16,"value":2846},"Data races can only occur due to instructions that are actually executed.\nFor example, an instruction skipped due to control flow must not contribute\nto a data race.",{"type":10,"tag":37,"props":2848,"children":2850},{"id":2849},"memory-model-visible-to",[2851],{"type":16,"value":2852},"Visible-To",{"type":10,"tag":22,"props":2854,"children":2855},{},[2856,2858,2862,2864,2868,2870,2874],{"type":16,"value":2857},"Let X be a write and Y be a read whose sets of memory locations overlap, and\nlet M be the set of memory locations that overlap.\nLet M",{"type":10,"tag":1367,"props":2859,"children":2860},{},[2861],{"type":16,"value":1378},{"type":16,"value":2863}," be a non-empty subset of M. Then X is ",{"type":10,"tag":47,"props":2865,"children":2866},{},[2867],{"type":16,"value":1731},{"type":16,"value":2869}," Y for memory\nlocations M",{"type":10,"tag":1367,"props":2871,"children":2872},{},[2873],{"type":16,"value":1378},{"type":16,"value":2875}," if and only if all of the following are true:",{"type":10,"tag":185,"props":2877,"children":2878},{},[2879,2889],{"type":10,"tag":189,"props":2880,"children":2881},{},[2882,2884,2888],{"type":16,"value":2883},"X is location-ordered before Y for each location L in M",{"type":10,"tag":1367,"props":2885,"children":2886},{},[2887],{"type":16,"value":1378},{"type":16,"value":35},{"type":10,"tag":189,"props":2890,"children":2891},{},[2892,2894,2898],{"type":16,"value":2893},"There does not exist another write Z to any location L in M",{"type":10,"tag":1367,"props":2895,"children":2896},{},[2897],{"type":16,"value":1378},{"type":16,"value":2899}," such that\nX is location-ordered before Z for location L and Z is location-ordered\nbefore Y for location L.",{"type":10,"tag":22,"props":2901,"children":2902},{},[2903,2905,2909],{"type":16,"value":2904},"If X is visible-to Y, then Y reads the value written by X for locations\nM",{"type":10,"tag":1367,"props":2906,"children":2907},{},[2908],{"type":16,"value":1378},{"type":16,"value":35},{"type":10,"tag":18,"props":2911,"children":2912},{},[2913],{"type":10,"tag":22,"props":2914,"children":2915},{},[2916,2918,2922],{"type":16,"value":2917},"It is possible for there to be a write between X and Y that overwrites a\nsubset of the memory locations, but the remaining memory locations (M",{"type":10,"tag":1367,"props":2919,"children":2920},{},[2921],{"type":16,"value":1378},{"type":16,"value":2923},")\nwill still be visible-to Y.",{"type":10,"tag":37,"props":2925,"children":2927},{"id":2926},"memory-model-acyclicity",[2928],{"type":16,"value":2929},"Acyclicity",{"type":10,"tag":22,"props":2931,"children":2932},{},[2933,2938,2940,2945],{"type":10,"tag":47,"props":2934,"children":2935},{},[2936],{"type":16,"value":2937},"Reads-from",{"type":16,"value":2939}," is a relation between operations, where the first operation is\na write, the second operation is a read, and the second operation reads the\nvalue written by the first operation.\n",{"type":10,"tag":47,"props":2941,"children":2942},{},[2943],{"type":16,"value":2944},"From-reads",{"type":16,"value":2946}," is a relation between operations, where the first operation is\na read, the second operation is a write, and the first operation reads a\nvalue written earlier than the second operation in the second operation’s\nscoped modification order (or the first operation reads from the initial\nvalue, and the second operation is any write to the same locations).",{"type":10,"tag":22,"props":2948,"children":2949},{},[2950,2952,2955],{"type":16,"value":2951},"Then the implementation ",{"type":10,"tag":100,"props":2953,"children":2954},{"type":115},[],{"type":16,"value":2956}," guarantee that no cycles exist in the union of\nthe following relations:",{"type":10,"tag":185,"props":2958,"children":2959},{},[2960,2964,2969,2974],{"type":10,"tag":189,"props":2961,"children":2962},{},[2963],{"type":16,"value":2466},{"type":10,"tag":189,"props":2965,"children":2966},{},[2967],{"type":16,"value":2968},"scoped modification order (over all atomic writes)",{"type":10,"tag":189,"props":2970,"children":2971},{},[2972],{"type":16,"value":2973},"reads-from",{"type":10,"tag":189,"props":2975,"children":2976},{},[2977],{"type":16,"value":2978},"from-reads",{"type":10,"tag":18,"props":2980,"children":2981},{},[2982],{"type":10,"tag":22,"props":2983,"children":2984},{},[2985,2987,2993],{"type":16,"value":2986},"This is a ",{"type":10,"tag":138,"props":2988,"children":2990},{"className":2989},[],[2991],{"type":16,"value":2992},"consistency",{"type":16,"value":2994}," axiom, which informally guarantees that sequences\nof operations cannot violate causality.",{"type":10,"tag":2996,"props":2997,"children":2999},"h3",{"id":2998},"memory-model-scoped-modification-order-coherence",[3000],{"type":16,"value":3001},"Scoped Modification Order Coherence",{"type":10,"tag":22,"props":3003,"children":3004},{},[3005],{"type":16,"value":3006},"Let A and B be mutually-ordered atomic operations, where A is\nlocation-ordered before B. Then the following rules are a consequence of\nacyclicity:",{"type":10,"tag":185,"props":3008,"children":3009},{},[3010,3020,3030,3040,3050],{"type":10,"tag":189,"props":3011,"children":3012},{},[3013,3015,3018],{"type":16,"value":3014},"If A and B are both reads and A does not read the initial value, then\nthe write that A takes its value from ",{"type":10,"tag":100,"props":3016,"children":3017},{"type":115},[],{"type":16,"value":3019}," be earlier in its own scoped\nmodification order than (or the same as) the write that B takes its\nvalue from (no cycles between location-order, reads-from, and\nfrom-reads).",{"type":10,"tag":189,"props":3021,"children":3022},{},[3023,3025,3028],{"type":16,"value":3024},"If A is a read and B is a write and A does not read the initial value,\nthen A ",{"type":10,"tag":100,"props":3026,"children":3027},{"type":115},[],{"type":16,"value":3029}," take its value from a write earlier than B in B’s scoped\nmodification order (no cycles between location-order, scope modification\norder, and reads-from).",{"type":10,"tag":189,"props":3031,"children":3032},{},[3033,3035,3038],{"type":16,"value":3034},"If A is a write and B is a read, then B ",{"type":10,"tag":100,"props":3036,"children":3037},{"type":115},[],{"type":16,"value":3039}," take its value from A or a\nwrite later than A in A’s scoped modification order (no cycles between\nlocation-order, scoped modification order, and from-reads).",{"type":10,"tag":189,"props":3041,"children":3042},{},[3043,3045,3048],{"type":16,"value":3044},"If A and B are both writes, then A ",{"type":10,"tag":100,"props":3046,"children":3047},{"type":115},[],{"type":16,"value":3049}," be earlier than B in A’s scoped\nmodification order (no cycles between location-order and scoped\nmodification order).",{"type":10,"tag":189,"props":3051,"children":3052},{},[3053],{"type":16,"value":3054},"If A is a write and B is a read-modify-write and B reads the value\nwritten by A, then B comes immediately after A in A’s scoped\nmodification order (no cycles between scoped modification order and\nfrom-reads).",{"type":10,"tag":37,"props":3056,"children":3058},{"id":3057},"memory-model-shader-io",[3059],{"type":16,"value":3060},"Shader I/O",{"type":10,"tag":22,"props":3062,"children":3063},{},[3064,3066,3072,3074,3080,3081,3087,3088,3094,3095,3101,3102,3108,3110,3116,3118,3123,3124,3129,3130,3135,3136,3141,3142,3147,3148,3154],{"type":16,"value":3065},"If a shader invocation A in a shader stage other than ",{"type":10,"tag":138,"props":3067,"children":3069},{"className":3068},[],[3070],{"type":16,"value":3071},"Vertex",{"type":16,"value":3073}," performs a\nmemory read operation X from an object in storage class\n",{"type":10,"tag":138,"props":3075,"children":3077},{"className":3076},[],[3078],{"type":16,"value":3079},"CallableDataKHR",{"type":16,"value":804},{"type":10,"tag":138,"props":3082,"children":3084},{"className":3083},[],[3085],{"type":16,"value":3086},"IncomingCallableDataKHR",{"type":16,"value":804},{"type":10,"tag":138,"props":3089,"children":3091},{"className":3090},[],[3092],{"type":16,"value":3093},"RayPayloadKHR",{"type":16,"value":796},{"type":10,"tag":138,"props":3096,"children":3098},{"className":3097},[],[3099],{"type":16,"value":3100},"HitAttributeKHR",{"type":16,"value":804},{"type":10,"tag":138,"props":3103,"children":3105},{"className":3104},[],[3106],{"type":16,"value":3107},"IncomingRayPayloadKHR",{"type":16,"value":3109},", or\n",{"type":10,"tag":138,"props":3111,"children":3113},{"className":3112},[],[3114],{"type":16,"value":3115},"Input",{"type":16,"value":3117},", then X is system-synchronized-after all writes to the\ncorresponding\n",{"type":10,"tag":138,"props":3119,"children":3121},{"className":3120},[],[3122],{"type":16,"value":3079},{"type":16,"value":804},{"type":10,"tag":138,"props":3125,"children":3127},{"className":3126},[],[3128],{"type":16,"value":3086},{"type":16,"value":804},{"type":10,"tag":138,"props":3131,"children":3133},{"className":3132},[],[3134],{"type":16,"value":3093},{"type":16,"value":796},{"type":10,"tag":138,"props":3137,"children":3139},{"className":3138},[],[3140],{"type":16,"value":3100},{"type":16,"value":804},{"type":10,"tag":138,"props":3143,"children":3145},{"className":3144},[],[3146],{"type":16,"value":3107},{"type":16,"value":3109},{"type":10,"tag":138,"props":3149,"children":3151},{"className":3150},[],[3152],{"type":16,"value":3153},"Output",{"type":16,"value":3155}," storage variable(s) in the shader invocation(s) that contribute\nto generating invocation A, and those writes are all visible-to X.",{"type":10,"tag":18,"props":3157,"children":3158},{},[3159],{"type":10,"tag":22,"props":3160,"children":3161},{},[3162],{"type":16,"value":3163},"It is not necessary for the upstream shader invocations to have completed\nexecution, they only need to have generated the output that is being read.",{"type":10,"tag":37,"props":3165,"children":3167},{"id":3166},"memory-model-deallocation",[3168],{"type":16,"value":3169},"Deallocation",{"type":10,"tag":22,"props":3171,"children":3172},{},[3173,3175,3181,3183,3186,3188,3192],{"type":16,"value":3174},"A call to ",{"type":10,"tag":28,"props":3176,"children":3178},{"href":3177},"/man/vkFreeMemory",[3179],{"type":16,"value":3180},"vkFreeMemory",{"type":16,"value":3182}," ",{"type":10,"tag":100,"props":3184,"children":3185},{"type":115},[],{"type":16,"value":3187}," happen-after all memory operations on all\nmemory locations in that ",{"type":10,"tag":28,"props":3189,"children":3190},{"href":126},[3191],{"type":16,"value":129},{"type":16,"value":3193}," object.",{"type":10,"tag":18,"props":3195,"children":3196},{},[3197],{"type":10,"tag":22,"props":3198,"children":3199},{},[3200,3202,3206,3208,3212],{"type":16,"value":3201},"Normally, device memory operations in a given queue are synchronized with\n",{"type":10,"tag":28,"props":3203,"children":3204},{"href":3177},[3205],{"type":16,"value":3180},{"type":16,"value":3207}," by having a host thread wait on a fence signaled by that\nqueue, and the wait happens-before the call to ",{"type":10,"tag":28,"props":3209,"children":3210},{"href":3177},[3211],{"type":16,"value":3180},{"type":16,"value":3213}," on the\nhost.",{"type":10,"tag":22,"props":3215,"children":3216},{},[3217],{"type":16,"value":3218},"The deallocation of SPIR-V variables is managed by the system and\nhappens-after all operations on those variables.",{"type":10,"tag":37,"props":3220,"children":3222},{"id":3221},"memory-model-informative-descriptions",[3223],{"type":16,"value":3224},"Descriptions (Informative)",{"type":10,"tag":22,"props":3226,"children":3227},{},[3228],{"type":16,"value":3229},"This subsection offers more easily understandable consequences of the memory\nmodel for app/compiler developers.",{"type":10,"tag":22,"props":3231,"children":3232},{},[3233],{"type":16,"value":3234},"Let SC be the storage class(es) specified by a release or acquire operation\nor barrier.",{"type":10,"tag":185,"props":3236,"children":3237},{},[3238,3243,3248,3253],{"type":10,"tag":189,"props":3239,"children":3240},{},[3241],{"type":16,"value":3242},"An atomic write with release semantics must not be reordered against any\nread or write to SC that is program-ordered before it (regardless of the\nstorage class the atomic is in).",{"type":10,"tag":189,"props":3244,"children":3245},{},[3246],{"type":16,"value":3247},"An atomic read with acquire semantics must not be reordered against any\nread or write to SC that is program-ordered after it (regardless of the\nstorage class the atomic is in).",{"type":10,"tag":189,"props":3249,"children":3250},{},[3251],{"type":16,"value":3252},"Any write to SC program-ordered after a release barrier must not be\nreordered against any read or write to SC program-ordered before that\nbarrier.",{"type":10,"tag":189,"props":3254,"children":3255},{},[3256],{"type":16,"value":3257},"Any read from SC program-ordered before an acquire barrier must not be\nreordered against any read or write to SC program-ordered after the\nbarrier.",{"type":10,"tag":22,"props":3259,"children":3260},{},[3261],{"type":16,"value":3262},"A control barrier (even if it has no memory semantics) must not be reordered\nagainst any memory barriers.",{"type":10,"tag":22,"props":3264,"children":3265},{},[3266,3268,3273],{"type":16,"value":3267},"This memory model allows memory accesses with and without availability and\nvisibility operations, as well as atomic operations, all to be performed on\nthe same memory location.\nThis is critical to allow it to reason about memory that is reused in\nmultiple ways, e.g. across the lifetime of different shader invocations or\ndraw calls.\nWhile GLSL (and legacy SPIR-V) applies the ",{"type":10,"tag":138,"props":3269,"children":3271},{"className":3270},[],[3272],{"type":16,"value":1465},{"type":16,"value":3274}," decoration to\nvariables (for historical reasons), this model treats each memory access\ninstruction as having optional implicit availability/visibility operations.\nGLSL to SPIR-V compilers should map all (non-atomic) operations on a\ncoherent variable to Make{Pointer,Texel}{Available}{Visible} flags in this\nmodel.",{"type":10,"tag":22,"props":3276,"children":3277},{},[3278],{"type":16,"value":3279},"Atomic operations implicitly have availability/visibility operations, and\nthe scope of those operations is taken from the atomic operation’s scope.",{"type":10,"tag":37,"props":3281,"children":3283},{"id":3282},"memory-model-tessellation-output-ordering",[3284],{"type":16,"value":3285},"Tessellation Output Ordering",{"type":10,"tag":22,"props":3287,"children":3288},{},[3289,3291,3296,3298,3304],{"type":16,"value":3290},"For SPIR-V that uses the Vulkan Memory Model, the ",{"type":10,"tag":138,"props":3292,"children":3294},{"className":3293},[],[3295],{"type":16,"value":925},{"type":16,"value":3297}," storage\nclass is used to synchronize accesses to tessellation control output\nvariables.\nFor legacy SPIR-V that does not enable the Vulkan Memory Model via\n",{"type":10,"tag":138,"props":3299,"children":3301},{"className":3300},[],[3302],{"type":16,"value":3303},"OpMemoryModel",{"type":16,"value":3305},", tessellation outputs can be ordered using a control\nbarrier with no particular memory scope or semantics, as defined below.",{"type":10,"tag":22,"props":3307,"children":3308},{},[3309,3311,3315,3317,3321,3323,3328],{"type":16,"value":3310},"Let X and Y be memory operations performed by shader invocations A",{"type":10,"tag":1367,"props":3312,"children":3313},{},[3314],{"type":16,"value":2379},{"type":16,"value":3316}," and\nA",{"type":10,"tag":1367,"props":3318,"children":3319},{},[3320],{"type":16,"value":2392},{"type":16,"value":3322},".\nOperation X is ",{"type":10,"tag":47,"props":3324,"children":3325},{},[3326],{"type":16,"value":3327},"tessellation-output-ordered",{"type":16,"value":3329}," before operation Y if and only\nif all of the following are true:",{"type":10,"tag":185,"props":3331,"children":3332},{},[3333,3356],{"type":10,"tag":189,"props":3334,"children":3335},{},[3336,3338,3343,3345,3349,3351,3355],{"type":16,"value":3337},"There is a dynamic instance of an ",{"type":10,"tag":138,"props":3339,"children":3341},{"className":3340},[],[3342],{"type":16,"value":802},{"type":16,"value":3344}," instruction C\nsuch that X is program-ordered before C in A",{"type":10,"tag":1367,"props":3346,"children":3347},{},[3348],{"type":16,"value":2379},{"type":16,"value":3350}," and C is program-ordered\nbefore Y in A",{"type":10,"tag":1367,"props":3352,"children":3353},{},[3354],{"type":16,"value":2392},{"type":16,"value":35},{"type":10,"tag":189,"props":3357,"children":3358},{},[3359,3360,3364,3365,3369],{"type":16,"value":2476},{"type":10,"tag":1367,"props":3361,"children":3362},{},[3363],{"type":16,"value":2379},{"type":16,"value":2534},{"type":10,"tag":1367,"props":3366,"children":3367},{},[3368],{"type":16,"value":2392},{"type":16,"value":3370}," are in the same instance of C’s execution scope.",{"type":10,"tag":22,"props":3372,"children":3373},{},[3374,3376,3380,3381,3385,3387,3393,3395,3400,3402,3407],{"type":16,"value":3375},"If shader invocations A",{"type":10,"tag":1367,"props":3377,"children":3378},{},[3379],{"type":16,"value":2379},{"type":16,"value":2534},{"type":10,"tag":1367,"props":3382,"children":3383},{},[3384],{"type":16,"value":2392},{"type":16,"value":3386}," in the ",{"type":10,"tag":138,"props":3388,"children":3390},{"className":3389},[],[3391],{"type":16,"value":3392},"TessellationControl",{"type":16,"value":3394},"\nexecution model execute memory operations X and Y, respectively, on the\n",{"type":10,"tag":138,"props":3396,"children":3398},{"className":3397},[],[3399],{"type":16,"value":3153},{"type":16,"value":3401}," storage class, and X is tessellation-output-ordered before Y\nwith a scope of ",{"type":10,"tag":138,"props":3403,"children":3405},{"className":3404},[],[3406],{"type":16,"value":143},{"type":16,"value":3408},", then X is location-ordered before Y, and if\nX is a write and Y is a read then X is visible-to Y.",{"type":10,"tag":37,"props":3410,"children":3412},{"id":3411},"memory-model-cooperative-matrix",[3413],{"type":16,"value":3414},"Cooperative Matrix Memory Access",{"type":10,"tag":22,"props":3416,"children":3417},{},[3418,3420,3426,3428,3434],{"type":16,"value":3419},"For each dynamic instance of a cooperative matrix load or store instruction\n(",{"type":10,"tag":138,"props":3421,"children":3423},{"className":3422},[],[3424],{"type":16,"value":3425},"OpCooperativeMatrixLoadNV",{"type":16,"value":3427}," or ",{"type":10,"tag":138,"props":3429,"children":3431},{"className":3430},[],[3432],{"type":16,"value":3433},"OpCooperativeMatrixStoreNV",{"type":16,"value":3435},"), a\nsingle implementation-dependent invocation within the instance of the\nmatrix’s scope performs a non-atomic load or store (respectively) to each\nmemory location that is defined to be accessed by the instruction.",{"title":5,"searchDepth":3437,"depth":3437,"links":3438},2,[3439,3440,3441,3442,3443,3444,3445,3446,3447,3448,3449,3450,3451,3452,3453,3454,3455,3456,3457,3458,3459,3460,3461,3462,3463,3464,3468,3469,3470,3471,3472],{"id":39,"depth":3437,"text":42},{"id":76,"depth":3437,"text":79},{"id":148,"depth":3437,"text":151},{"id":175,"depth":3437,"text":178},{"id":246,"depth":3437,"text":249},{"id":349,"depth":3437,"text":352},{"id":444,"depth":3437,"text":447},{"id":471,"depth":3437,"text":474},{"id":522,"depth":3437,"text":525},{"id":550,"depth":3437,"text":553},{"id":693,"depth":3437,"text":696},{"id":740,"depth":3437,"text":743},{"id":1037,"depth":3437,"text":1040},{"id":1097,"depth":3437,"text":1100},{"id":1498,"depth":3437,"text":1501},{"id":1574,"depth":3437,"text":1577},{"id":1616,"depth":3437,"text":1619},{"id":1667,"depth":3437,"text":1670},{"id":1760,"depth":3437,"text":1763},{"id":2107,"depth":3437,"text":2110},{"id":2216,"depth":3437,"text":2219},{"id":2316,"depth":3437,"text":2319},{"id":2367,"depth":3437,"text":1606},{"id":2815,"depth":3437,"text":2818},{"id":2849,"depth":3437,"text":2852},{"id":2926,"depth":3437,"text":2929,"children":3465},[3466],{"id":2998,"depth":3467,"text":3001},3,{"id":3057,"depth":3437,"text":3060},{"id":3166,"depth":3437,"text":3169},{"id":3221,"depth":3437,"text":3224},{"id":3282,"depth":3437,"text":3285},{"id":3411,"depth":3437,"text":3414},"markdown","chapters-memory-model",[3476,3481,3485,3488,3491,3495,3499,3503,3507,3511,3515,3519,3523,3527,3531,3535,3539,3543,3547,3551,3555,3559,3563,3567,3571,3575,3579,3583,3587,3591,3595,3599,3603,3607,3611,3615,3619,3623,3627,3631,3635,3639,3643,3647,3651,3655,3659,3663,3667,3671,3675,3679,3680,3683,3686,3689,3692,3695,3698],{"index":3477,"title":3478,"id":3479,"appendix":3480},0,"Preamble","preamble",false,{"index":3482,"title":3483,"id":3484,"appendix":3480},1,"Introduction","introduction",{"index":3437,"title":3486,"id":3487,"appendix":3480},"Fundamentals","fundamentals",{"index":3467,"title":3489,"id":3490,"appendix":3480},"Initialization","initialization",{"index":3492,"title":3493,"id":3494,"appendix":3480},4,"Devices and Queues","devsandqueues",{"index":3496,"title":3497,"id":3498,"appendix":3480},5,"Command Buffers","commandbuffers",{"index":3500,"title":3501,"id":3502,"appendix":3480},6,"Synchronization and Cache Control","synchronization",{"index":3504,"title":3505,"id":3506,"appendix":3480},7,"Render Pass","renderpass",{"index":3508,"title":3509,"id":3510,"appendix":3480},8,"Shaders","shaders",{"index":3512,"title":3513,"id":3514,"appendix":3480},9,"Pipelines","pipelines",{"index":3516,"title":3517,"id":3518,"appendix":3480},10,"Memory Allocation","memory",{"index":3520,"title":3521,"id":3522,"appendix":3480},11,"Resource Creation","resources",{"index":3524,"title":3525,"id":3526,"appendix":3480},12,"Samplers","samplers",{"index":3528,"title":3529,"id":3530,"appendix":3480},13,"Resource Descriptors","descriptorsets",{"index":3532,"title":3533,"id":3534,"appendix":3480},14,"Shader Interfaces","interfaces",{"index":3536,"title":3537,"id":3538,"appendix":3480},15,"Image Operations","textures",{"index":3540,"title":3541,"id":3542,"appendix":3480},16,"Fragment Density Map Operations","fragmentdensitymapops",{"index":3544,"title":3545,"id":3546,"appendix":3480},17,"Queries","queries",{"index":3548,"title":3549,"id":3550,"appendix":3480},18,"Clear Commands","clears",{"index":3552,"title":3553,"id":3554,"appendix":3480},19,"Copy Commands","copies",{"index":3556,"title":3557,"id":3558,"appendix":3480},20,"Drawing Commands","drawing",{"index":3560,"title":3561,"id":3562,"appendix":3480},21,"Fixed-Function Vertex Processing","fxvertex",{"index":3564,"title":3565,"id":3566,"appendix":3480},22,"Tessellation","tessellation",{"index":3568,"title":3569,"id":3570,"appendix":3480},23,"Geometry Shading","geometry",{"index":3572,"title":3573,"id":3574,"appendix":3480},24,"Mesh Shading","mesh",{"index":3576,"title":3577,"id":3578,"appendix":3480},25,"Cluster Culling Shading","cluster-culling",{"index":3580,"title":3581,"id":3582,"appendix":3480},26,"Fixed-Function Vertex Post-Processing","vertexpostproc",{"index":3584,"title":3585,"id":3586,"appendix":3480},27,"Rasterization","primsrast",{"index":3588,"title":3589,"id":3590,"appendix":3480},28,"Fragment Operations","fragops",{"index":3592,"title":3593,"id":3594,"appendix":3480},29,"The Framebuffer","framebuffer",{"index":3596,"title":3597,"id":3598,"appendix":3480},30,"Dispatching Commands","dispatch",{"index":3600,"title":3601,"id":3602,"appendix":3480},31,"Device-Generated Commands","device-generated-commands",{"index":3604,"title":3605,"id":3606,"appendix":3480},32,"Sparse Resources","sparsememory",{"index":3608,"title":3609,"id":3610,"appendix":3480},33,"Window System Integration (WSI)","wsi",{"index":3612,"title":3613,"id":3614,"appendix":3480},34,"Deferred Host Operations","deferred-host-operations",{"index":3616,"title":3617,"id":3618,"appendix":3480},35,"Private Data","private-data",{"index":3620,"title":3621,"id":3622,"appendix":3480},36,"Acceleration Structures","acceleration-structure",{"index":3624,"title":3625,"id":3626,"appendix":3480},37,"Micromap","micromap",{"index":3628,"title":3629,"id":3630,"appendix":3480},38,"Ray Traversal","ray-traversal",{"index":3632,"title":3633,"id":3634,"appendix":3480},39,"Ray Tracing","ray-tracing",{"index":3636,"title":3637,"id":3638,"appendix":3480},40,"Memory Decompression","memory-decompression",{"index":3640,"title":3641,"id":3642,"appendix":3480},41,"Video Coding","video-coding",{"index":3644,"title":3645,"id":3646,"appendix":3480},42,"Optical Flow","opticalflow",{"index":3648,"title":3649,"id":3650,"appendix":3480},43,"Execution Graphs","executiongraphs",{"index":3652,"title":3653,"id":3654,"appendix":3480},44,"Extending Vulkan","extendingvulkan",{"index":3656,"title":3657,"id":3658,"appendix":3480},45,"Features","features",{"index":3660,"title":3661,"id":3662,"appendix":3480},46,"Limits","limits",{"index":3664,"title":3665,"id":3666,"appendix":3480},47,"Formats","formats",{"index":3668,"title":3669,"id":3670,"appendix":3480},48,"Additional Capabilities","capabilities",{"index":3672,"title":3673,"id":3674,"appendix":3480},49,"Debugging","debugging",{"index":3477,"title":3676,"id":3677,"appendix":3678},"Vulkan Environment for SPIR-V","spirvenv",true,{"index":3482,"title":4,"id":13,"appendix":3678},{"index":3437,"title":3681,"id":3682,"appendix":3678},"Compressed Image Formats","compressed_image_formats",{"index":3467,"title":3684,"id":3685,"appendix":3678},"Core Revisions (Informative)","versions",{"index":3492,"title":3687,"id":3688,"appendix":3678},"Layers & Extensions (Informative)","extensions",{"index":3496,"title":3690,"id":3691,"appendix":3678},"API Boilerplate","boilerplate",{"index":3500,"title":3693,"id":3694,"appendix":3678},"Invariance","invariance",{"index":3504,"title":3696,"id":3697,"appendix":3678},"Lexicon","lexicon",{"index":3508,"title":3699,"id":3700,"appendix":3678},"Credits (Informative)","credits",[3702,3709,3713,3718,3722,3727,3730,3733,3736,3740,3744,3747,3750,3753,3755,3757,3760,3763,3767,3769,3773,3775,3778,3780,3783,3791,3795,3801,3805,3810,3812,3816,3822,3828,3834,3836,3839,3845,3848,3852,3858,3862,3866,3871,3875,3878,3881,3887,3890,3893,3897,3901,3905,3908,3910,3914,3919,3925,3928,3932,3935,3941,3944,3948,3951,3955,3958,3962,3965,3970,3974,3977,3982,3985,3988,3991,3995,4000,4005,4009,4013,4017,4021,4025,4029,4033,4036,4039,4043,4046,4049,4052,4056,4061,4065,4068,4072,4077,4081,4086,4089,4092,4097,4102,4106,4109,4113,4118,4121,4126,4131,4134,4137,4141,4145,4149,4154,4158,4161,4166,4170,4173,4177,4181,4185,4188,4190,4194,4197,4200,4203,4206,4209,4212,4215,4218,4221,4225,4229,4232,4235,4238,4241,4244,4247,4251,4255,4259,4262,4266,4269,4272,4275,4277,4281,4286,4290,4294,4296,4300,4303,4310,4314,4318,4322,4328,4331,4335,4339,4342,4345,4349,4354,4360,4364,4366,4371,4374,4379,4383,4388,4392,4396,4398,4401,4404,4406,4411,4414,4417,4422,4426,4430,4435,4439,4443,4445,4447,4450,4452,4455,4458,4462,4466,4468,4472,4475,4479,4482,4484,4487,4491,4493,4497,4500,4503,4506,4510,4513,4516,4518,4521,4523,4526,4530,4533,4535,4537,4539,4541,4545,4547,4550,4555,4559,4562,4564,4567,4569,4573,4576,4579,4582,4586,4589,4594,4598,4601,4605,4608,4611,4615,4619,4621,4626,4629,4633,4636,4639,4642,4644,4647,4651,4654,4658,4661,4665,4669,4672,4675,4678,4681,4685,4687,4690,4692,4697,4698,4702,4705,4708,4711,4714,4716,4720,4723,4726,4729,4733,4735,4737,4741,4743,4746,4750,4754,4756,4760,4763,4766,4769,4772,4776,4781,4786,4790,4796,4800,4803,4807,4811,4814,4818,4822,4825,4829,4832,4837,4841,4843,4849,4852,4855,4858,4862,4865,4869,4873,4877,4879,4882,4884,4887,4889,4891,4894,4897,4900,4903,4906,4909,4911,4915,4919,4923,4927,4930,4933,4937,4940,4944,4946,4950,4954,4957,4960,4963,4966,4969,4972,4975,4978,4981,4984,4987,4990,4993,4996,5000,5003,5007,5011,5014,5017,5020,5023,5026,5029,5033,5036,5039,5045,5049,5053,5057],{"number":3703,"type":1826,"author":3704,"provisional":3678,"depends":3705,"platform":3706,"contact":3707,"extension":3708,"proposal":3678},135,"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":3710,"type":1826,"author":3704,"provisional":3480,"contact":3711,"extension":3712,"proposal":3678},477,"Stu Smith","VK_AMD_anti_lag",{"number":3714,"type":1826,"author":3704,"provisional":3480,"specialuse":3715,"contact":3716,"extension":3717,"proposal":3480},180,"devtools","Daniel Rakos @drakos-amd","VK_AMD_buffer_marker",{"number":3719,"type":1826,"author":3704,"provisional":3480,"depends":3720,"contact":3707,"extension":3721,"proposal":3480},230,"VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","VK_AMD_device_coherent_memory",{"number":3723,"type":1826,"author":3704,"provisional":3480,"depends":3724,"contact":3725,"extension":3726,"proposal":3480},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":3612,"type":1826,"author":3704,"promotedto":3728,"provisional":3480,"contact":3716,"extension":3729,"proposal":3480},"VK_KHR_draw_indirect_count","VK_AMD_draw_indirect_count",{"number":3580,"type":1826,"author":3704,"provisional":3480,"contact":3731,"extension":3732,"proposal":3480},"Dominik Witczak @dominikwitczakamd","VK_AMD_gcn_shader",{"number":3624,"type":1826,"author":3704,"deprecatedby":3734,"provisional":3480,"contact":3731,"extension":3735,"proposal":3480},"VK_KHR_shader_float16_int8","VK_AMD_gpu_shader_half_float",{"number":3737,"type":1826,"author":3704,"deprecatedby":3734,"provisional":3480,"contact":3738,"extension":3739,"proposal":3480},133,"Qun Lin @linqun","VK_AMD_gpu_shader_int16",{"number":3741,"type":1826,"author":3704,"provisional":3480,"contact":3742,"extension":3743,"proposal":3480},190,"Martin Dinkov @mdinkov","VK_AMD_memory_overallocation_behavior",{"number":3745,"type":1826,"author":3704,"provisional":3480,"contact":3725,"extension":3746,"proposal":3480},137,"VK_AMD_mixed_attachment_samples",{"number":3620,"type":1826,"author":3704,"obsoletedby":3748,"provisional":3480,"contact":3725,"extension":3749,"proposal":3480},"VK_KHR_maintenance1","VK_AMD_negative_viewport_height",{"number":3751,"type":1826,"author":3704,"provisional":3480,"contact":3725,"extension":3752,"proposal":3480},184,"VK_AMD_pipeline_compiler_control",{"number":3552,"type":1826,"author":3704,"provisional":3480,"contact":3716,"extension":3754,"proposal":3480},"VK_AMD_rasterization_order",{"number":3628,"type":1826,"author":3704,"provisional":3480,"contact":3731,"extension":3756,"proposal":3480},"VK_AMD_shader_ballot",{"number":3758,"type":1826,"author":3704,"provisional":3480,"depends":3720,"contact":3742,"extension":3759,"proposal":3480},186,"VK_AMD_shader_core_properties",{"number":3761,"type":1826,"author":3704,"provisional":3480,"depends":3759,"contact":3725,"extension":3762,"proposal":3480},228,"VK_AMD_shader_core_properties2",{"number":3764,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3707,"extension":3766,"proposal":3678},322,"EXT","VK_AMD_shader_early_and_late_fragment_tests",{"number":3564,"type":1826,"author":3704,"provisional":3480,"contact":3738,"extension":3768,"proposal":3480},"VK_AMD_shader_explicit_vertex_parameter",{"number":3770,"type":1826,"author":3704,"provisional":3480,"contact":3771,"extension":3772,"proposal":3480},138,"Aaron Hagan @AaronHaganAMD","VK_AMD_shader_fragment_mask",{"number":3664,"type":1826,"author":3704,"provisional":3480,"contact":3731,"extension":3774,"proposal":3480},"VK_AMD_shader_image_load_store_lod",{"number":3648,"type":1826,"author":3704,"provisional":3480,"specialuse":3715,"contact":3776,"extension":3777,"proposal":3480},"Jaakko Konttinen @jaakkoamd","VK_AMD_shader_info",{"number":3560,"type":1826,"author":3704,"provisional":3480,"contact":3738,"extension":3779,"proposal":3480},"VK_AMD_shader_trinary_minmax",{"number":3644,"type":1826,"author":3704,"provisional":3480,"depends":3720,"contact":3781,"extension":3782,"proposal":3480},"Rex Xu @amdrexu","VK_AMD_texture_gather_bias_lod",{"number":3784,"type":1826,"author":3785,"provisional":3480,"depends":3786,"platform":3787,"specialuse":3788,"contact":3789,"extension":3790,"proposal":3678},469,"ANDROID","VK_ANDROID_external_memory_android_hardware_buffer","android","glemulation","Chris Forbes @chrisforbes","VK_ANDROID_external_format_resolve",{"number":3792,"type":1826,"author":3785,"provisional":3480,"depends":3793,"platform":3787,"contact":3794,"extension":3786,"proposal":3480},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":3796,"type":1826,"author":3797,"promotedto":3798,"provisional":3480,"depends":3720,"contact":3799,"extension":3800,"proposal":3480},343,"ARM","VK_EXT_rasterization_order_attachment_access","Jan-Harald Fredriksen @janharaldfredriksen-arm","VK_ARM_rasterization_order_attachment_access",{"number":3802,"type":1826,"author":3797,"provisional":3480,"depends":3803,"contact":3799,"extension":3804,"proposal":3678},425,"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_ARM_render_pass_striped",{"number":3806,"type":1826,"author":3797,"provisional":3480,"depends":3807,"contact":3808,"extension":3809,"proposal":3480},418,"VK_ARM_shader_core_builtins","Kevin Petit @kpet","VK_ARM_scheduling_controls",{"number":3811,"type":1826,"author":3797,"provisional":3480,"depends":3720,"contact":3808,"extension":3807,"proposal":3480},498,{"number":3813,"type":1826,"author":3797,"provisional":3480,"depends":3814,"contact":3799,"extension":3815,"proposal":3480},416,"VK_VERSION_1_1","VK_ARM_shader_core_properties",{"number":3817,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3820,"extension":3821,"proposal":3480},341,"VK_VERSION_1_3","vulkansc","Joshua Ashton @Joshua-Ashton","VK_EXT_4444_formats",{"number":3823,"type":3824,"author":3765,"provisional":3480,"depends":3825,"contact":3826,"extension":3827,"proposal":3480},286,"instance","VK_EXT_direct_mode_display","Drew DeVault sir@cmpwn.com","VK_EXT_acquire_drm_display",{"number":3829,"type":3824,"author":3830,"provisional":3480,"depends":3825,"platform":3831,"contact":3832,"extension":3833,"proposal":3480},90,"NV","xlib_xrandr","James Jones @cubanismo","VK_EXT_acquire_xlib_display",{"extension":3835,"proposal":3480},"VK_EXT_application_parameters",{"number":3837,"type":1826,"author":3797,"provisional":3480,"depends":3720,"contact":3799,"extension":3838,"proposal":3480},68,"VK_EXT_astc_decode_mode",{"number":3840,"type":1826,"author":3765,"provisional":3480,"depends":3841,"ratified":3842,"contact":3843,"extension":3844,"proposal":3678},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":3846,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3820,"extension":3847,"proposal":3678},340,"VK_EXT_attachment_feedback_loop_layout",{"number":3849,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":3851,"proposal":3480},149,"Jeff Bolz @jeffbolznv","VK_EXT_blend_operation_advanced",{"number":3853,"type":1826,"author":3765,"provisional":3480,"depends":3854,"specialuse":3855,"contact":3856,"extension":3857,"proposal":3480},412,"VK_EXT_custom_border_color","glemulation,d3demulation","Piers Daniell @pdaniell-nv","VK_EXT_border_color_swizzle",{"number":3859,"type":1826,"author":3830,"deprecatedby":3860,"provisional":3480,"depends":3720,"contact":3850,"extension":3861,"proposal":3480},245,"VK_KHR_buffer_device_address","VK_EXT_buffer_device_address",{"number":3863,"type":1826,"author":3765,"promotedto":3864,"provisional":3480,"depends":3720,"contact":3716,"extension":3865,"proposal":3678},185,"VK_KHR_calibrated_timestamps","VK_EXT_calibrated_timestamps",{"number":3867,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3868,"contact":3869,"extension":3870,"proposal":3480},382,"vulkan,vulkansc","Sharif Elcott @selcott","VK_EXT_color_write_enable",{"number":3872,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":3873,"extension":3874,"proposal":3480},82,"Vikram Kushwaha @vkushwaha","VK_EXT_conditional_rendering",{"number":3876,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3842,"contact":3856,"extension":3877,"proposal":3480},102,"VK_EXT_conservative_rasterization",{"number":3879,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3868,"specialuse":3855,"contact":3880,"extension":3854,"proposal":3480},288,"Liam Middlebrook @liam-middlebrook",{"number":3568,"type":1826,"author":3882,"promotedto":3883,"provisional":3480,"depends":3884,"specialuse":3674,"contact":3885,"extension":3886,"proposal":3480},"Baldur Karlsson","VK_EXT_debug_utils","VK_EXT_debug_report","Baldur Karlsson @baldurk","VK_EXT_debug_marker",{"number":3524,"type":3824,"author":3888,"deprecatedby":3883,"provisional":3480,"specialuse":3674,"contact":3889,"extension":3884,"proposal":3480},"GOOGLE","Courtney Goeltzenleuchter @courtney-g",{"number":3891,"type":3824,"author":3765,"provisional":3480,"specialuse":3674,"contact":3892,"extension":3883,"proposal":3480},129,"Mark Young @marky-lunarg",{"number":3894,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3895,"contact":3820,"extension":3896,"proposal":3678},284,"d3demulation","VK_EXT_depth_bias_control",{"number":3898,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3899,"extension":3900,"proposal":3480},422,"Graeme Leese @gnl21","VK_EXT_depth_clamp_zero_one",{"number":3902,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3788,"contact":3903,"extension":3904,"proposal":3480},356,"Shahbaz Youssefi @syoussefi","VK_EXT_depth_clip_control",{"number":3906,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3868,"specialuse":3895,"contact":3856,"extension":3907,"proposal":3480},103,"VK_EXT_depth_clip_enable",{"number":3532,"type":1826,"author":3830,"provisional":3480,"ratified":3868,"contact":3856,"extension":3909,"proposal":3480},"VK_EXT_depth_range_unrestricted",{"number":3911,"type":1826,"author":3765,"provisional":3480,"depends":3912,"contact":3707,"extension":3913,"proposal":3678},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":3915,"type":1826,"author":3830,"promotedto":3916,"provisional":3480,"depends":3917,"contact":3850,"extension":3918,"proposal":3480},162,"VK_VERSION_1_2","(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance3),VK_VERSION_1_1","VK_EXT_descriptor_indexing",{"number":3920,"type":1826,"author":3765,"provisional":3480,"depends":3921,"specialuse":3922,"contact":3923,"extension":3924,"proposal":3480},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":3926,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3923,"extension":3927,"proposal":3678},342,"VK_EXT_device_fault",{"number":3929,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3715,"contact":3930,"extension":3931,"proposal":3480},285,"Yiwei Zhang @zhangyiwei","VK_EXT_device_memory_report",{"number":3933,"type":3824,"author":3830,"provisional":3480,"depends":3934,"contact":3832,"extension":3825,"proposal":3480},89,"VK_KHR_display",{"number":3936,"type":3824,"author":3765,"provisional":3480,"depends":3937,"platform":3938,"contact":3939,"extension":3940,"proposal":3480},347,"VK_KHR_surface","directfb","Nicolas Caramelli @caramelli","VK_EXT_directfb_surface",{"number":3942,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3868,"contact":3856,"extension":3943,"proposal":3480},100,"VK_EXT_discard_rectangles",{"number":3945,"type":1826,"author":3830,"provisional":3480,"depends":3946,"ratified":3842,"contact":3832,"extension":3947,"proposal":3480},92,"VK_EXT_display_surface_counter+VK_KHR_swapchain","VK_EXT_display_control",{"number":3949,"type":3824,"author":3830,"provisional":3480,"depends":3934,"ratified":3842,"contact":3832,"extension":3950,"proposal":3480},91,"VK_EXT_display_surface_counter",{"number":3952,"type":1826,"author":3765,"provisional":3480,"depends":3953,"ratified":3842,"contact":3856,"extension":3954,"proposal":3678},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":3956,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3856,"extension":3957,"proposal":3480},268,"VK_EXT_extended_dynamic_state",{"number":3959,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3960,"extension":3961,"proposal":3480},378,"Vikram Kushwaha @vkushwaha-nv","VK_EXT_extended_dynamic_state2",{"number":3963,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3842,"contact":3856,"extension":3964,"proposal":3678},456,"VK_EXT_extended_dynamic_state3",{"number":3966,"type":1826,"author":3765,"provisional":3480,"depends":3967,"ratified":3842,"contact":3968,"extension":3969,"proposal":3678},454,"VK_KHR_external_memory,VK_VERSION_1_1","Lina Versace @versalinyaa","VK_EXT_external_memory_acquire_unmodified",{"number":3971,"type":1826,"author":3765,"provisional":3480,"depends":3972,"ratified":3868,"contact":3968,"extension":3973,"proposal":3480},126,"VK_KHR_external_memory_fd","VK_EXT_external_memory_dma_buf",{"number":3975,"type":1826,"author":3765,"provisional":3480,"depends":3967,"ratified":3868,"contact":3716,"extension":3976,"proposal":3480},179,"VK_EXT_external_memory_host",{"number":3978,"type":1826,"author":3979,"provisional":3480,"ratified":3842,"contact":3980,"extension":3981,"proposal":3480},171,"QCOM","Matthew Netsch @mnetsch","VK_EXT_filter_cubic",{"number":3983,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3980,"extension":3984,"proposal":3480},219,"VK_EXT_fragment_density_map",{"number":3986,"type":1826,"author":3765,"provisional":3480,"depends":3984,"contact":3980,"extension":3987,"proposal":3480},333,"VK_EXT_fragment_density_map2",{"number":3989,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3856,"extension":3990,"proposal":3480},252,"VK_EXT_fragment_shader_interlock",{"number":3992,"type":1826,"author":3765,"provisional":3480,"ratified":3842,"contact":3993,"extension":3994,"proposal":3678},376,"James Fitzpatrick @jamesfitzpatrick","VK_EXT_frame_boundary",{"number":3996,"type":1826,"author":3765,"provisional":3480,"depends":3997,"platform":3998,"ratified":3842,"contact":3832,"extension":3999,"proposal":3480},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":4001,"type":1826,"author":3765,"promotedto":4002,"provisional":3480,"contact":4003,"extension":4004,"proposal":3480},175,"VK_KHR_global_priority","Andres Rodriguez @lostgoat","VK_EXT_global_priority",{"number":4006,"type":1826,"author":3765,"promotedto":4002,"provisional":3480,"depends":4007,"contact":3930,"extension":4008,"proposal":3480},389,"VK_EXT_global_priority+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_global_priority_query",{"number":4010,"type":1826,"author":3704,"provisional":3480,"depends":4011,"contact":3707,"extension":4012,"proposal":3678},321,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_pipeline_library","VK_EXT_graphics_pipeline_library",{"number":4014,"type":1826,"author":3888,"provisional":3480,"depends":4015,"ratified":3868,"contact":3889,"extension":4016,"proposal":3480},106,"VK_KHR_swapchain","VK_EXT_hdr_metadata",{"number":4018,"type":3824,"author":3765,"provisional":3480,"depends":3937,"contact":4019,"extension":4020,"proposal":3480},257,"Lisa Wu @chengtianww","VK_EXT_headless_surface",{"number":4022,"type":1826,"author":3765,"provisional":3480,"depends":4023,"ratified":3842,"contact":3903,"extension":4024,"proposal":3678},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":4026,"type":1826,"author":3765,"promotedto":3916,"provisional":3480,"depends":3720,"contact":4027,"extension":4028,"proposal":3480},262,"Bas Nieuwenhuizen @BNieuwenhuizen","VK_EXT_host_query_reset",{"number":4030,"type":1826,"author":3765,"provisional":3480,"depends":4031,"specialuse":3788,"contact":3843,"extension":4032,"proposal":3480},394,"(VK_KHR_maintenance1+VK_KHR_get_physical_device_properties2),VK_VERSION_1_1","VK_EXT_image_2d_view_of_3d",{"number":4034,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3799,"extension":4035,"proposal":3678},339,"VK_EXT_image_compression_control",{"number":4037,"type":1826,"author":3765,"provisional":3480,"depends":4035,"contact":3799,"extension":4038,"proposal":3480},438,"VK_EXT_image_compression_control_swapchain",{"number":4040,"type":1826,"author":3765,"provisional":3480,"depends":4041,"ratified":3842,"contact":3968,"extension":4042,"proposal":3480},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":4044,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3899,"extension":4045,"proposal":3480},336,"VK_EXT_image_robustness",{"number":4047,"type":1826,"author":3765,"provisional":3480,"depends":4031,"specialuse":3895,"contact":3843,"extension":4048,"proposal":3678},419,"VK_EXT_image_sliced_view_of_3d",{"number":4050,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3820,"extension":4051,"proposal":3480},392,"VK_EXT_image_view_min_lod",{"number":4053,"type":1826,"author":3765,"promotedto":4054,"provisional":3480,"depends":3720,"contact":3856,"extension":4055,"proposal":3480},266,"VK_KHR_index_type_uint8","VK_EXT_index_type_uint8",{"number":4057,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":4058,"contact":4059,"extension":4060,"proposal":3480},139,"(VK_KHR_get_physical_device_properties2+VK_KHR_maintenance1),VK_VERSION_1_1","Daniel Rakos @aqnuep","VK_EXT_inline_uniform_block",{"number":4062,"type":3824,"author":3765,"provisional":3480,"ratified":3842,"contact":4063,"extension":4064,"proposal":3678},497,"Christophe Riccio @christophe","VK_EXT_layer_settings",{"number":4066,"type":1826,"author":3765,"provisional":3480,"depends":3720,"specialuse":3788,"contact":3903,"extension":4067,"proposal":3678},466,"VK_EXT_legacy_dithering",{"number":4069,"type":1826,"author":3765,"provisional":3480,"depends":4070,"ratified":3842,"specialuse":3788,"contact":3843,"extension":4071,"proposal":3678},496,"VK_EXT_vertex_input_dynamic_state","VK_EXT_legacy_vertex_attributes",{"number":4073,"type":1826,"author":3765,"promotedto":4074,"provisional":3480,"depends":3720,"specialuse":4075,"contact":3850,"extension":4076,"proposal":3480},260,"VK_KHR_line_rasterization","cadsupport","VK_EXT_line_rasterization",{"number":4078,"type":1826,"author":3765,"promotedto":4079,"provisional":3480,"ratified":3842,"contact":3903,"extension":4080,"proposal":3480},401,"VK_KHR_load_store_op_none","VK_EXT_load_store_op_none",{"number":4082,"type":1826,"author":3765,"provisional":3480,"depends":4083,"ratified":3842,"contact":4084,"extension":4085,"proposal":3678},273,"VK_KHR_map_memory2","Faith Ekstrand @gfxstrand","VK_EXT_map_memory_placed",{"number":4087,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4088,"proposal":3480},238,"VK_EXT_memory_budget",{"number":4090,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4091,"proposal":3480},239,"VK_EXT_memory_priority",{"number":4093,"type":1826,"author":3765,"provisional":3480,"depends":4094,"contact":4095,"extension":4096,"proposal":3678},329,"VK_KHR_spirv_1_4","Christoph Kubisch @pixeljetstream","VK_EXT_mesh_shader",{"number":4098,"type":1826,"author":3765,"provisional":3480,"platform":4099,"contact":4100,"extension":4101,"proposal":3678},312,"metal","Bill Hollings @billhollings","VK_EXT_metal_objects",{"number":4103,"type":3824,"author":3765,"provisional":3480,"depends":3937,"platform":4099,"contact":4104,"extension":4105,"proposal":3480},218,"Dzmitry Malyshau @kvark","VK_EXT_metal_surface",{"number":4107,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3843,"extension":4108,"proposal":3480},393,"VK_EXT_multi_draw",{"number":4110,"type":1826,"author":3765,"provisional":3480,"depends":4111,"contact":3903,"extension":4112,"proposal":3678},377,"(VK_KHR_create_renderpass2+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_EXT_multisampled_render_to_single_sampled",{"number":4114,"type":1826,"author":3765,"provisional":3480,"depends":4115,"specialuse":3895,"contact":4116,"extension":4117,"proposal":3678},495,"VK_KHR_maintenance3","Joshua Ashton @Joshua-Ashton,Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_mutable_descriptor_type",{"number":4119,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3856,"extension":4120,"proposal":3480},452,"VK_EXT_nested_command_buffer",{"number":4122,"type":1826,"author":3765,"provisional":3480,"depends":3720,"specialuse":4123,"contact":4124,"extension":4125,"proposal":3678},423,"d3demulation,glemulation","Georg Lehmann @DadSchoorse","VK_EXT_non_seamless_cube_map",{"number":4127,"type":1826,"author":3765,"provisional":3480,"depends":4128,"ratified":3842,"contact":4129,"extension":4130,"proposal":3678},397,"VK_KHR_acceleration_structure+(VK_KHR_synchronization2,VK_VERSION_1_3)","Christoph Kubisch @pixeljetstream, Eric Werness","VK_EXT_opacity_micromap",{"number":4132,"type":1826,"author":3765,"provisional":3480,"depends":4091,"contact":3856,"extension":4133,"proposal":3480},413,"VK_EXT_pageable_device_local_memory",{"number":4135,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3868,"contact":3725,"extension":4136,"proposal":3480},213,"VK_EXT_pci_bus_info",{"number":4138,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":4139,"extension":4140,"proposal":3480},354,"Simon Ser @emersion","VK_EXT_physical_device_drm",{"number":4142,"type":1826,"author":3704,"promotedto":3818,"provisional":3480,"depends":3720,"contact":4143,"extension":4144,"proposal":3480},298,"Gregory Grebe @grgrebe_amd","VK_EXT_pipeline_creation_cache_control",{"number":4146,"type":1826,"author":3888,"promotedto":3818,"provisional":3480,"specialuse":3715,"contact":4147,"extension":4148,"proposal":3480},193,"Jean-Francois Roy @jfroy","VK_EXT_pipeline_creation_feedback",{"number":4150,"type":1826,"author":3765,"provisional":3480,"depends":4151,"contact":4152,"extension":4153,"proposal":3678},499,"VK_KHR_ray_tracing_pipeline+VK_KHR_pipeline_library","Hans-Kristian Arntzen @HansKristian-Work","VK_EXT_pipeline_library_group_handles",{"number":4155,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":4156,"extension":4157,"proposal":3480},373,"Mukund Keshava @mkeshavanv","VK_EXT_pipeline_properties",{"number":4159,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":3903,"extension":4160,"proposal":3678},467,"VK_EXT_pipeline_protected_access",{"number":4162,"type":1826,"author":4163,"provisional":3480,"depends":3720,"contact":4164,"extension":4165,"proposal":3480},69,"IMG","Jarred Davies","VK_EXT_pipeline_robustness",{"number":4167,"type":1826,"author":3830,"provisional":3480,"ratified":3842,"contact":4168,"extension":4169,"proposal":3480},156,"Daniel Koch @dgkoch","VK_EXT_post_depth_coverage",{"number":4171,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3788,"contact":3903,"extension":4172,"proposal":3480},357,"VK_EXT_primitive_topology_list_restart",{"number":4174,"type":1826,"author":3765,"provisional":3480,"depends":4175,"specialuse":3788,"contact":3903,"extension":4176,"proposal":3678},383,"VK_EXT_transform_feedback","VK_EXT_primitives_generated_query",{"number":4178,"type":1826,"author":3830,"promotedto":3818,"provisional":3480,"depends":3720,"contact":4179,"extension":4180,"proposal":3480},296,"Matthew Rusch @mattruschnv","VK_EXT_private_data",{"number":4182,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3788,"contact":4183,"extension":4184,"proposal":3480},255,"Jesse Hall @jessehall","VK_EXT_provoking_vertex",{"number":4186,"type":1826,"author":3765,"provisional":3480,"depends":3967,"ratified":3868,"contact":3968,"extension":4187,"proposal":3480},127,"VK_EXT_queue_family_foreign",{"number":4189,"type":1826,"author":3797,"provisional":3480,"depends":3720,"contact":3799,"extension":3798,"proposal":3678},464,{"number":4191,"type":1826,"author":3765,"provisional":3480,"depends":4192,"contact":3799,"extension":4193,"proposal":3480},345,"VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1","VK_EXT_rgba10x6_formats",{"number":4195,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3868,"contact":3880,"extension":4196,"proposal":3480},287,"VK_EXT_robustness2",{"number":4198,"type":1826,"author":3704,"provisional":3480,"depends":3720,"ratified":3868,"contact":3716,"extension":4199,"proposal":3480},144,"VK_EXT_sample_locations",{"number":4201,"type":1826,"author":3830,"promotedto":3916,"provisional":3480,"depends":3720,"contact":3850,"extension":4202,"proposal":3480},131,"VK_EXT_sampler_filter_minmax",{"number":4204,"type":1826,"author":3765,"promotedto":3916,"provisional":3480,"depends":3720,"contact":3707,"extension":4205,"proposal":3480},222,"VK_EXT_scalar_block_layout",{"number":4207,"type":1826,"author":3765,"promotedto":3916,"provisional":3480,"contact":3716,"extension":4208,"proposal":3480},247,"VK_EXT_separate_stencil_usage",{"number":4210,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3868,"contact":3960,"extension":4211,"proposal":3480},261,"VK_EXT_shader_atomic_float",{"number":4213,"type":1826,"author":3765,"provisional":3480,"depends":4211,"ratified":3842,"contact":4084,"extension":4214,"proposal":3480},274,"VK_EXT_shader_atomic_float2",{"number":4216,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3850,"extension":4217,"proposal":3480},277,"VK_EXT_shader_demote_to_helper_invocation",{"number":4219,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3707,"extension":4220,"proposal":3480},235,"VK_EXT_shader_image_atomic_int64",{"number":4222,"type":1826,"author":3765,"provisional":3480,"depends":4223,"contact":4152,"extension":4224,"proposal":3678},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":4226,"type":1826,"author":3765,"provisional":3480,"depends":3953,"ratified":3842,"contact":4227,"extension":4228,"proposal":3678},483,"Daniel Story @daniel-story","VK_EXT_shader_object",{"number":4230,"type":1826,"author":3765,"provisional":3480,"ratified":3842,"contact":3808,"extension":4231,"proposal":3678},565,"VK_EXT_shader_replicated_composites",{"number":4233,"type":1826,"author":3765,"provisional":3480,"ratified":3868,"contact":3731,"extension":4234,"proposal":3480},141,"VK_EXT_shader_stencil_export",{"number":4236,"type":1826,"author":3830,"deprecatedby":3916,"provisional":3480,"contact":4168,"extension":4237,"proposal":3480},65,"VK_EXT_shader_subgroup_ballot",{"number":4239,"type":1826,"author":3830,"deprecatedby":3814,"provisional":3480,"contact":4168,"extension":4240,"proposal":3480},66,"VK_EXT_shader_subgroup_vote",{"number":4242,"type":1826,"author":3765,"provisional":3480,"depends":3818,"ratified":3842,"contact":3799,"extension":4243,"proposal":3678},396,"VK_EXT_shader_tile_image",{"number":4245,"type":1826,"author":3830,"promotedto":3916,"provisional":3480,"contact":4168,"extension":4246,"proposal":3480},163,"VK_EXT_shader_viewport_index_layer",{"number":4248,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3814,"ratified":3819,"contact":4249,"extension":4250,"proposal":3480},226,"Neil Henning @sheredom","VK_EXT_subgroup_size_control",{"number":4252,"type":1826,"author":3765,"provisional":3480,"depends":3720,"contact":4253,"extension":4254,"proposal":3678},459,"Ting Wei @catweiting","VK_EXT_subpass_merge_feedback",{"number":4256,"type":3824,"author":3765,"provisional":3480,"depends":4257,"contact":3903,"extension":4258,"proposal":3678},275,"VK_KHR_surface+VK_KHR_get_surface_capabilities2","VK_EXT_surface_maintenance1",{"number":4260,"type":3824,"author":3888,"provisional":3480,"depends":3937,"contact":3889,"extension":4261,"proposal":3480},105,"VK_EXT_swapchain_colorspace",{"number":4263,"type":1826,"author":3765,"provisional":3480,"depends":4264,"contact":3903,"extension":4265,"proposal":3678},276,"VK_KHR_swapchain+VK_EXT_surface_maintenance1+(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)","VK_EXT_swapchain_maintenance1",{"number":4267,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3850,"extension":4268,"proposal":3480},282,"VK_EXT_texel_buffer_alignment",{"number":4270,"type":1826,"author":3797,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3819,"contact":3799,"extension":4271,"proposal":3480},67,"VK_EXT_texture_compression_astc_hdr",{"number":4273,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"contact":3707,"extension":4274,"proposal":3480},246,"VK_EXT_tooling_info",{"number":3592,"type":1826,"author":3830,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":4276,"contact":3856,"extension":4175,"proposal":3480},"glemulation,d3demulation,devtools",{"number":4278,"type":1826,"author":3888,"provisional":3480,"contact":4279,"extension":4280,"proposal":3480},161,"Cort Stratton @cdwfs","VK_EXT_validation_cache",{"number":4282,"type":3824,"author":4283,"deprecatedby":4064,"provisional":3480,"specialuse":3674,"contact":4284,"extension":4285,"proposal":3480},248,"LUNARG","Karl Schultz @karl-lunarg","VK_EXT_validation_features",{"number":4287,"type":3824,"author":3888,"deprecatedby":4064,"provisional":3480,"specialuse":3674,"contact":4288,"extension":4289,"proposal":3480},62,"Tobin Ehlis @tobine","VK_EXT_validation_flags",{"number":4291,"type":1826,"author":3830,"promotedto":4292,"provisional":3480,"depends":3720,"contact":3873,"extension":4293,"proposal":3480},191,"VK_KHR_vertex_attribute_divisor","VK_EXT_vertex_attribute_divisor",{"number":4295,"type":1826,"author":3765,"provisional":3480,"depends":3720,"ratified":3842,"contact":3856,"extension":4070,"proposal":3480},353,{"number":4297,"type":1826,"author":3765,"promotedto":3818,"provisional":3480,"depends":4192,"ratified":3819,"contact":4298,"extension":4299,"proposal":3480},331,"Tony Zlatinski @tzlatinski","VK_EXT_ycbcr_2plane_444_formats",{"number":4301,"type":1826,"author":3765,"provisional":3480,"depends":4192,"ratified":3868,"contact":3856,"extension":4302,"proposal":3480},253,"VK_EXT_ycbcr_image_arrays",{"number":4304,"type":1826,"author":4305,"provisional":3480,"depends":4306,"platform":4307,"contact":4308,"extension":4309,"proposal":3480},367,"FUCHSIA","VK_FUCHSIA_external_memory+(VK_KHR_sampler_ycbcr_conversion,VK_VERSION_1_1)","fuchsia","John Rosasco @rosasco","VK_FUCHSIA_buffer_collection",{"number":4311,"type":1826,"author":4305,"provisional":3480,"depends":4312,"platform":4307,"contact":4308,"extension":4313,"proposal":3480},365,"(VK_KHR_external_memory_capabilities+VK_KHR_external_memory),VK_VERSION_1_1","VK_FUCHSIA_external_memory",{"number":4315,"type":1826,"author":4305,"provisional":3480,"depends":4316,"platform":4307,"contact":4308,"extension":4317,"proposal":3480},366,"VK_KHR_external_semaphore_capabilities+VK_KHR_external_semaphore","VK_FUCHSIA_external_semaphore",{"number":4319,"type":3824,"author":4305,"provisional":3480,"depends":3937,"platform":4307,"contact":4320,"extension":4321,"proposal":3480},215,"Craig Stout @cdotstout","VK_FUCHSIA_imagepipe_surface",{"number":4323,"type":1826,"author":4324,"provisional":3480,"depends":4325,"platform":4326,"contact":4147,"extension":4327,"proposal":3480},192,"GGP","VK_KHR_swapchain+VK_GGP_stream_descriptor_surface","ggp","VK_GGP_frame_token",{"number":4329,"type":3824,"author":4324,"provisional":3480,"depends":3937,"platform":4326,"contact":4147,"extension":4330,"proposal":3480},50,"VK_GGP_stream_descriptor_surface",{"number":4332,"type":1826,"author":3888,"provisional":3480,"contact":4333,"extension":4334,"proposal":3480},225,"Hai Nguyen @chaoticbob","VK_GOOGLE_decorate_string",{"number":4336,"type":1826,"author":3888,"provisional":3480,"depends":4015,"contact":4337,"extension":4338,"proposal":3480},93,"Ian Elliott @ianelliottus","VK_GOOGLE_display_timing",{"number":4340,"type":1826,"author":3888,"provisional":3480,"contact":4333,"extension":4341,"proposal":3480},224,"VK_GOOGLE_hlsl_functionality1",{"number":4343,"type":3824,"author":3888,"provisional":3480,"depends":3937,"specialuse":3788,"contact":3903,"extension":4344,"proposal":3678},434,"VK_GOOGLE_surfaceless_query",{"number":4346,"type":1826,"author":3888,"provisional":3480,"contact":4347,"extension":4348,"proposal":3480},290,"Kaye Mason @chaleur","VK_GOOGLE_user_type",{"number":4350,"type":1826,"author":4351,"provisional":3480,"depends":3720,"contact":4352,"extension":4353,"proposal":3678},405,"HUAWEI","Yuchang Wang @richard_Wang2","VK_HUAWEI_cluster_culling_shader",{"number":4355,"type":1826,"author":4356,"provisional":3480,"depends":4357,"contact":4358,"extension":4359,"proposal":3678},371,"Huawei","VK_KHR_ray_tracing_pipeline+(VK_KHR_synchronization2,VK_VERSION_1_3)","Pan Gao @PanGao-h","VK_HUAWEI_invocation_mask",{"number":4361,"type":1826,"author":4351,"provisional":3480,"depends":4362,"contact":4358,"extension":4363,"proposal":3480},370,"((VK_KHR_create_renderpass2,VK_VERSION_1_2)+VK_KHR_synchronization2),VK_VERSION_1_3","VK_HUAWEI_subpass_shading",{"number":3540,"type":1826,"author":4163,"provisional":3480,"contact":3707,"extension":4365,"proposal":3480},"VK_IMG_filter_cubic",{"number":4367,"type":1826,"author":4163,"deprecatedby":4368,"provisional":3480,"contact":4369,"extension":4370,"proposal":3480},55,null,"Stuart Smith","VK_IMG_format_pvrtc",{"number":4372,"type":1826,"author":4163,"provisional":3480,"depends":3720,"specialuse":3788,"contact":3993,"extension":4373,"proposal":3480},111,"VK_IMG_relaxed_line_rasterization",{"number":4375,"type":1826,"author":4376,"provisional":3480,"specialuse":3715,"contact":4377,"extension":4378,"proposal":3480},211,"INTEL","Lionel Landwerlin @llandwerlin","VK_INTEL_performance_query",{"number":4380,"type":1826,"author":4376,"provisional":3480,"depends":3720,"contact":4381,"extension":4382,"proposal":3480},210,"Ian Romanick @ianromanick","VK_INTEL_shader_integer_functions2",{"number":4384,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4386,"ratified":3842,"contact":3799,"extension":4387,"proposal":3480},84,"KHR","(VK_KHR_get_physical_device_properties2+VK_KHR_storage_buffer_storage_class),VK_VERSION_1_1","VK_KHR_16bit_storage",{"number":4389,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4386,"ratified":3842,"contact":4390,"extension":4391,"proposal":3480},178,"Alexander Galazin @alegal-arm","VK_KHR_8bit_storage",{"number":4393,"type":1826,"author":4385,"provisional":3480,"depends":4394,"ratified":3842,"contact":4168,"extension":4395,"proposal":3480},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":3512,"type":3824,"author":4385,"provisional":3480,"depends":3937,"platform":3787,"ratified":3842,"contact":3794,"extension":4397,"proposal":3480},"VK_KHR_android_surface",{"number":4399,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":3707,"extension":4400,"proposal":3480},158,"VK_KHR_bind_memory2",{"number":4402,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4403,"ratified":3842,"contact":3850,"extension":3860,"proposal":3480},258,"(VK_KHR_get_physical_device_properties2+VK_KHR_device_group),VK_VERSION_1_1",{"number":4405,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":4059,"extension":3864,"proposal":3480},544,{"number":4407,"type":1826,"author":4385,"provisional":3480,"depends":4408,"ratified":3842,"contact":4409,"extension":4410,"proposal":3678},512,"VK_KHR_get_physical_device_properties2","Jean-Noe Morissette @MagicPoncho","VK_KHR_compute_shader_derivatives",{"number":4412,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"contact":3808,"extension":4413,"proposal":3678},507,"VK_KHR_cooperative_matrix",{"number":4415,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3868,"contact":3980,"extension":4416,"proposal":3480},338,"VK_KHR_copy_commands2",{"number":4418,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4419,"ratified":3842,"contact":4420,"extension":4421,"proposal":3480},110,"(VK_KHR_multiview+VK_KHR_maintenance2),VK_VERSION_1_1","Tobias Hector @tobias","VK_KHR_create_renderpass2",{"number":4423,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4424,"ratified":3842,"contact":3832,"extension":4425,"proposal":3480},128,"VK_KHR_get_memory_requirements2,VK_VERSION_1_1","VK_KHR_dedicated_allocation",{"number":4427,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":4428,"extension":4429,"proposal":3480},269,"Josh Barczak @jbarczak","VK_KHR_deferred_host_operations",{"number":4431,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4432,"ratified":3842,"contact":4433,"extension":4434,"proposal":3480},200,"VK_KHR_create_renderpass2,VK_VERSION_1_2","Jan-Harald Fredriksen @janharald","VK_KHR_depth_stencil_resolve",{"number":4436,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4437,"extension":4438,"proposal":3480},86,"Markus Tavenrath @mtavenrath","VK_KHR_descriptor_update_template",{"number":4440,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4441,"ratified":3842,"contact":3850,"extension":4442,"proposal":3480},61,"VK_KHR_device_group_creation","VK_KHR_device_group",{"number":4444,"type":3824,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":3850,"extension":4441,"proposal":3480},71,{"number":3467,"type":3824,"author":4385,"provisional":3480,"depends":3937,"ratified":3868,"contact":4446,"extension":3934,"proposal":3480},"James Jones @cubanismo,Norbert Nopper @FslNopper",{"number":3492,"type":1826,"author":4385,"provisional":3480,"depends":4448,"ratified":3868,"contact":3832,"extension":4449,"proposal":3480},"VK_KHR_swapchain+VK_KHR_display","VK_KHR_display_swapchain",{"number":4451,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"ratified":3842,"contact":3856,"extension":3728,"proposal":3480},170,{"number":4453,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":3716,"extension":4454,"proposal":3480},197,"VK_KHR_driver_properties",{"number":3656,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":4456,"ratified":3842,"contact":3707,"extension":4457,"proposal":3678},"((VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_KHR_depth_stencil_resolve),VK_VERSION_1_2","VK_KHR_dynamic_rendering",{"number":4459,"type":1826,"author":3704,"provisional":3480,"depends":4460,"ratified":3842,"contact":3707,"extension":4461,"proposal":3678},233,"VK_KHR_dynamic_rendering,VK_VERSION_1_3","VK_KHR_dynamic_rendering_local_read",{"number":4463,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4464,"ratified":3842,"contact":3794,"extension":4465,"proposal":3480},114,"VK_KHR_external_fence_capabilities","VK_KHR_external_fence",{"number":4467,"type":3824,"author":4385,"promotedto":3814,"provisional":3480,"depends":3720,"ratified":3842,"contact":3794,"extension":4464,"proposal":3480},113,{"number":4469,"type":1826,"author":4385,"provisional":3480,"depends":4470,"ratified":3868,"contact":3794,"extension":4471,"proposal":3480},116,"VK_KHR_external_fence,VK_VERSION_1_1","VK_KHR_external_fence_fd",{"number":4473,"type":1826,"author":4385,"provisional":3480,"depends":4465,"platform":3998,"ratified":3842,"contact":3794,"extension":4474,"proposal":3480},115,"VK_KHR_external_fence_win32",{"number":4476,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4477,"ratified":3842,"contact":3832,"extension":4478,"proposal":3480},73,"VK_KHR_external_memory_capabilities,VK_VERSION_1_1","VK_KHR_external_memory",{"number":4480,"type":3824,"author":4385,"promotedto":3814,"provisional":3480,"depends":3720,"ratified":3842,"contact":3832,"extension":4481,"proposal":3480},72,"VK_KHR_external_memory_capabilities",{"number":4483,"type":1826,"author":4385,"provisional":3480,"depends":3967,"ratified":3868,"contact":3832,"extension":3972,"proposal":3480},75,{"number":4485,"type":1826,"author":4385,"provisional":3480,"depends":3967,"platform":3998,"ratified":3842,"contact":3832,"extension":4486,"proposal":3480},74,"VK_KHR_external_memory_win32",{"number":4488,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4489,"ratified":3842,"contact":3832,"extension":4490,"proposal":3480},78,"VK_KHR_external_semaphore_capabilities","VK_KHR_external_semaphore",{"number":4492,"type":3824,"author":4385,"promotedto":3814,"provisional":3480,"depends":3720,"ratified":3842,"contact":3832,"extension":4489,"proposal":3480},77,{"number":4494,"type":1826,"author":4385,"provisional":3480,"depends":4495,"ratified":3868,"contact":3832,"extension":4496,"proposal":3480},80,"VK_KHR_external_semaphore,VK_VERSION_1_1","VK_KHR_external_semaphore_fd",{"number":4498,"type":1826,"author":4385,"provisional":3480,"depends":4490,"platform":3998,"ratified":3842,"contact":3832,"extension":4499,"proposal":3480},79,"VK_KHR_external_semaphore_win32",{"number":4501,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3842,"contact":4377,"extension":4502,"proposal":3480},361,"VK_KHR_format_feature_flags2",{"number":4504,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"contact":3711,"extension":4505,"proposal":3678},323,"VK_KHR_fragment_shader_barycentric",{"number":4507,"type":1826,"author":4385,"provisional":3480,"depends":4508,"ratified":3868,"contact":3707,"extension":4509,"proposal":3678},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":4511,"type":3824,"author":4385,"provisional":3480,"depends":3934,"ratified":3868,"contact":3832,"extension":4512,"proposal":3480},122,"VK_KHR_get_display_properties2",{"number":4514,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4084,"extension":4515,"proposal":3480},147,"VK_KHR_get_memory_requirements2",{"number":4517,"type":3824,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":3850,"extension":4408,"proposal":3480},60,{"number":4519,"type":3824,"author":4385,"provisional":3480,"depends":3937,"ratified":3868,"contact":3832,"extension":4520,"proposal":3480},120,"VK_KHR_get_surface_capabilities2",{"number":4522,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":3707,"extension":4002,"proposal":3480},189,{"number":4524,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"ratified":3842,"contact":4084,"extension":4525,"proposal":3480},148,"VK_KHR_image_format_list",{"number":4527,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4528,"ratified":3842,"contact":4420,"extension":4529,"proposal":3480},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":4531,"type":1826,"author":4385,"provisional":3480,"depends":4015,"ratified":3868,"contact":4337,"extension":4532,"proposal":3480},85,"VK_KHR_incremental_present",{"number":4534,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":3856,"extension":4054,"proposal":3480},534,{"number":4536,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":3856,"extension":4074,"proposal":3480},535,{"number":4538,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":3903,"extension":4079,"proposal":3678},527,{"number":4540,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":3856,"extension":3748,"proposal":3480},70,{"number":4542,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4543,"extension":4544,"proposal":3480},118,"Michael Worcester @michaelworcester","VK_KHR_maintenance2",{"number":4546,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4115,"proposal":3480},169,{"number":4548,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3814,"ratified":3842,"contact":3856,"extension":4549,"proposal":3480},414,"VK_KHR_maintenance4",{"number":4551,"type":1826,"author":4385,"provisional":3480,"depends":4552,"ratified":3842,"contact":4553,"extension":4554,"proposal":3678},471,"(VK_VERSION_1_1+VK_KHR_dynamic_rendering),VK_VERSION_1_3","Stu Smith @stu-s","VK_KHR_maintenance5",{"number":4556,"type":1826,"author":4385,"provisional":3480,"depends":3814,"ratified":3842,"contact":4557,"extension":4558,"proposal":3678},546,"Jon Leech @oddhack","VK_KHR_maintenance6",{"number":4560,"type":1826,"author":4385,"provisional":3480,"depends":3814,"ratified":3842,"contact":3843,"extension":4561,"proposal":3678},563,"VK_KHR_maintenance7",{"number":4563,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":4084,"extension":4083,"proposal":3678},272,{"number":4565,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4566,"proposal":3480},54,"VK_KHR_multiview",{"extension":4568,"proposal":3480},"VK_KHR_object_refresh",{"number":4570,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"specialuse":3715,"contact":4571,"extension":4572,"proposal":3480},117,"Alon Or-bach @alonorbach","VK_KHR_performance_query",{"number":4574,"type":1826,"author":4385,"provisional":3480,"depends":4554,"ratified":3842,"contact":4553,"extension":4575,"proposal":3678},484,"VK_KHR_pipeline_binary",{"number":4577,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"specialuse":3715,"contact":4084,"extension":4578,"proposal":3480},270,"VK_KHR_pipeline_executable_properties",{"number":4580,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":4095,"extension":4581,"proposal":3480},291,"VK_KHR_pipeline_library",{"number":4583,"type":3824,"author":4385,"provisional":3480,"ratified":3842,"contact":4584,"extension":4585,"proposal":3480},395,"Charles Giessen @charles-lunarg","VK_KHR_portability_enumeration",{"number":4587,"type":1826,"author":4385,"provisional":3678,"depends":3720,"platform":3706,"ratified":3842,"contact":4100,"extension":4588,"proposal":3480},164,"VK_KHR_portability_subset",{"number":4590,"type":1826,"author":4385,"provisional":3480,"depends":4591,"ratified":3842,"contact":4592,"extension":4593,"proposal":3480},295,"VK_KHR_swapchain+VK_KHR_get_physical_device_properties2,VK_VERSION_1_1","Keith Packard @keithp","VK_KHR_present_id",{"number":4595,"type":1826,"author":4385,"provisional":3480,"depends":4596,"ratified":3842,"contact":4592,"extension":4597,"proposal":3480},249,"VK_KHR_swapchain+VK_KHR_present_id","VK_KHR_present_wait",{"number":4599,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4600,"proposal":3480},81,"VK_KHR_push_descriptor",{"number":4602,"type":1826,"author":4385,"provisional":3480,"depends":4603,"ratified":3842,"contact":4168,"extension":4604,"proposal":3480},349,"VK_KHR_spirv_1_4+VK_KHR_acceleration_structure","VK_KHR_ray_query",{"number":4606,"type":1826,"author":4385,"provisional":3480,"depends":4395,"ratified":3842,"contact":4168,"extension":4607,"proposal":3480},387,"VK_KHR_ray_tracing_maintenance1",{"number":4609,"type":1826,"author":4385,"provisional":3480,"depends":4603,"ratified":3842,"contact":4168,"extension":4610,"proposal":3480},348,"VK_KHR_ray_tracing_pipeline",{"number":4612,"type":1826,"author":4385,"provisional":3480,"depends":4395,"ratified":3842,"contact":4613,"extension":4614,"proposal":3678},482,"Eric Werness","VK_KHR_ray_tracing_position_fetch",{"number":4616,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4617,"extension":4618,"proposal":3480},145,"John Kessenich @johnkslang","VK_KHR_relaxed_block_layout",{"number":3536,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"ratified":3842,"contact":3707,"extension":4620,"proposal":3480},"VK_KHR_sampler_mirror_clamp_to_edge",{"number":4622,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4623,"ratified":3842,"contact":4624,"extension":4625,"proposal":3480},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":4627,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4508,"ratified":3842,"contact":3856,"extension":4628,"proposal":3480},242,"VK_KHR_separate_depth_stencil_layouts",{"number":4630,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":4631,"extension":4632,"proposal":3480},181,"Aaron Hagan @ahagan","VK_KHR_shader_atomic_int64",{"number":4634,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":4631,"extension":4635,"proposal":3480},182,"VK_KHR_shader_clock",{"number":4637,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4168,"extension":4638,"proposal":3480},64,"VK_KHR_shader_draw_parameters",{"number":4640,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"contact":3808,"extension":4641,"proposal":3678},545,"VK_KHR_shader_expect_assume",{"number":4643,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":4390,"extension":3734,"proposal":3480},83,{"number":4645,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":4390,"extension":4646,"proposal":3480},198,"VK_KHR_shader_float_controls",{"number":4648,"type":1826,"author":4385,"provisional":3480,"depends":4649,"ratified":3842,"contact":3899,"extension":4650,"proposal":3678},529,"VK_VERSION_1_1+VK_KHR_shader_float_controls","VK_KHR_shader_float_controls2",{"number":4652,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3842,"contact":3808,"extension":4653,"proposal":3678},281,"VK_KHR_shader_integer_dot_product",{"number":4655,"type":1826,"author":4385,"provisional":3480,"depends":3814,"ratified":3842,"contact":4656,"extension":4657,"proposal":3678},435,"Alan Baker @alan-baker","VK_KHR_shader_maximal_reconvergence",{"number":4659,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"ratified":3842,"contact":3885,"extension":4660,"proposal":3480},294,"VK_KHR_shader_non_semantic_info",{"number":4662,"type":1826,"author":4385,"provisional":3480,"depends":4663,"ratified":3842,"contact":3707,"extension":4664,"proposal":3678},236,"VK_VERSION_1_1+VK_KHR_vulkan_memory_model+VK_KHR_shader_maximal_reconvergence","VK_KHR_shader_quad_control",{"number":4666,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":4667,"extension":4668,"proposal":3678},559,"Nathan Gauër @Keenuts","VK_KHR_shader_relaxed_extended_instruction",{"number":4670,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3814,"ratified":3842,"contact":4249,"extension":4671,"proposal":3480},176,"VK_KHR_shader_subgroup_extended_types",{"number":4673,"type":1826,"author":4385,"provisional":3480,"ratified":3842,"contact":3808,"extension":4674,"proposal":3678},417,"VK_KHR_shader_subgroup_rotate",{"number":4676,"type":1826,"author":4385,"provisional":3480,"depends":3814,"ratified":3842,"contact":4656,"extension":4677,"proposal":3480},324,"VK_KHR_shader_subgroup_uniform_control_flow",{"number":4679,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3868,"contact":3794,"extension":4680,"proposal":3480},216,"VK_KHR_shader_terminate_invocation",{"number":4682,"type":1826,"author":4385,"provisional":3480,"depends":4683,"ratified":3868,"contact":4571,"extension":4684,"proposal":3480},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":4686,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":4649,"ratified":3842,"contact":3794,"extension":4094,"proposal":3480},237,{"number":4688,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"ratified":3842,"contact":4390,"extension":4689,"proposal":3480},132,"VK_KHR_storage_buffer_storage_class",{"number":3482,"type":3824,"author":4385,"provisional":3480,"ratified":3868,"contact":4691,"extension":3937,"proposal":3480},"James Jones @cubanismo,Ian Elliott @ianelliottus",{"number":4693,"type":3824,"author":4385,"provisional":3480,"depends":4694,"ratified":3842,"contact":4695,"extension":4696,"proposal":3480},240,"VK_VERSION_1_1+VK_KHR_get_surface_capabilities2","Sandeep Shinde @sashinde","VK_KHR_surface_protected_capabilities",{"number":3437,"type":1826,"author":4385,"provisional":3480,"depends":3937,"ratified":3868,"contact":4691,"extension":4015,"proposal":3480},{"number":4699,"type":1826,"author":4385,"provisional":3480,"depends":4700,"ratified":3868,"contact":3716,"extension":4701,"proposal":3480},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":4703,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3868,"contact":3707,"extension":4704,"proposal":3480},315,"VK_KHR_synchronization2",{"number":4706,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":4084,"extension":4707,"proposal":3480},208,"VK_KHR_timeline_semaphore",{"number":4709,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":3899,"extension":4710,"proposal":3480},254,"VK_KHR_uniform_buffer_standard_layout",{"number":4712,"type":1826,"author":4385,"promotedto":3814,"provisional":3480,"depends":4386,"ratified":3842,"contact":3794,"extension":4713,"proposal":3480},121,"VK_KHR_variable_pointers",{"number":4715,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3868,"contact":3903,"extension":4292,"proposal":3678},526,{"number":4717,"type":1826,"author":4385,"provisional":3480,"depends":4718,"ratified":3842,"contact":4059,"extension":4719,"proposal":3678},513,"VK_KHR_video_decode_queue","VK_KHR_video_decode_av1",{"number":3640,"type":1826,"author":4385,"provisional":3480,"depends":4718,"ratified":3842,"contact":4721,"extension":4722,"proposal":3678},"peter.fang@amd.com","VK_KHR_video_decode_h264",{"number":4724,"type":1826,"author":4385,"provisional":3480,"depends":4718,"ratified":3842,"contact":4721,"extension":4725,"proposal":3678},188,"VK_KHR_video_decode_h265",{"number":3576,"type":1826,"author":4385,"provisional":3480,"depends":4727,"ratified":3842,"contact":4728,"extension":4718,"proposal":3678},"VK_KHR_video_queue+(VK_KHR_synchronization2,VK_VERSION_1_3)","jake.beju@amd.com",{"number":3632,"type":1826,"author":4385,"provisional":3480,"depends":4730,"ratified":3842,"contact":4731,"extension":4732,"proposal":3678},"VK_KHR_video_encode_queue","Ahmed Abdelkhalek @aabdelkh","VK_KHR_video_encode_h264",{"number":3636,"type":1826,"author":4385,"provisional":3480,"depends":4730,"ratified":3842,"contact":4731,"extension":4734,"proposal":3678},"VK_KHR_video_encode_h265",{"number":4736,"type":1826,"author":4385,"provisional":3480,"depends":4727,"ratified":3842,"contact":4731,"extension":4730,"proposal":3678},300,{"number":4738,"type":1826,"author":4385,"provisional":3480,"depends":4739,"ratified":3842,"contact":4059,"extension":4740,"proposal":3678},516,"VK_KHR_video_queue","VK_KHR_video_maintenance1",{"number":3572,"type":1826,"author":4385,"provisional":3480,"depends":4742,"ratified":3842,"contact":4298,"extension":4739,"proposal":3678},"(VK_VERSION_1_1+VK_KHR_synchronization2),VK_VERSION_1_3",{"number":4744,"type":1826,"author":4385,"promotedto":3916,"provisional":3480,"depends":3720,"ratified":3842,"contact":3850,"extension":4745,"proposal":3480},212,"VK_KHR_vulkan_memory_model",{"number":3504,"type":3824,"author":4385,"provisional":3480,"depends":3937,"platform":4747,"ratified":3842,"contact":4748,"extension":4749,"proposal":3480},"wayland","Jesse Hall @critsec,Ian Elliott @ianelliottus","VK_KHR_wayland_surface",{"number":4751,"type":1826,"author":4385,"provisional":3480,"depends":4486,"platform":3998,"ratified":3842,"contact":4752,"extension":4753,"proposal":3480},76,"Carsten Rohde @crohde","VK_KHR_win32_keyed_mutex",{"number":3516,"type":3824,"author":4385,"provisional":3480,"depends":3937,"platform":3998,"ratified":3842,"contact":4748,"extension":4755,"proposal":3480},"VK_KHR_win32_surface",{"number":4757,"type":1826,"author":4385,"provisional":3480,"depends":3720,"ratified":3842,"contact":4758,"extension":4759,"proposal":3480},337,"Caio Marcelo de Oliveira Filho @cmarcelo","VK_KHR_workgroup_memory_explicit_layout",{"number":3500,"type":3824,"author":4385,"provisional":3480,"depends":3937,"platform":4761,"ratified":3842,"contact":4748,"extension":4762,"proposal":3480},"xcb","VK_KHR_xcb_surface",{"number":3496,"type":3824,"author":4385,"provisional":3480,"depends":3937,"platform":4764,"ratified":3842,"contact":4748,"extension":4765,"proposal":3480},"xlib","VK_KHR_xlib_surface",{"number":4767,"type":1826,"author":4385,"promotedto":3818,"provisional":3480,"depends":3720,"ratified":3842,"contact":4656,"extension":4768,"proposal":3480},326,"VK_KHR_zero_initialize_workgroup_memory",{"number":4770,"type":3824,"author":4283,"provisional":3480,"contact":4584,"extension":4771,"proposal":3678},460,"VK_LUNARG_direct_driver_loading",{"number":4773,"type":1826,"author":4774,"provisional":3480,"depends":3720,"specialuse":3895,"contact":4152,"extension":4775,"proposal":3480},576,"MESA","VK_MESA_image_alignment_control",{"number":4777,"type":1826,"author":4778,"provisional":3480,"depends":3720,"contact":4779,"extension":4780,"proposal":3678},531,"MSFT","Jesse Natalie @jenatali","VK_MSFT_layered_driver",{"number":4782,"type":3824,"author":4783,"deprecatedby":4105,"provisional":3480,"depends":3937,"platform":4784,"contact":4100,"extension":4785,"proposal":3480},123,"MVK","ios","VK_MVK_ios_surface",{"number":4787,"type":3824,"author":4783,"deprecatedby":4105,"provisional":3480,"depends":3937,"platform":4788,"contact":4100,"extension":4789,"proposal":3480},124,"macos","VK_MVK_macos_surface",{"number":4791,"type":3824,"author":4792,"provisional":3480,"depends":3937,"platform":4793,"contact":4794,"extension":4795,"proposal":3480},63,"NN","vi","Mathias Heyer gitlab:@mheyer","VK_NN_vi_surface",{"number":3596,"type":1826,"author":4797,"provisional":3480,"contact":4798,"extension":4799,"proposal":3480},"NVX","Eric Werness @ewerness-nv,Liam Middlebrook @liam-middlebrook","VK_NVX_binary_import",{"number":3600,"type":1826,"author":4797,"provisional":3480,"contact":4801,"extension":4802,"proposal":3480},"Eric Werness @ewerness-nv","VK_NVX_image_view_handle",{"number":4804,"type":1826,"author":4797,"provisional":3480,"depends":4805,"contact":3850,"extension":4806,"proposal":3480},98,"VK_KHR_multiview,VK_VERSION_1_1","VK_NVX_multiview_per_view_attributes",{"number":4808,"type":1826,"author":3830,"provisional":3480,"depends":3825,"platform":3998,"contact":4809,"extension":4810,"proposal":3480},346,"Jeff Juliano @jjuliano","VK_NV_acquire_winrt_display",{"number":4812,"type":1826,"author":3830,"provisional":3480,"contact":4801,"extension":4813,"proposal":3480},88,"VK_NV_clip_space_w_scaling",{"number":4815,"type":1826,"author":3830,"provisional":3480,"contact":4816,"extension":4817,"proposal":3480},560,"Lujin Wang @lujinwangnv","VK_NV_command_buffer_inheritance",{"number":4819,"type":1826,"author":3830,"promotedto":4410,"provisional":3480,"depends":3720,"contact":4820,"extension":4821,"proposal":3480},202,"Pat Brown @nvpbrown","VK_NV_compute_shader_derivatives",{"number":4823,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":3850,"extension":4824,"proposal":3480},250,"VK_NV_cooperative_matrix",{"number":4826,"type":1826,"author":3830,"provisional":3480,"depends":4827,"contact":3960,"extension":4828,"proposal":3480},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":4830,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4168,"extension":4831,"proposal":3480},51,"VK_NV_corner_sampled_image",{"number":4833,"type":1826,"author":3830,"provisional":3480,"depends":4834,"contact":4835,"extension":4836,"proposal":3480},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":4838,"type":1826,"author":3830,"provisional":3678,"contact":4839,"extension":4840,"proposal":3480},308,"Tristan Lorach @tlorach","VK_NV_cuda_kernel_launch",{"number":3584,"type":1826,"author":3830,"deprecatedby":4425,"provisional":3480,"contact":3850,"extension":4842,"proposal":3480},"VK_NV_dedicated_allocation",{"number":4844,"type":1826,"author":4845,"provisional":3480,"depends":4846,"contact":4847,"extension":4848,"proposal":3480},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":4850,"type":1826,"author":3830,"provisional":3480,"depends":3814,"contact":3856,"extension":4851,"proposal":3480},547,"VK_NV_descriptor_pool_overallocation",{"number":4853,"type":1826,"author":4845,"provisional":3480,"depends":3720,"contact":4847,"extension":4854,"proposal":3480},207,"VK_NV_device_diagnostic_checkpoints",{"number":4856,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4835,"extension":4857,"proposal":3480},301,"VK_NV_device_diagnostics_config",{"number":4859,"type":1826,"author":3830,"provisional":3480,"depends":4860,"contact":4095,"extension":4861,"proposal":3480},278,"(VK_VERSION_1_1+VK_KHR_buffer_device_address),VK_VERSION_1_2","VK_NV_device_generated_commands",{"number":4863,"type":1826,"author":3830,"provisional":3480,"depends":4861,"contact":3960,"extension":4864,"proposal":3480},429,"VK_NV_device_generated_commands_compute",{"number":4866,"type":1826,"author":3830,"provisional":3678,"depends":4130,"platform":3706,"contact":4867,"extension":4868,"proposal":3480},398,"Christoph Kubisch @pixeljetstream, Eric Werness @ewerness-nv","VK_NV_displacement_micromap",{"number":4870,"type":1826,"author":3830,"provisional":3480,"contact":4871,"extension":4872,"proposal":3480},493,"Russell Chou @russellcnv","VK_NV_extended_sparse_address_space",{"number":4874,"type":1826,"author":3830,"deprecatedby":4478,"provisional":3480,"depends":4875,"contact":3832,"extension":4876,"proposal":3480},57,"VK_NV_external_memory_capabilities","VK_NV_external_memory",{"number":4878,"type":3824,"author":3830,"deprecatedby":4481,"provisional":3480,"contact":3832,"extension":4875,"proposal":3480},56,{"number":4880,"type":1826,"author":3830,"provisional":3480,"depends":3967,"contact":4752,"extension":4881,"proposal":3480},372,"VK_NV_external_memory_rdma",{"extension":4883,"proposal":3480},"VK_NV_external_memory_sci_buf",{"number":4885,"type":1826,"author":3830,"deprecatedby":4486,"provisional":3480,"depends":4876,"platform":3998,"contact":3832,"extension":4886,"proposal":3480},58,"VK_NV_external_memory_win32",{"extension":4888,"proposal":3480},"VK_NV_external_sci_sync",{"extension":4890,"proposal":3480},"VK_NV_external_sci_sync2",{"number":4892,"type":1826,"author":3830,"provisional":3480,"contact":3850,"extension":4893,"proposal":3480},154,"VK_NV_fill_rectangle",{"number":4895,"type":1826,"author":3830,"provisional":3480,"contact":3850,"extension":4896,"proposal":3480},150,"VK_NV_fragment_coverage_to_color",{"number":4898,"type":1826,"author":3830,"promotedto":4505,"provisional":3480,"depends":3720,"contact":4820,"extension":4899,"proposal":3480},204,"VK_NV_fragment_shader_barycentric",{"number":4901,"type":1826,"author":3830,"provisional":3480,"depends":4509,"contact":4820,"extension":4902,"proposal":3480},327,"VK_NV_fragment_shading_rate_enums",{"number":4904,"type":1826,"author":3830,"provisional":3480,"contact":3850,"extension":4905,"proposal":3480},153,"VK_NV_framebuffer_mixed_samples",{"number":4907,"type":1826,"author":3830,"provisional":3480,"contact":4168,"extension":4908,"proposal":3480},96,"VK_NV_geometry_shader_passthrough",{"number":3528,"type":1826,"author":3830,"deprecatedby":4368,"provisional":3480,"contact":3856,"extension":4910,"proposal":3480},"VK_NV_glsl_shader",{"number":4912,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4913,"extension":4914,"proposal":3480},279,"David Zhao Akeley @akeley98","VK_NV_inherited_viewport_scissor",{"number":4916,"type":1826,"author":4845,"provisional":3480,"depends":3720,"contact":4917,"extension":4918,"proposal":3480},431,"sourav parmar @souravpNV","VK_NV_linear_color_attachment",{"number":4920,"type":1826,"author":3830,"provisional":3480,"contact":4921,"extension":4922,"proposal":3480},311,"Charles Hansen @cshansen","VK_NV_low_latency",{"number":4924,"type":1826,"author":3830,"provisional":3480,"depends":4925,"contact":4921,"extension":4926,"proposal":3480},506,"VK_VERSION_1_2,VK_KHR_timeline_semaphore","VK_NV_low_latency2",{"number":4928,"type":1826,"author":3830,"provisional":3480,"depends":4827,"contact":3960,"extension":4929,"proposal":3480},428,"VK_NV_memory_decompression",{"number":4931,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4095,"extension":4932,"proposal":3480},203,"VK_NV_mesh_shader",{"number":4934,"type":1826,"author":3830,"provisional":3480,"depends":4935,"contact":4752,"extension":4936,"proposal":3480},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":4938,"type":1826,"author":3830,"provisional":3480,"depends":4558,"contact":3856,"extension":4939,"proposal":3480},517,"VK_NV_per_stage_descriptor_set",{"number":4941,"type":1826,"author":3830,"provisional":3480,"depends":3997,"contact":4942,"extension":4943,"proposal":3480},293,"Liya Li @liyli","VK_NV_present_barrier",{"extension":4945,"proposal":3480},"VK_NV_private_vendor_info",{"number":4947,"type":1826,"author":3830,"provisional":3480,"contact":4948,"extension":4949,"proposal":3480},556,"Rodrigo Locatti @rlocatti","VK_NV_raw_access_chains",{"number":4951,"type":1826,"author":3830,"deprecatedby":4610,"provisional":3480,"depends":4952,"contact":4801,"extension":4953,"proposal":3480},166,"(VK_KHR_get_physical_device_properties2+VK_KHR_get_memory_requirements2),VK_VERSION_1_1","VK_NV_ray_tracing",{"number":4955,"type":1826,"author":3830,"provisional":3480,"depends":4610,"contact":4801,"extension":4956,"proposal":3480},491,"VK_NV_ray_tracing_invocation_reorder",{"number":4958,"type":1826,"author":3830,"provisional":3480,"depends":4610,"contact":4613,"extension":4959,"proposal":3480},328,"VK_NV_ray_tracing_motion_blur",{"number":4961,"type":1826,"author":3830,"provisional":3480,"contact":3960,"extension":4962,"proposal":3678},569,"VK_NV_ray_tracing_validation",{"number":4964,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4835,"extension":4965,"proposal":3480},167,"VK_NV_representative_fragment_test",{"number":4967,"type":1826,"author":3830,"provisional":3480,"contact":3856,"extension":4968,"proposal":3480},95,"VK_NV_sample_mask_override_coverage",{"number":4970,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4820,"extension":4971,"proposal":3480},206,"VK_NV_scissor_exclusive",{"number":4973,"type":1826,"author":3830,"provisional":3480,"contact":3850,"extension":4974,"proposal":3480},564,"VK_NV_shader_atomic_float16_vector",{"number":4976,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4820,"extension":4977,"proposal":3480},205,"VK_NV_shader_image_footprint",{"number":4979,"type":1826,"author":3830,"provisional":3480,"depends":3814,"contact":4168,"extension":4980,"proposal":3480},155,"VK_NV_shader_sm_builtins",{"number":4982,"type":1826,"author":3830,"provisional":3480,"depends":3814,"contact":3850,"extension":4983,"proposal":3480},199,"VK_NV_shader_subgroup_partitioned",{"number":4985,"type":1826,"author":3830,"provisional":3480,"depends":3720,"contact":4820,"extension":4986,"proposal":3480},165,"VK_NV_shading_rate_image",{"number":4988,"type":1826,"author":3830,"provisional":3480,"contact":4168,"extension":4989,"proposal":3480},97,"VK_NV_viewport_array2",{"number":4991,"type":1826,"author":3830,"provisional":3480,"contact":3856,"extension":4992,"proposal":3480},99,"VK_NV_viewport_swizzle",{"number":4994,"type":1826,"author":3830,"promotedto":4753,"provisional":3480,"depends":4886,"platform":3998,"contact":4752,"extension":4995,"proposal":3480},59,"VK_NV_win32_keyed_mutex",{"number":4997,"type":1826,"author":3979,"provisional":3480,"depends":4998,"contact":3980,"extension":4999,"proposal":3480},522,"(VK_EXT_filter_cubic)+(VK_VERSION_1_2,VK_EXT_sampler_filter_minmax)","VK_QCOM_filter_cubic_clamp",{"number":5001,"type":1826,"author":3979,"provisional":3480,"depends":3981,"contact":3980,"extension":5002,"proposal":3480},520,"VK_QCOM_filter_cubic_weights",{"number":5004,"type":1826,"author":3979,"provisional":3480,"depends":5005,"contact":3980,"extension":5006,"proposal":3480},426,"(VK_KHR_get_physical_device_properties2,VK_VERSION_1_1)+VK_EXT_fragment_density_map","VK_QCOM_fragment_density_map_offset",{"number":5008,"type":1826,"author":3979,"provisional":3480,"depends":5009,"contact":3980,"extension":5010,"proposal":3678},441,"VK_KHR_format_feature_flags2,VK_VERSION_1_3","VK_QCOM_image_processing",{"number":5012,"type":1826,"author":3979,"provisional":3480,"depends":5010,"contact":3980,"extension":5013,"proposal":3480},519,"VK_QCOM_image_processing2",{"number":5015,"type":1826,"author":3979,"provisional":3480,"contact":3980,"extension":5016,"proposal":3480},511,"VK_QCOM_multiview_per_view_render_areas",{"number":5018,"type":1826,"author":3979,"provisional":3480,"depends":3720,"contact":3980,"extension":5019,"proposal":3480},489,"VK_QCOM_multiview_per_view_viewports",{"number":5021,"type":1826,"author":3979,"provisional":3480,"contact":3980,"extension":5022,"proposal":3480},172,"VK_QCOM_render_pass_shader_resolve",{"number":5024,"type":1826,"author":3979,"provisional":3480,"contact":3980,"extension":5025,"proposal":3480},302,"VK_QCOM_render_pass_store_ops",{"number":5027,"type":1826,"author":3979,"provisional":3480,"contact":3980,"extension":5028,"proposal":3480},283,"VK_QCOM_render_pass_transform",{"number":5030,"type":1826,"author":3979,"provisional":3480,"depends":5031,"contact":3980,"extension":5032,"proposal":3480},334,"VK_KHR_copy_commands2,VK_VERSION_1_3","VK_QCOM_rotated_copy_commands",{"number":5034,"type":1826,"author":3979,"provisional":3480,"depends":3720,"contact":3980,"extension":5035,"proposal":3678},485,"VK_QCOM_tile_properties",{"number":5037,"type":1826,"author":3979,"provisional":3480,"contact":3980,"extension":5038,"proposal":3480},521,"VK_QCOM_ycbcr_degamma",{"number":5040,"type":1826,"author":5041,"provisional":3480,"depends":3793,"platform":5042,"contact":5043,"extension":5044,"proposal":3480},530,"QNX","screen","Mike Gorchak @mgorchak-blackberry, Aaron Ruby @aruby-blackberry","VK_QNX_external_memory_screen_buffer",{"number":5046,"type":3824,"author":5041,"provisional":3480,"depends":3937,"platform":5042,"contact":5047,"extension":5048,"proposal":3480},379,"Mike Gorchak @mgorchak-blackberry","VK_QNX_screen_surface",{"number":5050,"type":1826,"author":5051,"provisional":3480,"depends":3720,"contact":3923,"extension":5052,"proposal":3480},486,"SEC","VK_SEC_amigo_profiling",{"number":5054,"type":1826,"author":5055,"provisional":3480,"depends":3720,"specialuse":3895,"contact":4152,"extension":5056,"proposal":3480},421,"VALVE","VK_VALVE_descriptor_set_host_mapping",{"number":5058,"type":1826,"author":5055,"promotedto":4117,"provisional":3480,"depends":4115,"specialuse":3895,"contact":4116,"extension":5059,"proposal":3480},352,"VK_VALVE_mutable_descriptor_type",1725732634809]