From 709c2f056906332ad055e9a2543e55b6405f2740 Mon Sep 17 00:00:00 2001
From: zomseffen <steffen@tom.bi>
Date: Tue, 4 Feb 2025 10:47:55 +0100
Subject: [PATCH] reordering of diffuse calls for usage of cycle
 counting/limiting

---
 shaders/compiled/frag_rt_quad.spv | Bin 35760 -> 36496 bytes
 shaders/rt_quad.frag              |  13 +++++++++----
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/shaders/compiled/frag_rt_quad.spv b/shaders/compiled/frag_rt_quad.spv
index 2c447ea3efa6d8e55313f6618b2a6979a15f5362..e1015268fbc4f88176fbdddd7c9e90d5e680638d 100644
GIT binary patch
delta 3358
zcmZ9OTWnNS6oz*@ovG2(G->OQ6fFfSR-?qn#@J|I%A<`j>O*NtJJ2faG}BgsR!<SB
zcth$DQ3UY{YE`JUDhdi-xTuJN3L;jmC?<wyFHip8nX@Km&T01S|6kXA)?VwRyEc_>
z*jieVC|ywQT#38DRk%OLD{d*7oy=^kN~GM7-&URWE32<wm~x{@=LWKa9lia_di#5a
zRyjRMmvCz&9|~}}8}s*8*Vc?l!qb=S&aBX$(%+bWt~%X_rc{zUdowGsNGSrcgz!Kv
zdwX7n^;I=#4-KJ)2QwYZGugh5!Jf|UOfJZ}PKx2BS>ZDGnD9VnuCq_J@bMUbBE~ny
z_>(cdDbKw^z^5h14s>?$)=5|HUJ&ofuE^#(1~Zxdj-j4hc6fPDKKYBWVB2H-)fj)h
zh^O3J;`!Kh-MzU?7o`o}YO2Vv%uV~}YU;e*Mbf0(Q*a*~&etR54isd?5f2vmmbt?*
z{zZ%*iSd(3*IZQiQ!#_nF+NkolWx|(_@aY-Yb8zTB`dWS>-xBM9=65$HNGH_7R%JO
zMSdkQKRABZYX!0VwsciH5oyC{1~`_ZT9y@AJOiy7^@HQLPb;5cf4b^sGL(fH4OSr{
zo>*5()~dF*leEg3mYy#ikMa6E4fyO-;~YQbttN&W_2$Use&K7xNHtf#R?6ezm$>tS
z@YqDxT<NfzC;JDq^O79n+K_V$Wau9XF+Nv{*K)%35;}LN1%qFOsQ`x{0DRVOuiH^l
z?kDFh@~GY_$=K01XdjL6Ey~0P#PsZpv++yC8RsZxoQ*d~&o~=rXPiUs1%P=r0~{D<
z<0N35jk7bt#xE4#9^u$C!lq|ugpH$Tg!4RI763-q3<x;wH`V7y*QB^Hx>0^0!jUts
zrY8#HY8-#Y)i^uj8s!?-0+;`M$GDmS0T@@~>@!oh)u&56X7etomS{EWwz*GulZ?^b
zEnKC2So=yX^w<q)M|Yj>9lH@>WD}a7%f#;yM%JQP_*?d#FwcLoM|ZE*iKO$~Kk7%w
zh!pBTcb_m*KoXh>P7=EGLE$#78<d3ZeOQZ*KBg`;n@2+V8rk6Us5pMe?XVk!Z_;XZ
zULxp71Qzsh;doGAGUObJj)jBiRuX{eRHg?^m-6Od8uTw6q{*G{7HWS=e35o0Vf=Fa
z5CmtOFvf|o!H`37TbupKhAQtFNj7T@gtgitjBK5(sNGg!WVdSYh{7x&Bg%+m&k7T{
zG^`gFwM`s3m-M`L9xe&_b6THiaYw>l;W#fzNT8!(AUfb>apWXs$lxTVn|BCff1@y$
zP@(-5apc%DgmCO>*4KowzazBgA}5kwUV#HsIuSZhpEp8>D<TJaQ!?b(GsW;GeK!fV
zQ@BMt2PHZ2u(2-MCA>^)tqz3!r0`C97zF|OtRS?OdRsW(QVBOD47WFZN4Q-JziI7o
zOZ1*FEsgG7?Qo0vzVMPzw_Cf1z~0~kVcvjb1jQL60`ZMPPayhYuQ0t}Nk0_EW_|c}
z9|<GF&V2R><HH;gV?X!5O-+Qt0(~q@B`nY<!pLOoR)@hq6(#{X4!1`;vVYZ7G#t%E
zlM$0XIwWkB<f{lrSE2mwa}g`$VPUu(=1XBKC7(;U1^r6cN_j*WZk0SLOeIN1OnkB7
zuzaS`6Q@@B-Pa<~Qhp<jkyYTBFf!}{C;1!~j+XLUaVm-2{Js-Dqvl0tmHS?pc<4Bc
zN9hnoOGgReG$*Azq21p42VpDaNntoT#_vaAtK=zRI6AuhCt<7PX<@i@UT{A@i&!aV
zgyB}oUxX<o$q0%wHg@mmqle|tmh?AaUa(DlL&KdBM#htuwL15EDAc#LVE9KUQ$_WG
bDG&Z#IV%|fut!h1ImE2+*{PDoolE}*zihb^

delta 2595
zcmZ9N+iz4=6vo#~XQoCo2ssUHQlh;8Mu{Ol_|O=MtugpwA~8l^uo-GGRfcJXHU_O6
z5K-`gtw*dEE=5sL<Wh^bdc!N|C{T@mfQc{0Cm)QL#KiA6J!_abLw5J~eQT|~*Is+=
z!}z}R$;ouSDc#*{ma@w%Z*vp*yHb_u!9Bs{SsTfk4U{&N%Ke*0i&4Ji`XFNuOB*hf
z3q>=_TF$ma{{^jgh7D@Qwk7!X2A;Dg;iXOeLmSr*Z5$feti`lilRYDSq>7tuJQ`|g
zzjj;-zhdd$!3~;o`iGVhzHhKp>@SxHkeXG*bW2c;Xp%BqF5N$GnUBbb3>1ok<wC!<
zCW1ZwXlW0h(|V)pN?IXfF9}~fU&dZZ@cjvXAi<{+{9uB=CSDpY3~*@no6g#Th7C_e
z`NdZ*nr#TnS|$2z@tMwNrRH>ug&Mai*oz}soC3_X25Vi_r8am{vYMv=yj$ZYjcRnP
zCF9bv*W#kyw%|5)Kuvm5_L`>voE=VU_zq|n<H-47ThPmjMB=?riLF+w@3LAa<%+sw
z<LA6{o>qBf=Fhe$7e2)rwl!>1$Zp~5#JKk*`s>B}N&E`Cq`Evl^<#-__;tvCLNkXX
zjT>T48fe&`k1;VT#M{a6MTur-`*8S9nA4I33&1PU)g6aZOQX4tmElt9o25|=?94o`
zdcGyWd1!85Ab%d3b7mfz^JU^ZH0OJjIS(x6X={!qI)ji7cNbEk!<{b^r^B5yPbD}V
z?soj?aOceG@ERxOQ*~VXMcrMCQnNEZceSQNO8Jn?Ycy7=c2oy`qpCySj|txs+o%-0
zM^{PQBf@=}M>RjFK`cJ3!-ovJud`M7j@U*;;j)GL0Gd52vNkqSUbqK7ChQ4NYIu)M
zM{+xa1I;W*9CkM63bFYbj|-z6wX7|d{}aM!eW}pwF9qxp;rFjjjd7<2+TUtD@R)Qp
zn>{T|!?OwZ3}+Ln5eZYpUTs37?$Mxme^f)d&kM1>T|UH2k~x7GJlmIry;OV~;lAiz
z;pC$Gq@j}(odpN)*E|_xI*NyaKBc)&4<39At@OJx>9I@gD$TEouhh)OEXE=P6NE28
zbTob>MY|n}CYA@`>rxJB49B&4Ll|wRyr|t_VYIvTCRl~0MPrpQX-9-vIUU!Fi+WQW
zojW?JnICtA{+7lU8r+d^Sgju$y)BW&z39h;X~*5#h@u}CM#B#uVonGX!^OZ)3Lj8X
z=zh$1gh}vxoFE-IBaXhx!lvr8Lm+@>_pUGjw+piot^S@kIu+nq!tv)b@PRP?55)c?
z`=K~G{_kssdqN)x<9`hah1!6OK9+!ifLYCOf3Tkj^I-WtusI9j<CXbT7#~jW)%#3%
zy~d8XdZ&f)L*Eu_p9_bS6(bu{Zp43dH{2U{#9ev0zZ9;&qOZj3ujp%WH2gf~8{zsZ
zIwQ^%q3Zx)^={9K{Hk(b^z6PBW<hM899n&HBnjW8nPi#00^bXh+!~#h-uOWnjh}1h
qvNz9*dRH~^eC((s)dS7d|CKICV}WxT*f{}7RfI3h{IcT2y8i*?HclP@

diff --git a/shaders/rt_quad.frag b/shaders/rt_quad.frag
index 82944b5..73093c7 100644
--- a/shaders/rt_quad.frag
+++ b/shaders/rt_quad.frag
@@ -395,7 +395,7 @@ void main() {
     vec3 clamped_pos = clamp_to_volume(fragVolumeStart, origPosition);
     uvec4 color_roughness = sample_color_from_scene_info(fragVolumeStart, fragRasterPos, facing);
     vec3 orig_color_sample = vec3(float(color_roughness.x) / 255.0, float(color_roughness.y) / 255.0, float(color_roughness.z) / 255.0);
-    vec3 color_sum = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
+    vec3 color_sum;
 
     uint orig_neighbor = sample_neighbor_from_scene_info(fragVolumeStart, fragRasterPos, facing);
     if (orig_neighbor != 0) {
@@ -403,13 +403,18 @@ void main() {
         Tracing t = trace_ray(fragVolumeStart, ubo.camera_pos, clamped_pos - ubo.camera_pos, 100.0, 0, 20);
         float opacity = float(color_roughness.w) / 255.0;
         if (t.has_hit) {
-            color_sum = opacity * color_sum + (1.0 - opacity) * diffuse_tracing(t.end_volume, t.end_raster, t.end_pos, t.end_facing) * orig_color_sample;
+            vec3 color_seen_through = diffuse_tracing(t.end_volume, t.end_raster, t.end_pos, t.end_facing) * orig_color_sample;
+            vec3 color_direct = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
+            color_sum = opacity * color_direct + (1.0 - opacity) * color_seen_through;
         }
         else {
             // Todo: hit sky box
-            color_sum = opacity * color_sum + (1.0 - opacity) * vec3(0.0, 0.0, 0.0);
+            vec3 color_direct = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
+            color_sum = opacity * color_direct + (1.0 - opacity) * vec3(0.0, 0.0, 0.0);
         }
-        
+    }
+    else {
+        color_sum = diffuse_tracing(fragVolumeStart, fragRasterPos, clamped_pos, facing);
     }