From cd0dc9f99a22c012d4dc7a33f8f3a07fffc9baf1 Mon Sep 17 00:00:00 2001 From: matthew Date: Sun, 20 Jul 2025 18:15:56 +1000 Subject: [PATCH] yoda spins, fix crash on suboptimal swapchain --- assets/shaders/gradient.comp.spv | Bin 3408 -> 3512 bytes assets/shaders/gui.frag.spv | Bin 2180 -> 2284 bytes assets/shaders/gui.vert.spv | Bin 4652 -> 4756 bytes assets/shaders/pbr.frag.spv | Bin 2088 -> 2192 bytes assets/shaders/pbr.vert.spv | Bin 3756 -> 3916 bytes assets/shaders/triangle.frag.spv | Bin 2144 -> 2248 bytes assets/shaders/triangle.vert.spv | Bin 3036 -> 3140 bytes src/gears/main.d | 4 +++- src/gears/renderer.d | 13 +++++++++++-- src/gears/vulkan.d | 2 +- src/shaders/pbr.vert.glsl | 2 +- src/shaders/structures.layout | 1 + src/shared/aliases.d | 1 + src/shared/util.d | 27 +++++++++++++++++++++++++++ 14 files changed, 45 insertions(+), 5 deletions(-) diff --git a/assets/shaders/gradient.comp.spv b/assets/shaders/gradient.comp.spv index d29c57bce65a2731355f86dc3424f9cca2affc7f..093c46cd5c0019f4816a242fc0e85ae0020d963c 100644 GIT binary patch delta 1202 zcmYk4!A=uV6ozkSIxUJMl7^rV5p3KjM%kGt39KM7nkXVFVtY$(+cDFYOiRQCVeQgP zd;nLj2^%-QgTyEB5qJatZ#n~<@qQo)Ry3G?aO#P-x1 zW6V4G2YFrIl(&x$#|tlCYqu8l8#dbPg{^+v9T-zGWdo0W?#EHH*0sYpJOGzWF^v_p zkKMoo#y6b4CJz+dN`4onm$!tly~ysmPCsh8I8{=^h8!ieY}oEzZ~DrVCu=F zS6Q}-KDR>`hc?ny`oO?pw%Z6@Z+Om8OEYY>_6JT}$=Jkt(*>J+@n&z4Q@qHj4c)H~7F$OoOU7xvshElDe*Yk5sM=Mw8zrko;}`cw-gqbu#? ztN(0?K6>)?tZ%4-6bI)$E(>4Jx#UN&vPu@Os>)a7Ys#j}3vw*ScScayH}rgTQ=lpQ z^DAAtO$H~C0lvs6rV}9UXK^NSIbIjOd?T3n=sZ82M}DKF?sRHIsXKp>)gBexynH>I zB)7sn%DLn$JAwWXd7MYImNM??C62zKTgka(HK?p|AJZeUF6ZS;Zb6Ran3qr&y<>jt zsm+~y4}KPoZYb@Qs6{zH(6qk%x)nLnIbp_x27X?6Q!6p}CmCjJBmHPZZLo$X}P-eQD{fbtI4Wq#o);T*X7upxu$>r?%2bl zhLDx#S-aX(06bY>dIvX`_35hi+|bfWpXnW1a69Af3#04E`41K~zj3W$#=+~(lfPq! F#s3O;h(Q1V delta 1113 zcmZ9KOKTHh6o$XKrKxE^2pVj$wsuuiq~JoSE<_;(X;IU7Yi(!J%-BFKl1#x(2>t*U zW!5gmb?L@GA^103xbPqNK9d<8{NT*_&U@Z-zH^yxOFtH?j=eT#N|vdZs_C9q_b#=J zF|Qw^jd>%G#vHE#*~a}z&WFEY&_!_GBhNfyf37i$3Z6? z6=Q@azpeT`-XR($?=^$|`(8NO2?OPd!M(JG-S9(vLi&{J89#Yw*VcVZouJ?DhJ#o+ z=2PrlpN^!=57s}A>D&YHf@ zoccO**bd@w)D3zRLTw%CN5jE54hAt86?BqQr)EXT7w5^8-fYR1aPFM7nbL&ZbW*GT z+1LNtPCC6jo=I|w@yw5SIwl|Xzj${i9V!GGhro~vgmk#Y0$4cySwhG7y5|M>$*MaW zI$p}SD4{i98Wz}!B*l^qulB%~qSI!|oQaQik2nvE-vyYx%Oundfotk)F@6 zEonMCk}h_FO()dVQ2(qd@1%47)B9>o>k4}=xR$w=MPo}~EAs7TIM`-p^KX*|E*l{h z?#m1ZgNw~J;4bR>S{mLPX^!m6DG`9JaIUDU{p540o;)otY`hh+FPTl%H3v|1znQUTyLIl&QIJwkY0Re diff --git a/assets/shaders/gui.frag.spv b/assets/shaders/gui.frag.spv index 8a577ba5f31212d565d18801d4d4b6292f414b49..01ddf0dfa70d46b8f545929b75166ab9b7646706 100644 GIT binary patch literal 2284 zcmZvcS#Q%o6osdCk^*IE+1KK-Z$dl(LShjTpcJVrQbFR)nkG(b$+3g&u>41U5HCoa zZ^qMFh>31y?zv~~+_`g-Xz}Wj87!D(bHv;;eyo~Bv!La&8Mt}4xwUz}ZpQZ?K6(J- zsEHgA&M~uMdYZAR%?bhsWy`Wv*-6C%NNk+3-Qa3;IG|96fO~zT3j+*RS zx|gTrWyL6;kGq7vGIeY3>(10)&YNUX*_~um=5kG6AMTVDAZ6vTf$ne2FfX@l{@K@9 z8)aB>IGpcgm5-CDZK~`C{y?X(hu&3bt*nvj(@;KVAJ@FKYsYET&F682%q+K~bhpe! zaC_=51y1L6p-?!{^mZ#PG)at~>b7SG3(jU#7A~e{)uKAs9(kip= z&Vv>sZl~K>S~RNA^QeEEO(yd?6*h2tdAoX+j^?>_{h<%!L@hSoPRC`^_#=Ifh|&8t z_g-+IwwQLuqp6U)OW=jce?YdEze^Av?t~WV-K>zTY8pkK z&~WHez^)5>RTgz)iw2B7fid*@Nj7G0F72>uoC%8#5*{keU& zCKPhQN0;m;Z}9i`_ncOVlY=-lZowXQF!~Pmq=TVRuxA~N_W*m@!O$Yu>kh`-gKfyTBf1NB z2|jnGX5Iw7v8KkLJ@zx;-`0$FxHo+CcGRtVZcU8+C-lv{E>6^9r?uiPvFwa;aR+?* z5bK-z;etPHed-4zen>OthB!W220N?xkv2v?@>3W2sbft(T80BoKHiKNIOpM`Syy z=5<-fkA~<2IQj9>BG{T<7_Ir5d*+7LygL|N{F^OCt+%x19=s!Qd~^v${7$1%#2l=~f)p{o~)QV0GY?S3Nr3y2BLDgXcg literal 2180 zcmZvcTW`}q5QVpO5-z2*r9h!TaVd8s!~>v8T!hr3fK(__i^Q9?O&n^;v4ib!`H%b{ zUXVE7+MD`;i6*;q=CZT1Ckf`aPMO}ESul&{k*Q_H%$qrF7fjEs{k?;|$7MBq{Pfuq zBF>w@1roDlmQ6=1I<`rM1i`-MvK%aT7zg4(n zPMiK-^!CePl;znpOGbGyj=oK8nv9aTkpC?H{{DV{?`<@gOro;-mBvw;WN|c1ig-{Z z-{V=GCN9Ya>2%l*=&Dk?_pa_t|M|3vMuq(v4f0f`>FUFsk_;p-YOJSO7}HPlBb$D% zdn}DAbR14h5tqsg+${RCslTH2;Mfl1qMcLY!DB0WOyr9!TkdS?(70$NRDU zs_VIW%=W;JCuv-KjIBR9G|82_xMG~r^qCe-@DR&kM7cdwo*fFX8#l*C!34r`3} z9VVmEw2X!ITpaIHPU68dwQdGIy<8{^M%eTy9_CS1AIThQAMJa${yPM(#O z%_=bF1cr=l6(vJ*1IO=AJM24-=i8um`*31qZ-+VsYL)!VPvdN#5QV;tizvDQEpBnh#VA~J>@CS__yX}XE z_!084@z>`CCe)tV+>brt`|}vFVBFPX^G%|x4APt_cbYa!=4`5Bjg~&^Zy73xHs|e#{JjG#~vT~ ztNLc$R7}udm$l$30+yR?8g!-m`V!>ZDHvNO)KdY5Cc#EA=>cLs|3% zM($FBgHaosH}kRZukNj5E;Kk8vDk2r*sJ2eH(^hM&l~qSmw$ zcf}#}U&mp?Q-rhDwf^rcfA%HSxTcs;iacuU>)I1@UG@#F)B)p6{~HFUH*C0%Y?yPd z7Blur{r@R_QGZiw==OE}TiP=RaOz{jAu!$rUe!H!%pL7{V=!W|?=~2{-qU_g$~)r6 vhJ#@EA2fUF;m3xD_@9fzoC&`Wc=SgIzp+6vrpId05+s5K63KwT(rJ6fL+Aq|&0$x~N*B8%5-n+|o!MZIashOdm#D zHEO)|Be>IrbnQoQ;o6leSK=2?@c+BLqro9(X8!;4m^0_h&HH29Ln$YkO`1f+beojf zZl@}Ji^iCBNmH^Zc_Dc%@jt%(8i`c=#b|FXX)0nE%av*|f2-uytA!PC!o&hyMEj~& zGjZb>B2G%;(ynUF&AWN8daYcTt5i!he8l^oqL~!u<^s#OY5L!y=@Bx>xuu1oSH0x9 zidZL3Jjm**w^Co?kkF&$4>;-J7Er@2%@(|JU9sZ^j*Rk!xw)m97o6DgZ#tR7XdJAI zvtGV(tG*kOoRX&Hx1B?gmjA&yqWN<${|M$(EGuR-mKmlp({A0X7Th9S?DP!{@_kMPieqh)~ta6 z1O~eYIzgWZ&JArJZGx7=7S2|u<*y~uW44cIPIW|xh1RD#IBJdE8O!-!66pdFs5+W) zi9K&m$X)2*x5(Vd0vFQS9@nVdBSNNkXu>wbqPuKYvy6Vk;YNs z1+BQjpA9ihhC^Qs_X(~2VT0MDTMKooTJZ(1hg_fOikc07raR;R+S_ySv1rDI1XD1r zWgOIDPqY&9X~38OV+W?i423jXikKaJCbT6vF2U=$Rt7v?VEWGJH$D2w-gTdxc_~B( ztk)~;xh6bbV5$tqRjDYQ;e3l!b*+d=) v69C>O@=$wt61k!W!n1iKAwhI0iB0l`_6^Cry2sC)Q^6o`_-!J3_!095W*@N( delta 1410 zcmYk5&rVZO5XMh?Z(B)QliHXDOaMV+h#_j?LZcXoB*211qHf%f8@NbKX-oeI{;dcI zDkyOE0od!p@B}Q~>DmV{u6zO$zu)Ct?2zxCnQvy!%$cDd&wf6Wb>jUglZ=_P$(mp% zTj{JCW0r+gVO@A9d=PfOe)<`Um4k)&$sX5~#UM4mZW6{ZWQ__5lQga1AYQoI!Y!$m zylH=~QkwB=VI+6o5fb{N#z@Uu9G~|d_#u}x>p{*b3{ds1ztm__AoL{6rp^hk;n#{@ z2`;G{HiJngKZqwL%oJy5n{{8FWEdS6SFifh&5~D>DmJBz9p_YRGx!pIzd1e9e}~@= z7k$9(*LT7#4Dsry9!=2kw$59Xa=qb|8*uahhs=A8sp1TAj@b?N++QuGL=R))qKWkr zDj79yIJMJ<=8@fZWIKi#M)}b^+w++v`MjO`u>a?~t#H5ua0vknye%MHFn-7SS$Mmj zHQ-0c$HpHEZRcpnJdhH!p4|~;eUCLgQ&i$_~ zhfN$d+eEm3BbZ1Rg74|fr8itq}yb)!ffWkwc7fheX^}dikC-AZx8VWWsf3@Z-!avbPqPGA5 diff --git a/assets/shaders/pbr.frag.spv b/assets/shaders/pbr.frag.spv index 3b228d4012627e2f145c70d4c161638813b4413d..24f071512c01290a992e1c19e71de2749de1bc4e 100644 GIT binary patch literal 2192 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 aPCI3qYv z^BgW3maa^E3}3=G@cZ4)2=O%M-ur#$&pr2?>F?UFsfy>$mrdZ9tEOUJf2-_FFB)T> zNS{fY(ihT~($47YqqFr$r&iK`7be@ic)y<>42%g(*}x;m{WR(B9)!a*J^=@&WNnVl zX*4jt@eDV#q`s_6*_>NjToOVKlW;Hk&`-KiYCWmrjnvnVde+nMxP1`5k1Q9MX7UH&abF-rqkOM6v|d+Z8uBjP{O_Fx63P zSrLES8K;$1Jk|y8j@GtaW4nIw=EZ#XY7N_={631H;!W*q{oY_0_J(lO0EehUyKxsk z&vY`U^!bzyQo}~xF}!?>{eRsp3t#__n-@klJ*uC5izHDcFb7oJggbN^W7+>g#D>^ft ztDt=$JFhM#O3_7kiWs=r!Y>>7)drT56w8CcqMcsDJ-);RIY$fZO_>u^x5;oNx2zWy z?Grh-p`CZ|P4IA}z`V<~*t6dPXEJY|$H5QxbV^|lMctNCWL+ymg)2*Eg(;9Q_~jfk zWVm`hPzuL)Ip>)xzF;1M@3abTXvf!)O0usLH`-6fXKNz{%uJD+id@l7?o|lMiWEO^ zQ;Lv#Ejyd2HS)~nmONZgk$jCR~eot*0anbql{qKJ-&t3fU;;&l8wwfhz3$iE`+4@|0UcWCQ z%c>7md#W3%Bh~S@_iqY!?&{khobGtxb`-pt#*>+dD@6fEVt*!%*g}?ps-xa^+OcZw zHg1)J(A)L*r{SI-8z!}$syh0k=6dYC9ZkH~zQJ7SrJt-?hc2G^?~+3b7>^@;J-58X zj{`3Rb2S4P;!Sn}KT1xq^u(&x@mQ*}1Aq50^kP`9l%$_l?4?3KZJFnWeMR4W^Za0* zU+kudEfc#RL_y@wXn}r5>4{x!ZK}04jb@1#C3xrq44HVz%U}<-E#vfZ@#7JbqK~0s z`P7}4GyJt3PJ|FkQ38CPPGG_vUqOh9zBa0c6$zUGK_hd zQfbev24pB@o^I~Z^IV3l&tYtoN<&pH!oPg}V%S`a%M7$HcA8&o^Z1AR-Fnebm?cv3 zs;0P?QNWfnn+6Gk%feh$xDPTM3@$dyf?Joetfaro%~3}!WJMJgHXB1ODff|{Wa|Q` zV8iR`*;7Txwwi7)G;gh`wW``sC5mw%;6!1wPoyE|_2c-uaN`LdGK0;d7#LlG6NSyN Zz_=xYV&GJGtS5s8gNr>rZY?eq{sIyha4Y}- diff --git a/src/gears/main.d b/src/gears/main.d index 0c59ddd..359e581 100644 --- a/src/gears/main.d +++ b/src/gears/main.d @@ -12,7 +12,7 @@ void main() p.Window window = p.CreateWindow("Video Game", 1920, 1080); r.Renderer rd = r.Init(&window); - scope(exit) r.Destroy(&rd); + //scope(exit) r.Destroy(&rd); while (true) { @@ -21,5 +21,7 @@ void main() r.Cycle(&rd); } + + writefln("exiting"); } diff --git a/src/gears/renderer.d b/src/gears/renderer.d index 667738c..7229672 100644 --- a/src/gears/renderer.d +++ b/src/gears/renderer.d @@ -115,6 +115,7 @@ struct Camera struct GlobalUniforms { + Mat4 world_matrix; Vec2 res; } @@ -236,13 +237,21 @@ Cycle(Renderer* rd) { rd.ui_count = 0; + f32 radius = 10.0; + f32 cam_x = sin(RDTSC()) * radius * 0.000000000001; + f32 cam_z = cos(RDTSC()) * radius * 0.000000000001; + + Logf("cam_x %s cam_z %s", cam_x, cam_z); + + rd.globals.world_matrix = Mat4.lookAt(Vec3(cam_x, 0.0, cam_z), Vec3(0.0, 0.0, 0.0), Vec3(0.0, 1.0, 0.0)); + BeginFrame(rd); Bind(rd, &rd.compute_pipeline); SetUniform(rd, &rd.globals); - DrawRect(rd, 150.0, 300.0, 500.0, 700.0, Vec4(0.0, 0.0, 1.0, 1.0)); + //DrawRect(rd, 150.0, 300.0, 500.0, 700.0, Vec4(0.0, 0.0, 1.0, 1.0)); PrepComputeDrawImage(rd); @@ -258,7 +267,7 @@ Cycle(Renderer* rd) Bind(rd, &rd.triangle_pipeline); - Draw(rd, 3, 1); + //Draw(rd, 3, 1); Bind(rd, &rd.pbr_pipeline); diff --git a/src/gears/vulkan.d b/src/gears/vulkan.d index 8b97560..80d6777 100644 --- a/src/gears/vulkan.d +++ b/src/gears/vulkan.d @@ -492,7 +492,7 @@ BeginFrame(Vulkan* vk) { RecreateSwapchain(vk); } - else + else if (result != VK_SUBOPTIMAL_KHR) { VkCheckA("BeginFrame failure: vkAcquireNextImageKHR error", result); } diff --git a/src/shaders/pbr.vert.glsl b/src/shaders/pbr.vert.glsl index 3d3da30..8082239 100644 --- a/src/shaders/pbr.vert.glsl +++ b/src/shaders/pbr.vert.glsl @@ -22,7 +22,7 @@ mat4 y_matrix = mat4( void main() { - gl_Position = in_pos * y_matrix; + gl_Position = in_pos * y_matrix * G.world_matrix; if (Materials[nonuniformEXT(PC.mat_id)].albedo_has_texture) { diff --git a/src/shaders/structures.layout b/src/shaders/structures.layout index 53f68cb..1a7d626 100644 --- a/src/shaders/structures.layout +++ b/src/shaders/structures.layout @@ -3,6 +3,7 @@ // **************************************************************************** layout (set = 0, binding = 0) uniform GlobalUniforms { + mat4 world_matrix; vec2 res; } G; diff --git a/src/shared/aliases.d b/src/shared/aliases.d index 1e89946..9edb8db 100644 --- a/src/shared/aliases.d +++ b/src/shared/aliases.d @@ -1,6 +1,7 @@ import core.memory; import std.stdint; import dplug.math; +import std.math.trigonometry; debug { diff --git a/src/shared/util.d b/src/shared/util.d index 95ee887..30903bc 100644 --- a/src/shared/util.d +++ b/src/shared/util.d @@ -359,3 +359,30 @@ Hash(string str) return xxh3_64bits_withSeed(str.ptr, str.length, HASH_SEED); } +u64 +RDTSC() +{ + union u64_split + { + u64 full; + struct + { + u32 upper; + u32 lower; + }; + }; + + u64_split val; + u64_split* valp = &val; + asm + { + cpuid; + rdtsc; + mov R8, valp; + mov valp.upper.offsetof[R8], EDX; + mov valp.lower.offsetof[R8], EAX; + } + + return val.full; +} +