lr: fix res change for rotated games. display version. vmem: simplify

This commit is contained in:
Flyinghead 2021-07-13 13:45:01 +02:00
parent f187f77e3d
commit 44213bf830
5 changed files with 25 additions and 58 deletions

View File

@ -1,11 +1,4 @@
#if defined(__SWITCH__)
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <errno.h>
#include <unistd.h>
#include <signal.h>
#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);
}

View File

@ -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);
}

View File

@ -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:

View File

@ -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);

View File

@ -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;
}