more to buffers

This commit is contained in:
georgemoralis 2023-09-16 00:03:11 +03:00
parent aacbc4e675
commit 243c0158c1
4 changed files with 21 additions and 2 deletions

View File

@ -16,6 +16,8 @@ struct VideoConfigInternal {
SceVideoOutVblankStatus m_vblank_status; SceVideoOutVblankStatus m_vblank_status;
std::vector<HLE::Libs::LibKernel::EventQueues::SceKernelEqueue> m_flip_evtEq; std::vector<HLE::Libs::LibKernel::EventQueues::SceKernelEqueue> m_flip_evtEq;
int m_flip_rate = 0; int m_flip_rate = 0;
int buffers_registration_index = 0;
}; };
class FlipQueue { class FlipQueue {

View File

@ -12,6 +12,7 @@
#include "Objects/video_out_ctx.h" #include "Objects/video_out_ctx.h"
#include "Util/Singleton.h" #include "Util/Singleton.h"
#include <emulator.h>
namespace HLE::Libs::Graphics::VideoOut { namespace HLE::Libs::Graphics::VideoOut {
@ -155,7 +156,16 @@ s32 PS4_SYSV_ABI sceVideoOutRegisterBuffers(s32 handle, s32 startIndex, void* co
LOG_INFO_IF(log_file_videoout, "height = {}\n", attribute->height); LOG_INFO_IF(log_file_videoout, "height = {}\n", attribute->height);
LOG_INFO_IF(log_file_videoout, "pitchInPixel = {}\n", attribute->pitchInPixel); LOG_INFO_IF(log_file_videoout, "pitchInPixel = {}\n", attribute->pitchInPixel);
LOG_INFO_IF(log_file_videoout, "option = {}\n", attribute->option); LOG_INFO_IF(log_file_videoout, "option = {}\n", attribute->option);
return 0;
int registration_index = ctx->buffers_registration_index++;
Emulator::checkAndWaitForGraphicsInit();
//try to calculate buffer size
u64 buffer_size = 1280 * 720 * 4; //TODO hardcore value should be redone
u64 buffer_pitch = attribute->pitchInPixel;
return registration_index;
} }
s32 PS4_SYSV_ABI sceVideoOutSetFlipRate(s32 handle, s32 rate) { s32 PS4_SYSV_ABI sceVideoOutSetFlipRate(s32 handle, s32 rate) {
PRINT_FUNCTION_NAME(); PRINT_FUNCTION_NAME();

View File

@ -14,6 +14,13 @@ void emuInit(u32 width, u32 height) {
g_window_ctx->m_graphic_ctx.screen_height = height; g_window_ctx->m_graphic_ctx.screen_height = height;
} }
void checkAndWaitForGraphicsInit() {
Lib::LockMutexGuard lock(g_window_ctx->m_mutex);
while (!g_window_ctx->m_is_graphic_initialized) {
g_window_ctx->m_graphic_initialized_cond.WaitCondVar(&g_window_ctx->m_mutex);
}
}
static void CreateSdlWindow(WindowCtx* ctx) { static void CreateSdlWindow(WindowCtx* ctx) {
int width = static_cast<int>(ctx->m_graphic_ctx.screen_width); int width = static_cast<int>(ctx->m_graphic_ctx.screen_width);
int height = static_cast<int>(ctx->m_graphic_ctx.screen_height); int height = static_cast<int>(ctx->m_graphic_ctx.screen_height);
@ -34,7 +41,6 @@ static void CreateSdlWindow(WindowCtx* ctx) {
} }
SDL_SetWindowResizable(ctx->m_window, SDL_FALSE); // we don't support resizable atm SDL_SetWindowResizable(ctx->m_window, SDL_FALSE); // we don't support resizable atm
SDL_ShowWindow(g_window_ctx->m_window); // TODO should be removed just left it over to make it fancy :D
} }
void emuRun() { void emuRun() {
g_window_ctx->m_mutex.LockMutex(); g_window_ctx->m_mutex.LockMutex();

View File

@ -24,4 +24,5 @@ struct EmuPrivate {
}; };
void emuInit(u32 width, u32 height); void emuInit(u32 width, u32 height);
void emuRun(); void emuRun();
void checkAndWaitForGraphicsInit();
} // namespace Emulator } // namespace Emulator