From d797083adfff73071419ce70aa199c0aa6deb01b Mon Sep 17 00:00:00 2001 From: Peter Li Date: Wed, 16 Apr 2025 23:25:52 -0700 Subject: [PATCH] saving --- engine/rend/build.zig | 1 + engine/rend/shaders/meshes.vert.hlsl | 34 +++++++ engine/rend/shaders/meshes.vert.json | 94 ++++++++++++++++++ .../content/_shaders/dxil/meshes.vert.dxil | Bin 0 -> 5216 bytes projects/content/_shaders/msl/meshes.vert.msl | 41 ++++++++ projects/content/_shaders/spv/meshes.vert.spv | Bin 0 -> 1492 bytes 6 files changed, 170 insertions(+) create mode 100644 engine/rend/shaders/meshes.vert.hlsl create mode 100644 engine/rend/shaders/meshes.vert.json create mode 100644 projects/content/_shaders/dxil/meshes.vert.dxil create mode 100644 projects/content/_shaders/msl/meshes.vert.msl create mode 100644 projects/content/_shaders/spv/meshes.vert.spv diff --git a/engine/rend/build.zig b/engine/rend/build.zig index e4aedbd..a140fdb 100644 --- a/engine/rend/build.zig +++ b/engine/rend/build.zig @@ -32,6 +32,7 @@ pub fn build(b: *std.Build) void { } sdl3.shaderDefintion(b, mod, "../../lib/sdl3", optimize, "sample.vert", b.path("shaders/sample.vert.json")); + sdl3.shaderDefintion(b, mod, "../../lib/sdl3", optimize, "meshes.vert", b.path("shaders/meshes.vert.json")); // ========== tests ========== const tests = b.addTest(.{ diff --git a/engine/rend/shaders/meshes.vert.hlsl b/engine/rend/shaders/meshes.vert.hlsl new file mode 100644 index 0000000..d0c8af0 --- /dev/null +++ b/engine/rend/shaders/meshes.vert.hlsl @@ -0,0 +1,34 @@ +struct Input +{ + float3 Position : TEXCOORD0; + float2 TexCoord : TEXCOORD1; + uint InstanceIndex : SV_InstanceID; +}; + +struct Output +{ + float2 TexCoord : TEXCOORD0; + float4 Position : SV_Position; +}; + +struct Scene +{ + float4x4 Model; +}; + +StructuredBuffer scene: register(t0, space0); + +cbuffer Uniforms : register(b0, space1) +{ + float4x4 ViewProjection; + float time; +}; + +Output main(Input input) +{ + Output output; + output.TexCoord = input.TexCoord; + + output.Position = mul(ViewProjection, mul(float4(input.Position, 1.0), scene[input.InstanceIndex].Model)); + return output; +} diff --git a/engine/rend/shaders/meshes.vert.json b/engine/rend/shaders/meshes.vert.json new file mode 100644 index 0000000..bd492c3 --- /dev/null +++ b/engine/rend/shaders/meshes.vert.json @@ -0,0 +1,94 @@ +{ + "entryPoints" : [ + { + "name" : "main", + "mode" : "vert" + } + ], + "types" : { + "_8" : { + "name" : "Scene", + "members" : [ + { + "name" : "Model", + "type" : "mat4", + "offset" : 0, + "matrix_stride" : 16, + "row_major" : true + } + ] + }, + "_7" : { + "name" : "type.StructuredBuffer.Scene", + "members" : [ + { + "name" : "_m0", + "type" : "_8", + "array" : [ + 0 + ], + "array_size_is_literal" : [ + true + ], + "offset" : 0, + "array_stride" : 64 + } + ] + }, + "_10" : { + "name" : "type.Uniforms", + "members" : [ + { + "name" : "ViewProjection", + "type" : "mat4", + "offset" : 0, + "matrix_stride" : 16, + "row_major" : true + }, + { + "name" : "time", + "type" : "float", + "offset" : 64 + } + ] + } + }, + "inputs" : [ + { + "type" : "vec3", + "name" : "in.var.TEXCOORD0", + "location" : 0 + }, + { + "type" : "vec2", + "name" : "in.var.TEXCOORD1", + "location" : 1 + } + ], + "outputs" : [ + { + "type" : "vec2", + "name" : "out.var.TEXCOORD0", + "location" : 0 + } + ], + "ssbos" : [ + { + "type" : "_7", + "name" : "scene", + "readonly" : true, + "block_size" : 0, + "set" : 0, + "binding" : 0 + } + ], + "ubos" : [ + { + "type" : "_10", + "name" : "type.Uniforms", + "block_size" : 68, + "set" : 1, + "binding" : 0 + } + ] +} \ No newline at end of file diff --git a/projects/content/_shaders/dxil/meshes.vert.dxil b/projects/content/_shaders/dxil/meshes.vert.dxil new file mode 100644 index 0000000000000000000000000000000000000000..10816836b3a0bf3f04c15f9fd653ea9bae32033e GIT binary patch literal 5216 zcmeHLeN-FQm7kG@nGr~0K(Zr{AR|5$?2u%@wrmHS&PbSmfi(n&4~J|d41^>I3vh^S zx~aZE!d0`f1F?)_9|`Q3v`H&^d~C?tSqaGwCb$I$+t?5vh%t3r(j{rvAKP?y-w26y zyMOH;`$tdv4sYIl_x|3!cjnzUzd<<_D)mn;rd5_CTzsSN^KVMOYp?h%3_*}a3_%ze zvq3KeeUg=dp@9QIV>}4D3wmj8K7|8)xaF5VpJ4zKF6d!>eb^Y%vr~+99BQncjmI{2 z9V>HLA=H{eBkPZ~f$$Ikt1Cv?Ol2a1^zqkYbN=KzwCiJhG-85hb6n zfXi)*+aZoEwA-UBfkMLO!)YEASqClPUd=nunu|1%!#GO#CemgiPe>q!xImAV`0s3= zQs+H)w&cRL!nd2IZITYH>#O5)-#)P@Px&6wqm>tri%oKw>G%u$0L2$yjzKQy!Fok+ zWBk)U7*14uTdvyKdFlB^=_-UFa@M2|%kfW8j_}gUR1U2g8D=!ZS>c~ckU|q4#pTCb-E(&%c`8JJS0aEk(48fzsS~Mdf z7-nmVZC;0!!_fpq2r|fj8G(316R45|(rVB%6P=Q{m_mo0r+EG%qE6bTL0pp2UV?kT zMU1*++j=4HXdg9N?4tYAI%5o(X{Hy_j4IcMXj(e)Z5?#?C`{@hVJ2Q%a*gjFsPe z@y>g7_Y~Ka8yV6mz`von89Ck#`X;@}ixd*s)NI&(zqY%q6-&MUL76i5@Vx~kL-z1E za}5$|v457$#u zg97z@yRXC8AJBl4Dm4hWC1|ZjPMHOM8hw>wAa2GKaRTl<<5|BkDg25OS-$Ea#Zw&y zCn>&xGSkX*M0(mNJ!h2i_4FVkYrs2rDz}bUuk&Ym80nx-Ht3@f56;lhN`A8jYx8L3Q!c^Gtl+N3#T^#> z#_)O9)yF2MtKwh2d2||a-&Np&)66)n^=Cd{q+Xx&JKqwBVi`u=(K%Yb7wdxxiQ(C4 zk~rycljaR%#HhI5IdHyx;&KszAK2P6E&Fl?G4|JwojmqW0|zIZ1zCUW=}T6Xcig{l zZ*?wssOhWUe64X$i&U~BFXF|Dh%$O7+|*ufXfN*{zF2pC;ZSbbLhi;?{Kt;Dp{edm zmrtG_D&pA`HG7|K)i$)&HkX=ug>lC}m+h2P9;y05S{XOp1+7tc{3@wjdB5z5jb+M> zsm`?r=Z41b__`y8hR#p4PXHH}i(&$^{NJ!XPj-KqdawwnyNh^NT) zq+iZ-dBvXqkp2ACp$QPYh^GPXTeenNo?nL>WPv$ZofzI?Q*W~P?J5JdZ!gy3Y~n9K z(O(n7KNy7T_^QNVU&1fkvN|dv2s2B^xLZclTkPB|V|(p;^jI5??aQ<3_1Jzrw{@>o zPg>)~VuXth;T#p+NJZaX5-t@B*Aan)TXNZyJYiUySVwhcoik^Rt2dwKW}h=>Tew+c zOX60roAubndTTSd8mxMURj&h`0rlf zBE_v9am(i2va#TGMk^bY%L2xPQ7wASq24^A-s}us2mPD6)SGPFtSH+5igQM}C-Di5=d(URN!*Z=25I)Pj?*o#4lzS_HKFq!E0^8rY z_ivbcm&=E}{=ai?EC>R)SNxaUOCE5iM`pPAqi%fEeBh7-PBSN^wa2C*kx`aU;~>sw zJ7W<*wa*!72zubs1;5SM_t)#d-~XL!og^`eYN@m-@N&1+`VA=oM0*;Vm^E%p`F?&WX7}J!R1!_r`FTNq@F++0EFg5ZQBnAiBdXba15Bw)BVJ?=s3S=XW~QhM~|qXqGmN2FhN zk^QQUUsabYHnN`xsbmjJDeVI{x-S*+?9T$0YN^-O)HWCGuBmM(HJ#wc9sgm~jhUB@ z%~af&>C*fd5LNZzvev^n%B_#(mMc^HSxV{}nz(d_Ie&5pa42u_?|k#u&No^T{9gvX z8$<|`&VFlyp97$rF-Tl4?^509t}=>?jjOiFSMBtPclcK2&WX$BCe{OLfs#=kWYW+d z`)<48cqB9%fG1Bf@%Zx05P&zJuS4iH8^bY>5=l$(fG^(S+feO*NE}5IDs)~nQMo+J zO{mh1qq`hGlB7Vm$*9Gg(m_~KzwAge!`wr6Q|L=^jrwF12VwP>8EFc$v4?;*)MQl~ zSbv8Tys*gNt5-o?17F)XCH^ziKW1L-q&>3}}knT@R;tnRB z)orN`>pD4)YhWp>%dZLRx`!Wc@C9`*uB>&N()Jo)CDIp6~KMWe9+6wkvR7{V-`)5Pq8v2HTyzc0zbg6ASK; z>LHOno|)>Q`N=2->SgJiCEMc91KZ@SHxYIPf4H8LVVB52t@+fV`x@ce4Dhu2cq*!g z!uxmuO{ruho%f;6&!Teq1cdm=E1iytGn&xTI7W1GqsG>9AKE1(aKucCQskWswOoz| zw|7~7AF*6u#GfqrX;qra_!XZXx^t8tzQsUNYHtP}iVz>wUGF8Sp9<#JEjucy^dKLg zzU3;)shfzMj02~QJp{zD_5!+wurD8(-qlYrt83h%ht%?kI_ literal 0 HcmV?d00001 diff --git a/projects/content/_shaders/msl/meshes.vert.msl b/projects/content/_shaders/msl/meshes.vert.msl new file mode 100644 index 0000000..b96b908 --- /dev/null +++ b/projects/content/_shaders/msl/meshes.vert.msl @@ -0,0 +1,41 @@ +#include +#include + +using namespace metal; + +struct Scene +{ + float4x4 Model; +}; + +struct type_StructuredBuffer_Scene +{ + Scene _m0[1]; +}; + +struct type_Uniforms +{ + float4x4 ViewProjection; + float time; +}; + +struct main0_out +{ + float2 out_var_TEXCOORD0 [[user(locn0)]]; + float4 gl_Position [[position]]; +}; + +struct main0_in +{ + float3 in_var_TEXCOORD0 [[attribute(0)]]; + float2 in_var_TEXCOORD1 [[attribute(1)]]; +}; + +vertex main0_out main0(main0_in in [[stage_in]], constant type_Uniforms& Uniforms [[buffer(0)]], const device type_StructuredBuffer_Scene& scene [[buffer(1)]], uint gl_InstanceIndex [[instance_id]]) +{ + main0_out out = {}; + out.out_var_TEXCOORD0 = in.in_var_TEXCOORD1; + out.gl_Position = Uniforms.ViewProjection * (float4(in.in_var_TEXCOORD0, 1.0) * scene._m0[gl_InstanceIndex].Model); + return out; +} + diff --git a/projects/content/_shaders/spv/meshes.vert.spv b/projects/content/_shaders/spv/meshes.vert.spv new file mode 100644 index 0000000000000000000000000000000000000000..c0f97140f8241683c0e1c65af4abc3ecc2fea63b GIT binary patch literal 1492 zcmZXUNpBND5QQuD*d{Dl2w7NS?3mp!f(t@IK*FNrf)WTsxkgS~8iYM)G6r$uC&0hu zg2elJrsEN`RIYxn_L`RKwO-3?#?0m{)-Pw#Y9&+m80);9J-v^Pk};qr!6TA1Bu$U& z{(dN9!)8s%E&u+-#rt_S8RV199lx9mhc1iv2X5@-6WJO06o?!Rk44$r^w@ot#%EUg z#7BUez8jzS<2V_n+2};}rm7WPnjIwW+g_G_a)Ufc)h&6kF-x9|oRpY`os+Jl5YzH= zCFA((Q5JuAbNFg^_x`;YBWu(5-5lK&S-|I`h8+ZJYL)b2~b><-KUv)i^u z1!m7+@?fV{)y{r4BpmGEu15tXH}((@4)z^o;~Q{#g|aHgH(ZeHC~xqif9jlS$R)rUJgQM1(elJSHf!m5@2XO1UGd~!fe!(4iE=ki1Tw9plh$-qu zc1d^a@YGx`ZR~~k6=`~h$G$2}EHT*GC3bk`z3h4YcpcdlY3v0b*;U=ijX&|%O3YkK z%DOJyl?QK%J3iN?sYl;Wg_((W1qWsZ-ci8x%$>T}>5-ZN(-S)kn4WmY_~1`Z#eay| zV_E0}Uk-i!R`!ncGx@TYu7rAE=Gu^u3(VX-3H7#=i&<_+=$ChZ4|Cm=z`v6Z`@JP0 zFDG!fb%&d&aCb_M`g{7y?D4LIc>J;RrnY3G_B{!^qc(k2d*};e|D_(tb6)~SzMm!c XpycWIxu#@q%*&mfVgI8JpGf`!OJP