[3PP] Updated: Half, Xbyak, SDL2

This commit is contained in:
Xphalnos 2024-10-21 11:49:09 +02:00 committed by Gliniak
parent 1c4527c1e7
commit c42a54ddec
7 changed files with 430 additions and 267 deletions

View File

@ -899,11 +899,9 @@ void TraceViewer::DrawVertexFetcher(Shader* shader,
} break;
case xenos::VertexFormat::k_16_16_FLOAT: {
auto e0 = LOADEL(uint32_t, 0);
ImGui::Text("%.2f",
half_float::detail::half2float((e0 >> 16) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e0 >> 16) & 0xFFFF));
ImGui::NextColumn();
ImGui::Text("%.2f",
half_float::detail::half2float((e0 >> 0) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e0 >> 0) & 0xFFFF));
ImGui::NextColumn();
} break;
case xenos::VertexFormat::k_32_32:
@ -974,17 +972,13 @@ void TraceViewer::DrawVertexFetcher(Shader* shader,
case xenos::VertexFormat::k_16_16_16_16_FLOAT: {
auto e0 = LOADEL(uint32_t, 0);
auto e1 = LOADEL(uint32_t, 1);
ImGui::Text("%.2f",
half_float::detail::half2float((e0 >> 16) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e0 >> 16) & 0xFFFF));
ImGui::NextColumn();
ImGui::Text("%.2f",
half_float::detail::half2float((e0 >> 0) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e0 >> 0) & 0xFFFF));
ImGui::NextColumn();
ImGui::Text("%.2f",
half_float::detail::half2float((e1 >> 16) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e1 >> 16) & 0xFFFF));
ImGui::NextColumn();
ImGui::Text("%.2f",
half_float::detail::half2float((e1 >> 0) & 0xFFFF));
ImGui::Text("%.2f", half_float::detail::uint16((e1 >> 0) & 0xFFFF));
ImGui::NextColumn();
} break;
case xenos::VertexFormat::k_32_32_32_32_FLOAT:

2
third_party/SDL2 vendored

@ -1 +1 @@
Subproject commit 859844eae358447be8d66e6da59b6fb3df0ed778
Subproject commit 79ec168f3c1e2fe27335cb8886439f7ef676fb49

View File

