|
|
@ -29,16 +29,12 @@ |
|
|
#include "core/hle/service/service.h"
|
|
|
#include "core/hle/service/service.h"
|
|
|
#include "core/hle/service/vi/vi.h"
|
|
|
#include "core/hle/service/vi/vi.h"
|
|
|
#include "core/hle/service/vi/vi_m.h"
|
|
|
#include "core/hle/service/vi/vi_m.h"
|
|
|
|
|
|
#include "core/hle/service/vi/vi_results.h"
|
|
|
#include "core/hle/service/vi/vi_s.h"
|
|
|
#include "core/hle/service/vi/vi_s.h"
|
|
|
#include "core/hle/service/vi/vi_u.h"
|
|
|
#include "core/hle/service/vi/vi_u.h"
|
|
|
|
|
|
|
|
|
namespace Service::VI { |
|
|
namespace Service::VI { |
|
|
|
|
|
|
|
|
constexpr Result ERR_OPERATION_FAILED{ErrorModule::VI, 1}; |
|
|
|
|
|
constexpr Result ERR_PERMISSION_DENIED{ErrorModule::VI, 5}; |
|
|
|
|
|
constexpr Result ERR_UNSUPPORTED{ErrorModule::VI, 6}; |
|
|
|
|
|
constexpr Result ERR_NOT_FOUND{ErrorModule::VI, 7}; |
|
|
|
|
|
|
|
|
|
|
|
struct DisplayInfo { |
|
|
struct DisplayInfo { |
|
|
/// The name of this particular display.
|
|
|
/// The name of this particular display.
|
|
|
char display_name[0x40]{"Default"}; |
|
|
char display_name[0x40]{"Default"}; |
|
|
@ -348,7 +344,7 @@ private: |
|
|
if (!layer_id) { |
|
|
if (!layer_id) { |
|
|
LOG_ERROR(Service_VI, "Layer not found! display=0x{:016X}", display); |
|
|
LOG_ERROR(Service_VI, "Layer not found! display=0x{:016X}", display); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -498,7 +494,7 @@ private: |
|
|
if (!display_id) { |
|
|
if (!display_id) { |
|
|
LOG_ERROR(Service_VI, "Display not found! display_name={}", name); |
|
|
LOG_ERROR(Service_VI, "Display not found! display_name={}", name); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -554,14 +550,14 @@ private: |
|
|
|
|
|
|
|
|
if (scaling_mode > NintendoScaleMode::PreserveAspectRatio) { |
|
|
if (scaling_mode > NintendoScaleMode::PreserveAspectRatio) { |
|
|
LOG_ERROR(Service_VI, "Invalid scaling mode provided."); |
|
|
LOG_ERROR(Service_VI, "Invalid scaling mode provided."); |
|
|
rb.Push(ERR_OPERATION_FAILED); |
|
|
|
|
|
|
|
|
rb.Push(ResultOperationFailed); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (scaling_mode != NintendoScaleMode::ScaleToWindow && |
|
|
if (scaling_mode != NintendoScaleMode::ScaleToWindow && |
|
|
scaling_mode != NintendoScaleMode::PreserveAspectRatio) { |
|
|
scaling_mode != NintendoScaleMode::PreserveAspectRatio) { |
|
|
LOG_ERROR(Service_VI, "Unsupported scaling mode supplied."); |
|
|
LOG_ERROR(Service_VI, "Unsupported scaling mode supplied."); |
|
|
rb.Push(ERR_UNSUPPORTED); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotSupported); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -594,7 +590,7 @@ private: |
|
|
if (!display_id) { |
|
|
if (!display_id) { |
|
|
LOG_ERROR(Service_VI, "Layer not found! layer_id={}", layer_id); |
|
|
LOG_ERROR(Service_VI, "Layer not found! layer_id={}", layer_id); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -602,7 +598,7 @@ private: |
|
|
if (!buffer_queue_id) { |
|
|
if (!buffer_queue_id) { |
|
|
LOG_ERROR(Service_VI, "Buffer queue id not found! display_id={}", *display_id); |
|
|
LOG_ERROR(Service_VI, "Buffer queue id not found! display_id={}", *display_id); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -640,7 +636,7 @@ private: |
|
|
if (!layer_id) { |
|
|
if (!layer_id) { |
|
|
LOG_ERROR(Service_VI, "Layer not found! display_id={}", display_id); |
|
|
LOG_ERROR(Service_VI, "Layer not found! display_id={}", display_id); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -648,7 +644,7 @@ private: |
|
|
if (!buffer_queue_id) { |
|
|
if (!buffer_queue_id) { |
|
|
LOG_ERROR(Service_VI, "Buffer queue id not found! display_id={}", display_id); |
|
|
LOG_ERROR(Service_VI, "Buffer queue id not found! display_id={}", display_id); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -681,7 +677,7 @@ private: |
|
|
if (!vsync_event) { |
|
|
if (!vsync_event) { |
|
|
LOG_ERROR(Service_VI, "Vsync event was not found for display_id={}", display_id); |
|
|
LOG_ERROR(Service_VI, "Vsync event was not found for display_id={}", display_id); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_NOT_FOUND); |
|
|
|
|
|
|
|
|
rb.Push(ResultNotFound); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -764,7 +760,7 @@ private: |
|
|
return ConvertedScaleMode::PreserveAspectRatio; |
|
|
return ConvertedScaleMode::PreserveAspectRatio; |
|
|
default: |
|
|
default: |
|
|
LOG_ERROR(Service_VI, "Invalid scaling mode specified, mode={}", mode); |
|
|
LOG_ERROR(Service_VI, "Invalid scaling mode specified, mode={}", mode); |
|
|
return ERR_OPERATION_FAILED; |
|
|
|
|
|
|
|
|
return ResultOperationFailed; |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -794,7 +790,7 @@ void detail::GetDisplayServiceImpl(Kernel::HLERequestContext& ctx, Core::System& |
|
|
if (!IsValidServiceAccess(permission, policy)) { |
|
|
if (!IsValidServiceAccess(permission, policy)) { |
|
|
LOG_ERROR(Service_VI, "Permission denied for policy {}", policy); |
|
|
LOG_ERROR(Service_VI, "Permission denied for policy {}", policy); |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
IPC::ResponseBuilder rb{ctx, 2}; |
|
|
rb.Push(ERR_PERMISSION_DENIED); |
|
|
|
|
|
|
|
|
rb.Push(ResultPermissionDenied); |
|
|
return; |
|
|
return; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|