From a4555482f9f3b8a4b80b9ad0fa116249d6cb5d56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Branimir=20Karad=C5=BEi=C4=87?= Date: Mon, 13 Jul 2026 22:15:13 -0700 Subject: [PATCH] Increased number of texcoord attributes, increased instance data, added int32/uint32 vertex attributes. (#3832) --- bindings/bf/bgfx.bf | 56 ++++++++- bindings/c3/bgfx.c3 | 38 +++++- bindings/cs/bgfx.cs | 56 ++++++++- bindings/d/impl.d | 4 +- bindings/d/package.d | 14 ++- bindings/zig/bgfx.zig | 36 +++++- examples/05-instancing/varying.def.sc | 10 +- examples/06-bump/varying.def.sc | 8 +- examples/24-nbody/varying.def.sc | 2 +- examples/33-pom/varying.def.sc | 4 - examples/37-gpudrivenrendering/varying.def.sc | 8 +- .../shaders/dxbc/cs_gdr_stream_compaction.bin | Bin 3256 -> 3319 bytes examples/runtime/shaders/dxbc/cs_indirect.bin | Bin 449 -> 504 bytes .../shaders/dxbc/vs_bump_instanced.bin | Bin 1808 -> 1800 bytes .../vs_gdr_instanced_indirect_rendering.bin | Bin 1101 -> 1093 bytes .../shaders/dxbc/vs_gdr_render_occlusion.bin | Bin 709 -> 701 bytes .../runtime/shaders/dxbc/vs_instancing.bin | Bin 861 -> 851 bytes examples/runtime/shaders/dxbc/vs_particle.bin | Bin 1171 -> 1169 bytes .../shaders/dxil/cs_gdr_stream_compaction.bin | Bin 3888 -> 3943 bytes examples/runtime/shaders/dxil/cs_indirect.bin | Bin 1773 -> 1824 bytes .../shaders/dxil/vs_bump_instanced.bin | Bin 4696 -> 4724 bytes .../vs_gdr_instanced_indirect_rendering.bin | Bin 3177 -> 3193 bytes .../shaders/dxil/vs_gdr_render_occlusion.bin | Bin 3069 -> 3089 bytes .../runtime/shaders/dxil/vs_instancing.bin | Bin 3557 -> 3579 bytes examples/runtime/shaders/dxil/vs_particle.bin | Bin 3015 -> 3017 bytes examples/runtime/shaders/essl/cs_indirect.bin | Bin 2146 -> 4320 bytes .../shaders/essl/cs_init_instances.bin | Bin 4298 -> 6424 bytes .../shaders/essl/cs_update_instances.bin | Bin 3606 -> 5732 bytes .../runtime/shaders/glsl/cs_gdr_copy_z.bin | Bin 2475 -> 4601 bytes .../shaders/glsl/cs_gdr_downscale_hi_z.bin | Bin 2909 -> 5035 bytes .../shaders/glsl/cs_gdr_occlude_props.bin | Bin 4456 -> 6582 bytes .../shaders/glsl/cs_gdr_stream_compaction.bin | Bin 4628 -> 6802 bytes examples/runtime/shaders/glsl/cs_indirect.bin | Bin 2423 -> 4597 bytes .../shaders/glsl/cs_init_instances.bin | Bin 4575 -> 6701 bytes .../shaders/glsl/cs_update_instances.bin | Bin 3883 -> 6009 bytes .../shaders/metal/cs_gdr_downscale_hi_z.bin | Bin 1067 -> 1067 bytes .../shaders/metal/cs_gdr_occlude_props.bin | Bin 7555 -> 7555 bytes .../metal/cs_gdr_stream_compaction.bin | Bin 4908 -> 5019 bytes .../runtime/shaders/metal/cs_indirect.bin | Bin 550 -> 659 bytes .../shaders/metal/cs_init_instances.bin | Bin 6530 -> 6530 bytes .../shaders/metal/cs_update_instances.bin | Bin 3157 -> 3157 bytes .../runtime/shaders/spirv/cs_gdr_copy_z.bin | Bin 1385 -> 1385 bytes .../shaders/spirv/cs_gdr_downscale_hi_z.bin | Bin 1831 -> 1831 bytes .../shaders/spirv/cs_gdr_occlude_props.bin | Bin 10449 -> 10449 bytes .../spirv/cs_gdr_stream_compaction.bin | Bin 6339 -> 6506 bytes .../runtime/shaders/spirv/cs_indirect.bin | Bin 1170 -> 1317 bytes .../shaders/spirv/cs_init_instances.bin | Bin 8287 -> 8287 bytes .../shaders/spirv/cs_update_instances.bin | Bin 3715 -> 3715 bytes .../shaders/wgsl/cs_gdr_stream_compaction.bin | Bin 5374 -> 5484 bytes examples/runtime/shaders/wgsl/cs_indirect.bin | Bin 653 -> 756 bytes include/bgfx/bgfx.h | 48 +++++--- include/bgfx/c99/bgfx.h | 12 ++ include/bgfx/defines.h | 2 +- scripts/bgfx.idl | 14 ++- src/bgfx.cpp | 6 +- src/config.h | 7 +- src/renderer_d3d11.cpp | 25 +++- src/renderer_d3d12.cpp | 24 +++- src/renderer_gl.cpp | 23 ++++ src/renderer_mtl.cpp | 33 ++++++ src/renderer_noop.cpp | 1 + src/renderer_vk.cpp | 16 ++- src/renderer_webgpu.cpp | 14 +++ src/vertexlayout.cpp | 110 +++++++++++------- tools/geometryv/geometryv.cpp | 44 ++++--- tools/shaderc/shaderc.cpp | 24 +++- tools/shaderc/shaderc_dxil.cpp | 47 +++++--- tools/shaderc/shaderc_hlsl.cpp | 47 +++++--- tools/shaderc/shaderc_metal.cpp | 8 ++ tools/shaderc/shaderc_spirv.cpp | 8 ++ tools/shaderc/shaderc_wgsl.cpp | 8 ++ 71 files changed, 602 insertions(+), 155 deletions(-) diff --git a/bindings/bf/bgfx.bf b/bindings/bf/bgfx.bf index 5b41ad759..3ba599650 100644 --- a/bindings/bf/bgfx.bf +++ b/bindings/bf/bgfx.bf @@ -1697,6 +1697,46 @@ public static class bgfx /// TexCoord7, + /// + /// a_texcoord8 + /// + TexCoord8, + + /// + /// a_texcoord9 + /// + TexCoord9, + + /// + /// a_texcoord10 + /// + TexCoord10, + + /// + /// a_texcoord11 + /// + TexCoord11, + + /// + /// a_texcoord12 + /// + TexCoord12, + + /// + /// a_texcoord13 + /// + TexCoord13, + + /// + /// a_texcoord14 + /// + TexCoord14, + + /// + /// a_texcoord15 + /// + TexCoord15, + Count } @@ -1738,6 +1778,16 @@ public static class bgfx /// Float, + /// + /// Int32 + /// + Int32, + + /// + /// Uint32 + /// + Uint32, + Count } @@ -2594,6 +2644,8 @@ public static class bgfx public uint32 maxComputeBindings; public uint32 maxVertexLayouts; public uint32 maxVertexStreams; + public uint32 maxVertexAttributes; + public uint32 maxInstanceData; public uint32 maxIndexBuffers; public uint32 maxVertexBuffers; public uint32 maxDynamicIndexBuffers; @@ -2860,8 +2912,8 @@ public static class bgfx { public uint32 hash; public uint16 stride; - public uint16[18] offset; - public uint16[18] attributes; + public uint16[26] offset; + public uint16[26] attributes; } [CRepr] diff --git a/bindings/c3/bgfx.c3 b/bindings/c3/bgfx.c3 index 78280c7df..0fadae4e5 100644 --- a/bindings/c3/bgfx.c3 +++ b/bindings/c3/bgfx.c3 @@ -1072,6 +1072,30 @@ enum Attrib : uint // a_texcoord7 TEXCOORD7, + // a_texcoord8 + TEXCOORD8, + + // a_texcoord9 + TEXCOORD9, + + // a_texcoord10 + TEXCOORD10, + + // a_texcoord11 + TEXCOORD11, + + // a_texcoord12 + TEXCOORD12, + + // a_texcoord13 + TEXCOORD13, + + // a_texcoord14 + TEXCOORD14, + + // a_texcoord15 + TEXCOORD15, + COUNT } @@ -1098,6 +1122,12 @@ enum AttribType : uint // Float FLOAT, + // Int32 + INT32, + + // Uint32 + UINT32, + COUNT } @@ -1660,6 +1690,10 @@ struct CapsLimits uint maxVertexLayouts; // Maximum number of vertex streams. uint maxVertexStreams; + // Maximum number of vertex attributes. + uint maxVertexAttributes; + // Maximum number of instance data slots. + uint maxInstanceData; // Maximum number of index buffer handles. uint maxIndexBuffers; // Maximum number of vertex buffer handles. @@ -2185,9 +2219,9 @@ struct VertexLayout // Stride. ushort stride; // Attribute offsets. - ushort[18] offset; + ushort[26] offset; // Used attributes. - ushort[18] attributes; + ushort[26] attributes; } // Encoders are used for submitting draw calls from multiple threads. Only one encoder diff --git a/bindings/cs/bgfx.cs b/bindings/cs/bgfx.cs index f1d3657bc..d3a3b9446 100644 --- a/bindings/cs/bgfx.cs +++ b/bindings/cs/bgfx.cs @@ -1692,6 +1692,46 @@ public static partial class bgfx /// TexCoord7, + /// + /// a_texcoord8 + /// + TexCoord8, + + /// + /// a_texcoord9 + /// + TexCoord9, + + /// + /// a_texcoord10 + /// + TexCoord10, + + /// + /// a_texcoord11 + /// + TexCoord11, + + /// + /// a_texcoord12 + /// + TexCoord12, + + /// + /// a_texcoord13 + /// + TexCoord13, + + /// + /// a_texcoord14 + /// + TexCoord14, + + /// + /// a_texcoord15 + /// + TexCoord15, + Count } @@ -1732,6 +1772,16 @@ public static partial class bgfx /// Float, + /// + /// Int32 + /// + Int32, + + /// + /// Uint32 + /// + Uint32, + Count } @@ -2572,6 +2622,8 @@ public static partial class bgfx public uint maxComputeBindings; public uint maxVertexLayouts; public uint maxVertexStreams; + public uint maxVertexAttributes; + public uint maxInstanceData; public uint maxIndexBuffers; public uint maxVertexBuffers; public uint maxDynamicIndexBuffers; @@ -2818,8 +2870,8 @@ public static partial class bgfx { public uint hash; public ushort stride; - public fixed ushort offset[18]; - public fixed ushort attributes[18]; + public fixed ushort offset[26]; + public fixed ushort attributes[26]; } public unsafe struct Encoder diff --git a/bindings/d/impl.d b/bindings/d/impl.d index 4ee67c0d4..9abced215 100644 --- a/bindings/d/impl.d +++ b/bindings/d/impl.d @@ -36,12 +36,12 @@ extern(C++, "bgfx") package final abstract class Access{ } extern(C++, "bgfx") package final abstract class Attrib{ enum Enum{ - position,normal,tangent,bitangent,color0,color1,color2,color3,indices,weight,texCoord0,texCoord1,texCoord2,texCoord3,texCoord4,texCoord5,texCoord6,texCoord7,count + position,normal,tangent,bitangent,color0,color1,color2,color3,indices,weight,texCoord0,texCoord1,texCoord2,texCoord3,texCoord4,texCoord5,texCoord6,texCoord7,texCoord8,texCoord9,texCoord10,texCoord11,texCoord12,texCoord13,texCoord14,texCoord15,count } } extern(C++, "bgfx") package final abstract class AttribType{ enum Enum{ - int8,uint8,uint10,int16,uint16,half,float_,count + int8,uint8,uint10,int16,uint16,half,float_,int32,uint32,count } } extern(C++, "bgfx") package final abstract class TextureFormat{ diff --git a/bindings/d/package.d b/bindings/d/package.d index ee9d9d253..884630724 100644 --- a/bindings/d/package.d +++ b/bindings/d/package.d @@ -9,7 +9,7 @@ import bindbc.common.types: c_int64, c_uint64, va_list; import bindbc.bgfx.config; static import bgfx.impl; -enum uint apiVersion = 149; +enum uint apiVersion = 150; alias ViewID = ushort; @@ -709,6 +709,14 @@ enum Attrib: bgfx.impl.Attrib.Enum{ texCoord5 = bgfx.impl.Attrib.Enum.texCoord5, texCoord6 = bgfx.impl.Attrib.Enum.texCoord6, texCoord7 = bgfx.impl.Attrib.Enum.texCoord7, + texCoord8 = bgfx.impl.Attrib.Enum.texCoord8, + texCoord9 = bgfx.impl.Attrib.Enum.texCoord9, + texCoord10 = bgfx.impl.Attrib.Enum.texCoord10, + texCoord11 = bgfx.impl.Attrib.Enum.texCoord11, + texCoord12 = bgfx.impl.Attrib.Enum.texCoord12, + texCoord13 = bgfx.impl.Attrib.Enum.texCoord13, + texCoord14 = bgfx.impl.Attrib.Enum.texCoord14, + texCoord15 = bgfx.impl.Attrib.Enum.texCoord15, count = bgfx.impl.Attrib.Enum.count, } @@ -721,6 +729,8 @@ enum AttribType: bgfx.impl.AttribType.Enum{ uint16 = bgfx.impl.AttribType.Enum.uint16, half = bgfx.impl.AttribType.Enum.half, float_ = bgfx.impl.AttribType.Enum.float_, + int32 = bgfx.impl.AttribType.Enum.int32, + uint32 = bgfx.impl.AttribType.Enum.uint32, count = bgfx.impl.AttribType.Enum.count, } @@ -1132,6 +1142,8 @@ extern(C++, "bgfx") struct Caps{ uint maxComputeBindings; ///Maximum number of compute bindings. uint maxVertexLayouts; ///Maximum number of vertex format layouts. uint maxVertexStreams; ///Maximum number of vertex streams. + uint maxVertexAttributes; ///Maximum number of vertex attributes. + uint maxInstanceData; ///Maximum number of instance data slots. uint maxIndexBuffers; ///Maximum number of index buffer handles. uint maxVertexBuffers; ///Maximum number of vertex buffer handles. uint maxDynamicIndexBuffers; ///Maximum number of dynamic index buffer handles. diff --git a/bindings/zig/bgfx.zig b/bindings/zig/bgfx.zig index 45ff27db9..77c8c10d1 100644 --- a/bindings/zig/bgfx.zig +++ b/bindings/zig/bgfx.zig @@ -1033,6 +1033,30 @@ pub const Attrib = enum(c_int) { /// a_texcoord7 TexCoord7, + /// a_texcoord8 + TexCoord8, + + /// a_texcoord9 + TexCoord9, + + /// a_texcoord10 + TexCoord10, + + /// a_texcoord11 + TexCoord11, + + /// a_texcoord12 + TexCoord12, + + /// a_texcoord13 + TexCoord13, + + /// a_texcoord14 + TexCoord14, + + /// a_texcoord15 + TexCoord15, + Count }; @@ -1058,6 +1082,12 @@ pub const AttribType = enum(c_int) { /// Float Float, + /// Int32 + Int32, + + /// Uint32 + Uint32, + Count }; @@ -1588,6 +1618,8 @@ pub const Caps = extern struct { maxComputeBindings: u32, maxVertexLayouts: u32, maxVertexStreams: u32, + maxVertexAttributes: u32, + maxInstanceData: u32, maxIndexBuffers: u32, maxVertexBuffers: u32, maxDynamicIndexBuffers: u32, @@ -1824,8 +1856,8 @@ pub const Init = extern struct { pub const VertexLayout = extern struct { hash: u32, stride: u16, - offset: [18]u16, - attributes: [18]u16, + offset: [26]u16, + attributes: [26]u16, /// Start VertexLayout. /// Renderer backend type. See: `bgfx::RendererType` pub inline fn begin(self: *VertexLayout, _rendererType: RendererType) *VertexLayout { diff --git a/examples/05-instancing/varying.def.sc b/examples/05-instancing/varying.def.sc index 2ac2984d2..f519f02d0 100644 --- a/examples/05-instancing/varying.def.sc +++ b/examples/05-instancing/varying.def.sc @@ -2,8 +2,8 @@ vec4 v_color0 : COLOR0 = vec4(1.0, 0.0, 0.0, 1.0); vec3 a_position : POSITION; vec4 a_color0 : COLOR0; -vec4 i_data0 : TEXCOORD7; -vec4 i_data1 : TEXCOORD6; -vec4 i_data2 : TEXCOORD5; -vec4 i_data3 : TEXCOORD4; -vec4 i_data4 : TEXCOORD3; +vec4 i_data0 : TEXCOORD31; +vec4 i_data1 : TEXCOORD30; +vec4 i_data2 : TEXCOORD29; +vec4 i_data3 : TEXCOORD28; +vec4 i_data4 : TEXCOORD27; diff --git a/examples/06-bump/varying.def.sc b/examples/06-bump/varying.def.sc index 34417e785..159908487 100644 --- a/examples/06-bump/varying.def.sc +++ b/examples/06-bump/varying.def.sc @@ -9,7 +9,7 @@ vec3 a_position : POSITION; vec4 a_normal : NORMAL; vec4 a_tangent : TANGENT; vec2 a_texcoord0 : TEXCOORD0; -vec4 i_data0 : TEXCOORD7; -vec4 i_data1 : TEXCOORD6; -vec4 i_data2 : TEXCOORD5; -vec4 i_data3 : TEXCOORD4; +vec4 i_data0 : TEXCOORD31; +vec4 i_data1 : TEXCOORD30; +vec4 i_data2 : TEXCOORD29; +vec4 i_data3 : TEXCOORD28; diff --git a/examples/24-nbody/varying.def.sc b/examples/24-nbody/varying.def.sc index 16023cea0..5d7acbbdf 100644 --- a/examples/24-nbody/varying.def.sc +++ b/examples/24-nbody/varying.def.sc @@ -1,4 +1,4 @@ vec2 a_position : POSITION; -vec4 i_data0 : TEXCOORD7; +vec4 i_data0 : TEXCOORD31; vec3 v_texCoord : TEXCOORD0 = vec3(0.0, 0.0, 0.0); diff --git a/examples/33-pom/varying.def.sc b/examples/33-pom/varying.def.sc index 2b42f9cc8..a6d268ea4 100644 --- a/examples/33-pom/varying.def.sc +++ b/examples/33-pom/varying.def.sc @@ -7,7 +7,3 @@ vec3 a_position : POSITION; vec3 a_tangent : TANGENT; vec3 a_bitangent : BITANGENT; vec2 a_texcoord0 : TEXCOORD0; -vec4 i_data0 : TEXCOORD7; -vec4 i_data1 : TEXCOORD6; -vec4 i_data2 : TEXCOORD5; -vec4 i_data3 : TEXCOORD4; diff --git a/examples/37-gpudrivenrendering/varying.def.sc b/examples/37-gpudrivenrendering/varying.def.sc index bab2e384d..a14c3669d 100644 --- a/examples/37-gpudrivenrendering/varying.def.sc +++ b/examples/37-gpudrivenrendering/varying.def.sc @@ -1,9 +1,9 @@ vec3 a_position : POSITION; vec2 a_texcoord0 : TEXCOORD0; -vec4 i_data0 : TEXCOORD7; -vec4 i_data1 : TEXCOORD6; -vec4 i_data2 : TEXCOORD5; -vec4 i_data3 : TEXCOORD4; +vec4 i_data0 : TEXCOORD31; +vec4 i_data1 : TEXCOORD30; +vec4 i_data2 : TEXCOORD29; +vec4 i_data3 : TEXCOORD28; vec2 v_texcoord0 : TEXCOORD0; flat float v_materialID : TEXCOORD0; diff --git a/examples/runtime/shaders/dxbc/cs_gdr_stream_compaction.bin b/examples/runtime/shaders/dxbc/cs_gdr_stream_compaction.bin index 4fa810c525ada341002bde1f21580200735a4baa..929844138a8579f15c1f96672436758bbd49cb04 100644 GIT binary patch delta 241 zcmdlX`CYQ!IoN}n0ScHHM3U0eD&jNqQZkEDlS>?n(w!2EQ<;F$j9?}FrSZw7IXRhm z>CX9iX_@Iv3<6M@6+8?KE)h=7d$;;`PfFhAJ0bu4r3L#{=7IEq|}+ECU16#F?uZ88^E!%5ws#R4!*m s<0hb`AixHsLB>uihVbPW7&x4OVj$;QLDg_IC;)j3lXr9fW>R1P002%c0RR91 delta 151 zcmew^xkJ*`IoN}n0SXuy_)FuHOLKBE^U|I3^U^ZYnSe5kVA&2H1_qZ1C+8(bvo@T_ z?6LD@p2Cyt;M59|?U?n(w!2EQ<;F$j9?`krSS!cMTxn^ zOw0ld%wVAnKpB?^CufiL?36SySFQ ztWhtpo4NRP9?ZU`Du|ZstjR69fffN%E^Yb$>bOLGC ci5tWjSvH=iVCH3IWDsW%V-RH!VQ^po0JK>Vw*UYD diff --git a/examples/runtime/shaders/dxbc/vs_gdr_render_occlusion.bin b/examples/runtime/shaders/dxbc/vs_gdr_render_occlusion.bin index 8191e3c535e837c03e2801487817a9635b065b76..d42737c6db57a83b9a43a268c975f337940e4ae9 100644 GIT binary patch delta 72 zcmX@gx|el=w!j>=RSlW3oVO>gn3%La;p~Bl)-H_l6C1=O8Lnn}y Uowz}qQD)aqbMwX2yJ}~mKGBSuWh%tyVh%h)X008zU6FL9@ diff --git a/examples/runtime/shaders/dxbc/vs_instancing.bin b/examples/runtime/shaders/dxbc/vs_instancing.bin index bcfb64db6dc859719e5094e8aca3ae53df820cdb..ce7c0ce631063ea1f673ab7b60529a37a0103c8b 100644 GIT binary patch delta 98 zcmcc1cA0I0wm@0l&x@Srd^By1^>zzi_%vanb&RAu0|YPwDJCH1=VxHp52WQLZV;E0 fg~&00Bw3IoWhOolXO!OfBZP^aiIsto!GQq)oj(&G delta 108 zcmcc2c9(5}w!r@R6~?9-a^}Z6EIv%0-~4%^b&MoC0|YPwDJCH1=VxHp52V>9ZV;Db pg~&00Bw3IoStdRZXJp>^BZNtiot1%+L7YL1L6kv+L72gT0RT;j6F~p~ diff --git a/examples/runtime/shaders/dxbc/vs_particle.bin b/examples/runtime/shaders/dxbc/vs_particle.bin index 0526cec1745ebe711a6e4bbb38971f45712aa155..310d2401d696e590f03a396c069812a3f83ee538 100644 GIT binary patch delta 38 wcmV+>0NMYO36TkqOAujIDg5|P7ay0N#>sLgY^IT0L;)YMpzH$$0RaH804S&qFaQ7m delta 40 ycmV+@0N4MK36lwsOAwX$lUt0|;uPBaHoOO$G76DfL;(k}pzH$&0s#OQ0I&dIE)L}Y diff --git a/examples/runtime/shaders/dxil/cs_gdr_stream_compaction.bin b/examples/runtime/shaders/dxil/cs_gdr_stream_compaction.bin index 2f139534fde31fc01c49daddb3b918a4010c334f..e419651390a3fcca8d9044b156eaed10040a9463 100644 GIT binary patch delta 509 zcmdlW_gt>tIoN}n0ScHHM3U0eD&jNqQZkEDlS>?n(w!2EQ<;F$j9?}FrSZw7IXRhm z>CX9iX_@Iv3<6LY34R6!mk1~44Xm$A8|S27HLWz>p!(P@4Wthw#}1@zfY=9!V}LjZ zgn^P96I>W`O)L$Ql9NpnlMKwwjgrhw4UJL~EmI8*O;QY!Ei5ez^a@gvfa)1M9D_YX zKnx)8ls*%+p_RtTEbWp`g^lL@{MH4u+)Ta0PCQ zzu3MpVvgC_b#uY88&l#LbInZ5lg-U6QjL;KQ?n(w!2EQ<;F$j9?`krSS!cMTxn^ zOw0ld%wVA#Yzz!85l+st4?fI3lBC7k=F0w8FJjg+kcJx*?Vi`CCM6jp8>X0!@+COXKdfzG`f0Kac570 zON6IS4=V#h0s|{UGSFlYALJwfp!yP^xRdjNdx|^^3{gNa?j{8Wkc)+Zn7vVX^AbiU zMi!L|USgA9F+JsJU~F~BWodZE!*Ew}^KIrjCJA+rS{6qgkXb;Z7)(yB6Jbtc@S0r6 zCQ{R?;CZ^kk*PsJ!eXkTkFar40fPbu+v%k&S2LUhVhpx1y>{c_V_-R$aB~imv@b^k z_pv?+69$f^gC8AFeoJxLV5rQ-%g~fiP!n*-_V%{iGaUyRfoAE%wG=GobSyY{L$H~R X!O_6tNJ5f=<`28~jzIgNz<~h($S`uy delta 346 zcmZ3$_mxI{QPfBA6e%!0@AcfEN9 ziuRr@RAdCnO^kh>n`CO3Vw99@o@8!po|8R_`K(H+=>SaTp~PuDp(m95*Sz+;(#WD_zXZ=0H`(rDDLEZ z;GQB614HQMjf^3TEFvMB7$$QvKjleib;xCDc*etUSCV1#FXlQX2_>KoVHQUnkWQdR z1`{vC1hxfFPEDS`CX&&n;CZ^kk*PsJ!s4o;kFar40fPbu+v!r4D;Z7#F$UY1Uc2!~ zF|Ztb@IZz+dkw?kNrKI642}jC7ROIW@f_Zea^wMng8U;qH+n_}_+ diff --git a/examples/runtime/shaders/dxil/vs_bump_instanced.bin b/examples/runtime/shaders/dxil/vs_bump_instanced.bin index cb06fb3c02093ba9b137744aa026a9e8bc295075..202963e56b250e49f5d1d765501bcc6a6b867841 100644 GIT binary patch delta 1853 zcmY*aeM}Q)9KP$vT??%}tkhCkdL7>z!z-l~9Jn4-Rdn4PG7u86g-Vm_c#H2GE5tfE@zk z1%=*u1^7(`v1mIEF~GPGG}M+jI>%-+;B;yMO+we7EX_MvoF&ct_K@alRf!cDRvd4Bc%;YX*nE z_RQbCzI1*5mL@}_OQ@3f@Z(y#;F$iTQ>h;h;)DDvBh(#kc2)}$FqGyv7Fr#L=P+J; zkDoWZY1LKZXWGBh6;$pGMxMRNFB~F4kc3T;8>{0S1I?!NkHU{uSgbUe?#y;|q)7DMHY=}hM z2@lX;UC1`EiyWiB`jNgOBvw`DhHwsYQL=kmT;BIIVN;-`L7NK*EkVXH-=8PoM|9Q# zVuX-JoTRIrC&lfgq-KUrG~-Bv2YEj`L|P3e;ponx@O>)G0EqkBqPR zkxt!hL>dD~pPEjU^^ubEHp^Z*w-#;0P&0|ff*)o+-3AbuomNekk4^k;bhEu z>fcFf_%Mdaf=Ht6iIta;ELLhEjODl|_)c5Sh|XI&UVeFJC?}yz>zLxwWO2^yr9Q8n zuwL!-!C>LC2i?dH4?4hwiC&yFz;zJ4T3#Z8g1Ma@w#N^Va;jxTtc4lfx{RDAdNF8# zTR`*@oB^(%s51vwr{wtnEE}0^fK7%dfu~z31ZNSp$tDx``anqs`#4`Em;yDLmtG1JYSMl z!74|%Mk}QhWE#+fCPi#Vc&u&QSt(|yHk0cU5e~4nJXM%EY>#n?aj;)~g@UuoQANh$ zXP;_%JK(I;+v(~3gZe~}Z4j=!=ZV%4b=IKgBYKZx4Q7*#X7s%QcIJAxQLwlfu ziNuE0i>eU*TJe};O`5M04xW{~H0n7_Z7EqS%%Ai(77#A66sRB_!hg&HwXzorPydqc z#YLvUmBMnweuK#q+Z5|Hiv|0e0#8Y|bo)JQ+K|;*%&Rh9ObqMsGm>4Y;W^9LI?=}1 zbXOa8-~H{zBufiM+pia8be$)O&~DYgyu_+@Zzvg_2yJG3SHI9iiZWZGLfhB+k#n<~ zT|Mbf3!ORmsAwH2GAV_Y2!Sq0P!Yj*v#ZBh^w|OYAnY_4ERpzQR`rc`S%hyvXj)j= z8sTf-0usEwh#(^=QkNkS0xKxcE{+huB9lV+O9Y<>@cn`aewkH0{-$nyBmsCV6Vm@! wLC3&SCi%axLinHhb%5{8iU?mPsPE5>;1$98cdX!U2|X+ZxQCeFBCDxdsm?6*t9RsR~*QFz31{$)!-mSxp`Kw%Z;h|u2mk=z-#m)QI5kp&pxjdU zmU6A|EgAX3Y%o;mUs{1sdN}C?MAw?&Dcg8+8wmfu*l(nT|*V!=BQ~i zmb=>RkPYgYH|pmkKj2etKPS2zZH%{n9M{+3GnXy425TP<01FUMCQc^TV1=K6fZQM) zH`hfUXy9)##IpPp5W#U3Y%-sAXhJF#A!Xc@Oou2q9Q#1JlLTNdw-;NLKZIEc%po@G zaRyhO*0_uWNB~vv$$c(?%~4oXLGyirPzCMWEIEaQxrK70=NqMeV5`kgb-MgX!41=e zG1hNdQt01$@dUb&ZQbHheo?StQsVO(CD*#YQeKaqpNtoLXN*LYOrg^@8%EVcy7fOq zl)eI|%?P`TBi+sm5oNs$b@ZUl1nQ<`8wLh{3_o~ud*=3oNu%DPwv`-K=DYVJImdM; z%Vb{+#wW<*|!Bw6as`)wgo2Qa@c2j#w> zcSQi~rq;fI092s&er~uX0PU>1xL*L8(YKy09~FR&-d47$LW|0QpJn@)?k@h0K=YyR zl%fZ#>^*?O&=sBn=LE^#6r$dZy4xv6h#F*mImGAgO{K%5$H*gmsnENHJ|z2?YN0oU zvJ~1e)-1#gGh~P<*lP2N#?bY~ z6dP3^;R_=O*&#^Z<@1O6!X93LyVYT&DC)Z+h`D8(37MNlkLK^&wE`!AgpZ#Q(?>#V z3?L=~KlVBn7{&DC;kM6oU*?DhqElS-JA5hZ&^67knpJ^ zRJsf%v$}H%6I{qYeGh!1rI*j0u1fK5)}IY5oX_t@l80o8j2V-HWU?>r6z-{bhZ91P_ zqIsdR^qQ5mjC6`tKQg7=2QRJCdEA6xUz?}jKg`gn{aXL_q{QZ3-Z(gt+Rl{2tzwb9 za@t-gEgxE%wG%j&dkc_J%@U+#Touoa{k}E@cMucCW7~j7+y4U MK_18jbAT883wgUW=>Px# diff --git a/examples/runtime/shaders/dxil/vs_gdr_instanced_indirect_rendering.bin b/examples/runtime/shaders/dxil/vs_gdr_instanced_indirect_rendering.bin index 123718cd05bde94d90a0e18379a0442efaaea8fd..aee460602196bc875d56c39f9a64039b808429d9 100644 GIT binary patch delta 1408 zcmY*Ze@qis9DmndUkkm$VF9l~;kpuI5g09Pfz6nnKnJYMGQd@XTd&Yih7iW0zHb&EJ5&JdR@?!VpXb;(}dH+SFnd7sbw zyze)8Ys5cjD2fo?Agk(r-S9R#x}UuR%|IVffxX+009ObYmCVmCpfeBu?T=& zMZpIO#&AA^iQ7rQe1Mb*p<6jN#24_8O})bcGPf$N#Jpp$O4Ly_m|+Bq0leI`fq~Ua zS>GP*7c%o${~v8HCIZ?B0GfNB3(5z(W=M629SD9_wiyWijd36 zrym*7^~TIkGuN&)wwujT?^pM5TW*sy>b_4c_Q}D<^(E`(}4bOL?nsY(O}KIIpr@La8jaivlJR-vFJ7E0{rb zYX7xL6>p1@SyRFo&~7E$Ji&ttofOYS5=0$Y_RHZeA_Iup-4wk2P!|R4hRXMPIDm#V z0@$Om`2i_{^D@hR!gQVEJ6hXpxLOIFtg`hy@^?3Ni(?Hy8R4f^x$F|$_YPdid#M3a z4)n{a!<>!Y_54&D2gRWju7Go4cE^E&^M^G{?Pz$Yw$*)qRrV9~&_oprObB|D>!vfsXRDW?^TPFoo2Tr97r@u zc~&hYGD;z>brVJ`j&T=g>?m+}%tVFAwTvo=3c|aL+6Z+4Yt5Ma#1L0aYZbsK^;)$w zZj^S0w&wbmxbr49gu6F)5hT;$kVhOCaYT(w;jzNx&r4wRj?RY7Mk?0BT_WvWQt*SA zE6!TS+vdrjM*E-WmDboA8LEULrt2FnerB-^=Z=uZeG_(3*3^`R2Cf)TPWl_-K{fLZ{9TB%e+2uw5{O-AVIwYP~|n;V)oC(r5pJ9f~Mj RZgI2hr|eV44upB#z`uYUxt$zccI(Tu-#>BD6DrkG!&X# z`5w264+iCQWw}<^@GIAr5!s!xb>{)^$!)Lxa{tA$n%x!4H~&+!=ZeOHD4* z_^o%;YK`ADVgj)SgHC3iUvHn(>iu9Or{ zo|lg!-YH=SD4iz^Nw^N$7eGLJn<)7)qzi2x7Dfd?4weLZ7^<1`Ill|g5+4O&7Fz$V z!8HIV9K&E)a9Xz>!}!@PZ8GCJ&~((p zJD{{ViD!ES`i#_g@x7=-Rh)z2ywIyFEa`X&_Ctz4YHUj0I8emOGCOR9iVq%M;|d_R z6WVcK9LxAFQD~JburbiQLRlQVN5h`(_l^$3tJ`9HL-&NMfYk)EPx1u-*I78elk@A zDiy;XhOKo|AEii9K2c{ot^Gv5AxiA{UeDLex*Xv;N_Je4SNbUDq+;9=qV+DXPq;!) zY&&b+f^C$z>`PWcboxB|wkYqKY+rPa64jLJs#znqk=Mh>0z^*=CzLO_nn>+Vq&1C@ yhH_pGsbANgNbAl{9sD2s@(6qkex}=*`WQXR(-SJ;U*MMv0cju=JO#9%1pEgtXRJQ} diff --git a/examples/runtime/shaders/dxil/vs_gdr_render_occlusion.bin b/examples/runtime/shaders/dxil/vs_gdr_render_occlusion.bin index 562e899a144ca47df15e5b62cd3ce73aceeffd49..cd0261a395a1735497d026384c0cb3b7ee64bb32 100644 GIT binary patch delta 1337 zcmYLJeN06S8j9|kjE2Nr_oJbx zuKj38G{c4%5GR^~#gs)+ChEpvcdcG$G-Os9WOAv&AgQd#G*-%V5@V)LCrhu887ie| z^#(l^3<`*n08Vp5)9dEp3zFGuw4sFCMY$>)=QUaV@>Xu{h@9%EQ|o2y%n zip_|{l!a^{!*dDDwi&{+pmnD=tp=iN80yYM!;v5Qam-_Pva?c*o8@c#<0@Vc={=8m zj9nw``M*!T%lYCEd$yWQ(Paca&LM;~W$VtFH2IueqP14Dv$#?GAyRM~x}5a+I}CMtxp*CkF;1cVpPj|4C$TwhhL?Oalq?x^MQ%p09s^Xt8f zUyt3HFJ`qT7@E==bv2E~Qzh_d2!C)%bc|QtfBd1aod2W;Pg2=;V?M}wS(+#>&63AA zJ@<0QdY{F26))SCdy82kITYVmcluPb=44gf>5ofbI0wuWGR7e@NnK$$LZo=x5lC6y zg=%zYzi4=Sf=jS8BJaq6Sd;}?wfLEZ=~}X#fLm}LPmkqawK{llfZ1x1qL)^}7HPmB zDIOfAf%j1EAH)(3RB9TuxYQ@5y=r-6gTAH0%w7QtdN~ojkfHAcI1^P1v>QCl1DbWB zv%#PxXx5}_n@^3Bc0wu^5!hUvH{MyvuZX55OTBM+QDxP z3qSxNY1(ssYInlHIgM}q#+NDphFEt)T$|Z`_&~v)h@Hl*9jO=n?C-4UowCD!4pw;Mq~t?P@v}Sp`ZwJ@@+!U z<1#6MBY{bpT(~0vbGMTa)h5}Lf>DPBjj|xg0FI2Ztdao*I~HY7-Spg5itk&J9SMlj z)QUM0*e(++UFV{&i;qxlz3>-bPjLHE=|U1C)mu(@=AI%q7G+XG2j+ccQh^?G@NlXw z(j7d$d6sO4yi;=IPJK{NWLe+;qLJ?pr(6AhT(7a2*!~nQ-J1dl(@`Dp7cG<#GSzaO zkmy^yLlK%i2cJRxvOgUJVSL2bm6jou>TQSn@QRY2A7;+1>#)O`9QPXc!jnp=uf;w% PAQhpWp8pmE0R{LMf`qfg delta 1323 zcmY*Z3rt&O6#j2}`Fo+aa-lq0vcV(aLU6Fn zKq=#8M_M~kfgs3GrflJ1BAssOEsrn;8O%+|oLG{Lp+W+Zn3!PVZMZe@&ppXG_dAd8 zob%^*%KnLVBpjX>1E4NdovcJ-XPwWYEYhXTA1v`HuOk3}c_(c`M9$GT1UeVvkRaz) z9D+{bhzOC0I2dvg#0lym1=D7VQdZ=qW#m+rXHglIhKh``tPDeip*%a=keyRjVMw)9 z=s9Olz!Vom_!a*#J9GB6uWaWPZ*QG{-nphOE!2200CWHWl)z7{P{XN!;9N(z|EiOo zwRjwWqmx=;v;YZn8H32=)9A1kD=E^W19*sa2M5o_lRNACMfLs98v>udnFbjE2G>+j zQSR56hQJI$RWi=tlCgM;k^nnE+OqhVP)kvST#4%5IEDURoz#)^+uiDBtym?%|qE@34J0q(ph4*jWF#+3pxGh+)UW0uo5zFg;d;|UjV1=cFMXmKp zv}&wuCI1hV%>;zoemBI7J=9Hq4*TnFuvtykn6vt^!Ob}j{-8-RrFrXp=JwL?%J6Ns zxfIJDOUH3Yk*R5`#P@9Lpu`6nSGAgwLo^+!RDP%YICCOB`<8;yUdHdw-qf5+-Ci;m z(V6knwd3OQ$(LNc;j+56J!|s|t6!jn^7Q;@_k{b~Joos7Tfr8$aj~g4 zwo*H4I#ca8Yl?_RT)d)o$aT+l;kDYK-rn#TZhrppX}B>?mW%q3#ygxQMVVy(Vo*-h zohCT2Rn%1!b`{Kq0gwQLL9>oD%vj!G+ZjO6X&;4nSgXPQ=Kqc3C38nym;t zeNBFs_bDR_e;(q2cqpBF^&StD(}u%d9$?@{jT?$39x>?5zdq%WGWaHhk23foa@`pj zwamL29cH~xeLzch%{q65eeucxfkF7T+`%Y$YaI5;uOe#RV&O0HPpl=pwE|;f`q)a& zYVvQ7;E&B_9Mh}JBx4|%e+pB&iO>H-H=E)C5TF71Z@bsw!A zOt%Hvd$-`S5f4`c#rQlCnf$59#!#o@&NWGquevYogf56gD4OQA^;8k1;i_@% diff --git a/examples/runtime/shaders/dxil/vs_instancing.bin b/examples/runtime/shaders/dxil/vs_instancing.bin index b19fc90f5300040930b80d69f8e29d91f125e8f3..615a8118b91cada39736d3d62e944fea02a8919a 100644 GIT binary patch delta 1583 zcmY*ZdrVVT7(b^i_qL^Au|;p+RTQUV(DEvnN_r_n*mPl{u~WMBiFGT=V=`DsdfN)J zSq-&_&Ig0}BGW(WAc}5FdJzd`opuRx6m?c6f(uKCVaZ;9?ABiQxVhiG=icAreCM3+ zoEgcVlCBI{I0b+*L#aNta?ee{tNXvdvth|>&D$G5uR918{;&ed{qqVa3-F)< zN&{KcQ!=;-ZiHzHiY2E)Mun6L$>3Rr0Jop#2LKa*pp6kvvT_sE z1bm7+N&PR?hkjha1E7h*l08a5y?}rU)SWR{$Vy_sWdSX+vSg-O+g`Q)Tvd@>e{NMd z;P&%ACKh;L=CU@`9Rfn#bgMkp+B^H=Mj6a1K)D0ZiUH6Z=tf?H_W}=*WlG;Yewly; zmESGvc`|01`{-%qyPhh8VE^vOIfGS)9)^wELO?KFM(~*~jnDk>#}#-?0ep?_VjT@ zy$6k-+^?BBd9Ryrly=NomXFnL&(y3|{oM8FTDZU6fAm(t*Z!lIH*=2U+FG(3?M-|4 zHCpXW)t(EfaqW(%acNX2He$wTxAJp+$Ly9TtpaS18%Kn*Y2!3tuiB>w(101~L6O6`mM)-VBV(ePZCKei zG|fT0Wg%1<2nTpfrn7kSAvi&c`VnzCawLxyiJdz|Tkkvr1t>QlTWK8ZT2oCN`E0z!YvwrWi&GlHP<8W5!+~&aW~cnC62pvUQH^bHiA4T zNEjiqE>biM+n-Ba9`~E5oj~@6?6h{$EjkOOEmO4igL8@|H|03n#5l1QTWwJ@fh|-tI_ii>TKc!O+kwSS6mKe(#=^N(gi?NKt^wccXMc(5) z3lT4^CB*}tRS4M$m=S zcd=1s>WALYaADUS+G$>yd|b@RK-kon7KUzQRqf)_zCWc70Y7ePS>QfXYg>|j$K+pm z+IUOe#!C|GMNBY@Lrg89r)#icLl;vU^1hP)ANU=ncCnP+95kLI{1+dkOXrMYgrqH?brM!YHr!15 z1*{vzVQSET!MYN3vpN*xH1m%Zj6;-J7t9(*9Av1tkp*2e?&FW$u8$dS-g)ny_dCDe zJ?Gu??%(qJ^6reZKmq{8Rr(^^XX7;`0jE(qkhHSXo~VTYfWRSbClnsKsf6gzyb{KF zB~S@TZw|f_!&!SBlF?6Cw9VY>O%p1i&-=PiX_E`s$dCuhsjk=7>NtIRoh~2@ODbmrJMUfZO23JBwYPX~1OlV!*Zfld=xi&I%D$0`MuqZ3c z<%lo~yFJxY9eydXMoVy3B7Zu!{%PD(?nvp8XAdr#)U(0Ah8o7)oqek0J010>0=9U+ zOD$j3=wgK}Lnb$|0dUFE79nkD@0vI}v7#$*v#YV3-l86DK9}w7tN6INFNxkXwopAk z5}6;L9VAQBatn{Fzrdc)y*!wAKKJ6Qy3HMuTP0^3en0beW1yk2d|@)mt;qhiVtL;e z@&4?-q~aFLAD^0=ed4?K1Dcw9Fi3tlypK8w;U8XwILlUFw6`YY)(Pw?hDon8O=!&B zKt-WzDK#>Ohsgw#(*aS^pyoOsV`A(3{5+sWlUGY_@IbBMowN}i(4npObrU>LZ{2=; zmIq9TLFmpJehpdOb{oTn`8bPjw^>_~fkeP*G!BF=b~#pb#S%Dy6il~{FFhHOT?xs%9X#BT=7Wl0=ozooB-~94 zn^eo z)@MP<;0i{g1vKgUWXbnnhakRSE+W0YD@N&m(?I+t;*|U}YqS*-vL|(lff0)yc(SOF zWklu4qDS2!h&yKOIiK(Yqu4KkY_E#+i(G84R+52)cn8Cg5#_ui+ml5GEl%2#B^j{@ zG?8TVL>4PyS4!o~V`ri*R$S{$a?fjgaVJv@GeN=dxb}?0u{fow=Y^=E`b4g4vBR5nlJOa<1^)s`wEXx0 diff --git a/examples/runtime/shaders/dxil/vs_particle.bin b/examples/runtime/shaders/dxil/vs_particle.bin index dee74fef563d126c5206f10fd30830778435213d..25699dbedb5e85a337edb859a089cf4f3e1fc9a6 100644 GIT binary patch delta 1214 zcmY+EeM}o=9LJx#>mAq8vSa1t7%;BoMK>9_LTL+|glnMzq^1fo*p_%bTA(@+86luG zePxt|z_E@6Nt`Io5Tmh#`7+}Yip_YLC{@e|z62s;FVV0O6Gi>QD|YIhznfA`^l#{P&>K zFK}vgK3%9$TN<@itx9b!;5d!4&}y-0En3>D)aJEWI6((0n3{@&$VONnacJlF1K#J3 ze4O~p%1RtrR$p12AO?U15GaQu!z-(WEg*#6zi|_-oNBXv+TvnxxoTCCX$XhzciN*ffal+79&{ zx-)Nco62Nf-6}!Iyqy0Anh7oY|3tGLE3eah zs?*wD1CPh0T)dukoNRdQifd*uhLp4BRX`2FWnC^lRsFaYrbA&{$?J-CQAPTZGNPfk8(=bw;W7|$qmI6ZLvF-hGE$og*M1Y}3eg{(W zaDZ|RJaf?=mHgo;#6|`r)R>S00xlo~2qHk(YDNmj z;yWXybF(6SNlxyzQtlg!AF@~HZ#1?N|H|se5DxdrNhK}VK(M6S6sgok9N|g7g19=f zN{*juL3Zl-xmh<;;!r=jtyByRO4IGt=a8KdRm}FJ&N+ylwddYjYm9+1V)yUVF9n-J zYe4X%XfvUv(w?vvkVe8C_A;cAIuq}S*z+x{CsqX$4KkQjF}OhpMdcz5k~racsHbC& zo6vUBh&#g~IcX%lVG$QK<+z>RzMeQIxB>>5msObwgUlEFw6Y`?!I*+3dY9F0Pu>sD`~05Y z?|I($dGm(kOLDIvvnK%nqq)jZa$=_Jw}@_}p?zv2{*$RP2msJC!kvXAv)`*ANaEXr zx;iYSTD4VeWwhF2bu+`XXc?=PVM>l$N}9FmB295&XS0>(folC5)hU9*+h=vNw;L?$ zg{SW*d!~LQSfjbdgvSBE0SFjHLh%|C?*g39jYC}*e5vxh|q z$-Cyqq1LCAoL9`^Py(-I6T}Y0#Xa8yL}(d{zRDL!<72v9L`#bm{36vfFCv~yxlhg5 zy~A;?J`){jT2N*YjwqQFTFN$5?x6brX%~<(YQRo9lEh-Z4X&|Y=16i1uBTC-xUEZN z2}fX{*gK32_T`h2CMToJQYG(it_7E}OTEK2T~t;c95wrwmqdw`=kdK+|Hv?s$&1VQ zo~Q$)0U-6h@%U7mC!=vZ<%~t604(9+G!~pCJeI|6z+cCWZa>mMy2CC&p28hrm!3RD z4aAywq>wj`XRw5b)99rvfm$^EA z$jpb~m|nlJytWB91AXfvB}@|cwYhCkcW)buCG!Uc>cR6-x6STuei4@R9%WyD5%;^f rXSl@6)1w!YoWd*6nQmn2e$Lts%Af0jLEDU^Qz!fzf{7p?2Q%P5ZgPda diff --git a/examples/runtime/shaders/essl/cs_indirect.bin b/examples/runtime/shaders/essl/cs_indirect.bin index af86cf8d9335b32915332397d676363cc9d8d1c9..71464e53249a5f0e4c2ca12b3aa0a56ff061e2cb 100644 GIT binary patch literal 4320 zcmb7HTW{Mo6wb5v(w{(JFH&PgvaXDyvi%B3cDPRf}DwlUkIUy~iz? z_~NT5Ro#?@Slt9a$>dgiTO8CTBrj^5IN^u~o_^;VS=UGmU88|(Y+d7#Ydmlb1*VeK zK1*uL_Sj=fMC5TPi55q7*g0qZ#;omO4E&3VW>uhEQ7p_5#hPcw1WJgO0s{WyB5EaD%80aqr)j_GBd#upeL+eAZevn{WgL>FqopwXhB~^PF zfN7H#qa+&|cIJ_6TU#WmfQ~C{!3nOg%-_$|%p@96w+TDyCplfzP1+Ocd{hA&;Qm{t za#hr4WN->k^RR%dJTBfDR0qTPsFljpruH7S&IDvGwo75o+q!I2+u0>qrFw@2xr$$e zL@)7HNOEWoWCtqLN67B9Z=pR4GZJo0C}So{^*0YQK7$FuwwTbK#WQR%dBQB|<;mkQ z7kVVCFJ3bNUt9|wFLZ5fWMxY2Z;6$LHE2^_&<3GlpQHOIW#mn!?34oxkf=?0K{`6j z&!mheQsNaY7Q?P5NoFdDEz>elUT57>^i&m*K)t+eLerTC>nvbIYR?nX znFs4EU_@$#H=TK~?gB=r_UFcQhPWP$yB3rU=L;C^ol2|>ZydJt)OYN2%Ihp(ik>PY zQp;8nbUS|PQ^irMGG}gx`s=K*4Lb!T?Hie7`_IX}+QlR86bHBG z&OjlLPrIW`i)~thn7@`!cS)rNE{)tLWs+A95d>$+i*9PKs<&|jFNH@8EuP*5zIZOv zTInKt5s%Gor%JfhGwL06`5T^kTqdW+hc(*}Na1i#;2JK11;^MY5BpI7j1 zqw8qT%ca^4JY=s0o}rLuDFS%EI`gl({2*Y^*nfC;4E099e#@*jEhz-S|Fv-$B?ZOP zaLQ6`%wf`k$3|74W}}@z$NgxcU&D8U1<;+P*FtKNyX6?)~c34Oz-DRk|2 zBXrfO5DjAgIhG5V6nkhe63_dn02T9eczaL{5gw14%UDhddz_}Rfahd-CUn0ovQpNQ zSs3TC)ht+5{2&6-65oq}73zj;Kt+DIN}cN#Gi#V1n2h6XT=e zbZbntVMXb~o2NGC+DvOloT>mi;ya<%leDO0EL9=ZzaYUVfTzd9F zmko2k07bRS2dLv_zQ?71z$G=QYLl%@<=&-^iieLssfg${Lb5=gztTD)0m#6ZsY=j- z#n~JeZ9{pR07bv1KuwN=ZAefXS0|}A-ryR_)n+BrVJgA?1X5&F=gE}m3{sNAG_hY} z-m>+fEMkIMe(TI7%Q|)SWSd9!i>AL@FKlqYFW-JDx2@Atw<1Nd8gKh#XT~47& zD}km^PmY5%CNLq@{X|cWgEb~FA=Sj|$#Jme1SY8Z=SEMqacy2V9jFrQPhgTaEGcGG z;V4OqeM6nIUt6*_bOq1(juOn`=sE}zA--&TKo5@TpGr4+~=23wc^(8N<|9I}P>s|TP2-k_d zJ{*IONttDbeC*1#5AJnYTEw>MdU%DXLDqU4;3X}k4qm%`U?$%o}!W>OzOgy#cO8`S(G-SFiBj8cPh_fDY@SY`55nIIrfEC<#Sct{1L~xrWwEx z_7Vs~kw-~A|D@+8ZOt)I?{$?6J5DEI9OTg_iR2%OzJqTVtu=y2LbX=N0qQhLKw272 z#Uh0Fx(1NXkYC5an>ZbZ@!Mntd}0iL+gADDXh@J8E_csPp3!O@9tz_|bctEPP0vl0DZHAU@=x}WHbo>6fe z6_?9#@sD$z$)3*SFNtF#_rDMb-033vLLk~K<*!Z!9I8GAF7b8&w(F0{v3qNuYp{o3 zC-WHJwYZ|1+@K!KB~|r^|2wn1S!!riU*T4S#M~ixqr+7U*L{vCHcu4E^yRxbM{ZX7 zB&kcG8`9?mj|)sKpr%y^BU#Im`i9b@c81p27E;sEuu5u%tz`9Y$V#GfMFnBE`wF$_ x|GM01n^g0LJI|h486hehlW*5m@C0)m@M#lpZ`8%zMRhvEZRfG*6~w)D@(+1AAp!sZ delta 35 jcmbPXbV^acIoN}n0S>kcY!oPF-Mo%BoN==T{|8P0h>QqW diff --git a/examples/runtime/shaders/essl/cs_update_instances.bin b/examples/runtime/shaders/essl/cs_update_instances.bin index cda09f459b5e8f9d09eb75031c6275c4c88a4af4..ceeacf28ae986d97060a1c93ac4b0d5637e543c3 100644 GIT binary patch literal 5732 zcmb7IO>^5e5cOHT_l%id$XInGQt6>?+R0bb%rrBpoA%<-aA*m#>7huKAGYj_|9jsq zKoTTD%F4k3u)A+}-!344@BaSdyOa9gU*Dgc{BS3;JW3Pc&u2pBlTDn4g~(PrM~#Be z72iZAi!w{Z{A~6z2+zgSUUHZmFl9Wy6C8Sf?Ngp zE)I(-+Px7i2NLY3BG|h+W}i&_Q4`-$CZ^ef%od|&3&X57Ehz-Sf3g!X)3NxpWA}Av3ZFpd9$FaL*@C6Vt=HG(OUU4OgT3-MGU1yur0>SBI5s#Z-df22x~H^<>I)2Pw%oP3+g&w`@JuMNE+4 zx9(iBtXo%4x;(O99QytJ!UiLL`Sw$}HL9m>MT%rK?)qeB)?=1$Yqkbf0!^Ww90zM{ zU_z?T6FoT&*4n^?R1>c!$HCegn4s#P8$IdbI=pTxs1gh}Fv%O16fjdC~sAQo`)xF$&mM87?apg3a#p2A?;X|W!iiIG7Ua>R4EFE{E~mm+d!Q&6jDSXb+bMNece4_ z@;Pm9rAU1pc(UO*W-+lDOc;9Gm@MJY{t*wbrKcjnzmLflk4Kf>4aNv6nqOn zZO}jT9R>Ymhj}UdGn~=%`EiPE;k|-=v=IZ^zd~hZg5i5Y1UV^&b%Eh1wdaBMEz`u_)S2ce{th7D>>{A|Mo-c2v-!AyJO9i~QaG zjt*z24_manLeT^WNY2cg$2TL2%G=vNzPo6D{`vmm;)lH~%1q}hiRZyu>C~`dx#Khv zX~@2^LYk_`+12IzCy_4LOR$&A2)%G{;AB@gc!r&8+_=W<*fl4mkSm8HP&uM4iS+*m%Hrf7A+ zNYgIF7}OB;2MvhYzyt#us{TMP)op4Lwl(#;LT_*MQ^^rb%xAcDCa#)6)C}S<_!_vz zFh!b|J6%d{akve$5dxe=9I|i`yafFWZ?&43!H4Tm<73{?WyBi>#2W_DDY~FzOShxi zf;Lpof&#+>sAkV~3pK9mNq%)-P{$B^1j_YZ8bGzG13#G07&cg;pL%fCnOp1U`Tb`B zwtFaxon9SIBR9oz^)i42)ixg_S>m!ck09H9gM_WsaZNyzF}ASbZ)fZF5}zf1l=VN* z|KG_sdUeXfaoCmDN8M?5pgbMn5C_u#uH;tc=0p{}eS<}40I6|oQ=dTfFr1EBN+p+u zKWMEOWX@MJ=H5f5sAM}?r>c~_Llj-vFHBf3_A?Xc(7vcVsLD3{7wRzOoQ!2pp8={-Nrjy&*RF`$yZD=oNgcz zqp2rK<~oQh<1%4hZ{K3{SQnu{y}WJb+Q_zb-Q-wD%nOJ9@Oi<2k-T^-Y|{3sN4G^1 zna0OCF`4(6#apbefyv+`bdzbY-UhZv?RnxR(_p;~Y>`^w-DDc9zkw}O`?_(HV_c5w zzJikBbOT#^rxGbc4-Q#+>U*AZ%$wRIBMEoVW+aMxN6V^LiT?qsQ{**;*G{ z`ZB4+K9f&3aBElu)zEM!YpFU5euPlSU@^=0e*x5BeOKte2aDkRr*GYo@fsYu*S6Iw zsl2%%>f=dc8+Hha+E*e~yT|lKu9E?GjDyR6XTXq$&AJv@zRC&^^VeeYTUyG_rA)Uw zC5z~qmBPsS({iaQ`(J}=xigQ8K&8*RGQ5bR^^84Olzj8%Dr8SZW~9#5Gi!>IZPShP z!+ffSMa=SDWp3_nvoAn~vM{dnGF764HBqxS?CSN5^_HH8OJD3#2p>m_V6U?k+ooC0 z?Wc=9EF-qmx>$h=&iF=&_ewvc>O;PVLM38*L4J871W+#}_T$ROlAysROo73|jNLi+qcGZ#W1=5WEM QOtU%s!k+OP>?OGP7eyoi7XSbN delta 35 jcmeyVyjobmIoN}n0S;zxZWQQX+kBWWh;g%pz(Ga;jXwxj diff --git a/examples/runtime/shaders/glsl/cs_gdr_downscale_hi_z.bin b/examples/runtime/shaders/glsl/cs_gdr_downscale_hi_z.bin index 7bb6a51d58e2c16ff881bfb03ee4e4edbdda3f21..c1e9ac727c7da1cc10e70657deb74be8762831d3 100644 GIT binary patch literal 5035 zcmcIoO>g5i5Y1UV_74!~h3X2aBMCj!SQPE1-3Dl}MH2L~2n5BZ9Tl`_=)+O6$p7fi z?aYv(WQ&#~EV2O>BxmN$B6FRa&uPvE_P{ zq(1w?3Q^TX&MwYpKP2g#y?8sZ2+4~Edrr8*!PDa;e(PBGq`XKYIMjOx=izif#wZ^@EBdt(bDax zTF{p2Nl;+82i5Mmu~6f>9_82c1vLz*N1$9EMFps+I`D&ez^K6r_1J?$XO7m-v%Aj; z*zTY#IK9}PhGt6T>SX{4>PjIo6czn-nxOLUU_LDsLJ z|K{Xdy*lOLIPA*nqHZ+XQ(hn85C_u#CdEeN)sZSX`-Y0p0_w)Wrapq|U^pGM6jCfI zey@~dkU3ul%)E!Hq84_tN@Xc}hbXzSpIL%l>?f9xgMCpsP@%m;?M~+zj3;46%#8_s zt%=g(GYvC7f(gP}Oc+n%8Cp!eVJ+$D&ExSOa+1|&-)jOsd&l&8uBz5XR!zyiV_Rvo z1~%mhZ4ercDRdvCjQD8EPC38;iEPRf($P!qNXmF5C7!YECVQPqN3Sjw4PRfW4CQu0 zlEKtpdrfEn3~+X;HuPYjHq+R4lJ^DB@*4^CWEyNIg5J2Uq}h0f>v&u_Ik}3d4aXZu zi_zATBr_ePE#op#UT5D@^jH^>K)t-Sb1~Aku9+O_NO|GVA3iS>Fp`(P3fr{3>glgV zEwUaT=A>lKW0t;RT@9=aMnW^02J38KM6&0JnM{LqHZUSt;mu?kth<2`%D!&Q=GjUW z8+|jWlU*hrui>j+05N|l*1x8un0qpP zQgy|PC|m{X9?kjs{mh4-1k$C-CFR!MX6+ zW06(jwLqWhVU@FdTUXb&H`%jg%eYjFR3;^?B@KJeE`AJHZ|P~c^o&bB+@9v%PGw8B zNwb{e-3Cw7kS&xdmf%7&zLv>HsqRyGmG2-?1^c|ZJa3-hx|6LKPo?Bil;!P1nsbT- zTfk}%*HT4q27i#jd{3thX@xw_XTSoVpe3qT!V=E7M-u<3(j|9_44>ObmhUHeeuNLW zmIbCfZ#?kCYJDBlJChFR25bgD_`C%;;07qjn}8GZ9yru*)0F{+9OqnD;T$g4X7uEP sf<4Q#wZOF-n*hbVsZ=3cg@PsybV2k_DR3pzr4MHC2Te$~<`?hme;Rm&lHwtvHZ9dHB#kko(pqd!~gi8mb diff --git a/examples/runtime/shaders/glsl/cs_gdr_occlude_props.bin b/examples/runtime/shaders/glsl/cs_gdr_occlude_props.bin index 26065539b466526550b2e11d28fbb710ff7b1c7d..74356cec18a21f045c0521db52b0e787f50d7998 100644 GIT binary patch literal 6582 zcmcIo+iu%N5cRYA1$|qfKtaZ`B2#QpR56OgZqon_8aQc?#4rd-q8t_!Dez)Z3i37m z(Vm&Tkdjukg`xo>b9ZLW%$}K@UGnnn@86u5fB$@Ya`N4MloxT93V$^0&66xFMLu0R z@+k;i@kQiOS>>rX9}J%c;aGg_-A7Z8wfJF6iDn#Vx{c~ctB%C3>S#yR*Q)-Ws=uS^ z333$_%Oosyv~??54kW1iBB)&z^N37FohBnknzYS)GV?pl{Fa$9ttbS+zsk6Z(~{z8 zIAy6a<}hhu#6~($yU|{tWazV@4%KdG4RsNgzF3s?Z+W)3&Q^uPV8O7@OBcbpe(?0e z$nAaUslq7pFfEo@5jlk8kQrG7P!2|}aL2u`y|#zTEIHDH4OgL#cH>5s$++<#8cR7J=&f^@x%N}v+!h!5kw-~!9DRSS-k z9g^M*Z*Ky~Zjlxmo^KC5HRN=)Jb;2~k?uK}^0d`YAZ522iA$@A)dweC(PF`mk5;W^ z^kDEiUjIY*|9kM7uZDTF!zR79&=qG}%*z%IJ5c{?5-p;%Jdj0e-Ea~#pe!6J>I0~j z2#-fCq9mG@&Lqnc0nh2IFVs0y=2c_{^Drr*Rug4a@rwvZOZ+SXRxk&Z1r_D(Np
eqBXYw_cel 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 NwJ_y)>bzJ-e**)9#QgvO delta 59 zcmbPaIz>gmIoN}n0S*|2HVSmGZ9dHB#W;DQfcR#20e{ZP36hfR+6smWu{sJM_T>MP FlL2!N4l4iv diff --git a/examples/runtime/shaders/glsl/cs_indirect.bin b/examples/runtime/shaders/glsl/cs_indirect.bin index cf9b2529870ed4ea97499a7e818e31bd7d4ee72d..a8b2d78bd6663cffa7c9af0df51b767ab993e07a 100644 GIT binary patch literal 4597 zcmcIoO>g5i5Y5>=?LQ#Ui?lIPSyK1VU{N%Seq0I^>9&`^AQYRcg z9nO%HEK%|b#Tv0ea%SEGL?!~ z$1JH0+qTCRiSTyKc(iZ1AA>2_2t zsG)ih6d0aCnK`!>YF^h#er;b+%@At@mg`qh1FBLT_(6Zou)s?B+=Eljp0Yj!+XoJ| zEi8-bZqB=*?&5OwGJph4UW}6LaM+oLlWl8|u(Ud^F=#T!7AE}VZ1r5Ci{uAc{|EiA zPTuI%DG%FWx4bUuTC+3dX$yxqkpAaPVpn^Q zQf3S?7yC8S@1eSEgzX%XtP;IV6kXYmj4Lnp1LNpmUsMiMDDRNmaX*9hBFu=nF`=%B zC_X;RFyjeK5Y}QsdlApjV$y_3(#w-q+kfbxtUh~91blYQXuOcMv7wbH*>|jwhBUA# zFKDBnVVhF!qm+?1o3c|5FhC-k@`7~ulAA~w&!kj)teIr5QgQ30rNZWyuT-k!c0!^- zuRnP$C;%1UtW+}eU}0^RvF#-93qbN~38=FSwiAISPAjP=-r+hPR}Y@pe59uWw6cyR!DX~(Vb8knbXar z;iptQ-@~clcGZjx??o%J&VrW^3K6=lMt9nBxfhu; zH$?qDX|!SIps0PrlkE5*xfh3c#2w?{@ZT9QXO@zT4GFrhAqrY2m3W${>js_^-q3U<>Y4 zZEy71@-D5b_wp}ze|vVa!S?1w9ZA05zoXz&Jh^&hEj_dfst delta 41 pcmeyW{9Q=EIoN}n0S;0)HwtvHZ9dEw&bZlDfSHleU~-{g3joDm34s6r diff --git a/examples/runtime/shaders/glsl/cs_init_instances.bin b/examples/runtime/shaders/glsl/cs_init_instances.bin index 70dd870817353c301257e6e96b6f02cb279a3d50..fb7b8422d4c775bcb6cfcc00145596247dbe12a2 100644 GIT binary patch literal 6701 zcmds6OLN;c5cZk<2RUJ;7s_>1@gXO!qI8yJNwbyEL5d2({{^-5-WlqSOWde$sX!$M?}rL9Im z*b!euCW|slgwySP8-xRKXRYMKWi1|TDA9@y%}%50RjQuYR`s@2{Yur}QT4Y}T|usb zd>MyD745neEe8^;&qT29=$Jh+@eZ1JwlZm(`DErFH1k_#wP{Hq2>#W^Wt0>YPs1ro zwK0cD3mzL)ftrnW0wqJA4XaSihQ?4AVd0BKv3`@Kix25dZZlZWJL9d3z^MjqHSjvt z7fTmLk%dXVOmk@yj!kA{5kNWcI-)bM?yRl*4XuY2QLw+Yn|a*ZHeZ)E{gVjb~eekQoUvh=0}N6I!y zFMFfQ0J0I%LQ`jR>gp+{tK|U{l#67?$%L1UegY*MRY+V~O{_jRITS56{P1Y?Uc7sQ z-}3s1@c;ARE4~`$(GHvRnnKr{Z7{D|IP5_EPqAFcq}Y>1W8H8PDnL~@RMdM=4G|uX zn#)*D3VWQUv4H1fdM5O9sK`oLPiA49%T^O*Rq?$DNK1St0#>LWR0dR(x2x2-pJ99y zrYFppsB0A{AD`ne{XLiv zNcA(eqDFC0yS#@Rf<~Jn^&OXV1EIVykSW(qYjRewAeSCbM|X2V75L~NX%AMNj%X9hb-^ok^LGA zn5_@_O`=(vE!3Au8LT3C^8s%S1FPH>e3EM!Hxm8`Q6@W!QL_3SP&@0(Ed6t55z6mP z>lBPppwW%8MLLzS(KoDq*(`4Jp3SM{!Z*{hnN3Gz$W9X**b`lX_SG? zAF``gVJ^2+%3v90;Ud5EU>t|HX<68LF~!BfnHZC4ay9IA#7!0zGEL%JF)n8_nTcg4 zSMSq2Dsav4ikH+cK7-lyuKaR@*NMG89D|QZnPrE3?8>zd?sZvO#J1{s_=r-2to3b! zFLd$Zg$S~a_)E~_=*|ESC+powT?p{Sj{waM!S7x@bOWN^8 zNd?kdd$Z>~`or`o-J1>cXHy(5#?uh?tL_?vdtJwO`WG0vjm~l&K_Q%^xs6rGR^3~L zLSU82x5@+od15)RmcTCcW9ac3}G*UFcf)|)br1JZqn8q1NBaya$(2mB#eVR z`YciWL(z9|x6@i9cobA?g&g3VMhQquqp4Vg@Lrz*)HCE)aqu=y$6@>~SplEg!@D25 zYo-~y(j8-9MKhsp_!Q&6QCZc!$Q^ZWJ7S39LW;gvl@;KL8-4NC!-XVmN8-a#JPeL9 zz5(X~1gx6sZO=yZ2dgP+XVm>nIeJEiFdK3mzXZwSY6NIvB}Xmee*YqW|sVPTQn2Z+Pd~b5=%(3Tg7~`V>6HTnBvG X1l${S@$RBJo#Acgq39LFoptgzVlI9U delta 35 jcmZ2$a$i}%IoN}n0S?XxZWQQX+kBWWoN=?Qzz0qMk|qe= diff --git a/examples/runtime/shaders/glsl/cs_update_instances.bin b/examples/runtime/shaders/glsl/cs_update_instances.bin index 68bec2000aa8b738e4701a8aaaef1f47c9d86ba6..b7aae5ff3bf905ffea6bc88fcb2322885c8c2672 100644 GIT binary patch literal 6009 zcmcIoO>f&q5cOI80lhBJ3l*!5Ofo&xO^bXtKm!D6+KV9&w6wBmP^8Kan|6@@-Z!&L za!D?!2t|F6xjQp&X5P#$m;36^-@iL){{-l|2m^G#)g&_D>8<$a1P&_TCEY-#w zCQW#3R0nD|8U#v)J{#7d+6}Ft?!v+syP|rVrMpk*eeN(=uv~EJA~>%f-1@C@!*by3m%(r z+fWV)4YzxSDA$B2)Rd4u6MEkDzT3EFkT35uq?ed;7Hja>E&{D z89=r|S!j6P9lCnRL*aLRgJ{0)yC?Blc{Kt@V7^+bMX!a-}Cw( z!vEiculZ`3$9CA3*A}|wti!z8!eIyM-^6k!lVYTb*1q8))PSmSsHsO#EfF4%n#)+O z3+F0LV*$^}W+C)@sK`p$47OpMOJfsdRq>k$NK5=I0#;~VR2EdUx2x27Kg07;n4Yj> zqOVn;ynK$s^hYp3Y=epCqvCWMOqH;r^lR&Tpr+tps`Jn`oN{avFQ)j3mZ)M`LbKfUBvu?9|inTSc5@-tb;5b-o0~1oSpXkAHu+|19q=tAsI1bj{zy#I2ZuFp! z>+rm-ph_^_z$9;3Qp~7@qa+6VmUYg4tqsi9Q;o!I)t$rxy>Q6#5RdHF+Q4i*kndQI~@L70h?T1Z>u0mHct`JX<0aVvBAZ`LR^t)a{YWc$8|xtNt5_NT$S6c%)~yEcOTO{Dsap2 zlBd)!zJl5FP=2|>X=2pH`Ow9>%(5vLL;17|cP{R;sE}qF$oAubOsp!?p74Ea^YrRK zLhv+H(Vp^~Fq0eN))Q%QBeOS2kwr4Ue0J`la6G>b z|JO=b9j_txpoa@5@l-hZKN&&8mQJh7vvUCIJBp@vm#ec!oN4>x28^85snPe2>T}`5 zDL4!A=urk0Jc7%GFybIgz<6>@}-fkPoh6jDFyQ_$C66DFUF?ox`><;GVVj$;-Ri@}7UZyS>(yl+&; zhsI+35MC!yQEq5y#WJ}rZk%4Y%|gLl0BVE&p=%)YmmTJ*@XoMD)3xjZ%ffvI`)Dgh zw10)l(#Fwqk>JG}##jS`fRNXy|3#a!i`56`e1+@@WL0l0$ic-Te$rtJH%AbFcP001AD5MKZQ delta 68 zcmZ3@v6^E8KNF+zWC12CAnDCy%4j;dkx7Be*qTcL0w!-@7MZ-C$qy*O$7~EFotOiG N

