sceVideoOutSetBufferAttribute implementation
This commit is contained in:
parent
2f2dc59ec2
commit
6399886fea
|
@ -41,6 +41,8 @@ add_executable(shadps4
|
|||
src/Core/PS4/HLE/Kernel/Objects/physical_memory.cpp
|
||||
src/Util/string_util.cpp
|
||||
src/Util/string_util.cpp
|
||||
src/Core/PS4/HLE/Graphics/video_out.cpp
|
||||
src/Core/PS4/HLE/Graphics/video_out.h
|
||||
"src/Util/Singleton.h" "src/Util/Disassembler.cpp" "src/Util/Disassembler.h" "src/Core/PS4/Util/aerolib.h" "src/Core/PS4/Loader/SymbolsResolver.h" "src/Core/PS4/Loader/SymbolsResolver.cpp" "src/Core/PS4/HLE/Libs.cpp" "src/Core/PS4/HLE/Libs.h" "src/Core/PS4/HLE/LibC.cpp" "src/Core/PS4/HLE/LibC.h" "src/Lib/Timer.cpp" "src/Lib/Timer.h" "src/Core/PS4/HLE/LibKernel.cpp" "src/Core/PS4/HLE/LibKernel.h" "src/Core/PS4/HLE/LibSceVideoOut.cpp" "src/Core/PS4/HLE/LibSceVideoOut.h" "src/Core/PS4/HLE/LibSceGnmDriver.cpp" "src/Core/PS4/HLE/LibSceGnmDriver.h" "src/Core/PS4/HLE/Kernel/ThreadManagement.cpp" "src/Core/PS4/HLE/Kernel/ThreadManagement.h" "src/Core/PS4/HLE/ErrorCodes.h" "src/debug.h" "src/Core/PS4/HLE/Kernel/memory_management.cpp" "src/Core/PS4/HLE/Kernel/memory_management.h" "src/Core/PS4/GPU/gpu_memory.cpp" "src/Core/PS4/GPU/gpu_memory.h" "src/emulator.cpp" "src/emulator.h")
|
||||
|
||||
find_package(OpenGL REQUIRED)
|
||||
|
|
|
@ -0,0 +1,50 @@
|
|||
#include "video_out.h"
|
||||
|
||||
#include <Core/PS4/HLE/Libs.h>
|
||||
#include <Util/Log.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include <magic_enum.hpp>
|
||||
#include <string>
|
||||
|
||||
namespace HLE::Libs::Graphics::VideoOut {
|
||||
|
||||
constexpr bool log_file_videoout = true; // disable it to disable logging
|
||||
|
||||
std::string getPixelFormatString(s32 format) {
|
||||
switch (format) {
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A8R8G8B8_SRGB: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A8R8G8B8_SRGB";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A8B8G8R8_SRGB: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A8B8G8R8_SRGB";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_SRGB: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_SRGB";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_BT2020_PQ: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_BT2020_PQ";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_A16R16G16B16_FLOAT: return "SCE_VIDEO_OUT_PIXEL_FORMAT_A16R16G16B16_FLOAT";
|
||||
case SCE_VIDEO_OUT_PIXEL_FORMAT_YCBCR420_BT709: return "SCE_VIDEO_OUT_PIXEL_FORMAT_YCBCR420_BT709";
|
||||
default: return "Unknown pixel format";
|
||||
}
|
||||
}
|
||||
|
||||
void PS4_SYSV_ABI sceVideoOutSetBufferAttribute(SceVideoOutBufferAttribute* attribute, u32 pixelFormat, u32 tilingMode, u32 aspectRatio, u32 width,
|
||||
u32 height, u32 pitchInPixel) {
|
||||
PRINT_FUNCTION_NAME();
|
||||
|
||||
auto tileMode = magic_enum::enum_cast<SceVideoOutTilingMode>(tilingMode);
|
||||
auto aspectR = magic_enum::enum_cast<AspectRatioMode>(aspectRatio);
|
||||
|
||||
LOG_INFO_IF(log_file_videoout, "pixelFormat = {}\n", getPixelFormatString(pixelFormat));
|
||||
LOG_INFO_IF(log_file_videoout, "tilingMode = {}\n", magic_enum::enum_name(tileMode.value()));
|
||||
LOG_INFO_IF(log_file_videoout, "aspectRatio = {}\n", magic_enum::enum_name(aspectR.value()));
|
||||
LOG_INFO_IF(log_file_videoout, "width = {}\n", width);
|
||||
LOG_INFO_IF(log_file_videoout, "height = {}\n", height);
|
||||
LOG_INFO_IF(log_file_videoout, "pitchInPixel = {}\n", pitchInPixel);
|
||||
|
||||
memset(attribute, 0, sizeof(SceVideoOutBufferAttribute));
|
||||
|
||||
attribute->pixelFormat = pixelFormat;
|
||||
attribute->tilingMode = tilingMode;
|
||||
attribute->aspectRatio = aspectRatio;
|
||||
attribute->width = width;
|
||||
attribute->height = height;
|
||||
attribute->pitchInPixel = pitchInPixel;
|
||||
}
|
||||
} // namespace HLE::Libs::Graphics::VideoOut
|
|
@ -0,0 +1,36 @@
|
|||
#pragma once
|
||||
#include <types.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace HLE::Libs::Graphics::VideoOut {
|
||||
|
||||
struct SceVideoOutBufferAttribute {
|
||||
s32 pixelFormat;
|
||||
s32 tilingMode;
|
||||
s32 aspectRatio;
|
||||
u32 width;
|
||||
u32 height;
|
||||
u32 pitchInPixel;
|
||||
u32 option;
|
||||
u32 _reserved0;
|
||||
u64 _reserved1;
|
||||
};
|
||||
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A8R8G8B8_SRGB = 0x80000000;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A8B8G8R8_SRGB = 0x80002200;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10 = 0x88060000;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_SRGB = 0x88000000;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A2R10G10B10_BT2020_PQ = 0x88740000;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_A16R16G16B16_FLOAT = 0xC1060000;
|
||||
constexpr int SCE_VIDEO_OUT_PIXEL_FORMAT_YCBCR420_BT709 = 0x08322200;
|
||||
|
||||
enum SceVideoOutTilingMode : s32 { SCE_VIDEO_OUT_TILING_MODE_TILE = 0, SCE_VIDEO_OUT_TILING_MODE_LINEAR = 1 };
|
||||
|
||||
enum AspectRatioMode : s32 { SCE_VIDEO_OUT_ASPECT_RATIO_16_9 = 0 };
|
||||
|
||||
std::string getPixelFormatString(s32 format);
|
||||
|
||||
void PS4_SYSV_ABI sceVideoOutSetBufferAttribute(SceVideoOutBufferAttribute* attribute, u32 pixelFormat, u32 tilingMode, u32 aspectRatio, u32 width,
|
||||
u32 height, u32 pitchInPixel);
|
||||
} // namespace HLE::Libs::Graphics::VideoOut
|
|
@ -7,6 +7,7 @@
|
|||
#include "Libs.h"
|
||||
#include "UserManagement/UsrMngCodes.h"
|
||||
#include "VideoOut/VideoOutCodes.h"
|
||||
#include "Graphics/video_out.h"
|
||||
|
||||
namespace HLE::Libs::LibSceVideoOut {
|
||||
|
||||
|
@ -33,10 +34,6 @@ int32_t PS4_SYSV_ABI sceVideoOutSetFlipRate(int32_t handle, int32_t rate) {
|
|||
BREAKPOINT();
|
||||
return 0;
|
||||
}
|
||||
void PS4_SYSV_ABI sceVideoOutSetBufferAttribute(/* SceVideoOutBufferAttribute* attribute,*/ uint32_t pixelFormat, uint32_t tilingMode,
|
||||
uint32_t aspectRatio, uint32_t width, uint32_t height, uint32_t pitchInPixel) {
|
||||
BREAKPOINT();
|
||||
}
|
||||
int32_t PS4_SYSV_ABI sceVideoOutGetResolutionStatus(int32_t handle /*, SceVideoOutResolutionStatus* status*/) {
|
||||
BREAKPOINT();
|
||||
return 0;
|
||||
|
@ -68,7 +65,7 @@ void LibSceVideoOut_Register(SymbolsResolver* sym) {
|
|||
LIB_FUNCTION("w3BY+tAEiQY", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutRegisterBuffers);
|
||||
LIB_FUNCTION("HXzjK9yI30k", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutAddFlipEvent);
|
||||
LIB_FUNCTION("CBiu4mCE1DA", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutSetFlipRate);
|
||||
LIB_FUNCTION("i6-sR91Wt-4", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutSetBufferAttribute);
|
||||
LIB_FUNCTION("i6-sR91Wt-4", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, HLE::Libs::Graphics::VideoOut::sceVideoOutSetBufferAttribute);
|
||||
LIB_FUNCTION("6kPnj51T62Y", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutGetResolutionStatus);
|
||||
LIB_FUNCTION("Up36PTk687E", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutOpen);
|
||||
LIB_FUNCTION("zgXifHT9ErY", "libSceVideoOut", 1, "libSceVideoOut", 0, 0, sceVideoOutIsFlipPending);
|
||||
|
|
|
@ -13,9 +13,7 @@ int32_t PS4_SYSV_ABI sceVideoOutRegisterBuffers(int32_t handle, int32_t startInd
|
|||
int32_t bufferNum /*,const SceVideoOutBufferAttribute* attribute*/);
|
||||
int32_t PS4_SYSV_ABI sceVideoOutAddFlipEvent(/*SceKernelEqueue eq,*/ int32_t handle, void* udata);
|
||||
int32_t PS4_SYSV_ABI sceVideoOutSetFlipRate(int32_t handle, int32_t rate);
|
||||
void PS4_SYSV_ABI sceVideoOutSetBufferAttribute(/* SceVideoOutBufferAttribute* attribute,*/ uint32_t pixelFormat, uint32_t tilingMode,
|
||||
uint32_t aspectRatio,
|
||||
uint32_t width, uint32_t height, uint32_t pitchInPixel);
|
||||
|
||||
int32_t PS4_SYSV_ABI sceVideoOutGetResolutionStatus(int32_t handle /*, SceVideoOutResolutionStatus* status*/);
|
||||
s32 PS4_SYSV_ABI sceVideoOutOpen(SceUserServiceUserId userId, s32 busType, s32 index, const void* param);
|
||||
int32_t PS4_SYSV_ABI sceVideoOutIsFlipPending(int32_t handle);
|
||||
|
|
Loading…
Reference in New Issue