From 0ef40c4702e3a0a1519b9069b9ff59069d83d351 Mon Sep 17 00:00:00 2001 From: luboslenco Date: Sun, 5 Apr 2026 23:53:54 +0200 Subject: [PATCH] base: cleanup --- base/shaders/raytrace/raytrace_brute_core.cso | Bin 10920 -> 10936 bytes .../raytrace/raytrace_brute_forge_core.cso | Bin 11296 -> 11308 bytes .../raytrace/raytrace_brute_forge_full.cso | Bin 13108 -> 13120 bytes base/shaders/raytrace/raytrace_brute_full.cso | Bin 12724 -> 12736 bytes base/shaders/raytrace/src/build_dxr.bat | 16 ++++----- base/sources/iron.h | 2 +- base/sources/iron_gpu.c | 22 ++++-------- base/sources/iron_math.c | 2 +- base/tools/amake/ashader.c | 34 ++++++++++++++++-- 9 files changed, 48 insertions(+), 28 deletions(-) diff --git a/base/shaders/raytrace/raytrace_brute_core.cso b/base/shaders/raytrace/raytrace_brute_core.cso index 9ad15b4ddca470100431da784c9ba01e9a3bd136..7836fac512a94e6ae9d61416c24dacca38e5a5d9 100644 GIT binary patch delta 3028 zcmZ8j4Ny~87Jm7A`PV=syb$#z1OX8w0R(?T5@@6f77@3IPEAMzWZ8+>`U} zIrn_ud0l%y+RM)_QfBpKH%I)u=lVyPl&{~zU;lk z$e?cO3w-A#IOa!T|IgbzKO`N_E_yz941u6S5CuwwAtMXu{35)vJps(CTh;ZQF^} z7s$8F=b$zLde9KY`*0$%lTMIa5RyCT1Co*|NJxXBjC^DAkOdv-c(bg2mC>XfqBVX{8gV5j@-dE~hsP1|?_foK#WR|rRp7AJ*QIU&t@ zX2XwIRUH&w`9x35GaFWGhtE)Wx(O-#%%(VgRp&5aW;AHb@k@VG_H+ILJk*tnqM%0)MRTVmj6{MI5@9wu z{U`09kO*Gxl4q;MuEzOVb_wUvjD%tMVDT8_`c(h&FK8+j3nJsj_^>ZH76I{Bs6MPd z7+^MEx3#)Ivy{(JB6&1ZD5_B%lfHt)j+OB?KIR8g0hy>uK_=@x+WrHsvW-e5dq&V~ zFA)1Jg1=10TLke_oKu`vZhS2_rNEb7mYW^TN~U4clx4y={!0Bp@<8xkJ!OSH(a#JN z{TS)vOKXEszsVgHCwrB&+<~-mvr10RP;rUsGzCq?g*9myDRgG2n7fLe81L08MW}!g zU}ZQJHX~kT7Oft9QR$du-_VdJ**7(`N%k!bD}4&nS9XyC?tCiI$8YH(5Ko7qPPx<7Q+nCviX-rZ61{q*A69;yw-3?fPAJ2#>Kt(42p6d#4kThTTKWoDTX?p)S`!AJNi;!~?caM5KNj9s8a!`5j+!u*TSMJ4M`vMdif)zQl|&&zign zT&KIOQ*jMMhw1DH6G;!+<)Bqxe=cFpujCLdv6-)tp zH?XUzfg%$;+ha7^D2A`2(fw19jE4aIfLEIry`y?R+$b4M>~LTks|@uy3n54(sv&$rq%X<~GsLM2O|V(BZLe80OYb(SwJ3L@o^ ze!i4r0<5q|VNePB_eDA&iqKRz;2tN>Nu7=Lek+m~Y>Wr8H@Q^8^q@kXJ`jeD(=InP ztsE@7fh{u-H8(os7d1CTfBN2tgd$t({!sS2$fK7(r+3r5+LJYUVM0E^S8J7(YA|UI0j4p|_5BQ%j6NR2+6>_8k-9OLGQam~XZ)uubjYYB|BH zW&a#!(5J;9Qh6|;v{`iS+d`4#;j`gFptZj6Dp?HEKxJECQK3xjV&EZ|)~?N#ZJx~R zq~le%@nsdPGc7c@h?faim@tOOtb@rL+HJ4RZ7Cl3^#H}&8NvA@h5nU;_@BE`g|zLg zDDZO6jA;JqMV=wtG(U0~2!N7PUgJH68xx9Z2OYsae^2rqdaG5$XUq>7fB+VDnf}>2 zP9a4}%Yz4g$Exf)Qdzz`JI4%Uar>*__S+5*6Dh@h0G)iVb^P{-I>Cj$TVbsUMP0wK zq+^QS>8R-70Wn17(IDp7c3C8=i&&rZu!CFZQ0>Q<`{>EpOI`c#-E6!$ijJ|TTiDYR zplgd}Wxnfb`O@}}yO(|5EZ9`y$l81*YjYZCUf!5ZzaGh_P!75z%tut&oAA;1mz>WP zAc5vplnSA$Bt}&NoDC4~QOH}cU${N43$k4^N≷+@K0osd~+Zgv*)XrVYiNK!Qaw znuA4J+CH-;qu}!H>hC>G_a8RhFHaLeiE>fkfW*OI^cgk0ZjOHJZ8T8iP|o(?bzZGW zh-y280JV!)Ik{&!#jvz)oJ;oU0A(b;C|$i;dj}q1;-6?Ak-(Q#x1|CyO$x zIZx?es?kPdG6F?_4lGL9K$yXkHJI_KdL{OGb{+s(==-B4YE8|)$UiGyt>#dfbvZI# zSG_)0P7S!#%M8ArTK2Q%XQ;;6tWJ?036VvppS6p46R2r1;iJJuAthlv#L3Md<$1 zBH1-wmcBB{;vWkak|L}+WJpdC^FJ|2^YI+ZQC6X(Lhb4YN*6|8f~`&%PFz{)w(7^6 z{D57P>XX)=^=egX!9?40#`e`Pgx+i=$ZEtSy|qlufCt!w9UXY$KnuB-JSwMXi_L4{ zk^g^Ik$&-qBV#FvO3BjDDhe35=r5Ck>vuDMnFO*(iHnSg^zZOVublI08`h1K4SIrH zwY8UVb<1a0@0!&}GtITuU&@b)m53W{{O9#!IWt;P(#Vjd_>7HxEd~{=_Pb|YLl&y6 zmwX2tLvlYQA4jYof;8cOC5ho>0MO3qh;1VU5o=ou^4Q9%UEine^a#NR_u}9G0F4TE A82|tP delta 3012 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 D)}3Ou diff --git a/base/shaders/raytrace/raytrace_brute_forge_core.cso b/base/shaders/raytrace/raytrace_brute_forge_core.cso index 63d02083fb0734fb0d15287ca398f3c0076aab6a..e8bf00279f269ce3fc1f436d978a9d9d87dca8c3 100644 GIT binary patch delta 3306 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 gO@NMTI+wPN_FwUt#b8d|?l<`E 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 j?R-Cf&=^_QF0;S&-u+E`rpT|8Z0(p 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[x * 3 + y]; + floats[x + y * 4] = value->m[x + y * 3]; } } } @@ -221,29 +221,19 @@ static void gpu_internal_set_mat4(int offset, mat4_t *value) { float *floats = (float *)(&constant_buffer.data[offset]); for (int y = 0; y < 4; ++y) { for (int x = 0; x < 4; ++x) { - floats[x + y * 4] = value->m[x * 4 + y]; + floats[x + y * 4] = value->m[x + y * 4]; } } } void gpu_set_mat3(int location, mat3_t value) { - if (gpu_transpose_mat) { - mat3_t m = mat3_transpose(value); - gpu_internal_set_mat3(location, &m); - } - else { - gpu_internal_set_mat3(location, &value); - } + mat3_t m = mat3_transpose(value); + gpu_internal_set_mat3(location, &m); } void gpu_set_mat4(int location, mat4_t value) { - if (gpu_transpose_mat) { - mat4_t m = mat4_transpose(value); - gpu_internal_set_mat4(location, &m); - } - else { - gpu_internal_set_mat4(location, &value); - } + mat4_t m = mat4_transpose(value); + gpu_internal_set_mat4(location, &m); } void gpu_vertex_structure_add(gpu_vertex_structure_t *structure, const char *name, gpu_vertex_data_t data) { diff --git a/base/sources/iron_math.c b/base/sources/iron_math.c index c7691225..4cfe09ae 100644 --- a/base/sources/iron_math.c +++ b/base/sources/iron_math.c @@ -974,7 +974,7 @@ mat4_t mat4_transpose3(mat4_t m) { } mat4_t mat4_clone(mat4_t m) { - return (mat4_t){m.m[0], m.m[4], m.m[8], m.m[12], m.m[1], m.m[5], m.m[9], m.m[13], m.m[2], m.m[6], m.m[10], m.m[14], m.m[3], m.m[7], m.m[11], m.m[15]}; + return (mat4_t){m.m[0], m.m[1], m.m[2], m.m[3], m.m[4], m.m[5], m.m[6], m.m[7], m.m[8], m.m[9], m.m[10], m.m[11], m.m[12], m.m[13], m.m[14], m.m[15]}; } vec4_t mat4_get_loc(mat4_t m) { diff --git a/base/tools/amake/ashader.c b/base/tools/amake/ashader.c index ee7b7129..1ded561a 100644 --- a/base/tools/amake/ashader.c +++ b/base/tools/amake/ashader.c @@ -23,7 +23,7 @@ char *hlsl_to_bin(char *source, char *shader_type, char *to) { ID3DBlob *error_message; ID3DBlob *shader_buffer; - UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL3 | D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR; + UINT flags = D3DCOMPILE_OPTIMIZATION_LEVEL3; HRESULT hr = D3DCompile(source, strlen(source) + 1, NULL, NULL, NULL, "main", type, flags, 0, &shader_buffer, &error_message); if (hr != S_OK) { printf("%s\n", (char *)error_message->lpVtbl->GetBufferPointer(error_message)); @@ -77,7 +77,6 @@ void kong_compile(char *shader_lang, const char *from, const char *to) { names_init(); types_init(); functions_init(); - globals_init(); tokens tokens = tokenize(from, data); parse(from, &tokens); resolve_types(); @@ -223,3 +222,34 @@ int ashader(char *shader_lang, char *from, char *to) { kong_compile(shader_lang, from, to); return 0; } + +#ifdef IRON_WINDOWS +void iron_microsoft_format(const char *format, va_list args, wchar_t *buffer) { + char cbuffer[4096]; + vsprintf(cbuffer, format, args); + MultiByteToWideChar(CP_UTF8, 0, cbuffer, -1, buffer, 4096); +} +#endif + +void iron_log_args(iron_log_level_t level, const char *format, va_list args) { +#ifdef IRON_WINDOWS + wchar_t buffer[4096]; + iron_microsoft_format(format, args, buffer); + wcscat(buffer, L"\r\n"); + OutputDebugStringW(buffer); + DWORD written; + WriteConsoleW(GetStdHandle(level == IRON_LOG_LEVEL_INFO ? STD_OUTPUT_HANDLE : STD_ERROR_HANDLE), buffer, (DWORD)wcslen(buffer), &written, NULL); +#else + char buffer[4096]; + vsnprintf(buffer, 4090, format, args); + strcat(buffer, "\n"); + fprintf(level == IRON_LOG_LEVEL_INFO ? stdout : stderr, "%s", buffer); +#endif +} + +void iron_log(const char *format, ...) { + va_list args; + va_start(args, format); + iron_log_args(IRON_LOG_LEVEL_INFO, format == NULL ? "null" : format, args); + va_end(args); +}