@ -139,12 +139,11 @@ project("SDL2")
"SDL2/src/hidapi/hidapi/hidapi.h",
"SDL2/src/hidapi/SDL_hidapi_c.h",
"SDL2/src/joystick/controller_type.h",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.h",
"SDL2/src/joystick/hidapi/SDL_hidapijoystick_c.h",
"SDL2/src/joystick/hidapi/SDL_hidapi_rumble.h",
"SDL2/src/joystick/hidapi/SDL_hidapi_nintendo.h",
"SDL2/src/joystick/SDL_gamecontrollerdb.h",
"SDL2/src/joystick/SDL_joystick_c.h",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.h",
"SDL2/src/joystick/SDL_sysjoystick.h",
"SDL2/src/joystick/usb_ids.h",
"SDL2/src/joystick/virtual/SDL_virtualjoystick_c.h",
@ -202,7 +201,6 @@ project("SDL2")
"SDL2/src/video/khronos/vulkan/vk_platform.h",
"SDL2/src/video/khronos/vulkan/vk_sdk_platform.h",
"SDL2/src/video/khronos/vulkan/vulkan.h",
"SDL2/src/video/khronos/vulkan/vulkan.hpp",
"SDL2/src/video/khronos/vulkan/vulkan_android.h",
"SDL2/src/video/khronos/vulkan/vulkan_beta.h",
"SDL2/src/video/khronos/vulkan/vulkan_core.h",
@ -242,13 +240,18 @@ project("SDL2")
"SDL2/src/video/windows/SDL_windowsopengl.h",
"SDL2/src/video/windows/SDL_windowsopengles.h",
"SDL2/src/video/windows/SDL_windowsshape.h",
"SDL2/src/video/windows/SDL_windowstaskdialog.h",
"SDL2/src/video/windows/SDL_windowsvideo.h",
"SDL2/src/video/windows/SDL_windowsvulkan.h",
"SDL2/src/video/windows/SDL_windowswindow.h",
"SDL2/src/video/windows/wmmsg.h",
"SDL2/src/video/yuv2rgb/yuv_rgb.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_common.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_internal.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx_func.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse_func.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_std.h",
"SDL2/src/video/yuv2rgb/yuv_rgb_std_func.h",
"SDL2/src/atomic/SDL_atomic.c",
@ -290,7 +293,6 @@ project("SDL2")
"SDL2/src/haptic/windows/SDL_xinputhaptic.c",
"SDL2/src/hidapi/SDL_hidapi.c",
"SDL2/src/joystick/controller_type.c",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.c",
"SDL2/src/joystick/dummy/SDL_sysjoystick.c",
"SDL2/src/joystick/hidapi/SDL_hidapijoystick.c",
"SDL2/src/joystick/hidapi/SDL_hidapi_combined.c",
@ -311,6 +313,7 @@ project("SDL2")
"SDL2/src/joystick/hidapi/SDL_hidapi_xboxone.c",
"SDL2/src/joystick/SDL_gamecontroller.c",
"SDL2/src/joystick/SDL_joystick.c",
"SDL2/src/joystick/SDL_steam_virtual_gamepad.c",
"SDL2/src/joystick/virtual/SDL_virtualjoystick.c",
"SDL2/src/joystick/windows/SDL_dinputjoystick.c",
"SDL2/src/joystick/windows/SDL_rawinputjoystick.c",
@ -432,4 +435,7 @@ project("SDL2")
"SDL2/src/video/windows/SDL_windowsvideo.c",
"SDL2/src/video/windows/SDL_windowsvulkan.c",
"SDL2/src/video/windows/SDL_windowswindow.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_lsx.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_sse.c",
"SDL2/src/video/yuv2rgb/yuv_rgb_std.c",
})

View File

@ -1,6 +1,6 @@
The MIT License
Copyright (c) 2012-2013 Christian Rau
Copyright (c) 2012-2017 Christian Rau
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View File

@ -1,4 +1,4 @@
HALF-PRECISION FLOATING POINT LIBRARY (Version 1.11.0)
HALF-PRECISION FLOATING POINT LIBRARY (Version 1.12.0)
------------------------------------------------------
This is a C++ header-only library to provide an IEEE 754 conformant 16-bit
@ -29,14 +29,15 @@ or when a feature should be explicitly disabled:
- Static assertions for extended compile-time checks (enabled for VC++ 2010,
gcc 4.3, clang 2.9 and newer, overridable with 'HALF_ENABLE_CPP11_STATIC_ASSERT').
- Generalized constant expressions (enabled for gcc 4.6, clang 3.1 and newer,
overridable with 'HALF_ENABLE_CPP11_CONSTEXPR').
- Generalized constant expressions (enabled for VC++ 2015, gcc 4.6, clang 3.1
and newer, overridable with 'HALF_ENABLE_CPP11_CONSTEXPR').
- noexcept exception specifications (enabled for gcc 4.6, clang 3.0 and newer,
overridable with 'HALF_ENABLE_CPP11_NOEXCEPT').
- noexcept exception specifications (enabled for VC++ 2015, gcc 4.6, clang 3.0
and newer, overridable with 'HALF_ENABLE_CPP11_NOEXCEPT').
- User-defined literals for half-precision literals to work (enabled for
gcc 4.7, clang 3.1 and newer, overridable with 'HALF_ENABLE_CPP11_USER_LITERALS').
VC++ 2015, gcc 4.7, clang 3.1 and newer, overridable with
'HALF_ENABLE_CPP11_USER_LITERALS').
- Type traits and template meta-programming features from <type_traits>
(enabled for VC++ 2010, libstdc++ 4.3, libc++ and newer, overridable with
@ -53,7 +54,7 @@ or when a feature should be explicitly disabled:
- Hash functor 'std::hash' from <functional> (enabled for VC++ 2010,
libstdc++ 4.3, libc++ and newer, overridable with 'HALF_ENABLE_CPP11_HASH').
The library has been tested successfully with Visual C++ 2005-2013, gcc 4.4-4.8
The library has been tested successfully with Visual C++ 2005-2015, gcc 4.4-4.8
and clang 3.1. Please contact me if you have any problems, suggestions or even
just success testing it on other platforms.
@ -106,7 +107,7 @@ Furthermore the library provides proper specializations for
the library also defines the 'HUGE_VALH' constant and maybe the 'FP_FAST_FMAH'
symbol.
CONVERSIONS
CONVERSIONS AND ROUNDING
The half is explicitly constructible/convertible from a single-precision float
argument. Thus it is also explicitly constructible/convertible from any type
@ -122,7 +123,7 @@ you can also directly assign float values to halfs.
In contrast to the float-to-half conversion, which reduces precision, the
conversion from half to float (and thus to any other type implicitly
convertible to float) is implicit, because all values represetable with
convertible from float) is implicit, because all values represetable with
half-precision are also representable with single-precision. This way the
half-to-float conversion behaves similar to the builtin float-to-double
conversion and all arithmetic expressions involving both half-precision and
@ -156,20 +157,23 @@ to 'std::numeric_limits<float>::round_style'):
In addition to changing the overall default rounding mode one can also use the
'half_cast'. This converts between half and any built-in arithmetic type using
a configurable rounding mode (or the default rounding mode if none is
specified). In addition to a configurable rounding mode, 'half_cast' has two
other differences to a mere 'static_cast': (1) Floating point types are
explicitly cast to float before being converted to half-precision and thus any
warnings for narrowing conversions are suppressed. (2) Conversions to/from
integer types are performed directly using the given rounding mode, without any
intermediate conversion to/from float.
specified). In addition to a configurable rounding mode, 'half_cast' has
another big difference to a mere 'static_cast': Any conversions are performed
directly using the given rounding mode, without any intermediate conversion
to/from 'float'. This is especially relevant for conversions to integer types,
which don't necessarily truncate anymore. But also for conversions from
'double' or 'long double' this may produce more precise results than a
pre-conversion to 'float' using the single-precision implementation's current
rounding mode would.
half a = half_cast<half>(4.2);
half b = half_cast<half,std::numeric_limits<float>::round_style>(4.2f);
assert( half_cast<int, std::round_to_nearest>( 0.7_h ) == 1 );
assert( half_cast<half,std::round_toward_zero>( 4097 ) == 4096.0_h );
assert( half_cast<half,std::round_toward_infinity>( 4097 ) == 4100.0_h );
assert( half_cast<half,std::round_toward_infinity>( std::numeric_limits<double>::min() ) > 0.0_h );
When using round to nearest (either as default or thorugh 'half_cast') ties are
When using round to nearest (either as default or through 'half_cast') ties are
by default resolved by rounding them away from zero (and thus equal to the
behaviour of the 'round' function). But by redefining the
'HALF_ROUND_TIES_TO_EVEN' preprocessor symbol to 1 (before including half.hpp)
@ -207,9 +211,9 @@ implication is, that in the presence of rounding errors or over-/underflows
arithmetic expressions may produce different results when compared to
converting to half-precision after each individual operation:
half a = (std::numeric_limits<half>::max() * 2.0_h) / 2.0_h; // a = MAX
half b = std::numeric_limits<half>::max() * 2.0_h; // b = INF
b /= 2.0_h; // b stays INF
half a = std::numeric_limits<half>::max() * 2.0_h / 2.0_h; // a = MAX
half b = half(std::numeric_limits<half>::max() * 2.0_h) / 2.0_h; // b = INF
assert( a != b );
But this should only be a problem in very few cases. One last word has to be
said when talking about performance. Even with its efforts in reducing

File diff suppressed because it is too large Load Diff

2
third_party/xbyak vendored

@ -1 +1 @@
Subproject commit ccdf68421bc8eb85693f573080fc0a5faad862db
Subproject commit cf209c915b849141ed9821fea883fd04bcc34859