From 44213bf8305ff745e7f1f69523d2d4d28ab1291a Mon Sep 17 00:00:00 2001 From: Flyinghead Date: Tue, 13 Jul 2021 13:45:01 +0200 Subject: [PATCH] lr: fix res change for rotated games. display version. vmem: simplify --- core/linux/libnx_vmem.cpp | 17 +++++------------ core/linux/posix_vmem.cpp | 14 ++++---------- core/stdclass.h | 5 ----- core/windows/win_vmem.cpp | 24 +++--------------------- shell/libretro/libretro.cpp | 23 +++++++++++++---------- 5 files changed, 25 insertions(+), 58 deletions(-) diff --git a/core/linux/libnx_vmem.cpp b/core/linux/libnx_vmem.cpp index ea019dc00..2fa4b09e1 100644 --- a/core/linux/libnx_vmem.cpp +++ b/core/linux/libnx_vmem.cpp @@ -1,11 +1,4 @@ #if defined(__SWITCH__) -#include -#include -#include -#include -#include -#include - #include "hw/mem/_vmem.h" #include "hw/sh4/sh4_if.h" #include "stdclass.h" @@ -64,7 +57,7 @@ bool mem_region_unlock(void *start, size_t len) return true; } -bool mem_region_set_exec(void *start, size_t len) +static bool mem_region_set_exec(void *start, size_t len) { size_t inpage = (uintptr_t)start & PAGE_MASK; @@ -73,7 +66,7 @@ bool mem_region_set_exec(void *start, size_t len) return true; } -void *mem_region_reserve(void *start, size_t len) +static void *mem_region_reserve(void *start, size_t len) { virtmemLock(); void *p = virtmemFindAslr(len, 0); @@ -83,7 +76,7 @@ void *mem_region_reserve(void *start, size_t len) return p; } -bool mem_region_release(void *start, size_t len) +static bool mem_region_release(void *start, size_t len) { if (virtmemReservation != nullptr) { @@ -95,7 +88,7 @@ bool mem_region_release(void *start, size_t len) return true; } -void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offset, bool readwrite) +static void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offset, bool readwrite) { Result rc = svcMapProcessMemory(dest, envGetOwnProcessHandle(), (u64)(vmem_fd_codememory + offset), len); if (R_FAILED(rc)) @@ -106,7 +99,7 @@ void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offs return dest; } -bool mem_region_unmap_file(void *start, size_t len) +static bool mem_region_unmap_file(void *start, size_t len) { return mem_region_release(start, len); } diff --git a/core/linux/posix_vmem.cpp b/core/linux/posix_vmem.cpp index c9cdc5b18..44a5d9b5b 100644 --- a/core/linux/posix_vmem.cpp +++ b/core/linux/posix_vmem.cpp @@ -70,7 +70,7 @@ bool mem_region_unlock(void *start, size_t len) return true; } -bool mem_region_set_exec(void *start, size_t len) +static bool mem_region_set_exec(void *start, size_t len) { size_t inpage = (uintptr_t)start & PAGE_MASK; if (mprotect((u8*)start - inpage, len + inpage, PROT_READ | PROT_WRITE | PROT_EXEC)) @@ -81,7 +81,7 @@ bool mem_region_set_exec(void *start, size_t len) return true; } -void *mem_region_reserve(void *start, size_t len) +static void *mem_region_reserve(void *start, size_t len) { void *p = mmap(start, len, PROT_NONE, MAP_PRIVATE | MAP_ANON, -1, 0); if (p == MAP_FAILED) @@ -93,12 +93,12 @@ void *mem_region_reserve(void *start, size_t len) return p; } -bool mem_region_release(void *start, size_t len) +static bool mem_region_release(void *start, size_t len) { return munmap(start, len) == 0; } -void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offset, bool readwrite) +static void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offset, bool readwrite) { int flags = MAP_SHARED | MAP_NOSYNC | (dest != NULL ? MAP_FIXED : 0); void *p = mmap(dest, len, PROT_READ | (readwrite ? PROT_WRITE : 0), flags, (int)(uintptr_t)file_handle, offset); @@ -111,11 +111,6 @@ void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offs return p; } -bool mem_region_unmap_file(void *start, size_t len) -{ - return mem_region_release(start, len); -} - // Allocates memory via a fd on shmem/ahmem or even a file on disk static int allocate_shared_filemem(unsigned size) { int fd = -1; @@ -237,7 +232,6 @@ void vmem_platform_create_mappings(const vmem_mapping *vmem_maps, unsigned numma for (unsigned j = 0; j < num_mirrors; j++) { u64 offset = vmem_maps[i].start_address + j * vmem_maps[i].memsize; -// verify(mem_region_unmap_file(&virt_ram_base[offset], vmem_maps[i].memsize)); verify(mem_region_map_file((void*)(uintptr_t)vmem_fd, &virt_ram_base[offset], vmem_maps[i].memsize, vmem_maps[i].memoffset, vmem_maps[i].allow_writes) != NULL); } diff --git a/core/stdclass.h b/core/stdclass.h index 5857f3965..7965ffa03 100644 --- a/core/stdclass.h +++ b/core/stdclass.h @@ -72,11 +72,6 @@ size_t get_last_slash_pos(const std::string& path); bool mem_region_lock(void *start, std::size_t len); bool mem_region_unlock(void *start, std::size_t len); -bool mem_region_set_exec(void *start, std::size_t len); -void *mem_region_reserve(void *start, std::size_t len); -bool mem_region_release(void *start, std::size_t len); -void *mem_region_map_file(void *file_handle, void *dest, std::size_t len, std::size_t offset, bool readwrite); -bool mem_region_unmap_file(void *start, std::size_t len); class VArray2 { public: diff --git a/core/windows/win_vmem.cpp b/core/windows/win_vmem.cpp index a7fe3ea99..71e15b729 100644 --- a/core/windows/win_vmem.cpp +++ b/core/windows/win_vmem.cpp @@ -24,15 +24,7 @@ bool mem_region_unlock(void *start, size_t len) return true; } -bool mem_region_set_exec(void *start, size_t len) -{ - DWORD old; - if (!VirtualProtect(start, len, PAGE_EXECUTE_READWRITE, &old)) - die("VirtualProtect failed ..\n"); - return true; -} - -void *mem_region_reserve(void *start, size_t len) +static void *mem_region_reserve(void *start, size_t len) { DWORD type = MEM_RESERVE; if (start == nullptr) @@ -40,21 +32,11 @@ void *mem_region_reserve(void *start, size_t len) return VirtualAlloc(start, len, type, PAGE_NOACCESS); } -bool mem_region_release(void *start, size_t len) +static bool mem_region_release(void *start, size_t len) { return VirtualFree(start, 0, MEM_RELEASE); } -void *mem_region_map_file(void *file_handle, void *dest, size_t len, size_t offset, bool readwrite) -{ - return MapViewOfFileEx((HANDLE)file_handle, readwrite ? FILE_MAP_WRITE : FILE_MAP_READ, (DWORD)(offset >> 32), (DWORD)offset, len, dest); -} - -bool mem_region_unmap_file(void *start, size_t len) -{ - return UnmapViewOfFile(start); -} - HANDLE mem_handle = INVALID_HANDLE_VALUE; static HANDLE mem_handle2 = INVALID_HANDLE_VALUE; static char * base_alloc = NULL; @@ -122,7 +104,7 @@ void vmem_platform_create_mappings(const vmem_mapping *vmem_maps, unsigned numma // Unmap the whole section for (void *p : mapped_regions) - mem_region_unmap_file(p, 0); + UnmapViewOfFile(p); mapped_regions.clear(); for (void *p : unmapped_regions) mem_region_release(p, 0); diff --git a/shell/libretro/libretro.cpp b/shell/libretro/libretro.cpp index f642abcbf..8b7b7448d 100644 --- a/shell/libretro/libretro.cpp +++ b/shell/libretro/libretro.cpp @@ -75,6 +75,7 @@ char* strdup(const char *str) #include "rend/osd.h" #include "cfg/option.h" #include "wsi/gl_context.h" +#include "version.h" #ifdef _WIN32 #include "windows/fault_handler.h" #endif @@ -516,18 +517,14 @@ static void update_variables(bool first_startup) var.key = CORE_OPTION_NAME "_internal_resolution"; if (environ_cb(RETRO_ENVIRONMENT_GET_VARIABLE, &var) && var.value) { - char *pch; char str[100]; snprintf(str, sizeof(str), "%s", var.value); - pch = strtok(str, "x"); + char *pch = strtok(str, "x"); pch = strtok(NULL, "x"); - if (pch) - { + if (pch != nullptr) config::RenderResolution = strtoul(pch, NULL, 0); - setFramebufferSize(); - dc_resize_renderer(); - } + DEBUG_LOG(COMMON, "Got height: %u", (int)config::RenderResolution); } @@ -817,18 +814,24 @@ static void update_variables(bool first_startup) setRotation(); geometryChanged = true; } + else + rotate_screen ^= rotate_game; + if (rotate_game) + config::Widescreen.override(false); setFramebufferSize(); if (prevMaxFramebufferWidth < maxFramebufferWidth || prevMaxFramebufferHeight < maxFramebufferHeight) { retro_system_av_info avinfo; setAVInfo(avinfo); environ_cb(RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO, &avinfo); + dc_resize_renderer(); } else if (prevFramebufferWidth != framebufferWidth || prevFramebufferHeight != framebufferHeight || geometryChanged) { retro_game_geometry geometry; setGameGeometry(geometry); environ_cb(RETRO_ENVIRONMENT_SET_GEOMETRY, &geometry); + dc_resize_renderer(); } } } @@ -1820,10 +1823,10 @@ void retro_get_system_info(struct retro_system_info *info) { info->library_name = "Flycast"; #ifndef GIT_VERSION -#define GIT_VERSION "" +#define GIT_VERSION "undefined" #endif - info->library_version = "0.1" GIT_VERSION; - info->valid_extensions = "chd|cdi|iso|elf|cue|gdi|lst|bin|dat|zip|7z|m3u"; + info->library_version = GIT_VERSION; + info->valid_extensions = "chd|cdi|elf|cue|gdi|lst|bin|dat|zip|7z|m3u"; info->need_fullpath = true; info->block_extract = true; }