mirror of
https://github.com/Lime3DS/Lime3DS
synced 2024-12-25 16:42:39 -06:00
Merge pull request #6602 from SachinVin/wall
Chore: enable `-Werror` on GCC and clang
This commit is contained in:
commit
35d1b67fd4
25 changed files with 124 additions and 114 deletions
9
externals/CMakeLists.txt
vendored
9
externals/CMakeLists.txt
vendored
|
@ -3,6 +3,8 @@
|
|||
# Suppress warnings from external libraries
|
||||
if (CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
|
||||
add_compile_options(/W0)
|
||||
else()
|
||||
add_compile_options(-Wno-error)
|
||||
endif()
|
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${PROJECT_SOURCE_DIR}/CMakeModules)
|
||||
|
@ -112,6 +114,8 @@ add_library(nihstro-headers INTERFACE)
|
|||
target_include_directories(nihstro-headers INTERFACE ./nihstro/include)
|
||||
if (MSVC)
|
||||
target_compile_options(nihstro-headers INTERFACE /W0)
|
||||
else()
|
||||
target_compile_options(nihstro-headers INTERFACE -Wno-error)
|
||||
endif()
|
||||
|
||||
# Open Source Archives
|
||||
|
@ -195,6 +199,11 @@ if (ENABLE_WEB_SERVICE)
|
|||
add_library(cpp-jwt INTERFACE)
|
||||
target_include_directories(cpp-jwt INTERFACE ./cpp-jwt/include)
|
||||
target_compile_definitions(cpp-jwt INTERFACE CPP_JWT_USE_VENDORED_NLOHMANN_JSON)
|
||||
if (MSVC)
|
||||
target_compile_options(cpp-jwt INTERFACE /W0)
|
||||
else()
|
||||
target_compile_options(cpp-jwt INTERFACE -Wno-error)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# lodepng
|
||||
|
|
|
@ -102,6 +102,10 @@ else()
|
|||
-Wno-attributes
|
||||
)
|
||||
|
||||
if (CITRA_WARNINGS_AS_ERRORS)
|
||||
add_compile_options(-Werror)
|
||||
endif()
|
||||
|
||||
if (APPLE AND CMAKE_CXX_COMPILER_ID STREQUAL Clang)
|
||||
add_compile_options("-stdlib=libc++")
|
||||
endif()
|
||||
|
|
|
@ -56,35 +56,6 @@ std::condition_variable running_cv;
|
|||
|
||||
} // Anonymous namespace
|
||||
|
||||
static bool DisplayAlertMessage(const char* caption, const char* text, bool yes_no) {
|
||||
JNIEnv* env = IDCache::GetEnvForThread();
|
||||
|
||||
// Execute the Java method.
|
||||
jboolean result = env->CallStaticBooleanMethod(
|
||||
IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertMsg(), ToJString(env, caption),
|
||||
ToJString(env, text), yes_no ? JNI_TRUE : JNI_FALSE);
|
||||
|
||||
return result != JNI_FALSE;
|
||||
}
|
||||
|
||||
static std::string DisplayAlertPrompt(const char* caption, const char* text, int buttonConfig) {
|
||||
JNIEnv* env = IDCache::GetEnvForThread();
|
||||
|
||||
jstring value = reinterpret_cast<jstring>(env->CallStaticObjectMethod(
|
||||
IDCache::GetNativeLibraryClass(), IDCache::GetDisplayAlertPrompt(), ToJString(env, caption),
|
||||
ToJString(env, text), buttonConfig));
|
||||
|
||||
return GetJString(env, value);
|
||||
}
|
||||
|
||||
static int AlertPromptButton() {
|
||||
JNIEnv* env = IDCache::GetEnvForThread();
|
||||
|
||||
// Execute the Java method.
|
||||
return static_cast<int>(env->CallStaticIntMethod(IDCache::GetNativeLibraryClass(),
|
||||
IDCache::GetAlertPromptButton()));
|
||||
}
|
||||
|
||||
static jobject ToJavaCoreError(Core::System::ResultStatus result) {
|
||||
static const std::map<Core::System::ResultStatus, const char*> CoreErrorNameMap{
|
||||
{Core::System::ResultStatus::ErrorSystemFiles, "ErrorSystemFiles"},
|
||||
|
|
|
@ -31,7 +31,7 @@ av_hwframe_ctx_init_func av_hwframe_ctx_init;
|
|||
av_hwframe_get_buffer_func av_hwframe_get_buffer;
|
||||
av_hwframe_transfer_data_func av_hwframe_transfer_data;
|
||||
av_int_list_length_for_size_func av_int_list_length_for_size;
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 59
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
|
||||
av_opt_child_class_iterate_func av_opt_child_class_iterate;
|
||||
#else
|
||||
av_opt_child_class_next_func av_opt_child_class_next;
|
||||
|
@ -166,7 +166,7 @@ static bool LoadAVUtil() {
|
|||
LOAD_SYMBOL(avutil, av_hwframe_get_buffer);
|
||||
LOAD_SYMBOL(avutil, av_hwframe_transfer_data);
|
||||
LOAD_SYMBOL(avutil, av_int_list_length_for_size);
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 59
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
|
||||
LOAD_SYMBOL(avutil, av_opt_child_class_iterate);
|
||||
#else
|
||||
LOAD_SYMBOL(avutil, av_opt_child_class_next);
|
||||
|
|
|
@ -47,7 +47,7 @@ typedef int (*av_hwframe_ctx_init_func)(AVBufferRef*);
|
|||
typedef int (*av_hwframe_get_buffer_func)(AVBufferRef*, AVFrame*, int);
|
||||
typedef int (*av_hwframe_transfer_data_func)(AVFrame*, const AVFrame*, int);
|
||||
typedef unsigned (*av_int_list_length_for_size_func)(unsigned, const void*, uint64_t);
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 59
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
|
||||
typedef const AVClass* (*av_opt_child_class_iterate_func)(const AVClass*, void**);
|
||||
#else
|
||||
typedef const AVClass* (*av_opt_child_class_next_func)(const AVClass*, const AVClass*);
|
||||
|
@ -85,7 +85,7 @@ extern av_hwframe_ctx_init_func av_hwframe_ctx_init;
|
|||
extern av_hwframe_get_buffer_func av_hwframe_get_buffer;
|
||||
extern av_hwframe_transfer_data_func av_hwframe_transfer_data;
|
||||
extern av_int_list_length_for_size_func av_int_list_length_for_size;
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 59
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
|
||||
extern av_opt_child_class_iterate_func av_opt_child_class_iterate;
|
||||
#else
|
||||
extern av_opt_child_class_next_func av_opt_child_class_next;
|
||||
|
|
|
@ -102,12 +102,11 @@ static void StripTailDirSlashes(std::string& fname) {
|
|||
}
|
||||
|
||||
bool Exists(const std::string& filename) {
|
||||
struct stat file_info;
|
||||
|
||||
std::string copy(filename);
|
||||
StripTailDirSlashes(copy);
|
||||
|
||||
#ifdef _WIN32
|
||||
struct stat file_info;
|
||||
// Windows needs a slash to identify a driver root
|
||||
if (copy.size() != 0 && copy.back() == ':')
|
||||
copy += DIR_SEP_CHR;
|
||||
|
@ -116,6 +115,7 @@ bool Exists(const std::string& filename) {
|
|||
#elif ANDROID
|
||||
int result = AndroidStorage::FileExists(filename) ? 0 : -1;
|
||||
#else
|
||||
struct stat file_info;
|
||||
int result = stat(copy.c_str(), &file_info);
|
||||
#endif
|
||||
|
||||
|
@ -699,7 +699,7 @@ static const std::string& GetHomeDirectory() {
|
|||
* @return The directory path
|
||||
* @sa http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||
*/
|
||||
static const std::string GetUserDirectory(const std::string& envvar) {
|
||||
[[maybe_unused]] static const std::string GetUserDirectory(const std::string& envvar) {
|
||||
const char* directory = getenv(envvar.c_str());
|
||||
|
||||
std::string user_dir;
|
||||
|
|
|
@ -16,19 +16,33 @@
|
|||
// Call directly after the command or use the error num.
|
||||
// This function might change the error code.
|
||||
std::string GetLastErrorMsg() {
|
||||
constexpr std::size_t buff_size = 255;
|
||||
char err_str[buff_size];
|
||||
std::size_t msg_len;
|
||||
|
||||
#ifdef _WIN32
|
||||
msg_len =
|
||||
FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, GetLastError(),
|
||||
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), err_str, buff_size, nullptr);
|
||||
LPSTR err_str;
|
||||
|
||||
DWORD res = FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ALLOCATE_BUFFER |
|
||||
FORMAT_MESSAGE_IGNORE_INSERTS,
|
||||
nullptr, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
|
||||
reinterpret_cast<LPSTR>(&err_str), 1, nullptr);
|
||||
if (!res) {
|
||||
return "(FormatMessageA failed to format error)";
|
||||
}
|
||||
std::string ret(err_str);
|
||||
LocalFree(err_str);
|
||||
return ret;
|
||||
#else
|
||||
char err_str[255];
|
||||
#if (defined(__GLIBC__) || __ANDROID_API__ >= 23) && \
|
||||
(_GNU_SOURCE || (_POSIX_C_SOURCE < 200112L && _XOPEN_SOURCE < 600))
|
||||
// Thread safe (GNU-specific)
|
||||
const char* str = strerror_r(errno, err_str, sizeof(err_str));
|
||||
return std::string(str);
|
||||
#else
|
||||
// Thread safe (XSI-compliant)
|
||||
strerror_r(errno, err_str, buff_size);
|
||||
msg_len = strnlen(err_str, buff_size);
|
||||
#endif
|
||||
|
||||
return std::string(err_str, msg_len);
|
||||
int second_err = strerror_r(errno, err_str, sizeof(err_str));
|
||||
if (second_err != 0) {
|
||||
return "(strerror_r failed to format error)";
|
||||
}
|
||||
return std::string(err_str);
|
||||
#endif // GLIBC etc.
|
||||
#endif // _WIN32
|
||||
}
|
||||
|
|
|
@ -170,7 +170,7 @@ static std::wstring CPToUTF16(u32 code_page, const std::string& input) {
|
|||
MultiByteToWideChar(code_page, 0, input.data(), static_cast<int>(input.size()), nullptr, 0);
|
||||
|
||||
if (size == 0) {
|
||||
return L"";
|
||||
return {};
|
||||
}
|
||||
|
||||
std::wstring output(size, L'\0');
|
||||
|
|
|
@ -110,7 +110,7 @@ void ARMul_State::Reset() {
|
|||
Reg[13] = 0x10000000;
|
||||
Reg[15] = 0;
|
||||
|
||||
Cpsr = static_cast<u32>(INTBITS) | SVC32MODE;
|
||||
Cpsr = static_cast<u32>(INTBITS) | static_cast<u32>(SVC32MODE);
|
||||
Mode = SVC32MODE;
|
||||
Bank = SVCBANK;
|
||||
|
||||
|
|
|
@ -52,7 +52,7 @@ void CheatEngine::AddCheat(const std::shared_ptr<CheatBase>& cheat) {
|
|||
|
||||
void CheatEngine::RemoveCheat(std::size_t index) {
|
||||
std::unique_lock<std::shared_mutex> lock(cheats_list_mutex);
|
||||
if (index < 0 || index >= static_cast<int>(cheats_list.size())) {
|
||||
if (index < 0 || index >= cheats_list.size()) {
|
||||
LOG_ERROR(Core_Cheats, "Invalid index {}", index);
|
||||
return;
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ void CheatEngine::RemoveCheat(std::size_t index) {
|
|||
|
||||
void CheatEngine::UpdateCheat(std::size_t index, const std::shared_ptr<CheatBase>& new_cheat) {
|
||||
std::unique_lock<std::shared_mutex> lock(cheats_list_mutex);
|
||||
if (index < 0 || index >= static_cast<int>(cheats_list.size())) {
|
||||
if (index < 0 || index >= cheats_list.size()) {
|
||||
LOG_ERROR(Core_Cheats, "Invalid index {}", index);
|
||||
return;
|
||||
}
|
||||
|
|
|
@ -59,21 +59,25 @@ void FFmpegStream::Flush() {
|
|||
SendFrame(nullptr);
|
||||
}
|
||||
|
||||
void FFmpegStream::WritePacket(AVPacket& packet) {
|
||||
FFmpeg::av_packet_rescale_ts(&packet, codec_context->time_base, stream->time_base);
|
||||
packet.stream_index = stream->index;
|
||||
void FFmpegStream::WritePacket(AVPacket* packet) {
|
||||
FFmpeg::av_packet_rescale_ts(packet, codec_context->time_base, stream->time_base);
|
||||
packet->stream_index = stream->index;
|
||||
{
|
||||
std::lock_guard lock{*format_context_mutex};
|
||||
FFmpeg::av_interleaved_write_frame(format_context, &packet);
|
||||
FFmpeg::av_interleaved_write_frame(format_context, packet);
|
||||
}
|
||||
}
|
||||
|
||||
void FFmpegStream::SendFrame(AVFrame* frame) {
|
||||
// Initialize packet
|
||||
AVPacket packet;
|
||||
FFmpeg::av_init_packet(&packet);
|
||||
packet.data = nullptr;
|
||||
packet.size = 0;
|
||||
AVPacket* packet = FFmpeg::av_packet_alloc();
|
||||
if (!packet) {
|
||||
LOG_ERROR(Render, "Frame dropped: av_packet_alloc failed");
|
||||
}
|
||||
SCOPE_EXIT({ FFmpeg::av_packet_free(&packet); });
|
||||
|
||||
packet->data = nullptr;
|
||||
packet->size = 0;
|
||||
|
||||
// Encode frame
|
||||
if (FFmpeg::avcodec_send_frame(codec_context.get(), frame) < 0) {
|
||||
|
@ -82,7 +86,7 @@ void FFmpegStream::SendFrame(AVFrame* frame) {
|
|||
}
|
||||
int error = 1;
|
||||
while (error >= 0) {
|
||||
error = FFmpeg::avcodec_receive_packet(codec_context.get(), &packet);
|
||||
error = FFmpeg::avcodec_receive_packet(codec_context.get(), packet);
|
||||
if (error == AVERROR(EAGAIN) || error == AVERROR_EOF)
|
||||
return;
|
||||
if (error < 0) {
|
||||
|
@ -485,7 +489,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) {
|
|||
}
|
||||
codec_context->time_base.num = 1;
|
||||
codec_context->time_base.den = codec_context->sample_rate;
|
||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)
|
||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
|
||||
codec_context->ch_layout = AV_CHANNEL_LAYOUT_STEREO;
|
||||
#else
|
||||
codec_context->channel_layout = AV_CH_LAYOUT_STEREO;
|
||||
|
@ -527,7 +531,7 @@ bool FFmpegAudioStream::Init(FFmpegMuxer& muxer) {
|
|||
audio_frame->format = codec_context->sample_fmt;
|
||||
audio_frame->sample_rate = codec_context->sample_rate;
|
||||
|
||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100)
|
||||
#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(59, 24, 100) // lavc 59.24.100
|
||||
auto num_channels = codec_context->ch_layout.nb_channels;
|
||||
audio_frame->ch_layout = codec_context->ch_layout;
|
||||
SwrContext* context = nullptr;
|
||||
|
@ -1003,7 +1007,7 @@ void GetOptionList(std::vector<OptionInfo>& out, const AVClass* av_class, bool s
|
|||
}
|
||||
|
||||
const AVClass* child_class = nullptr;
|
||||
#if LIBAVCODEC_VERSION_MAJOR >= 59
|
||||
#if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(56, 53, 100) // lavu 56.53.100
|
||||
void* iter = nullptr;
|
||||
while ((child_class = FFmpeg::av_opt_child_class_iterate(av_class, &iter))) {
|
||||
#else
|
||||
|
|
|
@ -37,7 +37,7 @@ public:
|
|||
protected:
|
||||
~FFmpegStream();
|
||||
|
||||
void WritePacket(AVPacket& packet);
|
||||
void WritePacket(AVPacket* packet);
|
||||
void SendFrame(AVFrame* frame);
|
||||
|
||||
struct AVCodecContextDeleter {
|
||||
|
@ -52,6 +52,12 @@ protected:
|
|||
}
|
||||
};
|
||||
|
||||
struct AVPacketDeleter {
|
||||
void operator()(AVPacket* packet) const {
|
||||
av_packet_free(&packet);
|
||||
}
|
||||
};
|
||||
|
||||
AVFormatContext* format_context{};
|
||||
std::mutex* format_context_mutex{};
|
||||
std::unique_ptr<AVCodecContext, AVCodecContextDeleter> codec_context{};
|
||||
|
|
|
@ -31,7 +31,7 @@ enum class LowPathType : u32 {
|
|||
};
|
||||
|
||||
union Mode {
|
||||
u32 hex;
|
||||
u32 hex = 0;
|
||||
BitField<0, 1, u32> read_flag;
|
||||
BitField<1, 1, u32> write_flag;
|
||||
BitField<2, 1, u32> create_flag;
|
||||
|
|
|
@ -90,7 +90,7 @@ union CoreVersion {
|
|||
major.Assign(major_ver);
|
||||
}
|
||||
|
||||
u32 raw;
|
||||
u32 raw = 0;
|
||||
BitField<8, 8, u32> revision;
|
||||
BitField<16, 8, u32> minor;
|
||||
BitField<24, 8, u32> major;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
// Refer to the license.txt file included.
|
||||
|
||||
#include <algorithm>
|
||||
#include <climits>
|
||||
#include <list>
|
||||
#include <vector>
|
||||
#include <boost/serialization/string.hpp>
|
||||
|
@ -288,7 +289,7 @@ void ThreadManager::DebugThreadQueue() {
|
|||
|
||||
for (auto& t : thread_list) {
|
||||
u32 priority = ready_queue.contains(t.get());
|
||||
if (priority != -1) {
|
||||
if (priority != UINT_MAX) {
|
||||
LOG_DEBUG(Kernel, "0x{:02X} {}", priority, t->GetObjectId());
|
||||
}
|
||||
}
|
||||
|
|
|
@ -904,7 +904,7 @@ void Module::SetSystemSetupNeeded(bool setup_needed) {
|
|||
}
|
||||
|
||||
bool Module::IsSystemSetupNeeded() {
|
||||
u32 block;
|
||||
u32 block{};
|
||||
GetConfigInfoBlock(SystemSetupRequiredBlockID, sizeof(block), 0xC, &block);
|
||||
return (block & 0xFFFF) == 0;
|
||||
}
|
||||
|
|
|
@ -204,12 +204,11 @@ void ExtraHID::HandleReadCalibrationDataRequest(const std::vector<u8>& request_b
|
|||
return;
|
||||
}
|
||||
|
||||
std::vector<u8> response(5);
|
||||
std::vector<u8> response(5 + size);
|
||||
response[0] = static_cast<u8>(ResponseID::ReadCalibrationData);
|
||||
std::memcpy(&response[1], &request.offset, sizeof(request.offset));
|
||||
std::memcpy(&response[3], &request.size, sizeof(request.size));
|
||||
response.insert(response.end(), calibration_data.begin() + offset,
|
||||
calibration_data.begin() + offset + size);
|
||||
std::memcpy(&response[5], calibration_data.data() + offset, size);
|
||||
Send(response);
|
||||
}
|
||||
|
||||
|
|
|
@ -303,6 +303,7 @@ std::vector<u8> GenerateEAPoLStartFrame(u16 association_id, const NodeInfo& node
|
|||
std::memcpy(eapol_buffer.data(), &eapol_start, sizeof(eapol_start));
|
||||
|
||||
std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
|
||||
buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket));
|
||||
buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
|
||||
return buffer;
|
||||
}
|
||||
|
@ -366,6 +367,7 @@ std::vector<u8> GenerateEAPoLLogoffFrame(const MacAddress& mac_address, u16 netw
|
|||
std::memcpy(eapol_buffer.data(), &eapol_logoff, sizeof(eapol_logoff));
|
||||
|
||||
std::vector<u8> buffer = GenerateLLCHeader(EtherType::EAPoL);
|
||||
buffer.reserve(buffer.size() + sizeof(EAPoLStartPacket));
|
||||
buffer.insert(buffer.end(), eapol_buffer.begin(), eapol_buffer.end());
|
||||
return buffer;
|
||||
}
|
||||
|
|
|
@ -519,9 +519,9 @@ struct CTRPollFD {
|
|||
CTRPollFD result;
|
||||
result.events.hex = Events::TranslateTo3DS(fd.events, has_libctru_bug).hex;
|
||||
result.revents.hex = Events::TranslateTo3DS(fd.revents, has_libctru_bug).hex;
|
||||
for (auto iter = socu.open_sockets.begin(); iter != socu.open_sockets.end(); ++iter) {
|
||||
if (iter->second.socket_fd == fd.fd) {
|
||||
result.fd = iter->first;
|
||||
for (const auto& socket : socu.open_sockets) {
|
||||
if (socket.second.socket_fd == fd.fd) {
|
||||
result.fd = socket.first;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -662,7 +662,8 @@ struct CTRAddrInfo {
|
|||
};
|
||||
ctr_addr.ai_addrlen = static_cast<s32_le>(ctr_addr.ai_addr.raw.len);
|
||||
if (addr.ai_canonname)
|
||||
std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname, sizeof(ctr_addr.ai_canonname));
|
||||
std::strncpy(ctr_addr.ai_canonname, addr.ai_canonname,
|
||||
sizeof(ctr_addr.ai_canonname) - 1);
|
||||
return ctr_addr;
|
||||
}
|
||||
|
||||
|
|
|
@ -45,7 +45,7 @@ struct ControllerState {
|
|||
union {
|
||||
struct {
|
||||
union {
|
||||
u16_le hex;
|
||||
u16_le hex = 0;
|
||||
|
||||
BitField<0, 1, u16> a;
|
||||
BitField<1, 1, u16> b;
|
||||
|
@ -96,7 +96,7 @@ struct ControllerState {
|
|||
|
||||
struct {
|
||||
union {
|
||||
u32_le hex;
|
||||
u32_le hex = 0;
|
||||
|
||||
BitField<0, 5, u32> battery_level;
|
||||
BitField<5, 1, u32> zl_not_held;
|
||||
|
@ -136,7 +136,7 @@ static u64 GetInputCount(const std::vector<u8>& input) {
|
|||
break;
|
||||
}
|
||||
|
||||
ControllerState state;
|
||||
ControllerState state{};
|
||||
std::memcpy(&state, input.data() + pos, sizeof(ControllerState));
|
||||
if (state.type == ControllerStateType::PadAndCircle) {
|
||||
input_count++;
|
||||
|
@ -238,7 +238,7 @@ void Movie::CheckInputEnd() {
|
|||
}
|
||||
|
||||
void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circle_pad_y) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
current_input++;
|
||||
|
@ -270,7 +270,7 @@ void Movie::Play(Service::HID::PadState& pad_state, s16& circle_pad_x, s16& circ
|
|||
}
|
||||
|
||||
void Movie::Play(Service::HID::TouchDataEntry& touch_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
|
||||
|
@ -287,7 +287,7 @@ void Movie::Play(Service::HID::TouchDataEntry& touch_data) {
|
|||
}
|
||||
|
||||
void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
|
||||
|
@ -304,7 +304,7 @@ void Movie::Play(Service::HID::AccelerometerDataEntry& accelerometer_data) {
|
|||
}
|
||||
|
||||
void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
|
||||
|
@ -321,7 +321,7 @@ void Movie::Play(Service::HID::GyroscopeDataEntry& gyroscope_data) {
|
|||
}
|
||||
|
||||
void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_y) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
|
||||
|
@ -339,7 +339,7 @@ void Movie::Play(Service::IR::PadState& pad_state, s16& c_stick_x, s16& c_stick_
|
|||
}
|
||||
|
||||
void Movie::Play(Service::IR::ExtraHIDResponse& extra_hid_response) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
std::memcpy(&s, &recorded_input[current_byte], sizeof(ControllerState));
|
||||
current_byte += sizeof(ControllerState);
|
||||
|
||||
|
@ -371,7 +371,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa
|
|||
const s16& circle_pad_y) {
|
||||
current_input++;
|
||||
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::PadAndCircle;
|
||||
|
||||
s.pad_and_circle.a.Assign(static_cast<u16>(pad_state.a));
|
||||
|
@ -396,7 +396,7 @@ void Movie::Record(const Service::HID::PadState& pad_state, const s16& circle_pa
|
|||
}
|
||||
|
||||
void Movie::Record(const Service::HID::TouchDataEntry& touch_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::Touch;
|
||||
|
||||
s.touch.x = touch_data.x;
|
||||
|
@ -407,7 +407,7 @@ void Movie::Record(const Service::HID::TouchDataEntry& touch_data) {
|
|||
}
|
||||
|
||||
void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::Accelerometer;
|
||||
|
||||
s.accelerometer.x = accelerometer_data.x;
|
||||
|
@ -418,7 +418,7 @@ void Movie::Record(const Service::HID::AccelerometerDataEntry& accelerometer_dat
|
|||
}
|
||||
|
||||
void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::Gyroscope;
|
||||
|
||||
s.gyroscope.x = gyroscope_data.x;
|
||||
|
@ -430,7 +430,7 @@ void Movie::Record(const Service::HID::GyroscopeDataEntry& gyroscope_data) {
|
|||
|
||||
void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x,
|
||||
const s16& c_stick_y) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::IrRst;
|
||||
|
||||
s.ir_rst.x = c_stick_x;
|
||||
|
@ -442,7 +442,7 @@ void Movie::Record(const Service::IR::PadState& pad_state, const s16& c_stick_x,
|
|||
}
|
||||
|
||||
void Movie::Record(const Service::IR::ExtraHIDResponse& extra_hid_response) {
|
||||
ControllerState s;
|
||||
ControllerState s{};
|
||||
s.type = ControllerStateType::ExtraHidResponse;
|
||||
|
||||
s.extra_hid_response.battery_level.Assign(extra_hid_response.buttons.battery_level);
|
||||
|
|
|
@ -1018,7 +1018,7 @@ public:
|
|||
}
|
||||
|
||||
Common::ParamPackage GetNextInput() override {
|
||||
SDL_Event event;
|
||||
SDL_Event event{};
|
||||
while (state.event_queue.Pop(event)) {
|
||||
if (event.type != SDL_JOYAXISMOTION || std::abs(event.jaxis.value / 32767.0) < 0.5) {
|
||||
continue;
|
||||
|
|
|
@ -85,42 +85,42 @@ Packet& Packet::operator>>(u8& out_data) {
|
|||
}
|
||||
|
||||
Packet& Packet::operator>>(s16& out_data) {
|
||||
s16 value;
|
||||
s16 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohs(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Packet& Packet::operator>>(u16& out_data) {
|
||||
u16 value;
|
||||
u16 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohs(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Packet& Packet::operator>>(s32& out_data) {
|
||||
s32 value;
|
||||
s32 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohl(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Packet& Packet::operator>>(u32& out_data) {
|
||||
u32 value;
|
||||
u32 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohl(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Packet& Packet::operator>>(s64& out_data) {
|
||||
s64 value;
|
||||
s64 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohll(value);
|
||||
return *this;
|
||||
}
|
||||
|
||||
Packet& Packet::operator>>(u64& out_data) {
|
||||
u64 value;
|
||||
u64 value = 0;
|
||||
Read(&value, sizeof(value));
|
||||
out_data = ntohll(value);
|
||||
return *this;
|
||||
|
|
|
@ -150,7 +150,7 @@ public:
|
|||
setup.uniforms.f[0] = Common::MakeVec(vertex_num, vertex_num, vertex_num, vertex_num);
|
||||
|
||||
// The second uniform register and so on are used for receiving input vertices
|
||||
buffer_cur = setup.uniforms.f + 1;
|
||||
buffer_cur = setup.uniforms.f.data() + 1;
|
||||
|
||||
main_vertex_num = regs.pipeline.variable_vertex_main_num_minus_1 + 1;
|
||||
total_vertex_num = val;
|
||||
|
@ -200,7 +200,7 @@ private:
|
|||
template <class Archive>
|
||||
void save(Archive& ar, const unsigned int version) const {
|
||||
serialize_common(this, ar, version);
|
||||
auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f);
|
||||
auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f.data());
|
||||
ar << buffer_idx;
|
||||
}
|
||||
|
||||
|
@ -209,7 +209,7 @@ private:
|
|||
serialize_common(this, ar, version);
|
||||
u32 buffer_idx;
|
||||
ar >> buffer_idx;
|
||||
buffer_cur = setup.uniforms.f + buffer_idx;
|
||||
buffer_cur = setup.uniforms.f.data() + buffer_idx;
|
||||
}
|
||||
|
||||
BOOST_SERIALIZATION_SPLIT_MEMBER()
|
||||
|
@ -229,7 +229,7 @@ public:
|
|||
vs_output_num = regs.pipeline.vs_outmap_total_minus_1_a + 1;
|
||||
ASSERT(vs_output_num == regs.pipeline.gs_config.stride_minus_1 + 1);
|
||||
std::size_t vertex_num = regs.pipeline.gs_config.fixed_vertex_num_minus_1 + 1;
|
||||
buffer_cur = buffer_begin = setup.uniforms.f + regs.pipeline.gs_config.start_index;
|
||||
buffer_cur = buffer_begin = setup.uniforms.f.data() + regs.pipeline.gs_config.start_index;
|
||||
buffer_end = buffer_begin + vs_output_num * vertex_num;
|
||||
}
|
||||
|
||||
|
@ -273,9 +273,9 @@ private:
|
|||
template <class Archive>
|
||||
void save(Archive& ar, const unsigned int version) const {
|
||||
serialize_common(this, ar, version);
|
||||
auto buffer_offset = static_cast<u32>(buffer_begin - setup.uniforms.f);
|
||||
auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f);
|
||||
auto buffer_size = static_cast<u32>(buffer_end - setup.uniforms.f);
|
||||
auto buffer_offset = static_cast<u32>(buffer_begin - setup.uniforms.f.data());
|
||||
auto buffer_idx = static_cast<u32>(buffer_cur - setup.uniforms.f.data());
|
||||
auto buffer_size = static_cast<u32>(buffer_end - setup.uniforms.f.data());
|
||||
ar << buffer_offset;
|
||||
ar << buffer_idx;
|
||||
ar << buffer_size;
|
||||
|
@ -288,9 +288,9 @@ private:
|
|||
ar >> buffer_offset;
|
||||
ar >> buffer_idx;
|
||||
ar >> buffer_size;
|
||||
buffer_begin = setup.uniforms.f + buffer_offset;
|
||||
buffer_cur = setup.uniforms.f + buffer_idx;
|
||||
buffer_end = setup.uniforms.f + buffer_size;
|
||||
buffer_begin = setup.uniforms.f.data() + buffer_offset;
|
||||
buffer_cur = setup.uniforms.f.data() + buffer_idx;
|
||||
buffer_end = setup.uniforms.f.data() + buffer_size;
|
||||
}
|
||||
|
||||
BOOST_SERIALIZATION_SPLIT_MEMBER()
|
||||
|
|
|
@ -32,8 +32,7 @@ void Shutdown() {
|
|||
|
||||
template <typename T>
|
||||
void Zero(T& o) {
|
||||
static_assert(std::is_trivially_copyable_v<T>,
|
||||
"It's undefined behavior to memset a non-trivially copyable type");
|
||||
static_assert(std::is_trivial_v<T>, "It's undefined behavior to memset a non-trivial type");
|
||||
memset(&o, 0, sizeof(o));
|
||||
}
|
||||
|
||||
|
@ -56,10 +55,10 @@ State::State() : geometry_pipeline(*this) {
|
|||
|
||||
void State::Reset() {
|
||||
Zero(regs);
|
||||
Zero(vs);
|
||||
Zero(gs);
|
||||
vs = {};
|
||||
gs = {};
|
||||
Zero(cmd_list);
|
||||
Zero(immediate);
|
||||
immediate = {};
|
||||
primitive_assembler.Reconfigure(PipelineRegs::TriangleTopology::List);
|
||||
vs_float_regs_counter = 0;
|
||||
vs_uniform_write_buffer.fill(0);
|
||||
|
|
|
@ -241,7 +241,7 @@ private:
|
|||
struct Uniforms {
|
||||
// The float uniforms are accessed by the shader JIT using SSE instructions, and are
|
||||
// therefore required to be 16-byte aligned.
|
||||
alignas(16) Common::Vec4<float24> f[96];
|
||||
alignas(16) std::array<Common::Vec4<float24>, 96> f;
|
||||
|
||||
std::array<bool, 16> b;
|
||||
std::array<Common::Vec4<u8>, 4> i;
|
||||
|
|
Loading…
Reference in a new issue