diff --git a/base/shaders/raytrace/raytrace_brute_core.cso b/base/shaders/raytrace/raytrace_brute_core.cso index 9ad15b4d..7836fac5 100644 Binary files a/base/shaders/raytrace/raytrace_brute_core.cso and b/base/shaders/raytrace/raytrace_brute_core.cso differ diff --git a/base/shaders/raytrace/raytrace_brute_forge_core.cso b/base/shaders/raytrace/raytrace_brute_forge_core.cso index 63d02083..e8bf0027 100644 Binary files a/base/shaders/raytrace/raytrace_brute_forge_core.cso and b/base/shaders/raytrace/raytrace_brute_forge_core.cso differ diff --git a/base/shaders/raytrace/raytrace_brute_forge_full.cso b/base/shaders/raytrace/raytrace_brute_forge_full.cso index d46c5188..1d769bd2 100644 Binary files a/base/shaders/raytrace/raytrace_brute_forge_full.cso and b/base/shaders/raytrace/raytrace_brute_forge_full.cso differ diff --git a/base/shaders/raytrace/raytrace_brute_full.cso b/base/shaders/raytrace/raytrace_brute_full.cso index 27b2ada4..af230bf9 100644 Binary files a/base/shaders/raytrace/raytrace_brute_full.cso and b/base/shaders/raytrace/raytrace_brute_full.cso differ diff --git a/base/shaders/raytrace/src/build_dxr.bat b/base/shaders/raytrace/src/build_dxr.bat index 615f329c..8262357a 100644 --- a/base/shaders/raytrace/src/build_dxr.bat +++ b/base/shaders/raytrace/src/build_dxr.bat @@ -1,8 +1,8 @@ -.\dxc.exe -Zpc -Fo ..\raytrace_brute_core.cso -T cs_6_5 .\raytrace_brute.hlsl -.\dxc.exe -Zpc -Fo ..\raytrace_brute_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FULL -.\dxc.exe -Zpc -Fo ..\raytrace_brute_forge_core.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -.\dxc.exe -Zpc -Fo ..\raytrace_brute_forge_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -D _FULL -.\dxc.exe -Zpc -Fo ..\raytrace_bake_ao.cso -T cs_6_5 .\raytrace_bake_ao.hlsl -.\dxc.exe -Zpc -Fo ..\raytrace_bake_light.cso -T cs_6_5 .\raytrace_bake_light.hlsl -.\dxc.exe -Zpc -Fo ..\raytrace_bake_bent.cso -T cs_6_5 .\raytrace_bake_bent.hlsl -.\dxc.exe -Zpc -Fo ..\raytrace_bake_thick.cso -T cs_6_5 .\raytrace_bake_thick.hlsl +.\dxc.exe -Fo ..\raytrace_brute_core.cso -T cs_6_5 .\raytrace_brute.hlsl +.\dxc.exe -Fo ..\raytrace_brute_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FULL +.\dxc.exe -Fo ..\raytrace_brute_forge_core.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE +.\dxc.exe -Fo ..\raytrace_brute_forge_full.cso -T cs_6_5 .\raytrace_brute.hlsl -D _FORGE -D _FULL +.\dxc.exe -Fo ..\raytrace_bake_ao.cso -T cs_6_5 .\raytrace_bake_ao.hlsl +.\dxc.exe -Fo ..\raytrace_bake_light.cso -T cs_6_5 .\raytrace_bake_light.hlsl +.\dxc.exe -Fo ..\raytrace_bake_bent.cso -T cs_6_5 .\raytrace_bake_bent.hlsl +.\dxc.exe -Fo ..\raytrace_bake_thick.cso -T cs_6_5 .\raytrace_bake_thick.hlsl diff --git a/base/sources/iron.h b/base/sources/iron.h index 6f0580cf..02ff8264 100644 --- a/base/sources/iron.h +++ b/base/sources/iron.h @@ -760,7 +760,7 @@ gpu_shader_t *gpu_create_shader_from_source(char *source, int source_size, gpu_s ID3DBlob *error_message; ID3DBlob *shader_buffer; - UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION | D3DCOMPILE_PACK_MATRIX_COLUMN_MAJOR; + UINT flags = D3DCOMPILE_SKIP_OPTIMIZATION | D3DCOMPILE_SKIP_VALIDATION; HRESULT hr = D3DCompile(temp_string_s, strlen(source) + 1, NULL, NULL, NULL, "main", shader_type == GPU_SHADER_TYPE_VERTEX ? "vs_5_0" : "ps_5_0", flags, 0, &shader_buffer, &error_message); if (hr != S_OK) { diff --git a/base/sources/iron_gpu.c b/base/sources/iron_gpu.c index 24ca6b28..4a866516 100644 --- a/base/sources/iron_gpu.c +++ b/base/sources/iron_gpu.c @@ -212,7 +212,7 @@ static void gpu_internal_set_mat3(int offset, mat3_t *value) { float *floats = (float *)(&constant_buffer.data[offset]); for (int y = 0; y < 3; ++y) { for (int x = 0; x < 3; ++x) { - floats[x + y * 4] = value->m[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); +}