lr: fix res change for rotated games. display version. vmem: simplify
This commit is contained in:
parent
f187f77e3d
commit
44213bf830
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue