mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-30 21:30:04 +00:00 
			
		
		
		
	Replace boost::optional with std::optional where possible
This commit is contained in:
		
							parent
							
								
									87e16c80ac
								
							
						
					
					
						commit
						d37a2270d6
					
				
					 30 changed files with 104 additions and 106 deletions
				
			
		|  | @ -322,7 +322,7 @@ void ConfigureInput::setPollingResult(const Common::ParamPackage& params, bool a | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     updateButtonLabels(); |     updateButtonLabels(); | ||||||
|     input_setter = boost::none; |     input_setter.reset(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void ConfigureInput::keyPressEvent(QKeyEvent* event) { | void ConfigureInput::keyPressEvent(QKeyEvent* event) { | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| // Copyright 2016 Citra Emulator Project
 | // Copyright 2016 Citra Emulator Project
 | ||||||
| // Licensed under GPLv2 or any later version
 | // Licensed under GPLv2 or any later version
 | ||||||
| // Refer to the license.txt file included.
 | // Refer to the license.txt file included.
 | ||||||
| 
 | 
 | ||||||
|  | @ -7,11 +7,11 @@ | ||||||
| #include <array> | #include <array> | ||||||
| #include <functional> | #include <functional> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <QKeyEvent> | #include <QKeyEvent> | ||||||
| #include <QWidget> | #include <QWidget> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/param_package.h" | #include "common/param_package.h" | ||||||
| #include "core/settings.h" | #include "core/settings.h" | ||||||
| #include "input_common/main.h" | #include "input_common/main.h" | ||||||
|  | @ -42,7 +42,7 @@ private: | ||||||
|     std::unique_ptr<QTimer> poll_timer; |     std::unique_ptr<QTimer> poll_timer; | ||||||
| 
 | 
 | ||||||
|     /// This will be the the setting function when an input is awaiting configuration.
 |     /// This will be the the setting function when an input is awaiting configuration.
 | ||||||
|     boost::optional<std::function<void(const Common::ParamPackage&)>> input_setter; |     std::optional<std::function<void(const Common::ParamPackage&)>> input_setter; | ||||||
| 
 | 
 | ||||||
|     std::array<Common::ParamPackage, Settings::NativeButton::NumButtons> buttons_param; |     std::array<Common::ParamPackage, Settings::NativeButton::NumButtons> buttons_param; | ||||||
|     std::array<Common::ParamPackage, Settings::NativeAnalog::NumAnalogs> analogs_param; |     std::array<Common::ParamPackage, Settings::NativeAnalog::NumAnalogs> analogs_param; | ||||||
|  |  | ||||||
|  | @ -99,7 +99,7 @@ System::ResultStatus System::Load(EmuWindow& emu_window, const std::string& file | ||||||
|         LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); |         LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); | ||||||
|         return ResultStatus::ErrorGetLoader; |         return ResultStatus::ErrorGetLoader; | ||||||
|     } |     } | ||||||
|     std::pair<boost::optional<u32>, Loader::ResultStatus> system_mode = |     std::pair<std::optional<u32>, Loader::ResultStatus> system_mode = | ||||||
|         app_loader->LoadKernelSystemMode(); |         app_loader->LoadKernelSystemMode(); | ||||||
| 
 | 
 | ||||||
|     if (system_mode.second != Loader::ResultStatus::Success) { |     if (system_mode.second != Loader::ResultStatus::Success) { | ||||||
|  | @ -116,7 +116,7 @@ System::ResultStatus System::Load(EmuWindow& emu_window, const std::string& file | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ResultStatus init_result{Init(emu_window, system_mode.first.get())}; |     ResultStatus init_result{Init(emu_window, *system_mode.first)}; | ||||||
|     if (init_result != ResultStatus::Success) { |     if (init_result != ResultStatus::Success) { | ||||||
|         LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", |         LOG_CRITICAL(Core, "Failed to initialize system (Error {})!", | ||||||
|                      static_cast<u32>(init_result)); |                      static_cast<u32>(init_result)); | ||||||
|  |  | ||||||
|  | @ -38,13 +38,13 @@ Loader::ResultStatus Ticket::Load(const std::vector<u8> file_data, std::size_t o | ||||||
|     return Loader::ResultStatus::Success; |     return Loader::ResultStatus::Success; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<std::array<u8, 16>> Ticket::GetTitleKey() const { | std::optional<std::array<u8, 16>> Ticket::GetTitleKey() const { | ||||||
|     HW::AES::InitKeys(); |     HW::AES::InitKeys(); | ||||||
|     std::array<u8, 16> ctr{}; |     std::array<u8, 16> ctr{}; | ||||||
|     std::memcpy(ctr.data(), &ticket_body.title_id, sizeof(u64)); |     std::memcpy(ctr.data(), &ticket_body.title_id, sizeof(u64)); | ||||||
|     HW::AES::SelectCommonKeyIndex(ticket_body.common_key_index); |     HW::AES::SelectCommonKeyIndex(ticket_body.common_key_index); | ||||||
|     if (!HW::AES::IsNormalKeyAvailable(HW::AES::KeySlotID::TicketCommonKey)) { |     if (!HW::AES::IsNormalKeyAvailable(HW::AES::KeySlotID::TicketCommonKey)) { | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     auto key = HW::AES::GetNormalKey(HW::AES::KeySlotID::TicketCommonKey); |     auto key = HW::AES::GetNormalKey(HW::AES::KeySlotID::TicketCommonKey); | ||||||
|     auto title_key = ticket_body.title_key; |     auto title_key = ticket_body.title_key; | ||||||
|  |  | ||||||
|  | @ -5,9 +5,9 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_funcs.h" | #include "common/common_funcs.h" | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/swap.h" | #include "common/swap.h" | ||||||
|  | @ -48,7 +48,7 @@ public: | ||||||
| #pragma pack(pop) | #pragma pack(pop) | ||||||
| 
 | 
 | ||||||
|     Loader::ResultStatus Load(const std::vector<u8> file_data, std::size_t offset = 0); |     Loader::ResultStatus Load(const std::vector<u8> file_data, std::size_t offset = 0); | ||||||
|     boost::optional<std::array<u8, 16>> GetTitleKey() const; |     std::optional<std::array<u8, 16>> GetTitleKey() const; | ||||||
| 
 | 
 | ||||||
| private: | private: | ||||||
|     Body ticket_body; |     Body ticket_body; | ||||||
|  |  | ||||||
|  | @ -147,7 +147,7 @@ ResultCode SharedMemory::Map(Process* target_process, VAddr address, MemoryPermi | ||||||
| 
 | 
 | ||||||
|     if (base_address == 0 && target_address == 0) { |     if (base_address == 0 && target_address == 0) { | ||||||
|         // Calculate the address at which to map the memory block.
 |         // Calculate the address at which to map the memory block.
 | ||||||
|         target_address = Memory::PhysicalToVirtualAddress(linear_heap_phys_address).value(); |         target_address = *Memory::PhysicalToVirtualAddress(linear_heap_phys_address); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Map the memory block into the target process
 |     // Map the memory block into the target process
 | ||||||
|  |  | ||||||
|  | @ -131,8 +131,7 @@ ResultCode CIAFile::WriteTitleMetadata() { | ||||||
|     auto content_count = container.GetTitleMetadata().GetContentCount(); |     auto content_count = container.GetTitleMetadata().GetContentCount(); | ||||||
|     content_written.resize(content_count); |     content_written.resize(content_count); | ||||||
| 
 | 
 | ||||||
|     auto title_key = container.GetTicket().GetTitleKey(); |     if (auto title_key = container.GetTicket().GetTitleKey()) { | ||||||
|     if (title_key) { |  | ||||||
|         decryption_state->content.resize(content_count); |         decryption_state->content.resize(content_count); | ||||||
|         for (std::size_t i = 0; i < content_count; ++i) { |         for (std::size_t i = 0; i < content_count; ++i) { | ||||||
|             auto ctr = tmd.GetContentCTRByIndex(i); |             auto ctr = tmd.GetContentCTRByIndex(i); | ||||||
|  | @ -339,7 +338,7 @@ InstallStatus InstallCIA(const std::string& path, | ||||||
|         Service::AM::CIAFile installFile( |         Service::AM::CIAFile installFile( | ||||||
|             Service::AM::GetTitleMediaType(container.GetTitleMetadata().GetTitleID())); |             Service::AM::GetTitleMediaType(container.GetTitleMetadata().GetTitleID())); | ||||||
| 
 | 
 | ||||||
|         bool title_key_available = container.GetTicket().GetTitleKey().is_initialized(); |         bool title_key_available = container.GetTicket().GetTitleKey().has_value(); | ||||||
| 
 | 
 | ||||||
|         for (std::size_t i = 0; i < container.GetTitleMetadata().GetContentCount(); i++) { |         for (std::size_t i = 0; i < container.GetTitleMetadata().GetContentCount(); i++) { | ||||||
|             if ((container.GetTitleMetadata().GetContentTypeByIndex(static_cast<u16>(i)) & |             if ((container.GetTitleMetadata().GetContentTypeByIndex(static_cast<u16>(i)) & | ||||||
|  |  | ||||||
|  | @ -207,7 +207,7 @@ ResultVal<MessageParameter> AppletManager::GlanceParameter(AppletId app_id) { | ||||||
|     // Note: The NS module always clears the DSPSleep and DSPWakeup signals even in GlanceParameter.
 |     // Note: The NS module always clears the DSPSleep and DSPWakeup signals even in GlanceParameter.
 | ||||||
|     if (next_parameter->signal == SignalType::DspSleep || |     if (next_parameter->signal == SignalType::DspSleep || | ||||||
|         next_parameter->signal == SignalType::DspWakeup) |         next_parameter->signal == SignalType::DspWakeup) | ||||||
|         next_parameter = boost::none; |         next_parameter = {}; | ||||||
| 
 | 
 | ||||||
|     return MakeResult<MessageParameter>(parameter); |     return MakeResult<MessageParameter>(parameter); | ||||||
| } | } | ||||||
|  | @ -216,7 +216,7 @@ ResultVal<MessageParameter> AppletManager::ReceiveParameter(AppletId app_id) { | ||||||
|     auto result = GlanceParameter(app_id); |     auto result = GlanceParameter(app_id); | ||||||
|     if (result.Succeeded()) { |     if (result.Succeeded()) { | ||||||
|         // Clear the parameter
 |         // Clear the parameter
 | ||||||
|         next_parameter = boost::none; |         next_parameter = {}; | ||||||
|     } |     } | ||||||
|     return result; |     return result; | ||||||
| } | } | ||||||
|  | @ -236,7 +236,7 @@ bool AppletManager::CancelParameter(bool check_sender, AppletId sender_appid, bo | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (cancellation_success) |     if (cancellation_success) | ||||||
|         next_parameter = boost::none; |         next_parameter = {}; | ||||||
| 
 | 
 | ||||||
|     return cancellation_success; |     return cancellation_success; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -5,8 +5,8 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <optional> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "core/hle/kernel/event.h" | #include "core/hle/kernel/event.h" | ||||||
| #include "core/hle/result.h" | #include "core/hle/result.h" | ||||||
| #include "core/hle/service/fs/archive.h" | #include "core/hle/service/fs/archive.h" | ||||||
|  | @ -143,7 +143,7 @@ public: | ||||||
| private: | private: | ||||||
|     /// Parameter data to be returned in the next call to Glance/ReceiveParameter.
 |     /// Parameter data to be returned in the next call to Glance/ReceiveParameter.
 | ||||||
|     /// TODO(Subv): Use std::optional once we migrate to C++17.
 |     /// TODO(Subv): Use std::optional once we migrate to C++17.
 | ||||||
|     boost::optional<MessageParameter> next_parameter; |     std::optional<MessageParameter> next_parameter; | ||||||
| 
 | 
 | ||||||
|     static constexpr std::size_t NumAppletSlot = 4; |     static constexpr std::size_t NumAppletSlot = 4; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -206,7 +206,7 @@ void Module::Interface::GetSharedFont(Kernel::HLERequestContext& ctx) { | ||||||
|     // The shared font has to be relocated to the new address before being passed to the
 |     // The shared font has to be relocated to the new address before being passed to the
 | ||||||
|     // application.
 |     // application.
 | ||||||
|     VAddr target_address = |     VAddr target_address = | ||||||
|         Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address).value(); |         *Memory::PhysicalToVirtualAddress(apt->shared_font_mem->linear_heap_phys_address); | ||||||
|     if (!apt->shared_font_relocated) { |     if (!apt->shared_font_relocated) { | ||||||
|         BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address); |         BCFNT::RelocateSharedFont(apt->shared_font_mem, target_address); | ||||||
|         apt->shared_font_relocated = true; |         apt->shared_font_relocated = true; | ||||||
|  |  | ||||||
|  | @ -132,7 +132,7 @@ void HTTP_C::CreateContext(Kernel::HLERequestContext& ctx) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // This command can only be called without a bound session.
 |     // This command can only be called without a bound session.
 | ||||||
|     if (session_data->current_http_context != boost::none) { |     if (session_data->current_http_context) { | ||||||
|         LOG_ERROR(Service_HTTP, "Command called with a bound context"); |         LOG_ERROR(Service_HTTP, "Command called with a bound context"); | ||||||
| 
 | 
 | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||||||
|  | @ -198,7 +198,7 @@ void HTTP_C::CloseContext(Kernel::HLERequestContext& ctx) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     ASSERT_MSG(session_data->current_http_context == boost::none, |     ASSERT_MSG(!session_data->current_http_context, | ||||||
|                "Unimplemented CloseContext on context-bound session"); |                "Unimplemented CloseContext on context-bound session"); | ||||||
| 
 | 
 | ||||||
|     auto itr = contexts.find(context_handle); |     auto itr = contexts.find(context_handle); | ||||||
|  | @ -249,7 +249,7 @@ void HTTP_C::AddRequestHeader(Kernel::HLERequestContext& ctx) { | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // This command can only be called with a bound context
 |     // This command can only be called with a bound context
 | ||||||
|     if (session_data->current_http_context == boost::none) { |     if (!session_data->current_http_context) { | ||||||
|         LOG_ERROR(Service_HTTP, "Command called without a bound context"); |         LOG_ERROR(Service_HTTP, "Command called without a bound context"); | ||||||
| 
 | 
 | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||||||
|  | @ -263,7 +263,7 @@ void HTTP_C::AddRequestHeader(Kernel::HLERequestContext& ctx) { | ||||||
|         LOG_ERROR(Service_HTTP, |         LOG_ERROR(Service_HTTP, | ||||||
|                   "Tried to add a request header on a mismatched session input context={} session " |                   "Tried to add a request header on a mismatched session input context={} session " | ||||||
|                   "context={}", |                   "context={}", | ||||||
|                   context_handle, session_data->current_http_context.get()); |                   context_handle, *session_data->current_http_context); | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 2); | ||||||
|         rb.Push(ERROR_STATE_ERROR); |         rb.Push(ERROR_STATE_ERROR); | ||||||
|         rb.PushMappedBuffer(value_buffer); |         rb.PushMappedBuffer(value_buffer); | ||||||
|  | @ -313,7 +313,7 @@ void HTTP_C::OpenClientCertContext(Kernel::HLERequestContext& ctx) { | ||||||
|     if (!session_data->initialized) { |     if (!session_data->initialized) { | ||||||
|         LOG_ERROR(Service_HTTP, "Command called without Initialize"); |         LOG_ERROR(Service_HTTP, "Command called without Initialize"); | ||||||
|         result = ERROR_STATE_ERROR; |         result = ERROR_STATE_ERROR; | ||||||
|     } else if (session_data->current_http_context != boost::none) { |     } else if (session_data->current_http_context) { | ||||||
|         LOG_ERROR(Service_HTTP, "Command called with a bound context"); |         LOG_ERROR(Service_HTTP, "Command called with a bound context"); | ||||||
|         result = ERROR_NOT_IMPLEMENTED; |         result = ERROR_NOT_IMPLEMENTED; | ||||||
|     } else if (session_data->num_client_certs >= 2) { |     } else if (session_data->num_client_certs >= 2) { | ||||||
|  | @ -352,7 +352,7 @@ void HTTP_C::OpenDefaultClientCertContext(Kernel::HLERequestContext& ctx) { | ||||||
|         return; |         return; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (session_data->current_http_context != boost::none) { |     if (session_data->current_http_context) { | ||||||
|         LOG_ERROR(Service_HTTP, "Command called with a bound context"); |         LOG_ERROR(Service_HTTP, "Command called with a bound context"); | ||||||
|         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); |         IPC::RequestBuilder rb = rp.MakeBuilder(1, 0); | ||||||
|         rb.Push(ERROR_NOT_IMPLEMENTED); |         rb.Push(ERROR_NOT_IMPLEMENTED); | ||||||
|  |  | ||||||
|  | @ -5,10 +5,10 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <unordered_map> | #include <unordered_map> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "core/hle/kernel/shared_memory.h" | #include "core/hle/kernel/shared_memory.h" | ||||||
| #include "core/hle/service/service.h" | #include "core/hle/service/service.h" | ||||||
| 
 | 
 | ||||||
|  | @ -112,8 +112,8 @@ public: | ||||||
|     std::string url; |     std::string url; | ||||||
|     RequestMethod method; |     RequestMethod method; | ||||||
|     RequestState state = RequestState::NotStarted; |     RequestState state = RequestState::NotStarted; | ||||||
|     boost::optional<Proxy> proxy; |     std::optional<Proxy> proxy; | ||||||
|     boost::optional<BasicAuth> basic_auth; |     std::optional<BasicAuth> basic_auth; | ||||||
|     SSLConfig ssl_config{}; |     SSLConfig ssl_config{}; | ||||||
|     u32 socket_buffer_size; |     u32 socket_buffer_size; | ||||||
|     std::vector<RequestHeader> headers; |     std::vector<RequestHeader> headers; | ||||||
|  | @ -123,7 +123,7 @@ public: | ||||||
| struct SessionData : public Kernel::SessionRequestHandler::SessionDataBase { | struct SessionData : public Kernel::SessionRequestHandler::SessionDataBase { | ||||||
|     /// The HTTP context that is currently bound to this session, this can be empty if no context
 |     /// The HTTP context that is currently bound to this session, this can be empty if no context
 | ||||||
|     /// has been bound. Certain commands can only be called on a session with a bound context.
 |     /// has been bound. Certain commands can only be called on a session with a bound context.
 | ||||||
|     boost::optional<Context::Handle> current_http_context; |     std::optional<Context::Handle> current_http_context; | ||||||
| 
 | 
 | ||||||
|     u32 session_id; |     u32 session_id; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,8 +4,8 @@ | ||||||
| 
 | 
 | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <exception> | #include <exception> | ||||||
|  | #include <optional> | ||||||
| #include <sstream> | #include <sstream> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_paths.h" | #include "common/common_paths.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| #include "common/logging/log.h" | #include "common/logging/log.h" | ||||||
|  | @ -18,24 +18,24 @@ namespace AES { | ||||||
| 
 | 
 | ||||||
| namespace { | namespace { | ||||||
| 
 | 
 | ||||||
| boost::optional<AESKey> generator_constant; | std::optional<AESKey> generator_constant; | ||||||
| 
 | 
 | ||||||
| struct KeySlot { | struct KeySlot { | ||||||
|     boost::optional<AESKey> x; |     std::optional<AESKey> x; | ||||||
|     boost::optional<AESKey> y; |     std::optional<AESKey> y; | ||||||
|     boost::optional<AESKey> normal; |     std::optional<AESKey> normal; | ||||||
| 
 | 
 | ||||||
|     void SetKeyX(boost::optional<AESKey> key) { |     void SetKeyX(std::optional<AESKey> key) { | ||||||
|         x = key; |         x = key; | ||||||
|         GenerateNormalKey(); |         GenerateNormalKey(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void SetKeyY(boost::optional<AESKey> key) { |     void SetKeyY(std::optional<AESKey> key) { | ||||||
|         y = key; |         y = key; | ||||||
|         GenerateNormalKey(); |         GenerateNormalKey(); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     void SetNormalKey(boost::optional<AESKey> key) { |     void SetNormalKey(std::optional<AESKey> key) { | ||||||
|         normal = key; |         normal = key; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -43,7 +43,7 @@ struct KeySlot { | ||||||
|         if (x && y && generator_constant) { |         if (x && y && generator_constant) { | ||||||
|             normal = Lrot128(Add128(Xor128(Lrot128(*x, 2), *y), *generator_constant), 87); |             normal = Lrot128(Add128(Xor128(Lrot128(*x, 2), *y), *generator_constant), 87); | ||||||
|         } else { |         } else { | ||||||
|             normal = boost::none; |             normal = {}; | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  | @ -55,7 +55,7 @@ struct KeySlot { | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| std::array<KeySlot, KeySlotID::MaxKeySlotID> key_slots; | std::array<KeySlot, KeySlotID::MaxKeySlotID> key_slots; | ||||||
| std::array<boost::optional<AESKey>, 6> common_key_y_slots; | std::array<std::optional<AESKey>, 6> common_key_y_slots; | ||||||
| 
 | 
 | ||||||
| AESKey HexToKey(const std::string& hex) { | AESKey HexToKey(const std::string& hex) { | ||||||
|     if (hex.size() < 32) { |     if (hex.size() < 32) { | ||||||
|  | @ -169,7 +169,7 @@ void SetNormalKey(std::size_t slot_id, const AESKey& key) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| bool IsNormalKeyAvailable(std::size_t slot_id) { | bool IsNormalKeyAvailable(std::size_t slot_id) { | ||||||
|     return key_slots.at(slot_id).normal.is_initialized(); |     return key_slots.at(slot_id).normal.has_value(); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| AESKey GetNormalKey(std::size_t slot_id) { | AESKey GetNormalKey(std::size_t slot_id) { | ||||||
|  |  | ||||||
|  | @ -7,10 +7,10 @@ | ||||||
| #include <algorithm> | #include <algorithm> | ||||||
| #include <initializer_list> | #include <initializer_list> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <utility> | #include <utility> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/file_util.h" | #include "common/file_util.h" | ||||||
| #include "core/file_sys/romfs_reader.h" | #include "core/file_sys/romfs_reader.h" | ||||||
|  | @ -107,7 +107,7 @@ public: | ||||||
|      * information. |      * information. | ||||||
|      * @returns A pair with the optional system mode, and and the status. |      * @returns A pair with the optional system mode, and and the status. | ||||||
|      */ |      */ | ||||||
|     virtual std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() { |     virtual std::pair<std::optional<u32>, ResultStatus> LoadKernelSystemMode() { | ||||||
|         // 96MB allocated to the application.
 |         // 96MB allocated to the application.
 | ||||||
|         return std::make_pair(2, ResultStatus::Success); |         return std::make_pair(2, ResultStatus::Success); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  | @ -49,11 +49,11 @@ FileType AppLoader_NCCH::IdentifyType(FileUtil::IOFile& file) { | ||||||
|     return FileType::Error; |     return FileType::Error; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| std::pair<boost::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { | std::pair<std::optional<u32>, ResultStatus> AppLoader_NCCH::LoadKernelSystemMode() { | ||||||
|     if (!is_loaded) { |     if (!is_loaded) { | ||||||
|         ResultStatus res = base_ncch.Load(); |         ResultStatus res = base_ncch.Load(); | ||||||
|         if (res != ResultStatus::Success) { |         if (res != ResultStatus::Success) { | ||||||
|             return std::make_pair(boost::none, res); |             return std::make_pair(std::optional<u32>{}, res); | ||||||
|         } |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -39,7 +39,7 @@ public: | ||||||
|      * Loads the Exheader and returns the system mode for this application. |      * Loads the Exheader and returns the system mode for this application. | ||||||
|      * @returns A pair with the optional system mode, and and the status. |      * @returns A pair with the optional system mode, and and the status. | ||||||
|      */ |      */ | ||||||
|     std::pair<boost::optional<u32>, ResultStatus> LoadKernelSystemMode() override; |     std::pair<std::optional<u32>, ResultStatus> LoadKernelSystemMode() override; | ||||||
| 
 | 
 | ||||||
|     ResultStatus ReadCode(std::vector<u8>& buffer) override; |     ResultStatus ReadCode(std::vector<u8>& buffer) override; | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -333,7 +333,7 @@ void RasterizerMarkRegionCached(PAddr start, u32 size, bool cached) { | ||||||
|     PAddr paddr = start; |     PAddr paddr = start; | ||||||
| 
 | 
 | ||||||
|     for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { |     for (unsigned i = 0; i < num_pages; ++i, paddr += PAGE_SIZE) { | ||||||
|         boost::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr); |         std::optional<VAddr> maybe_vaddr = PhysicalToVirtualAddress(paddr); | ||||||
|         // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache,
 |         // While the physical <-> virtual mapping is 1:1 for the regions supported by the cache,
 | ||||||
|         // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond
 |         // some games (like Pokemon Super Mystery Dungeon) will try to use textures that go beyond
 | ||||||
|         // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing
 |         // the end address of VRAM, causing the Virtual->Physical translation to fail when flushing
 | ||||||
|  | @ -433,7 +433,7 @@ void RasterizerFlushVirtualRegion(VAddr start, u32 size, FlushMode mode) { | ||||||
|         VAddr overlap_start = std::max(start, region_start); |         VAddr overlap_start = std::max(start, region_start); | ||||||
|         VAddr overlap_end = std::min(end, region_end); |         VAddr overlap_end = std::min(end, region_end); | ||||||
| 
 | 
 | ||||||
|         PAddr physical_start = TryVirtualToPhysicalAddress(overlap_start).value(); |         PAddr physical_start = *TryVirtualToPhysicalAddress(overlap_start); | ||||||
|         u32 overlap_size = overlap_end - overlap_start; |         u32 overlap_size = overlap_end - overlap_start; | ||||||
| 
 | 
 | ||||||
|         auto* rasterizer = VideoCore::g_renderer->Rasterizer(); |         auto* rasterizer = VideoCore::g_renderer->Rasterizer(); | ||||||
|  | @ -740,7 +740,7 @@ void WriteMMIO<u64>(MMIORegionPointer mmio_handler, VAddr addr, const u64 data) | ||||||
|     mmio_handler->Write64(addr, data); |     mmio_handler->Write64(addr, data); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) { | std::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) { | ||||||
|     if (addr == 0) { |     if (addr == 0) { | ||||||
|         return 0; |         return 0; | ||||||
|     } else if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) { |     } else if (addr >= VRAM_VADDR && addr < VRAM_VADDR_END) { | ||||||
|  | @ -757,7 +757,7 @@ boost::optional<PAddr> TryVirtualToPhysicalAddress(const VAddr addr) { | ||||||
|         return addr - N3DS_EXTRA_RAM_VADDR + N3DS_EXTRA_RAM_PADDR; |         return addr - N3DS_EXTRA_RAM_VADDR + N3DS_EXTRA_RAM_PADDR; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return boost::none; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| PAddr VirtualToPhysicalAddress(const VAddr addr) { | PAddr VirtualToPhysicalAddress(const VAddr addr) { | ||||||
|  | @ -770,7 +770,7 @@ PAddr VirtualToPhysicalAddress(const VAddr addr) { | ||||||
|     return *paddr; |     return *paddr; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) { | std::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) { | ||||||
|     if (addr == 0) { |     if (addr == 0) { | ||||||
|         return 0; |         return 0; | ||||||
|     } else if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { |     } else if (addr >= VRAM_PADDR && addr < VRAM_PADDR_END) { | ||||||
|  | @ -785,7 +785,7 @@ boost::optional<VAddr> PhysicalToVirtualAddress(const PAddr addr) { | ||||||
|         return addr - N3DS_EXTRA_RAM_PADDR + N3DS_EXTRA_RAM_VADDR; |         return addr - N3DS_EXTRA_RAM_PADDR + N3DS_EXTRA_RAM_VADDR; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     return boost::none; |     return {}; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| } // namespace Memory
 | } // namespace Memory
 | ||||||
|  |  | ||||||
|  | @ -6,9 +6,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "core/mmio.h" | #include "core/mmio.h" | ||||||
| 
 | 
 | ||||||
|  | @ -214,7 +214,7 @@ std::string ReadCString(VAddr vaddr, std::size_t max_length); | ||||||
|  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical |  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical | ||||||
|  * address. This should be used by services to translate addresses for use by the hardware. |  * address. This should be used by services to translate addresses for use by the hardware. | ||||||
|  */ |  */ | ||||||
| boost::optional<PAddr> TryVirtualToPhysicalAddress(VAddr addr); | std::optional<PAddr> TryVirtualToPhysicalAddress(VAddr addr); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical |  * Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical | ||||||
|  | @ -227,7 +227,7 @@ PAddr VirtualToPhysicalAddress(VAddr addr); | ||||||
| /**
 | /**
 | ||||||
|  * Undoes a mapping performed by VirtualToPhysicalAddress(). |  * Undoes a mapping performed by VirtualToPhysicalAddress(). | ||||||
|  */ |  */ | ||||||
| boost::optional<VAddr> PhysicalToVirtualAddress(PAddr paddr); | std::optional<VAddr> PhysicalToVirtualAddress(PAddr paddr); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Gets a pointer to the memory region beginning at the specified physical address. |  * Gets a pointer to the memory region beginning at the specified physical address. | ||||||
|  |  | ||||||
|  | @ -4,13 +4,14 @@ | ||||||
| 
 | 
 | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
|  | #include <functional> | ||||||
| #include <memory> | #include <memory> | ||||||
| #include <mutex> | #include <mutex> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <thread> | #include <thread> | ||||||
| #include <tuple> | #include <tuple> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "common/thread.h" | #include "common/thread.h" | ||||||
| #include "common/vector_math.h" | #include "common/vector_math.h" | ||||||
|  | @ -40,7 +41,7 @@ struct DeviceStatus { | ||||||
|         u16 max_x; |         u16 max_x; | ||||||
|         u16 max_y; |         u16 max_y; | ||||||
|     }; |     }; | ||||||
|     boost::optional<CalibrationData> touch_calibration; |     std::optional<CalibrationData> touch_calibration; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| class Client { | class Client { | ||||||
|  |  | ||||||
|  | @ -29,24 +29,24 @@ namespace Response { | ||||||
|  * Note: Modifies the buffer to zero out the crc (since thats the easiest way to check without |  * Note: Modifies the buffer to zero out the crc (since thats the easiest way to check without | ||||||
|  * copying the buffer) |  * copying the buffer) | ||||||
|  */ |  */ | ||||||
| boost::optional<Type> Validate(u8* data, std::size_t size) { | std::optional<Type> Validate(u8* data, std::size_t size) { | ||||||
|     if (size < sizeof(Header)) { |     if (size < sizeof(Header)) { | ||||||
|         LOG_DEBUG(Input, "Invalid UDP packet received"); |         LOG_DEBUG(Input, "Invalid UDP packet received"); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     Header header; |     Header header; | ||||||
|     std::memcpy(&header, data, sizeof(Header)); |     std::memcpy(&header, data, sizeof(Header)); | ||||||
|     if (header.magic != SERVER_MAGIC) { |     if (header.magic != SERVER_MAGIC) { | ||||||
|         LOG_ERROR(Input, "UDP Packet has an unexpected magic value"); |         LOG_ERROR(Input, "UDP Packet has an unexpected magic value"); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     if (header.protocol_version != PROTOCOL_VERSION) { |     if (header.protocol_version != PROTOCOL_VERSION) { | ||||||
|         LOG_ERROR(Input, "UDP Packet protocol mismatch"); |         LOG_ERROR(Input, "UDP Packet protocol mismatch"); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     if (header.type < Type::Version || header.type > Type::PadData) { |     if (header.type < Type::Version || header.type > Type::PadData) { | ||||||
|         LOG_ERROR(Input, "UDP Packet is an unknown type"); |         LOG_ERROR(Input, "UDP Packet is an unknown type"); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     // Packet size must equal sizeof(Header) + sizeof(Data)
 |     // Packet size must equal sizeof(Header) + sizeof(Data)
 | ||||||
|  | @ -59,7 +59,7 @@ boost::optional<Type> Validate(u8* data, std::size_t size) { | ||||||
|             Input, |             Input, | ||||||
|             "UDP Packet payload length doesn't match. Received: {} PayloadLength: {} Expected: {}", |             "UDP Packet payload length doesn't match. Received: {} PayloadLength: {} Expected: {}", | ||||||
|             size, header.payload_length, data_len + sizeof(Type)); |             size, header.payload_length, data_len + sizeof(Type)); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     const u32 crc32 = header.crc; |     const u32 crc32 = header.crc; | ||||||
|  | @ -70,7 +70,7 @@ boost::optional<Type> Validate(u8* data, std::size_t size) { | ||||||
|     result.process_bytes(data, data_len + sizeof(Header)); |     result.process_bytes(data, data_len + sizeof(Header)); | ||||||
|     if (crc32 != result.checksum()) { |     if (crc32 != result.checksum()) { | ||||||
|         LOG_ERROR(Input, "UDP Packet CRC check failed. Offset: {}", offsetof(Header, crc)); |         LOG_ERROR(Input, "UDP Packet CRC check failed. Offset: {}", offsetof(Header, crc)); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     return header.type; |     return header.type; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -5,10 +5,10 @@ | ||||||
| #pragma once | #pragma once | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
|  | #include <optional> | ||||||
| #include <type_traits> | #include <type_traits> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/crc.hpp> | #include <boost/crc.hpp> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/bit_field.h" | #include "common/bit_field.h" | ||||||
| #include "common/swap.h" | #include "common/swap.h" | ||||||
| 
 | 
 | ||||||
|  | @ -218,7 +218,7 @@ static_assert(sizeof(Message<PadData>) == MAX_PACKET_SIZE, | ||||||
|  * @return boost::none if it failed to parse or Type if it succeeded. The client can then safely |  * @return boost::none if it failed to parse or Type if it succeeded. The client can then safely | ||||||
|  * copy the data into the appropriate struct for that Type |  * copy the data into the appropriate struct for that Type | ||||||
|  */ |  */ | ||||||
| boost::optional<Type> Validate(u8* data, std::size_t size); | std::optional<Type> Validate(u8* data, std::size_t size); | ||||||
| 
 | 
 | ||||||
| } // namespace Response
 | } // namespace Response
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -42,7 +42,7 @@ public: | ||||||
|     std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage& params) override { |     std::unique_ptr<Input::TouchDevice> Create(const Common::ParamPackage& params) override { | ||||||
|         { |         { | ||||||
|             std::lock_guard<std::mutex> guard(status->update_mutex); |             std::lock_guard<std::mutex> guard(status->update_mutex); | ||||||
|             status->touch_calibration.reset({}); |             status->touch_calibration.reset(); | ||||||
|             // These default values work well for DS4 but probably not other touch inputs
 |             // These default values work well for DS4 but probably not other touch inputs
 | ||||||
|             status->touch_calibration->min_x = params.Get("min_x", 100); |             status->touch_calibration->min_x = params.Get("min_x", 100); | ||||||
|             status->touch_calibration->min_y = params.Get("min_y", 50); |             status->touch_calibration->min_y = params.Get("min_y", 50); | ||||||
|  |  | ||||||
|  | @ -8,10 +8,10 @@ | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <iterator> | #include <iterator> | ||||||
| #include <memory> | #include <memory> | ||||||
|  | #include <optional> | ||||||
| #include <unordered_set> | #include <unordered_set> | ||||||
| #include <utility> | #include <utility> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include <boost/range/iterator_range.hpp> | #include <boost/range/iterator_range.hpp> | ||||||
| #include <glad/glad.h> | #include <glad/glad.h> | ||||||
| #include "common/alignment.h" | #include "common/alignment.h" | ||||||
|  | @ -881,7 +881,7 @@ constexpr MatchFlags operator|(MatchFlags lhs, MatchFlags rhs) { | ||||||
| template <MatchFlags find_flags> | template <MatchFlags find_flags> | ||||||
| Surface FindMatch(const SurfaceCache& surface_cache, const SurfaceParams& params, | Surface FindMatch(const SurfaceCache& surface_cache, const SurfaceParams& params, | ||||||
|                   ScaleMatch match_scale_type, |                   ScaleMatch match_scale_type, | ||||||
|                   boost::optional<SurfaceInterval> validate_interval = boost::none) { |                   std::optional<SurfaceInterval> validate_interval = {}) { | ||||||
|     Surface match_surface = nullptr; |     Surface match_surface = nullptr; | ||||||
|     bool match_valid = false; |     bool match_valid = false; | ||||||
|     u32 match_scale = 0; |     u32 match_scale = 0; | ||||||
|  |  | ||||||
|  | @ -910,11 +910,11 @@ bool exec_shader(); | ||||||
| )"; | )"; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, | std::optional<std::string> DecompileProgram(const ProgramCode& program_code, | ||||||
|                                               const SwizzleData& swizzle_data, u32 main_offset, |                                             const SwizzleData& swizzle_data, u32 main_offset, | ||||||
|                                               const RegGetter& inputreg_getter, |                                             const RegGetter& inputreg_getter, | ||||||
|                                               const RegGetter& outputreg_getter, bool sanitize_mul, |                                             const RegGetter& outputreg_getter, bool sanitize_mul, | ||||||
|                                               bool is_gs) { |                                             bool is_gs) { | ||||||
| 
 | 
 | ||||||
|     try { |     try { | ||||||
|         auto subroutines = ControlFlowAnalyzer(program_code, main_offset).MoveSubroutines(); |         auto subroutines = ControlFlowAnalyzer(program_code, main_offset).MoveSubroutines(); | ||||||
|  | @ -923,7 +923,7 @@ boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, | ||||||
|         return generator.MoveShaderCode(); |         return generator.MoveShaderCode(); | ||||||
|     } catch (const DecompileFail& exception) { |     } catch (const DecompileFail& exception) { | ||||||
|         LOG_INFO(HW_GPU, "Shader decompilation failed: {}", exception.what()); |         LOG_INFO(HW_GPU, "Shader decompilation failed: {}", exception.what()); | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -4,8 +4,8 @@ | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <functional> | #include <functional> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/common_types.h" | #include "common/common_types.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
| 
 | 
 | ||||||
|  | @ -19,11 +19,11 @@ using RegGetter = std::function<std::string(u32)>; | ||||||
| 
 | 
 | ||||||
| std::string GetCommonDeclarations(); | std::string GetCommonDeclarations(); | ||||||
| 
 | 
 | ||||||
| boost::optional<std::string> DecompileProgram(const ProgramCode& program_code, | std::optional<std::string> DecompileProgram(const ProgramCode& program_code, | ||||||
|                                               const SwizzleData& swizzle_data, u32 main_offset, |                                             const SwizzleData& swizzle_data, u32 main_offset, | ||||||
|                                               const RegGetter& inputreg_getter, |                                             const RegGetter& inputreg_getter, | ||||||
|                                               const RegGetter& outputreg_getter, bool sanitize_mul, |                                             const RegGetter& outputreg_getter, bool sanitize_mul, | ||||||
|                                               bool is_gs); |                                             bool is_gs); | ||||||
| 
 | 
 | ||||||
| } // namespace Decompiler
 | } // namespace Decompiler
 | ||||||
| } // namespace Shader
 | } // namespace Shader
 | ||||||
|  |  | ||||||
|  | @ -1634,9 +1634,8 @@ void main() { | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<std::string> GenerateVertexShader(const Pica::Shader::ShaderSetup& setup, | std::optional<std::string> GenerateVertexShader(const Pica::Shader::ShaderSetup& setup, | ||||||
|                                                   const PicaVSConfig& config, |                                                 const PicaVSConfig& config, bool separable_shader) { | ||||||
|                                                   bool separable_shader) { |  | ||||||
|     std::string out = "#version 330 core\n"; |     std::string out = "#version 330 core\n"; | ||||||
|     if (separable_shader) { |     if (separable_shader) { | ||||||
|         out += "#extension GL_ARB_separate_shader_objects : enable\n"; |         out += "#extension GL_ARB_separate_shader_objects : enable\n"; | ||||||
|  | @ -1664,9 +1663,9 @@ boost::optional<std::string> GenerateVertexShader(const Pica::Shader::ShaderSetu | ||||||
|         get_output_reg, config.state.sanitize_mul, false); |         get_output_reg, config.state.sanitize_mul, false); | ||||||
| 
 | 
 | ||||||
|     if (!program_source_opt) |     if (!program_source_opt) | ||||||
|         return boost::none; |         return {}; | ||||||
| 
 | 
 | ||||||
|     std::string& program_source = program_source_opt.get(); |     std::string& program_source = *program_source_opt; | ||||||
| 
 | 
 | ||||||
|     out += R"( |     out += R"( | ||||||
| #define uniforms vs_uniforms | #define uniforms vs_uniforms | ||||||
|  | @ -1822,16 +1821,16 @@ void main() { | ||||||
|     return out; |     return out; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| boost::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSetup& setup, | std::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSetup& setup, | ||||||
|                                                     const PicaGSConfig& config, |                                                   const PicaGSConfig& config, | ||||||
|                                                     bool separable_shader) { |                                                   bool separable_shader) { | ||||||
|     std::string out = "#version 330 core\n"; |     std::string out = "#version 330 core\n"; | ||||||
|     if (separable_shader) { |     if (separable_shader) { | ||||||
|         out += "#extension GL_ARB_separate_shader_objects : enable\n"; |         out += "#extension GL_ARB_separate_shader_objects : enable\n"; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     if (config.state.num_inputs % config.state.attributes_per_vertex != 0) |     if (config.state.num_inputs % config.state.attributes_per_vertex != 0) | ||||||
|         return boost::none; |         return {}; | ||||||
| 
 | 
 | ||||||
|     switch (config.state.num_inputs / config.state.attributes_per_vertex) { |     switch (config.state.num_inputs / config.state.attributes_per_vertex) { | ||||||
|     case 1: |     case 1: | ||||||
|  | @ -1850,7 +1849,7 @@ boost::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSe | ||||||
|         out += "layout(triangles_adjacency) in;\n"; |         out += "layout(triangles_adjacency) in;\n"; | ||||||
|         break; |         break; | ||||||
|     default: |     default: | ||||||
|         return boost::none; |         return {}; | ||||||
|     } |     } | ||||||
|     out += "layout(triangle_strip, max_vertices = 30) out;\n\n"; |     out += "layout(triangle_strip, max_vertices = 30) out;\n\n"; | ||||||
| 
 | 
 | ||||||
|  | @ -1879,9 +1878,9 @@ boost::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSe | ||||||
|         get_output_reg, config.state.sanitize_mul, true); |         get_output_reg, config.state.sanitize_mul, true); | ||||||
| 
 | 
 | ||||||
|     if (!program_source_opt) |     if (!program_source_opt) | ||||||
|         return boost::none; |         return {}; | ||||||
| 
 | 
 | ||||||
|     std::string& program_source = program_source_opt.get(); |     std::string& program_source = *program_source_opt; | ||||||
| 
 | 
 | ||||||
|     out += R"( |     out += R"( | ||||||
| Vertex output_buffer; | Vertex output_buffer; | ||||||
|  |  | ||||||
|  | @ -7,9 +7,9 @@ | ||||||
| #include <array> | #include <array> | ||||||
| #include <cstring> | #include <cstring> | ||||||
| #include <functional> | #include <functional> | ||||||
|  | #include <optional> | ||||||
| #include <string> | #include <string> | ||||||
| #include <type_traits> | #include <type_traits> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include "common/hash.h" | #include "common/hash.h" | ||||||
| #include "video_core/regs.h" | #include "video_core/regs.h" | ||||||
| #include "video_core/shader/shader.h" | #include "video_core/shader/shader.h" | ||||||
|  | @ -228,9 +228,8 @@ std::string GenerateTrivialVertexShader(bool separable_shader); | ||||||
|  * Generates the GLSL vertex shader program source code for the given VS program |  * Generates the GLSL vertex shader program source code for the given VS program | ||||||
|  * @returns String of the shader source code; boost::none on failure |  * @returns String of the shader source code; boost::none on failure | ||||||
|  */ |  */ | ||||||
| boost::optional<std::string> GenerateVertexShader(const Pica::Shader::ShaderSetup& setup, | std::optional<std::string> GenerateVertexShader(const Pica::Shader::ShaderSetup& setup, | ||||||
|                                                   const PicaVSConfig& config, |                                                 const PicaVSConfig& config, bool separable_shader); | ||||||
|                                                   bool separable_shader); |  | ||||||
| 
 | 
 | ||||||
| /*
 | /*
 | ||||||
|  * Generates the GLSL fixed geometry shader program source code for non-GS PICA pipeline |  * Generates the GLSL fixed geometry shader program source code for non-GS PICA pipeline | ||||||
|  | @ -243,9 +242,9 @@ std::string GenerateFixedGeometryShader(const PicaFixedGSConfig& config, bool se | ||||||
|  * configuration |  * configuration | ||||||
|  * @returns String of the shader source code; boost::none on failure |  * @returns String of the shader source code; boost::none on failure | ||||||
|  */ |  */ | ||||||
| boost::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSetup& setup, | std::optional<std::string> GenerateGeometryShader(const Pica::Shader::ShaderSetup& setup, | ||||||
|                                                     const PicaGSConfig& config, |                                                   const PicaGSConfig& config, | ||||||
|                                                     bool separable_shader); |                                                   bool separable_shader); | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  * Generates the GLSL fragment shader program source code for the current Pica state |  * Generates the GLSL fragment shader program source code for the current Pica state | ||||||
|  |  | ||||||
|  | @ -162,8 +162,8 @@ private: | ||||||
| // program buffer from the previous shader, which is hashed into the config, resulting several
 | // program buffer from the previous shader, which is hashed into the config, resulting several
 | ||||||
| // different config values from the same shader program.
 | // different config values from the same shader program.
 | ||||||
| template <typename KeyConfigType, | template <typename KeyConfigType, | ||||||
|           boost::optional<std::string> (*CodeGenerator)(const Pica::Shader::ShaderSetup&, |           std::optional<std::string> (*CodeGenerator)(const Pica::Shader::ShaderSetup&, | ||||||
|                                                         const KeyConfigType&, bool), |                                                       const KeyConfigType&, bool), | ||||||
|           GLenum ShaderType> |           GLenum ShaderType> | ||||||
| class ShaderDoubleCache { | class ShaderDoubleCache { | ||||||
| public: | public: | ||||||
|  | @ -177,7 +177,7 @@ public: | ||||||
|                 return 0; |                 return 0; | ||||||
|             } |             } | ||||||
| 
 | 
 | ||||||
|             std::string& program = program_opt.get(); |             std::string& program = *program_opt; | ||||||
|             auto [iter, new_shader] = shader_cache.emplace(program, OGLShaderStage{separable}); |             auto [iter, new_shader] = shader_cache.emplace(program, OGLShaderStage{separable}); | ||||||
|             OGLShaderStage& cached_shader = iter->second; |             OGLShaderStage& cached_shader = iter->second; | ||||||
|             if (new_shader) { |             if (new_shader) { | ||||||
|  |  | ||||||
|  | @ -754,7 +754,7 @@ void JitShader::Compile_LOOP(Instruction instr) { | ||||||
|     sub(LOOPCOUNT, 1);           // Increment loop count by 1
 |     sub(LOOPCOUNT, 1);           // Increment loop count by 1
 | ||||||
|     jnz(l_loop_start);           // Loop if not equal
 |     jnz(l_loop_start);           // Loop if not equal
 | ||||||
|     L(*loop_break_label); |     L(*loop_break_label); | ||||||
|     loop_break_label = boost::none; |     loop_break_label.reset(); | ||||||
| 
 | 
 | ||||||
|     looping = false; |     looping = false; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -6,9 +6,9 @@ | ||||||
| 
 | 
 | ||||||
| #include <array> | #include <array> | ||||||
| #include <cstddef> | #include <cstddef> | ||||||
|  | #include <optional> | ||||||
| #include <utility> | #include <utility> | ||||||
| #include <vector> | #include <vector> | ||||||
| #include <boost/optional.hpp> |  | ||||||
| #include <nihstro/shader_bytecode.h> | #include <nihstro/shader_bytecode.h> | ||||||
| #include <xbyak.h> | #include <xbyak.h> | ||||||
| #include "common/bit_set.h" | #include "common/bit_set.h" | ||||||
|  | @ -123,7 +123,7 @@ private: | ||||||
| 
 | 
 | ||||||
|     /// Label pointing to the end of the current LOOP block. Used by the BREAKC instruction to break
 |     /// Label pointing to the end of the current LOOP block. Used by the BREAKC instruction to break
 | ||||||
|     /// out of the loop.
 |     /// out of the loop.
 | ||||||
|     boost::optional<Xbyak::Label> loop_break_label; |     std::optional<Xbyak::Label> loop_break_label; | ||||||
| 
 | 
 | ||||||
|     /// Offsets in code where a return needs to be inserted
 |     /// Offsets in code where a return needs to be inserted
 | ||||||
|     std::vector<unsigned> return_offsets; |     std::vector<unsigned> return_offsets; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue