| # Chromium Experimental Push Constant | 
 |  | 
 | The `chromium_experimental_push_constant` extension adds support for push constant global variables to WGSL. | 
 | Push constants are small amounts of data that are passed to the shader and are expected to be more lightweight to set / modify than uniform buffer bindings. | 
 | The concept of push constant comes from Vulkan but D3D12 has similar "root constants". | 
 | Metal doesn't have the same concept but push constants can be efficiently implemented with the `setBytes` family of command encoder methods. | 
 |  | 
 | ## Status | 
 |  | 
 | Push constant support in Tint is highly experimental and only meant to be used in internal transforms at this stage. | 
 | Specification work in the WebGPU group hasn't started. | 
 |  | 
 | ## Pseudo-specification | 
 |  | 
 | This extension adds a new `push_constant` address space that's only allowed on global variable declarations. | 
 | Push constant variables must only contain 32bit data types (or aggregates of such types). | 
 | Push constant variable declarations must not have an initializer. | 
 | It is an error for a entry point to statically use more than one `push_constant` variable. | 
 |  | 
 | ## Example usage | 
 |  | 
 | ``` | 
 | var<push_constant> draw_id : u32; | 
 |  | 
 | @fragment fn main() -> @location(0) u32 { | 
 |     return draw_id; | 
 | } | 
 | ``` |