H%AbFcP001785LW;I diff --git a/examples/runtime/shaders/metal/cs_gdr_occlude_props.bin b/examples/runtime/shaders/metal/cs_gdr_occlude_props.bin index 52018b6c7b0a18122eba05a33cc0730eefd11a72..de832acc6fe455e359c154e890c84980a40ec2c2 100644 GIT binary patch literal 7555 zcmd5>O>f&q5S4?V2NgvRy%jwy62OpBTOn!jD{+GY3DEiwG-v|!5Euk4(l%R)G9=2D z9R%pl>c30h%r33nCFRzR3seW2oY|RuJNx!=xqSKd=P!He_eJm9MN;RhUnY}sxhQ7U ztNg4!eVb0t%6z`H_36_VH|%QkE??EldA@G+^)i_(%d)6WUe2oH;^e{Bo1P5sFO%~k zzj!mB{r(V^hn(}PWl~gU%lg-MZ;Pw^!Pbwe@i!fS8o0e4wc6_a^hbbN$Y&EIb<^9)U_J1NL+Uuiyy=Xg8fH6ukuoy z&x%Z}%Cvr6m#@>J8e9jdqHT+0T9?UEynlbRJU-6n17~=6xFfRsyg;QJJaX9E)_vlx z!#q8#bMV`u)2t`i(~~rPuWPaHe{Ivl#~h9oMr*~(_L&MVLmZepcI=5WkC2hnKNc1BL)yzFoW zjq}QKjz!|{Q5~*p*XShbB2@#$*O$3I7>RU8xFcuSP8|9!B}V?WFM)A%1@m#bsGmKX zrmF!p7+viMr=0}#^v8^j!l-UfC8#|abr>p!7h#Z`i^e8&;*W-CU6uQ8jj_VXyE8XLm~zUl;E6D^66+&Y+U?oW;KUSy(LC*P?l;jWa%k+- zu~sk`Z5pA$W*SBAo=k$#8Z@G)E*eFyuXpGAa^jH3C>NSZ8j-^;7ibiDv@Q)AQOIp+ z6nXj@!kt3nfet!MIG9H0wi`{zG~xtzqfz9=Mu(^;7uE|cBw$bDu$I8gGSJe z9jIf3za$|WY2?$`sbd|#AGT-&Vc4ifQNWTGAy~O1g}NHyu0dlwQWA0~G*Ks-(8nMK-0qHQ6osKa4I%2ubqTRH zEQdq_hg}!YD0V*c*|k<9rcuMCU?YuUhsI7FYcOH7X@mxwX%tIIqcD?36xBte*wwZg z3GQUMkjE$&Ik;Tpu*(G+#V(1rK_kv}OB%&)qz~Q&d$=ZUV4(qf8b=ozk2HAzR7h|) zHHtl5rE#Z_c&18|Ln490MnW|5dG~Z5Y9t?O|13wb&krQ@te4W?Yw^f;Zs3vBG~}{* zgs4s)`LWTRQtz1b%yP(j!C}{ncodL&n>?a@#BF&L=#TU`0DYJ)v^UYwz#-AV(S;@? zQ3j7F!5w)N>M|XNN~Yt`lxcEEByiYBh(~cm1GoNyS4eQVRW5jsv?X=Ii?II=&KkT$u{bE>%3ZI%hLzZN+86TT?91pZ%^A zsNFcO%QCx!Kuj&M8a|;m8FC&A|bGoNUoy`yo+143X#mzDsss=BbQww(kj;>l{dAD z6W*3c$fVC3Zm&U^8*-Oi4XDm7IawZwSj uVwJAET;$fL3DxpAg-dVR9K!1#dDeJ0f4(?GxANl%AOPFPe!tiIv-daDbl@cb literal 7555 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 diff --git a/examples/runtime/shaders/metal/cs_indirect.bin b/examples/runtime/shaders/metal/cs_indirect.bin index b905a28a3d09f4b156e3e278b790fb6ead7248dd..e3aa3019933565065a922bb807bd6ff931a4ec00 100644 GIT binary patch delta 191 zcmZ3+GMUxGIoN}n0ScHHI7;IS5{nXZiny5KV6q`!xiJKQN85&FuVGOY`G%!}sQZO|%D%DX)ERHX!EJ(E} r&CDyY(}>S4$%!x3!)Ab9g{F>zLFwcwM!Ct?8O=dv@iU1sDKG#4nSnE! delta 101 zcmbQtx{O8BIoN}n0SXuyI7;IS5{nXZi@wxxD+3)_Kq2-tPs2JwA z>WX|k%|Fk_!@;1Z{(!j2<1{jFO|i(!huhIP`Yt>%wO@PK4f+qgH;wZHliMUsq-T6> zJVAMD{AG_vNuUrc9!L{#&;rlz`wH}(2aYC-(VB#eWWiKs0M6Y_e2`V0JuWLy`m}mP7ib31gdvQReSZHi% zlCsLAGYPeHrf=05mLE_nb1B{&;eM$ zU0cgwKcuU08Wk0cav4&MMrUV+>Ym6|&E`kWX5!1n1ffj$pr%cHd}RVf3y)02^trZv zRw>l2P$;C@80ZliibAB@{_3!cN*k0c0tyhHK&K6y_5FnKyd1cz{Dg0$*aoLIvRRDU zkTb+?23sA^ya_)LCy{g$4h+I0p2`x?T?M?8VOIs%2(p4CTUOAwT7ewc#j-0%4b^08 zRD*9|?Pc05(NYe`>QSqdZZf4Cyn%O!ZGoZ)N;#QQ4&FdGL^%zD^*MdK96_jQcTXs+ z&#~ar!@}@xReQMODJ~&&sX#mp_>LQ=dByr%k6BhK5yPJ77#oTv;uu=f2XfRBD`MfG zCR+%%9D|N0ImRYj@(7xyVaK3xqGK%YW}qLT2?#ZgbqolXH!l@s2_0&U3TUxuHNsmp zqZ-BGkWlIthY}q9&_}*|J?*v)v)}n(MfZI#Z&}X-GvFr$W z9?n%v2+ZS2+B#uO@*|-s$jLk%a7GbNQ%q`}-W!>KBO`nS>6UBI@if;2kuo*rVXM$M z(KUf^W^RF|AjcgVu!yAy+R!Oevul*8_qrzJ{1(?hy5$;lJk2#>q+E@8*eWzmbWNy* z*#b>Kr~!~;s(ZCljV&J(D?(dmY|c#vN0O?B;AR9y;?YzY^g}CE<_ON-a^fH=SI$0o zqCkjQVY*1MOh{x+|9*3^)`O4-G}iSWb`G*Q+rBl9HvhDaP(X+h`RqXV0KK&%1~jOu zp14kq8Ke&QiGIr5nGp;=Z2&`08>?g1VB58+I>+!tjo!^5`~b@2figgTl>CpGPpb$Y zSF&{F&^he!WlAw(hvGte3V^lP934ohx-`|Z;)s}ANN$#+dXOw?SV#94vi+ht^we36 z;w^LqwNZVlQ5mZU9cg@9N8K@#j@v3u4bW`uBHE$0_yQd;bAOeIGOeKs8T-l+QKl;m z4PAk}rCGmhsRgwp0fCny8W7yY3zeYOGVv(wqevQ2YkQO~co0tB#l|GjG8G+5=UK&zy zGqbx|-5qyfc)1kkaBe(9^7r?D{nXLtN$1B^aZ}FA>&4R_Ivx7M^YlsQN$35~oz5@g z>E&cK9GTbGqh&cM7R%ve{PDco^e@KO!(Z{Q|M|SzT`k7bPi9(Pj}|xO<;bwqt8RC( zoUbmIrucI*`&dr8U%G~#tI4cfMy8to!Vg|`zcqtz=A+xcXN&Q2Je&Tuy1E+8+j7OQ zT$UGBh5i}Mr=y9vosEa)Zc;AaEhq2F@ie%cO&7~@TF?E=6xYj1u`(AI9~m?VdxOE5 z8IEqpr118n&vx_`wh_0-#4lI#dE1Ug*s<_xJY9P8X`=3VJH4Gpz2>YP|edB?n$zrr2AtPBZl^KAuK8w{^(BI62FEJ_h z;Zc+9p#N{rJU8j8nWI5SlavsE7Qn~BP9OLBcR=uwce%}c>~}(CHY2E@0Oae}#>T6j z`KsUN=fbA4FO1KU$mP!F34OwlEZb>F zj?fS$!GF*oCNcwkcJCvO&YR7v;;sMBr3G(-%;$7 zzRSGLLg$mrCQ+EUxSc_)Fpc+Y#pP@f1g;;FBtzWy%u9p0_!XyNn#Wjgn;$uwi7y)ygfiiSnl|zAg$WcbJTev2 z=f?V3r%<;>p^$20phsvZj*xDLtHVAjZBX(UC_sD!oi=bb3=_f&3gE8u6TXpRTb$a+ z<_T&;!4UfyY<)cQCj3C0MAA(-FbI!$Do;Uo74Tk$T^C>@$O@8dSwY`w1#(~?%dR8U zRFiK|4ZeYOkZJQ&OF1B`N3Bx2$(3&K2Hr8Y1&Sgl<>X2^cmv@Wpt~jOE=7^dmF{k(@gvV?emPd8sH%=um5vr^Tk# z2yfMlY7~bmuQ0pq#>aBp}30 z&LCoj{61#3E*5GQ>=US&B$S(3wrvc7sWGRqGeOk!%v!e=9n1jSL4t-p`>ji4N67PV zu3|!9o=(!%31gBU2~9w#0gzKxoiM%ioKeKn6qA~#4@SmwWQ30(-Es{&9_Jb#D^p`0 zwhE00y2cA<78YmD(;u=V|T!W6sxh9H~t1%B-g~kJ2 z6KP?#KvR&@xw_h^CYBG16`^f1Hs>aTBS}?5a5DlU@o1_H`k|F5quarQoW0}3K~%1s zee^_u5VOK`kz$#U$eRA$_F}CEArEM*?ceVmWO25AV;pV%X&s?}5GC^2A+c$1OJW-=}GYCI`GI^j3kRK)g6Xw$@ z!l#uiT{$stD)8|gX9vYd9EuC=DFD`Db95l3>e5urn&OC9SV(S{qk51mYFJ127qb1b zaT=IZ|kT#X3}w2#i;?BtzAqz)D~Z$<2YZ?4O3h5Tsb1n zb)}(kh$B>&B-D}=69O+qG$6RInpA>X%fzF!k0NRE$c9JhbdPZIE;b>FmZ|7?xTy&r z)5-h5W{uG}#Z>YLrxp-Y@NjkDMM`%mHg;Gs)uNE@<}$^?i2_Is)dcjGRKY-_){q+T zpMu3%Hze9mRbWeQJB}xs$+dk$t(jie2+P+OMY+vr} zdE343I(9(*WaNk<2|{{FS;8G&ND+1lE5=c%B*^nN?dEqL$d~@Dn{dAL-Mk?W2Xq;H WW}55m?c4kBF`z>H*6nsWVdp=3ci2{^8%hc zd-etN1$xwrPv9Fklg+_B?9R;2eBW=`S#4H(`zRKA@L4>Vci51f!;>!HP^svApfOyo z)8TNf)ayd#ew;8Ph*G-f;6QtjMewRviyU(-i>54nD<_2x3`#eqkQccm$^MriUn%3j ztYmH2n8)drm+VJr5_pqi)O1eSHgox&1MBLVO?nq`YPfdSMl;+^Nk`JOh=MhSEbCwv zGYoiCSKvWyRs^OvAGl%_8+acOzosC umG0>?;CZeJU&Sp5^#w$p>PO7U5G}@AZ8Ia4&?Y^BI5J|jT*Y=)-u(kl?0h!> delta 478 zcmYk2!AiqG5QZse(Lx2FwH>=3ci2{^8%hc zd-etN1$xwrPv9Fklg+_B?C#9Y{QoyQtIcX}AH{+PpT)y@!Fuchp7b^xDHYx6Y7CdZ z>o{<&)a$N{2XVrTFiPpc#s<5a-QZQR79ET+?KWlVTRAP*&@J7Vu6)QPN%p@C`AQi9 zvy!#RF^vzpA&D^E<484L)yst=qe4?n_q_1*&kaEma746hv3) z5FNN<;*YJC!U6el0WaE`MMDhwleE)`;$++(h0{QmqOHu2!$_9@X#2}lPD*l&d-{5K po~y!FaT`YZ0s>C;V5DGZt9ctAN@cJT$BShdPoWV1m|sjfd;yTF$_7| T_lvpiLic@n>pxT4>7=S|s2(zf delta 387 zcmXw#J8A+^7=_O`>cA+NDwxXF4G3v0T!Fd*6O!Ia+bP_Dy}hVGK|!#x^U)>Sa0MoT zfZv&nKYVlU{oivh@g*J)g0J;336rU$Q3j#_`pWAOoq^*m74(kI;RRlyNlpb_fcB${Svf)1@?U_m!7*cDsex6m$uz~N6z+n zU`IvO(Gxh=F)!^U%jg*#J88%lb5W0=|L7AM;G`V5&_g101CHDL0yT6C19;=^vtP`4 QKUCkBxBfBZIi2*N8;f%?UjP6A diff --git a/examples/runtime/shaders/spirv/cs_gdr_downscale_hi_z.bin b/examples/runtime/shaders/spirv/cs_gdr_downscale_hi_z.bin index 67d107539718d987ba953d333d28ecb8b0a04f7f..b2809561642be30c1b313c65558d2a88c24690a5 100644 GIT binary patch delta 740 zcmZ9K%`1da6voe(86qSTrCHceiVZeCQmmAXW+6)pOJ$4In}uwZrG@3J?feJ+0r`kh z*kWl+DZd|c^EUVG>74UC=bq=@+gtCi_n+()7BBX%iiPXba%M1JMDB;0O~B@C?*7+GS9M_yXiT^ak-2Y=SLzc!@DQpX( zEt5BL2kwAm@=h+FOg_l-CX>vNv+v*J&tnQr-IY8V8HFYXAenrTH$XCJlIKlk7$Rq1 zyU8q?x+|F!sr5Jp$)f}(pCywrMc!ndTF%CHlLa_+S1-@&3-(b$3eq%lNYd;V_NK#8! delta 731 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 literal 10449 zcmaKyd2p816~^Br1hgn?Q9!{U5Rgq&v{q5R05yQNL^c=H7(&2k_(HRQIyeQbR$JRz zyJ)LbyUui+j@s!eidv<0t8}n4-Tn|VsI6_W)&-ZMeSY6}9&+;z^_a_hpXWK}-1FXh zPlEZFw{*e4ENnnFxVy2ryREIYxOQH9aZT&m%8G`pqNIMLyKzHn%f^O|_RIT;=~p5T z?`~`@uJ7(zvTSMV)h(43g>W9;+1S-`<>Kb%w(ic>_Tv1O^<9_MWR=8J)@FlRi=ACf z#pagzOzekCb#vR=o39WQTjrVfo(=qfl0WtJIi6BXS>q&fC#`j= zvW4O?)?BWq_q%*h`a@zk>y6S~ zSMNP2=R@n8Z$Ng{|M90j&US5EV|`ouswQ2!4eh#9x~~i8D@nahlk*#=F)YEyYL20E zcIfP)+oH07NnX?x0#_3u`70g<^E3uq&d9B_v@6Fw> zbmrtM`0hsl%6#j#GsGX6OOfOgk2}=pB~unhCWd| zMlI;zS_s)xVR9X(L4M=unqx<4l@s(N_M@tBww_bO@tmVUeFZ&hG%(@|de#ACBZbe> zlXv2M#>PE12TzR)^yK~PHK-BH{e*K(ivr_+cFftgF{+2VO0Kb*a~Hw*tJdZf$PeO1E`|Q$OHph5(86Sx05#FT%?>u{ggJ-YkwSwmC6@3P#ruBMK z6C8U5=6fp~x_)$)=ERbR9%D`(dJ2r+m3k5bM;$~ zoTB|ChI@l?CU1+ON6!%3U(X2|+;uQ_bdpAGVEW|R$bGJ&xaSWF!(p2gQ_yp(Fnpad zo-O>4=G;B*Tb%~EIp>GPqpgd$ZJNW~uiW&*Bbt*7exIuS4#msfl|R~}8gRS=^Up?2 zk893au7NxGggEXgeTYsC?8|n|(KbiyQ<|gGztm6c)54BLckDBoqb=4>anGOC9FBqU zpk(%n_kB(T>#^@et~@bo;)qx%VLT{UChN{SJq#`0c`&xk14}n;RTl`CSK;?$8hc z;_*l4`&6Cw`!PL-3Ul|lcibDkKMfNHe~Wy$gTpl^2fWuAp*g(1vcq(HxIae-P|IWu zboOD1&YK*2h0z`3`!q@%8UrJqsn;eVKVZ=jyF;=ofi@Z){I=mNp+CP(p(H-OdIZhlJ10$ZCu60VpAiIC23c!1~f2N5eAG+hGYYvb3 z>}LqW=gDhU zgC{1fZH_P+14DC<6vCJO!H<5jHa9fx85;fMJ2)?m6VExhf98kA8Q_=ipT*+%`HT7f zGz152?%d#%{y_gM5l1}!=xP5f7e-I}XN534Ib8dB!mPu4p{MqHLt|jX zlhd_c7%|B1pOpge9`2uu#E}o(@fT|jkNNB`5r)s7ePj4igMBX*2Tx48hfU#2t-h

$9Uxqn*4q4$V$ z|6DE%pZ3oc!tj`DYZHdg*S0Qv)7pyS;E73VYZpdiU})}<_2EnZ;8)PF))5-_42^#B z9qbH^IQoTia{qLN#u?z3@1M_z-{<&Ek`OqEzMa|(c zpZ%AF;qzzzbrWYIQ$tH{_dZziUV_Y_~rZOYvS<1y!O|H z;q!HVBYe|3ZxaVk47_W)T^Nmlp}Bv)DGt3yocrfn!tiPT+#w8)xwbon;q$e9JABjH z?h*%2Oj_IB!e|T(%{_8Y_|gaX(NEUC8yfcvjehbS{9b6p(J!2n`{(WpjSWz=$WOYke?ckljC91>im0KM#o`AG+fo)*K%5*>4ku&!7Dx;Y$tneN-GgG3g#Y z7QWQ#yZUQ!_%ks4-9L|u19Nux<@@Iearj_fd%G}vzRur-Z(8SX#laH;@0y+zMq^-T z?w_Z`q4$V$|2!=WpZ3o)!tj`DdsY}eU)%4(H?8eCaqz^Xwe1i_V_<0Rk>7_eeSjbR zWNl|?+%q)#$#?Mi(1@d7I4AedA41~{@XPnl3*z`a1?Ky+D>!I#yMyEG-9J6zh{qp2 z?VlHg(bN8UNf@3SuKi_U*5SR-)BgFJFuG&hKYtg8#=wXtr)zyBVvyZG{}6!paR2;M z9Qn{4|1ZtqF`xZjVfg&nzZ$;OVBdd>gC{24!`H%>T76glBMyHChQIsgb#Y+M4!?Z= zyde%B%xk|X44<#_t?*6j+$Rp67`^b6at6GuG$=xP6q5Jpe?=LlhVa=7**g;|I9LQnf= zq%gW;+&`nlp)oMx$>~~0M~t@NK>r*i4&KB4bF?_}p*wzz=J1%$eylKj{_KwlUuv*# zjW~E>(mfm(zSQcwdaOA785sWVpYh_roE?7o{+S>SAIxh{6o${&SsT7-os-1D69ey> zCJUo6Ff{kiapKT>#JPW_2*d9Y=RKS%43D|CX~OXN+NOtZTH6e9@WiCG9WRW=z|hYV}=RA`X8BhQIq~sW>oa zhhM&bmWjg$^V-XW;q!H_2;a2M^Tfdu1Miy77e-@XXzrg2#G&_ybN^f@48KR5_i&{! zJm%Ui5{A#$c5(QowOt|(o|v?@MqxAthUOl*G<@j;{OBiZt3u-eGgt18NM@Y(vAdIvcC_iMLKE$!H)+5Z3@R*S~~ diff --git a/examples/runtime/shaders/spirv/cs_gdr_stream_compaction.bin b/examples/runtime/shaders/spirv/cs_gdr_stream_compaction.bin index aee768b4fa14b2a29c712d971fdd7d613a62d347..67443345bc35635389f5aab1c1ed26666289d264 100644 GIT binary patch literal 6506 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 literal 6339 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 diff --git a/examples/runtime/shaders/spirv/cs_indirect.bin b/examples/runtime/shaders/spirv/cs_indirect.bin index 08e4b5ea2f6b1cf291c6cf07d21b6ff84de9672a..e1f17db33cb6a10a7aaad5142ce894faaecf74f6 100644 GIT binary patch literal 1317 zcmZvbOKVeM5Qe|pY9vrodhyoA6YD~#6h$k7C?+o2MHfQ6fl4`TE`&CzBq_LX=}+?~ zxo{)+JSXRa6#9i>X5P8IGl#tG9MnSoN}+mj^gW%VqiL~F4}}a~J0A3Z91X|a;iPvm zYfT32blNKtn}?TUq2PeIPM!V=VosD2b>{v7sF1N(Q=w*^*k!H(w36Y3 z!kcb7OVQ@uydqb;0sdh;?4M6Y?X&ZfQ(VyN8LoZRspdKJTDisxi&x;BXz=!7yoO#v z>X~24xOt6(1)kgZKJ(?-M2ZXkeQclcE%ahP`I~D$ZC~scF*%COIg~Sg&hXhYLB|=Z zbhBTRJ>;pqf#u8uStq}m+bH;!!zxZPn`b{TQK@N`aJWWpw0I-kN8iipCaa5mig{`;O0N)+p68u=YD@d{BN}A zBaaS}AWg)Z$@3Kza(j;$|B3GogB<%s2mOyZCifN<_WOh+h`r<%dws?>7JHpyi@nSD z`GV~?vZpa??dk4c5x=)RmDg+{W=+ibh8=U<#T+s36lbK^?%@aYJNM0dGe3J@yY=B@RD)jz$=l<6`Z9ffU7lwLMFp@Xi-8C=BzRap z{l!(Ja+kB{yKI?%Ymt_z%@+y9V-k@zD#*ASQYATaop*@Dkav}H$)9tV|B&ds!Tprz zz7xbwKVz(#ZM@f@SN_`0LT#@|n>0Nd>ylS$lrhoyyC3P^YoFM0BNoi1Y1G2Ey=Hvm z@=fajZ_~&(q)vRV5A{HP)~~Zw&Q!j6;(iW7SJj&5A#C I;eKf!YojqEBme*a diff --git a/examples/runtime/shaders/spirv/cs_init_instances.bin b/examples/runtime/shaders/spirv/cs_init_instances.bin index 4358deb7766ea0f3d329c1be129e8500bfae3455..95629db4321c14d3999b0249bb0398a5b0aa8709 100644 GIT binary patch literal 8287 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 KwbfO-y7E7y372{R diff --git a/examples/runtime/shaders/spirv/cs_update_instances.bin b/examples/runtime/shaders/spirv/cs_update_instances.bin index fd37c118973f782c263118ac737cda70afa22f48..695311bdfec6911d489cb53cd59dfdabb7d8ba97 100644 GIT binary patch literal 3715 zcmZ{l*>6=<6o+?vd$CCY1w;`+3y3CSkQhOf&=F`+48@8>G{MqAD{U{{wgiVD4h_yR zh8J-NzG7nHlZlDX4#6kiwGsaW=fuSCJKZZiQrW$$d#&GZuVJsf&pF-wy)7w^YHFT7 za(tjZFh1E>Nr@k0`SJSjiN4z8=+tO!qHB6&WVqg$8q-yC73s9rHCbr|+<@?8c_#AKrfx3l341v_4>T&~rgU)z+v#xB?8 zS&h1<{LpA;r|SJ19B~^PL%MI=sMbqXHo6H zn0cOKwr}F*(e|AXy>$Pl5dB?0lR0BV-ZSXUB-VEQIm9}&t@AS^rPFP}e}Prr$5#cP zI_#f!JNoCn);90A%=(B~r?&T4ENt(sw(Eanwg&5w*Y+NZ$^V@7)y(qRmojz-RlC3U zS!|C(Vn64=KfQ3FZ5vOF`RtX$`}QY@&(Tg$bI&5?)i&2Jh(3Uo2W;bfe@_`edvJvslz zx5T_3qT3tyd7k;6%(YkjZ*2Lsh`9BtzlyIlwW8~L3jK7()?Wplts-$L`@SWD_FiUOq;* zcXC@Z7d^TiTi$)zqivbTEP5nwEOB$HchZj;_|53ntiSvAobN;ze}y&LFQSWiU(SMg zZZD&YD>E6JK^Ip7JENYl#dzxbIyS#_Ga~;|_J0Fi&UgH48G93ZJGNZhr?=3{_sPD- zeR>;CKJvedE~W(b9=f=(-yx5CJd5sLXe2(^3+q-Fxox{iH z!Fw1!@oaf#qsKeZeXi|s?6VEMywCR1KHK5sqy7$bV~9unUFhB?x#;~abbiJ6Pd<9G z2VKs0++yyW=hTDFFKtBRJ%`|WGv~X_b-wGrq;Ed6_hTDt1pN=5gMM^}&#T-6h?sp+ zw>JCzAUeO|IkC3r!+!MWgWr(ydH2D|M_mWd`4u%=gM9SpA#`)N#TjSxgEk5_w1tHN718RpIN`}aX$~k$w$n`(9J0x=k_?dapnA8cot8f zFGn1K4P;C>u%j9Cz0}7!`u!LL)8F;-o=d#@hOqsfT4xKo?=3NXBIYQ%H8}!%I%C3t j9m`lb_ZXP|u9x@TMDB5Pzuo2BV*32UDQ+)La!dLb`*v$j literal 3715 zcmZ{l+iz7>5QkSU2OA1X5riPfO-#HIOn}rNZ4adsOd~}uDn8UwTB(#CJZ%YHLLh?R zB^o0SiW+^!#Kb2P6Q8{VpM2Lw{1dzB4BteLgTEgvOavOzcw*CIa(XvF*PzWT(73abju7mG*z$PNH%41X>Dq< zf6n5D)Li1b=d5o?mCR2sB!|ZJL~2N_sU>~VP{d4agja1%^NP8*Z-3v$iOHiIH*eXb z$E`VYeQsl~3Uf1ZVsLbvDgA_8M;5VOybWQ?VlUS;@#mUfF)DbJ*H&0lg*!MtI#R2j z*fCZcI*tiCgR4gk)hq1Pt-|nJ2bkv;)b*8u)3593;N)QTKXem+_ZonkTYuxsOE1CI zCXWr*d&Vd0qr(%J;4SGJ@&9WJxH-r>W^-ss-(lZujeGtu!_RFcxV-g#c5I-pHZ(Z4 zXZ#eCS831q(c#ktZ!h3`$7)CZG5Pzk-K!l*>1=1%+pxaBc5S=<9q9Ua zK6&GHBCcPF-Nmer*j=Di<}PFn+zw`Q7TcEX?u@yYd3e7Zv3C!;Yh1r8>&9Qj-rgBw z8OJ-Jt=~ar*N7QM+dCl^`#yp0(El*AoO^}8_aOX@H-b1~{qyJz$P&CxmGIN(F0>Xe zpjv-1fA>G{tfuGjxU=G-IVUPNypu(tkJ5cAMB&(DyQ&UOU<1y=bS zUln}nvVPv}sGs**+qmB{yGG1BwY|q;VS8`2_5YFC9Lz^v+j}e~|8v$?Fw1LS&)5TG z?fKrr*&2t$dEN*A^y<})tvoTtvsMo8+n*plN83S-J&hPw+gQIK#@UCL{CxHjb5x0Y zn7I|qyRj3Icda#9fG)R}8*Y9J(Zv*plljCxivYYcH}2C0E*JYOMi)~YPVVy;|CeBR zCg-va<1D7bg|Fb z$-8_f`V~a{cYGdZHm>7uZ26UlxcRD|&oy3+?%Ff>p3T@=Z1HKZsMk8|sF!@yeLcEd z)a!0^F~#9DQ};^od~5*l8Jb2qxE0#2nI_L3Fy$g*eeVG`U+1W=HMPc`;UVNcM9%tt zgl_HRHfJtsbT78N=d?y!GLKo*NZ!4~jj3Lx9v9#rL^o&Gdv5!@5ncQhe6-J?i+Nuz zgW0!p=;F$SjGadpR|0z#J@5srbnPWDerYu#e=e_o4PDN6{H2V&j@^ze7x(E6^zwbO zu5q8Z=;JTfxUw+?%r<^$1}c*?pfr_N6a4B6S=rQ*4|qAt}FM^+G=|@t+8{g z@pw)t#O=lJ9_z?ouzYjz{yAco#^f%9{E?%y-#vc`)+i8#rID> zYSM!)=R0lzcg{ZTLg$w@AoBJhxZce9Zqv_q{g>3uXLb*^dySy~!E^99y2IyH?omX{ zI;oqR_3lIGS3D=?7Ik&v_q`?Nn%MIgx;Z%l8_k$- kV9#Z&9Q!z!>-CrS-bCy%bidu@*kZ2vhc31ko!pfE1^y{&eE-3q|B1!#Nra0QlOYd lnI1N6dKH=q+LH}gL?&~J@J{|9%)+Fp1Lb~XQD9JD005tqHu3-f delta 71 zcmaE(^-ojIIoN}n0Sed|_)FuHOLKBE^U|I3^U^ZYC)%!M)SUP_YjY*zETPFMA_}aA WnVPXWlWjy4C%1?^VG&>uU;qH$Efk6X diff --git a/examples/runtime/shaders/wgsl/cs_indirect.bin b/examples/runtime/shaders/wgsl/cs_indirect.bin index 585187295f5819067f668e47b91c014329c26048..9ca1ec3eb7467ebed8cfff48745e88f65f75a1de 100644 GIT binary patch delta 153 zcmeBW{laSI9PGi(00qnp9HsFEiA9OI#Y~I>42)o5k)-sriulaDl+2>k representing instanced data. N is decreasing. +#ifndef BGFX_CONFIG_INSTANCE_DATA_FIRST_TEXCOORD +# define BGFX_CONFIG_INSTANCE_DATA_FIRST_TEXCOORD 31 +#endif // BGFX_CONFIG_INSTANCE_DATA_FIRST_TEXCOORD + /// Maximum number of instance data vec4 attributes per draw call. Default is 5. /// Each instance data element is a vec4 (16 bytes). Total instance stride is /// BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT * 16 bytes. #ifndef BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT -# define BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT 5 +# define BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT 16 #endif // BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT /// Maximum number of color palette entries. Default is 16. diff --git a/src/renderer_d3d11.cpp b/src/renderer_d3d11.cpp index 7b2421b5f..9923208f0 100644 --- a/src/renderer_d3d11.cpp +++ b/src/renderer_d3d11.cpp @@ -327,6 +327,14 @@ namespace bgfx { namespace d3d11 { "TEXCOORD", 5, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 6, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 7, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 8, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 9, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 10, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 11, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 12, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 13, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 14, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 15, DXGI_FORMAT_R32G32_FLOAT, 0, D3D11_APPEND_ALIGNED_ELEMENT, D3D11_INPUT_PER_VERTEX_DATA, 0 }, }; static_assert(Attrib::Count == BX_COUNTOF(s_attrib) ); @@ -374,6 +382,18 @@ namespace bgfx { namespace d3d11 { DXGI_FORMAT_R32G32B32_FLOAT, DXGI_FORMAT_R32G32B32_FLOAT }, { DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT }, }, + { // Int32 (32-bit integers can't be normalized; both slots are the SINT format) + { DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT }, + { DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT }, + { DXGI_FORMAT_R32G32B32_SINT, DXGI_FORMAT_R32G32B32_SINT }, + { DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT }, + }, + { // Uint32 + { DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT }, + { DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT }, + { DXGI_FORMAT_R32G32B32_UINT, DXGI_FORMAT_R32G32B32_UINT }, + { DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT }, + }, }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -1313,8 +1333,11 @@ namespace bgfx { namespace d3d11 D3D11_IA_VERTEX_INPUT_RESOURCE_SLOT_COUNT , BGFX_CONFIG_MAX_VERTEX_STREAMS ) ); + g_caps.limits.maxVertexAttributes = D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT; } + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); + // 32-bit indices only supported on 9_2+. if (m_featureLevel >= D3D_FEATURE_LEVEL_9_2) { @@ -2832,7 +2855,7 @@ namespace bgfx { namespace d3d11 for (uint32_t ii = 0; ii < _numInstanceData; ++ii) { - uint32_t index = 7-ii; // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc. + const uint32_t index = BGFX_CONFIG_INSTANCE_DATA_FIRST_TEXCOORD - ii; // TEXCOORD(x) = i_data0, TEXCOORD(x-1) = i_data1, etc. uint32_t jj; D3D11_INPUT_ELEMENT_DESC* curr = vertexElements; diff --git a/src/renderer_d3d12.cpp b/src/renderer_d3d12.cpp index ede543968..c6f8ea888 100644 --- a/src/renderer_d3d12.cpp +++ b/src/renderer_d3d12.cpp @@ -335,6 +335,14 @@ namespace bgfx { namespace d3d12 { "TEXCOORD", 5, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 6, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, { "TEXCOORD", 7, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 8, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 9, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 10, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 11, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 12, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 13, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 14, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, + { "TEXCOORD", 15, DXGI_FORMAT_R32G32_FLOAT, 0, D3D12_APPEND_ALIGNED_ELEMENT, D3D12_INPUT_CLASSIFICATION_PER_VERTEX_DATA, 0 }, }; static_assert(Attrib::Count == BX_COUNTOF(s_attrib) ); @@ -382,6 +390,18 @@ namespace bgfx { namespace d3d12 { DXGI_FORMAT_R32G32B32_FLOAT, DXGI_FORMAT_R32G32B32_FLOAT }, { DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT }, }, + { // Int32 (32-bit integers can't be normalized; both slots are the SINT format) + { DXGI_FORMAT_R32_SINT, DXGI_FORMAT_R32_SINT }, + { DXGI_FORMAT_R32G32_SINT, DXGI_FORMAT_R32G32_SINT }, + { DXGI_FORMAT_R32G32B32_SINT, DXGI_FORMAT_R32G32B32_SINT }, + { DXGI_FORMAT_R32G32B32A32_SINT, DXGI_FORMAT_R32G32B32A32_SINT }, + }, + { // Uint32 + { DXGI_FORMAT_R32_UINT, DXGI_FORMAT_R32_UINT }, + { DXGI_FORMAT_R32G32_UINT, DXGI_FORMAT_R32G32_UINT }, + { DXGI_FORMAT_R32G32B32_UINT, DXGI_FORMAT_R32G32B32_UINT }, + { DXGI_FORMAT_R32G32B32A32_UINT, DXGI_FORMAT_R32G32B32A32_UINT }, + }, }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -1686,6 +1706,8 @@ namespace bgfx { namespace d3d12 g_caps.limits.maxFBAttachments = bx::min(16, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS); g_caps.limits.maxComputeBindings = bx::min(D3D12_UAV_SLOT_COUNT, BGFX_MAX_COMPUTE_BINDINGS); g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS; + g_caps.limits.maxVertexAttributes = D3D12_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT; + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); for (uint32_t ii = 0; ii < TextureFormat::Count; ++ii) { @@ -3367,7 +3389,7 @@ namespace bgfx { namespace d3d12 for (uint32_t ii = 0; ii < _numInstanceData; ++ii) { - uint32_t index = 7 - ii; // TEXCOORD7 = i_data0, TEXCOORD6 = i_data1, etc. + uint32_t index = BGFX_CONFIG_INSTANCE_DATA_FIRST_TEXCOORD - ii; // TEXCOORD(x) = i_data0, TEXCOORD(x-1) = i_data1, etc. uint32_t jj; D3D12_INPUT_ELEMENT_DESC* curr = _vertexElements; diff --git a/src/renderer_gl.cpp b/src/renderer_gl.cpp index 58544a601..5caabd79d 100644 --- a/src/renderer_gl.cpp +++ b/src/renderer_gl.cpp @@ -61,6 +61,14 @@ namespace bgfx { namespace gl "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", }; static_assert(Attrib::Count == BX_COUNTOF(s_attribName) ); @@ -71,6 +79,17 @@ namespace bgfx { namespace gl "i_data2", "i_data3", "i_data4", + "i_data5", + "i_data6", + "i_data7", + "i_data8", + "i_data9", + "i_data10", + "i_data11", + "i_data12", + "i_data13", + "i_data14", + "i_data15", }; static_assert(BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT == BX_COUNTOF(s_instanceDataName) ); @@ -91,6 +110,8 @@ namespace bgfx { namespace gl GL_UNSIGNED_SHORT, // Uint16 GL_HALF_FLOAT, // Half GL_FLOAT, // Float + GL_INT, // Int32 + GL_UNSIGNED_INT, // Uint32 }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -2963,6 +2984,8 @@ namespace bgfx { namespace gl g_caps.limits.maxTextureLayers = BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL >= 30) || BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGLES >= 30) || s_extension[Extension::EXT_texture_array].m_supported ? uint16_t(bx::max(glGet(GL_MAX_ARRAY_TEXTURE_LAYERS), 1) ) : 1; g_caps.limits.maxComputeBindings = computeSupport ? BGFX_MAX_COMPUTE_BINDINGS : 0; g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS; + g_caps.limits.maxVertexAttributes = uint32_t(glGet(GL_MAX_VERTEX_ATTRIBS) ); + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); if (BX_ENABLED(BGFX_CONFIG_RENDERER_OPENGL) || m_gles3 diff --git a/src/renderer_mtl.cpp b/src/renderer_mtl.cpp index 7ddf0fa55..62da2e470 100644 --- a/src/renderer_mtl.cpp +++ b/src/renderer_mtl.cpp @@ -71,6 +71,14 @@ namespace bgfx { namespace mtl "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", }; static_assert(Attrib::Count == BX_COUNTOF(s_attribName) ); @@ -81,6 +89,17 @@ namespace bgfx { namespace mtl "i_data2", "i_data3", "i_data4", + "i_data5", + "i_data6", + "i_data7", + "i_data8", + "i_data9", + "i_data10", + "i_data11", + "i_data12", + "i_data13", + "i_data14", + "i_data15", }; static_assert(BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT == BX_COUNTOF(s_instanceDataName) ); @@ -128,6 +147,18 @@ namespace bgfx { namespace mtl { MTL::VertexFormatFloat3, MTL::VertexFormatFloat3 }, { MTL::VertexFormatFloat4, MTL::VertexFormatFloat4 }, }, + { // Int32 (32-bit integers can't be normalized; both slots are the SINT format) + { MTL::VertexFormatInt, MTL::VertexFormatInt }, + { MTL::VertexFormatInt2, MTL::VertexFormatInt2 }, + { MTL::VertexFormatInt3, MTL::VertexFormatInt3 }, + { MTL::VertexFormatInt4, MTL::VertexFormatInt4 }, + }, + { // Uint32 + { MTL::VertexFormatUInt, MTL::VertexFormatUInt }, + { MTL::VertexFormatUInt2, MTL::VertexFormatUInt2 }, + { MTL::VertexFormatUInt3, MTL::VertexFormatUInt3 }, + { MTL::VertexFormatUInt4, MTL::VertexFormatUInt4 }, + }, }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -961,6 +992,8 @@ static_assert(BX_COUNTOF(s_accessNames) == Access::Count, "Invalid s_accessNames g_caps.limits.maxTextureLayers = 2048; g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS; + g_caps.limits.maxVertexAttributes = 31; + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); // Maximum number of entries in the buffer argument table, per graphics or compute function are 31. // It is decremented by 1 because 1 entry is used for uniforms. g_caps.limits.maxComputeBindings = bx::min(30, BGFX_MAX_COMPUTE_BINDINGS); diff --git a/src/renderer_noop.cpp b/src/renderer_noop.cpp index 9a2e86d04..f8d305d16 100644 --- a/src/renderer_noop.cpp +++ b/src/renderer_noop.cpp @@ -75,6 +75,7 @@ namespace bgfx { namespace noop g_caps.limits.maxComputeBindings = g_caps.limits.maxTextureSamplers; g_caps.limits.maxFBAttachments = BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS; g_caps.limits.maxVertexStreams = BGFX_CONFIG_MAX_VERTEX_STREAMS; + g_caps.limits.maxVertexAttributes = 32; } ~RendererContextNOOP() diff --git a/src/renderer_vk.cpp b/src/renderer_vk.cpp index 6c3a09ac9..2f32a3e43 100644 --- a/src/renderer_vk.cpp +++ b/src/renderer_vk.cpp @@ -554,6 +554,18 @@ VK_IMPORT_DEVICE { VK_FORMAT_R32G32B32_SFLOAT, VK_FORMAT_R32G32B32_SFLOAT }, { VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R32G32B32A32_SFLOAT }, }, + { // Int32 (32-bit integers can't be normalized; both slots are the SINT format) + { VK_FORMAT_R32_SINT, VK_FORMAT_R32_SINT }, + { VK_FORMAT_R32G32_SINT, VK_FORMAT_R32G32_SINT }, + { VK_FORMAT_R32G32B32_SINT, VK_FORMAT_R32G32B32_SINT }, + { VK_FORMAT_R32G32B32A32_SINT, VK_FORMAT_R32G32B32A32_SINT }, + }, + { // Uint32 + { VK_FORMAT_R32_UINT, VK_FORMAT_R32_UINT }, + { VK_FORMAT_R32G32_UINT, VK_FORMAT_R32G32_UINT }, + { VK_FORMAT_R32G32B32_UINT, VK_FORMAT_R32G32B32_UINT }, + { VK_FORMAT_R32G32B32A32_UINT, VK_FORMAT_R32G32B32A32_UINT }, + }, }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -598,7 +610,7 @@ VK_IMPORT_DEVICE uint32_t numBindings = _vertexInputState.vertexBindingDescriptionCount; uint32_t numAttribs = _vertexInputState.vertexAttributeDescriptionCount; - VkVertexInputBindingDescription* inputBinding = const_cast(_vertexInputState.pVertexBindingDescriptions + numBindings); + VkVertexInputBindingDescription* inputBinding = const_cast(_vertexInputState.pVertexBindingDescriptions + numBindings); VkVertexInputAttributeDescription* inputAttrib = const_cast(_vertexInputState.pVertexAttributeDescriptions + numAttribs); inputBinding->binding = numBindings; @@ -1834,6 +1846,8 @@ VK_IMPORT_INSTANCE g_caps.limits.maxTextureSamplers = bx::min(m_deviceProperties.limits.maxPerStageResources, BGFX_CONFIG_MAX_TEXTURE_SAMPLERS); g_caps.limits.maxComputeBindings = bx::min(m_deviceProperties.limits.maxPerStageResources, BGFX_MAX_COMPUTE_BINDINGS); g_caps.limits.maxVertexStreams = bx::min(m_deviceProperties.limits.maxVertexInputBindings, BGFX_CONFIG_MAX_VERTEX_STREAMS); + g_caps.limits.maxVertexAttributes = m_deviceProperties.limits.maxVertexInputAttributes; + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); { const VkSampleCountFlags sampleMask = ~0 diff --git a/src/renderer_webgpu.cpp b/src/renderer_webgpu.cpp index 016ae3ce9..927801af1 100644 --- a/src/renderer_webgpu.cpp +++ b/src/renderer_webgpu.cpp @@ -98,6 +98,18 @@ namespace bgfx { namespace wgpu { WGPUVertexFormat_Float32x3, WGPUVertexFormat_Float32x3 }, { WGPUVertexFormat_Float32x4, WGPUVertexFormat_Float32x4 }, }, + { // Int32 (32-bit integers can't be normalized; both slots are the SINT format) + { WGPUVertexFormat_Sint32, WGPUVertexFormat_Sint32 }, + { WGPUVertexFormat_Sint32x2, WGPUVertexFormat_Sint32x2 }, + { WGPUVertexFormat_Sint32x3, WGPUVertexFormat_Sint32x3 }, + { WGPUVertexFormat_Sint32x4, WGPUVertexFormat_Sint32x4 }, + }, + { // Uint32 + { WGPUVertexFormat_Uint32, WGPUVertexFormat_Uint32 }, + { WGPUVertexFormat_Uint32x2, WGPUVertexFormat_Uint32x2 }, + { WGPUVertexFormat_Uint32x3, WGPUVertexFormat_Uint32x3 }, + { WGPUVertexFormat_Uint32x4, WGPUVertexFormat_Uint32x4 }, + }, }; static_assert(AttribType::Count == BX_COUNTOF(s_attribType) ); @@ -1370,6 +1382,8 @@ WGPU_IMPORT g_caps.limits.maxComputeBindings = BGFX_CONFIG_MAX_TEXTURE_SAMPLERS; g_caps.limits.maxFBAttachments = bx::min(m_limits.maxColorAttachments, BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS); g_caps.limits.maxVertexStreams = bx::min(m_limits.maxVertexBuffers, BGFX_CONFIG_MAX_VERTEX_STREAMS); + g_caps.limits.maxVertexAttributes = m_limits.maxVertexAttributes; + g_caps.limits.maxInstanceData = bx::min(g_caps.limits.maxInstanceData, g_caps.limits.maxVertexAttributes); g_caps.supported = 0 | BGFX_CAPS_ALPHA_TO_COVERAGE diff --git a/src/vertexlayout.cpp b/src/vertexlayout.cpp index 13c8a422e..9fb664868 100644 --- a/src/vertexlayout.cpp +++ b/src/vertexlayout.cpp @@ -13,7 +13,7 @@ namespace bgfx { - static const uint8_t s_attribTypeSizeD3D1x[AttribType::Count][4] = + static const uint8_t s_attribTypeSizeD3D1x[][4] = { { 1, 2, 4, 4 }, // Int8 { 1, 2, 4, 4 }, // Uint8 @@ -22,9 +22,12 @@ namespace bgfx { 2, 4, 8, 8 }, // Uint16 { 2, 4, 8, 8 }, // Half { 4, 8, 12, 16 }, // Float + { 4, 8, 12, 16 }, // Int32 + { 4, 8, 12, 16 }, // Uint32 }; + static_assert(BX_COUNTOF(s_attribTypeSizeD3D1x) == AttribType::Count); - static const uint8_t s_attribTypeSizeGl[AttribType::Count][4] = + static const uint8_t s_attribTypeSizeGl[][4] = { { 1, 2, 4, 4 }, // Int8 { 1, 2, 4, 4 }, // Uint8 @@ -33,9 +36,12 @@ namespace bgfx { 2, 4, 6, 8 }, // Uint16 { 2, 4, 6, 8 }, // Half { 4, 8, 12, 16 }, // Float + { 4, 8, 12, 16 }, // Int32 + { 4, 8, 12, 16 }, // Uint32 }; + static_assert(BX_COUNTOF(s_attribTypeSizeGl) == AttribType::Count); - static const uint8_t (*s_attribTypeSize[])[AttribType::Count][4] = + static const uint8_t (*s_attribTypeSize[])[][4] = { &s_attribTypeSizeD3D1x, // Noop &s_attribTypeSizeD3D1x, // Agc @@ -88,9 +94,9 @@ namespace bgfx VertexLayout& VertexLayout::add(Attrib::Enum _attrib, uint8_t _num, AttribType::Enum _type, bool _normalized, bool _asInt) { const uint16_t encodedNorm = (_normalized&1)<<7; - const uint16_t encodedType = (_type&7)<<3; + const uint16_t encodedType = (_type&0xf)<<3; // 4 bits (up to 16 attrib types) const uint16_t encodedNum = (_num-1)&3; - const uint16_t encodeAsInt = (_asInt&(!!"\x1\x1\x1\x1\x1\x0\x0"[_type]) )<<8; + const uint16_t encodeAsInt = (_asInt&(!!"\x1\x1\x1\x1\x1\x0\x0\x1\x1"[_type]) )<<8; m_attributes[_attrib] = encodedNorm|encodedType|encodedNum|encodeAsInt; m_offset[_attrib] = m_stride; @@ -110,7 +116,7 @@ namespace bgfx { uint16_t val = m_attributes[_attrib]; _num = (val&3)+1; - _type = AttribType::Enum( (val>>3)&7); + _type = AttribType::Enum( (val>>3)&0xf); _normalized = !!(val&(1<<7) ); _asInt = !!(val&(1<<8) ); } @@ -124,6 +130,8 @@ namespace bgfx false, // Uint16 true, // Half true, // Float + false, // Int32 + false, // Uint32 }; static_assert(BX_COUNTOF(s_attribTypeIsFloat) == AttribType::Count); @@ -134,24 +142,32 @@ namespace bgfx static const char* s_attrName[] = { - "P", "Attrib::Position", - "N", "Attrib::Normal", - "T", "Attrib::Tangent", - "B", "Attrib::Bitangent", - "C0", "Attrib::Color0", - "C1", "Attrib::Color1", - "C2", "Attrib::Color2", - "C3", "Attrib::Color3", - "I", "Attrib::Indices", - "W", "Attrib::Weights", - "T0", "Attrib::TexCoord0", - "T1", "Attrib::TexCoord1", - "T2", "Attrib::TexCoord2", - "T3", "Attrib::TexCoord3", - "T4", "Attrib::TexCoord4", - "T5", "Attrib::TexCoord5", - "T6", "Attrib::TexCoord6", - "T7", "Attrib::TexCoord7", + "P", "Attrib::Position", + "N", "Attrib::Normal", + "T", "Attrib::Tangent", + "B", "Attrib::Bitangent", + "C0", "Attrib::Color0", + "C1", "Attrib::Color1", + "C2", "Attrib::Color2", + "C3", "Attrib::Color3", + "I", "Attrib::Indices", + "W", "Attrib::Weights", + "T0", "Attrib::TexCoord0", + "T1", "Attrib::TexCoord1", + "T2", "Attrib::TexCoord2", + "T3", "Attrib::TexCoord3", + "T4", "Attrib::TexCoord4", + "T5", "Attrib::TexCoord5", + "T6", "Attrib::TexCoord6", + "T7", "Attrib::TexCoord7", + "T8", "Attrib::TexCoord8", + "T9", "Attrib::TexCoord9", + "T10", "Attrib::TexCoord10", + "T11", "Attrib::TexCoord11", + "T12", "Attrib::TexCoord12", + "T13", "Attrib::TexCoord13", + "T14", "Attrib::TexCoord14", + "T15", "Attrib::TexCoord15", }; static_assert(BX_COUNTOF(s_attrName) == Attrib::Count*2); @@ -176,24 +192,32 @@ namespace bgfx // NOTICE: // Attrib must be in order how it appears in Attrib::Enum! id is // unique and should not be changed if new Attribs are added. - { Attrib::Position, 0x0001 }, - { Attrib::Normal, 0x0002 }, - { Attrib::Tangent, 0x0003 }, - { Attrib::Bitangent, 0x0004 }, - { Attrib::Color0, 0x0005 }, - { Attrib::Color1, 0x0006 }, - { Attrib::Color2, 0x0018 }, - { Attrib::Color3, 0x0019 }, - { Attrib::Indices, 0x000e }, - { Attrib::Weight, 0x000f }, - { Attrib::TexCoord0, 0x0010 }, - { Attrib::TexCoord1, 0x0011 }, - { Attrib::TexCoord2, 0x0012 }, - { Attrib::TexCoord3, 0x0013 }, - { Attrib::TexCoord4, 0x0014 }, - { Attrib::TexCoord5, 0x0015 }, - { Attrib::TexCoord6, 0x0016 }, - { Attrib::TexCoord7, 0x0017 }, + { Attrib::Position, 0x0001 }, + { Attrib::Normal, 0x0002 }, + { Attrib::Tangent, 0x0003 }, + { Attrib::Bitangent, 0x0004 }, + { Attrib::Color0, 0x0005 }, + { Attrib::Color1, 0x0006 }, + { Attrib::Color2, 0x0018 }, + { Attrib::Color3, 0x0019 }, + { Attrib::Indices, 0x000e }, + { Attrib::Weight, 0x000f }, + { Attrib::TexCoord0, 0x0010 }, + { Attrib::TexCoord1, 0x0011 }, + { Attrib::TexCoord2, 0x0012 }, + { Attrib::TexCoord3, 0x0013 }, + { Attrib::TexCoord4, 0x0014 }, + { Attrib::TexCoord5, 0x0015 }, + { Attrib::TexCoord6, 0x0016 }, + { Attrib::TexCoord7, 0x0017 }, + { Attrib::TexCoord8, 0x001a }, + { Attrib::TexCoord9, 0x001b }, + { Attrib::TexCoord10, 0x001c }, + { Attrib::TexCoord11, 0x001d }, + { Attrib::TexCoord12, 0x001e }, + { Attrib::TexCoord13, 0x001f }, + { Attrib::TexCoord14, 0x0020 }, + { Attrib::TexCoord15, 0x0021 }, }; static_assert(BX_COUNTOF(s_attribToId) == Attrib::Count); @@ -234,6 +258,8 @@ namespace bgfx { AttribType::Uint16, 0x0007 }, { AttribType::Half, 0x0003 }, { AttribType::Float, 0x0004 }, + { AttribType::Int32, 0x0008 }, + { AttribType::Uint32, 0x0009 }, }; static_assert(BX_COUNTOF(s_attribTypeToId) == AttribType::Count); diff --git a/tools/geometryv/geometryv.cpp b/tools/geometryv/geometryv.cpp index 7973295b8..18f4c8b71 100644 --- a/tools/geometryv/geometryv.cpp +++ b/tools/geometryv/geometryv.cpp @@ -48,24 +48,32 @@ static const bgfx::EmbeddedShader s_embeddedShaders[] = static const char* s_attribShortNames[] = { - "P", // Position - "N", // Normal - "T", // Tangent - "B", // Bitangent - "C0", // Color0 - "C1", // Color1 - "C2", // Color2 - "C3", // Color3 - "I", // Indices - "W", // Weight - "TC0", // TexCoord0 - "TC1", // TexCoord1 - "TC2", // TexCoord2 - "TC3", // TexCoord3 - "TC4", // TexCoord4 - "TC5", // TexCoord5 - "TC6", // TexCoord6 - "TC7", // TexCoord7 + "P", // Position + "N", // Normal + "T", // Tangent + "B", // Bitangent + "C0", // Color0 + "C1", // Color1 + "C2", // Color2 + "C3", // Color3 + "I", // Indices + "W", // Weight + "TC0", // TexCoord0 + "TC1", // TexCoord1 + "TC2", // TexCoord2 + "TC3", // TexCoord3 + "TC4", // TexCoord4 + "TC5", // TexCoord5 + "TC6", // TexCoord6 + "TC7", // TexCoord7 + "TC8", // TexCoord8 + "TC9", // TexCoord9 + "TC10", // TexCoord10 + "TC11", // TexCoord11 + "TC12", // TexCoord12 + "TC13", // TexCoord13 + "TC14", // TexCoord14 + "TC15", // TexCoord15 }; static_assert(BX_COUNTOF(s_attribShortNames) == bgfx::Attrib::Count); diff --git a/tools/shaderc/shaderc.cpp b/tools/shaderc/shaderc.cpp index 2ebb6a18e..e59708d48 100644 --- a/tools/shaderc/shaderc.cpp +++ b/tools/shaderc/shaderc.cpp @@ -339,11 +339,30 @@ namespace bgfx "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", "i_data0", "i_data1", "i_data2", "i_data3", "i_data4", + "i_data5", + "i_data6", + "i_data7", + "i_data8", + "i_data9", + "i_data10", + "i_data11", + "i_data12", + "i_data13", + "i_data14", + "i_data15", NULL }; @@ -1695,9 +1714,8 @@ namespace bgfx "Invalid vertex shader input attribute '%s'.\n" "\n" "Valid input attributes:\n" - " a_position, a_normal, a_tangent, a_bitangent, a_color0, a_color1, a_color2, a_color3, a_indices, a_weight,\n" - " a_texcoord0, a_texcoord1, a_texcoord2, a_texcoord3, a_texcoord4, a_texcoord5, a_texcoord6, a_texcoord7,\n" - " i_data0, i_data1, i_data2, i_data3, i_data4.\n" + " a_position, a_normal, a_tangent, a_bitangent, a_color0-3, a_indices, a_weight,\n" + " a_texcoord0-15, i_data0-15.\n" "\n" , it->c_str() ); break; diff --git a/tools/shaderc/shaderc_dxil.cpp b/tools/shaderc/shaderc_dxil.cpp index 1ebe81210..4f46ee61a 100644 --- a/tools/shaderc/shaderc_dxil.cpp +++ b/tools/shaderc/shaderc_dxil.cpp @@ -55,26 +55,35 @@ namespace bgfx { namespace dxil static const RemapInputSemantic s_remapInputSemantic[bgfx::Attrib::Count + 1] = { - { bgfx::Attrib::Position, "POSITION", 0 }, - { bgfx::Attrib::Normal, "NORMAL", 0 }, - { bgfx::Attrib::Tangent, "TANGENT", 0 }, - { bgfx::Attrib::Bitangent, "BITANGENT", 0 }, - { bgfx::Attrib::Color0, "COLOR", 0 }, - { bgfx::Attrib::Color1, "COLOR", 1 }, - { bgfx::Attrib::Color2, "COLOR", 2 }, - { bgfx::Attrib::Color3, "COLOR", 3 }, - { bgfx::Attrib::Indices, "BLENDINDICES", 0 }, - { bgfx::Attrib::Weight, "BLENDWEIGHT", 0 }, - { bgfx::Attrib::TexCoord0, "TEXCOORD", 0 }, - { bgfx::Attrib::TexCoord1, "TEXCOORD", 1 }, - { bgfx::Attrib::TexCoord2, "TEXCOORD", 2 }, - { bgfx::Attrib::TexCoord3, "TEXCOORD", 3 }, - { bgfx::Attrib::TexCoord4, "TEXCOORD", 4 }, - { bgfx::Attrib::TexCoord5, "TEXCOORD", 5 }, - { bgfx::Attrib::TexCoord6, "TEXCOORD", 6 }, - { bgfx::Attrib::TexCoord7, "TEXCOORD", 7 }, - { bgfx::Attrib::Count, "", 0 }, + { bgfx::Attrib::Position, "POSITION", 0 }, + { bgfx::Attrib::Normal, "NORMAL", 0 }, + { bgfx::Attrib::Tangent, "TANGENT", 0 }, + { bgfx::Attrib::Bitangent, "BITANGENT", 0 }, + { bgfx::Attrib::Color0, "COLOR", 0 }, + { bgfx::Attrib::Color1, "COLOR", 1 }, + { bgfx::Attrib::Color2, "COLOR", 2 }, + { bgfx::Attrib::Color3, "COLOR", 3 }, + { bgfx::Attrib::Indices, "BLENDINDICES", 0 }, + { bgfx::Attrib::Weight, "BLENDWEIGHT", 0 }, + { bgfx::Attrib::TexCoord0, "TEXCOORD", 0 }, + { bgfx::Attrib::TexCoord1, "TEXCOORD", 1 }, + { bgfx::Attrib::TexCoord2, "TEXCOORD", 2 }, + { bgfx::Attrib::TexCoord3, "TEXCOORD", 3 }, + { bgfx::Attrib::TexCoord4, "TEXCOORD", 4 }, + { bgfx::Attrib::TexCoord5, "TEXCOORD", 5 }, + { bgfx::Attrib::TexCoord6, "TEXCOORD", 6 }, + { bgfx::Attrib::TexCoord7, "TEXCOORD", 7 }, + { bgfx::Attrib::TexCoord8, "TEXCOORD", 8 }, + { bgfx::Attrib::TexCoord9, "TEXCOORD", 9 }, + { bgfx::Attrib::TexCoord10, "TEXCOORD", 10 }, + { bgfx::Attrib::TexCoord11, "TEXCOORD", 11 }, + { bgfx::Attrib::TexCoord12, "TEXCOORD", 12 }, + { bgfx::Attrib::TexCoord13, "TEXCOORD", 13 }, + { bgfx::Attrib::TexCoord14, "TEXCOORD", 14 }, + { bgfx::Attrib::TexCoord15, "TEXCOORD", 15 }, + { bgfx::Attrib::Count, "", 0 }, }; + static_assert(BX_COUNTOF(s_remapInputSemantic) == bgfx::Attrib::Count + 1); const RemapInputSemantic& findInputSemantic(const char* _name, uint8_t _index) { diff --git a/tools/shaderc/shaderc_hlsl.cpp b/tools/shaderc/shaderc_hlsl.cpp index 38f4a9039..588b893c5 100644 --- a/tools/shaderc/shaderc_hlsl.cpp +++ b/tools/shaderc/shaderc_hlsl.cpp @@ -212,26 +212,35 @@ namespace bgfx { namespace hlsl static const RemapInputSemantic s_remapInputSemantic[bgfx::Attrib::Count + 1] = { - { bgfx::Attrib::Position, "POSITION", 0 }, - { bgfx::Attrib::Normal, "NORMAL", 0 }, - { bgfx::Attrib::Tangent, "TANGENT", 0 }, - { bgfx::Attrib::Bitangent, "BITANGENT", 0 }, - { bgfx::Attrib::Color0, "COLOR", 0 }, - { bgfx::Attrib::Color1, "COLOR", 1 }, - { bgfx::Attrib::Color2, "COLOR", 2 }, - { bgfx::Attrib::Color3, "COLOR", 3 }, - { bgfx::Attrib::Indices, "BLENDINDICES", 0 }, - { bgfx::Attrib::Weight, "BLENDWEIGHT", 0 }, - { bgfx::Attrib::TexCoord0, "TEXCOORD", 0 }, - { bgfx::Attrib::TexCoord1, "TEXCOORD", 1 }, - { bgfx::Attrib::TexCoord2, "TEXCOORD", 2 }, - { bgfx::Attrib::TexCoord3, "TEXCOORD", 3 }, - { bgfx::Attrib::TexCoord4, "TEXCOORD", 4 }, - { bgfx::Attrib::TexCoord5, "TEXCOORD", 5 }, - { bgfx::Attrib::TexCoord6, "TEXCOORD", 6 }, - { bgfx::Attrib::TexCoord7, "TEXCOORD", 7 }, - { bgfx::Attrib::Count, "", 0 }, + { bgfx::Attrib::Position, "POSITION", 0 }, + { bgfx::Attrib::Normal, "NORMAL", 0 }, + { bgfx::Attrib::Tangent, "TANGENT", 0 }, + { bgfx::Attrib::Bitangent, "BITANGENT", 0 }, + { bgfx::Attrib::Color0, "COLOR", 0 }, + { bgfx::Attrib::Color1, "COLOR", 1 }, + { bgfx::Attrib::Color2, "COLOR", 2 }, + { bgfx::Attrib::Color3, "COLOR", 3 }, + { bgfx::Attrib::Indices, "BLENDINDICES", 0 }, + { bgfx::Attrib::Weight, "BLENDWEIGHT", 0 }, + { bgfx::Attrib::TexCoord0, "TEXCOORD", 0 }, + { bgfx::Attrib::TexCoord1, "TEXCOORD", 1 }, + { bgfx::Attrib::TexCoord2, "TEXCOORD", 2 }, + { bgfx::Attrib::TexCoord3, "TEXCOORD", 3 }, + { bgfx::Attrib::TexCoord4, "TEXCOORD", 4 }, + { bgfx::Attrib::TexCoord5, "TEXCOORD", 5 }, + { bgfx::Attrib::TexCoord6, "TEXCOORD", 6 }, + { bgfx::Attrib::TexCoord7, "TEXCOORD", 7 }, + { bgfx::Attrib::TexCoord8, "TEXCOORD", 8 }, + { bgfx::Attrib::TexCoord9, "TEXCOORD", 9 }, + { bgfx::Attrib::TexCoord10, "TEXCOORD", 10 }, + { bgfx::Attrib::TexCoord11, "TEXCOORD", 11 }, + { bgfx::Attrib::TexCoord12, "TEXCOORD", 12 }, + { bgfx::Attrib::TexCoord13, "TEXCOORD", 13 }, + { bgfx::Attrib::TexCoord14, "TEXCOORD", 14 }, + { bgfx::Attrib::TexCoord15, "TEXCOORD", 15 }, + { bgfx::Attrib::Count, "", 0 }, }; + static_assert(BX_COUNTOF(s_remapInputSemantic) == bgfx::Attrib::Count + 1); const RemapInputSemantic& findInputSemantic(const char* _name, uint8_t _index) { diff --git a/tools/shaderc/shaderc_metal.cpp b/tools/shaderc/shaderc_metal.cpp index d3ae4ce19..5eb77f863 100644 --- a/tools/shaderc/shaderc_metal.cpp +++ b/tools/shaderc/shaderc_metal.cpp @@ -199,6 +199,14 @@ namespace bgfx { namespace metal "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", }; static_assert(bgfx::Attrib::Count == BX_COUNTOF(s_attribName) ); diff --git a/tools/shaderc/shaderc_spirv.cpp b/tools/shaderc/shaderc_spirv.cpp index 9b0dbdc6a..53b2fa674 100644 --- a/tools/shaderc/shaderc_spirv.cpp +++ b/tools/shaderc/shaderc_spirv.cpp @@ -302,6 +302,14 @@ namespace bgfx { namespace spirv "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", }; static_assert(bgfx::Attrib::Count == BX_COUNTOF(s_attribName) ); diff --git a/tools/shaderc/shaderc_wgsl.cpp b/tools/shaderc/shaderc_wgsl.cpp index b80ff9ce1..78f19e00a 100644 --- a/tools/shaderc/shaderc_wgsl.cpp +++ b/tools/shaderc/shaderc_wgsl.cpp @@ -292,6 +292,14 @@ namespace bgfx { namespace wgsl "a_texcoord5", "a_texcoord6", "a_texcoord7", + "a_texcoord8", + "a_texcoord9", + "a_texcoord10", + "a_texcoord11", + "a_texcoord12", + "a_texcoord13", + "a_texcoord14", + "a_texcoord15", }; static_assert(bgfx::Attrib::Count == BX_COUNTOF(s_attribName) );