From 214f4f858455638d7ca2ff2e83b6e3f1474396a3 Mon Sep 17 00:00:00 2001 From: olebeck <31539311+olebeck@users.noreply.github.com> Date: Fri, 26 Sep 2025 19:19:49 +0200 Subject: [PATCH] clean up --- .github/workflows/ci.yml | 4 +- CMakeLists.txt | 3 +- CMakePresets.json | 50 - CONFIG/vita/CMakeLists.txt | 35 +- CONFIG/vita/iniparser_paf.patch | 53 + CONFIG/vita/iniparser_paf/src/dictionary.c | 381 ------- CONFIG/vita/iniparser_paf/src/dictionary.h | 167 --- CONFIG/vita/iniparser_paf/src/iniparser.c | 958 ------------------ CONFIG/vita/iniparser_paf/src/iniparser.h | 443 -------- CONFIG/vita/iniparser_paf/src/pafstd.h | 47 - CONFIG/vita/src/app.cpp | 8 +- CONFIG/vita/src/main.cpp | 56 - CONFIG/vita/src/paf_runtime.cpp | 169 +++ miniwin/CMakeLists.txt | 10 +- .../src/d3drm/backends/gxm/gxm_context.cpp | 680 +++++++++++++ miniwin/src/d3drm/backends/gxm/gxm_context.h | 13 +- .../gxm/{memory.cpp => gxm_memory.cpp} | 7 +- .../gxm/{renderer.cpp => gxm_renderer.cpp} | 754 +------------- miniwin/src/d3drm/backends/gxm/incbin.h | 415 -------- .../src/d3drm/backends/gxm/shaders/.gitignore | 3 +- .../d3drm/backends/gxm/shaders/CMakeLists.txt | 105 ++ .../src/d3drm/backends/gxm/shaders/Makefile | 27 - .../d3drm/backends/gxm/shaders/color.frag.gxp | Bin 228 -> 228 bytes .../backends/gxm/shaders/color.frag.perf.txt | 26 + .../d3drm/backends/gxm/shaders/gxm_shaders.h | 32 + .../d3drm/backends/gxm/shaders/gxm_shaders.s | 15 + .../d3drm/backends/gxm/shaders/image.frag.gxp | Bin 264 -> 264 bytes .../backends/gxm/shaders/image.frag.perf.txt | 29 + .../backends/gxm/shaders/main.color.frag.gxp | Bin 1248 -> 1248 bytes .../gxm/shaders/main.color.frag.perf.txt | 134 +++ .../d3drm/backends/gxm/shaders/main.frag.cg | 2 +- .../gxm/shaders/main.texture.frag.gxp | Bin 1312 -> 1312 bytes .../gxm/shaders/main.texture.frag.perf.txt | 139 +++ .../d3drm/backends/gxm/shaders/main.vert.cg | 4 +- .../d3drm/backends/gxm/shaders/main.vert.gxp | Bin 784 -> 784 bytes .../backends/gxm/shaders/main.vert.perf.txt | 87 ++ .../d3drm/backends/gxm/shaders/plane.vert.gxp | Bin 284 -> 284 bytes .../backends/gxm/shaders/plane.vert.perf.txt | 30 + miniwin/src/internal/d3drmrenderer_gxm.h | 4 +- packaging/vita/sce_module/libc.suprx | Bin 412936 -> 0 bytes packaging/vita/sce_module/libfios2.suprx | Bin 249272 -> 0 bytes 41 files changed, 1561 insertions(+), 3329 deletions(-) delete mode 100644 CMakePresets.json create mode 100644 CONFIG/vita/iniparser_paf.patch delete mode 100644 CONFIG/vita/iniparser_paf/src/dictionary.c delete mode 100644 CONFIG/vita/iniparser_paf/src/dictionary.h delete mode 100644 CONFIG/vita/iniparser_paf/src/iniparser.c delete mode 100644 CONFIG/vita/iniparser_paf/src/iniparser.h delete mode 100644 CONFIG/vita/iniparser_paf/src/pafstd.h delete mode 100644 CONFIG/vita/src/main.cpp create mode 100644 CONFIG/vita/src/paf_runtime.cpp create mode 100644 miniwin/src/d3drm/backends/gxm/gxm_context.cpp rename miniwin/src/d3drm/backends/gxm/{memory.cpp => gxm_memory.cpp} (94%) rename miniwin/src/d3drm/backends/gxm/{renderer.cpp => gxm_renderer.cpp} (59%) delete mode 100644 miniwin/src/d3drm/backends/gxm/incbin.h create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/CMakeLists.txt delete mode 100644 miniwin/src/d3drm/backends/gxm/shaders/Makefile create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/color.frag.perf.txt create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.h create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.s create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/image.frag.perf.txt create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/main.color.frag.perf.txt create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/main.texture.frag.perf.txt create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/main.vert.perf.txt create mode 100644 miniwin/src/d3drm/backends/gxm/shaders/plane.vert.perf.txt delete mode 100644 packaging/vita/sce_module/libc.suprx delete mode 100644 packaging/vita/sce_module/libfios2.suprx diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 41bd1271..d6b17e90 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -48,7 +48,7 @@ jobs: - { name: 'Nintendo 3DS', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, n3ds: true, werror: true, clang-tidy: false, container: 'devkitpro/devkitarm:latest', cmake-args: '-DCMAKE_TOOLCHAIN_FILE=/opt/devkitpro/cmake/3DS.cmake' } - { name: 'Xbox One', os: 'windows-latest', generator: 'Visual Studio 17 2022', dx5: false, config: false, msvc: true, werror: false, clang-tidy: false, vc-arch: 'amd64', cmake-args: '-DCMAKE_SYSTEM_NAME=WindowsStore -DCMAKE_SYSTEM_VERSION=10.0.26100.0', xbox-one: true} - { name: 'Android', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, android: true, werror: true, clang-tidy: false,} - - { name: 'Vita', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, vita: true, werror: true, clang-tidy: false, cmake-args: '--preset vita'} + - { name: 'Vita', os: 'ubuntu-latest', generator: 'Ninja', dx5: false, config: false, vita: true, werror: true, clang-tidy: false, cmake-args: '--toolchain /usr/local/vitasdk/share/vita.toolchain.cmake'} steps: - name: Setup vcvars if: ${{ !!matrix.msvc }} @@ -122,7 +122,7 @@ jobs: export VITASDK=/usr/local/vitasdk export PATH=$VITASDK/bin:$PATH echo "VITASDK=/usr/local/vitasdk" >> $GITHUB_ENV - echo "PATH=$VITASDK/bin:$PATH" >> $GITHUB_ENV + echo "$VITASDK/bin" >> $GITHUB_PATH ./install-all.sh - uses: actions/checkout@v4 diff --git a/CMakeLists.txt b/CMakeLists.txt index 11daf040..420d3e22 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,6 @@ cmake_minimum_required(VERSION 3.25...4.0 FATAL_ERROR) -project(isle LANGUAGES CXX C VERSION 0.1) +project(isle LANGUAGES CXX C ASM VERSION 0.1) if (IOS) set(CMAKE_XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED NO) @@ -903,7 +903,6 @@ if(VITA) set(VPK_FILE_ARGS "") file(GLOB_RECURSE SCE_SYS_FILES packaging/vita/sce_sys/*) - file(GLOB_RECURSE SCE_MODULE_FILES packaging/vita/sce_module/*) foreach(FILE ${SCE_SYS_FILES} ${SCE_MODULE_FILES}) file(RELATIVE_PATH REL_FILE ${CMAKE_CURRENT_SOURCE_DIR}/packaging/vita/ ${FILE}) list(APPEND VPK_FILE_ARGS "FILE") diff --git a/CMakePresets.json b/CMakePresets.json deleted file mode 100644 index a68abc3b..00000000 --- a/CMakePresets.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "version": 5, - "cmakeMinimumRequired": { - "major": 3, - "minor": 22, - "patch": 0 - }, - "configurePresets": [ - { - "name": "base", - "generator": "Ninja", - "binaryDir": "${sourceDir}/build/${presetName}", - "hidden": true - }, - { - "name": "release", - "inherits": ["base"], - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Release" - } - }, - { - "name": "debug", - "inherits": ["base"], - "cacheVariables": { - "CMAKE_BUILD_TYPE": "Debug" - } - }, - - { - "name": "mingw64", - "inherits": ["release"], - "toolchainFile": "CMake/cmake-toolchain-mingw64-x86_64.cmake" - }, - { - "name": "mingw64-debug", - "inherits": ["debug", "mingw64"] - }, - - { - "name": "vita", - "inherits": ["release"], - "toolchainFile": "$env{VITASDK}/share/vita.toolchain.cmake" - }, - { - "name": "vita-debug", - "inherits": ["debug", "vita"] - } - ] -} \ No newline at end of file diff --git a/CONFIG/vita/CMakeLists.txt b/CONFIG/vita/CMakeLists.txt index 37634292..6d44f518 100644 --- a/CONFIG/vita/CMakeLists.txt +++ b/CONFIG/vita/CMakeLists.txt @@ -13,31 +13,24 @@ FetchContent_Declare( ) FetchContent_MakeAvailable(ScePaf_External) -add_library(iniparser_paf - iniparser_paf/src/dictionary.c - iniparser_paf/src/iniparser.c -) -target_compile_options(iniparser_paf PRIVATE -O3) - -target_link_libraries(iniparser_paf - ScePafStdc_stub - SceLibKernel_stub - SceLibc_stub - SceFios2_stub -) - -target_include_directories(iniparser_paf PUBLIC - iniparser_paf/src/ -) - -target_compile_options(iniparser_paf PRIVATE - -Wl,-q -Wall -fno-builtin -fshort-wchar -Wno-unused-function -Wno-sign-compare +FetchContent_Declare( + iniparser_paf + GIT_REPOSITORY "https://gitlab.com/iniparser/iniparser.git" + GIT_TAG "v4.2.6" + UPDATE_DISCONNECTED TRUE + EXCLUDE_FROM_ALL + PATCH_COMMAND patch -p1 -i ${CMAKE_CURRENT_SOURCE_DIR}/iniparser_paf.patch ) +block() + set(BUILD_DOCS off) + set(BUILD_SHARED_LIBS off) + FetchContent_MakeAvailable(iniparser_paf) +endblock() add_executable(isle-config + src/paf_runtime.cpp src/app.cpp - src/main.cpp ) set_target_properties(isle-config PROPERTIES @@ -66,7 +59,7 @@ target_link_libraries(isle-config PRIVATE SceFios2_stub SceLibc_stub - iniparser_paf + iniparser_paf-static ) vita_create_self(isle-config.self isle-config diff --git a/CONFIG/vita/iniparser_paf.patch b/CONFIG/vita/iniparser_paf.patch new file mode 100644 index 00000000..e2cdacc8 --- /dev/null +++ b/CONFIG/vita/iniparser_paf.patch @@ -0,0 +1,53 @@ +diff --git a/CMakeLists.txt b/CMakeLists.txt +index 4f7fdba..d388fc8 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -1,7 +1,7 @@ + cmake_minimum_required(VERSION 3.18) + + project( +- iniparser ++ iniparser_paf + DESCRIPTION "C library for parsing INI-style files" + HOMEPAGE_URL https://gitlab.com/iniparser/iniparser/ + LANGUAGES C +@@ -108,6 +108,19 @@ foreach(TARGET_TYPE ${TARGET_TYPES}) + -pedantic) + endif(UNIX) + ++ if(VITA) ++ target_compile_options( ++ ${TARGET_NAME} ++ PRIVATE -Wl,-q -Wall -fshort-wchar) ++ target_link_libraries( ++ ${TARGET_NAME} ++ PRIVATE SceLibc_stub ++ ) ++ target_link_options( ++ ${TARGET_NAME} ++ PUBLIC -nostartfiles -nostdlib) ++ endif() ++ + # install targets + install( + TARGETS ${TARGET_NAME} +diff --git a/src/iniparser.c b/src/iniparser.c +index 1086b46..8e0e9c2 100644 +--- a/src/iniparser.c ++++ b/src/iniparser.c +@@ -14,6 +14,15 @@ + #include + #include "iniparser.h" + ++#ifdef __vita__ ++extern FILE* _Stderr; ++#undef stderr ++#define stderr _Stderr ++extern const char _Ctype[]; ++#undef __locale_ctype_ptr ++#define __locale_ctype_ptr() _Ctype ++#endif ++ + /*---------------------------- Defines -------------------------------------*/ + #define ASCIILINESZ (1024) + #define INI_INVALID_KEY ((char*)-1) diff --git a/CONFIG/vita/iniparser_paf/src/dictionary.c b/CONFIG/vita/iniparser_paf/src/dictionary.c deleted file mode 100644 index 38102dfa..00000000 --- a/CONFIG/vita/iniparser_paf/src/dictionary.c +++ /dev/null @@ -1,381 +0,0 @@ -/*-------------------------------------------------------------------------*/ -/** - @file dictionary.c - @author N. Devillard - @brief Implements a dictionary for string variables. - - This module implements a simple dictionary object, i.e. a list - of string/string associations. This object is useful to store e.g. - informations retrieved from a configuration file (ini files). -*/ -/*--------------------------------------------------------------------------*/ - -/*--------------------------------------------------------------------------- - Includes - ---------------------------------------------------------------------------*/ -#include "dictionary.h" - -#include "pafstd.h" - -/** Minimal allocated number of entries in a dictionary */ -#define DICTMINSZ 128 - -/*--------------------------------------------------------------------------- - Private functions - ---------------------------------------------------------------------------*/ - -/*-------------------------------------------------------------------------*/ -/** - @brief Duplicate a string - @param s String to duplicate - @return Pointer to a newly allocated string, to be freed with free() - - This is a replacement for strdup(). This implementation is provided - for systems that do not have it. - */ -/*--------------------------------------------------------------------------*/ -static char * xstrdup(const char * s) -{ - char * t ; - size_t len ; - if (!s) - return NULL ; - - len = strlen(s) + 1 ; - t = (char*) malloc(len) ; - if (t) { - memcpy(t, s, len) ; - } - return t ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Double the size of the dictionary - @param d Dictionary to grow - @return This function returns non-zero in case of failure - */ -/*--------------------------------------------------------------------------*/ -static int dictionary_grow(dictionary * d) -{ - char ** new_val ; - char ** new_key ; - unsigned * new_hash ; - - new_val = (char**) calloc(d->size * 2, sizeof *d->val); - new_key = (char**) calloc(d->size * 2, sizeof *d->key); - new_hash = (unsigned*) calloc(d->size * 2, sizeof *d->hash); - if (!new_val || !new_key || !new_hash) { - /* An allocation failed, leave the dictionary unchanged */ - if (new_val) - free(new_val); - if (new_key) - free(new_key); - if (new_hash) - free(new_hash); - return -1 ; - } - /* Initialize the newly allocated space */ - memcpy(new_val, d->val, d->size * sizeof(char *)); - memcpy(new_key, d->key, d->size * sizeof(char *)); - memcpy(new_hash, d->hash, d->size * sizeof(unsigned)); - /* Delete previous data */ - free(d->val); - free(d->key); - free(d->hash); - /* Actually update the dictionary */ - d->size *= 2 ; - d->val = new_val; - d->key = new_key; - d->hash = new_hash; - return 0 ; -} - -/*--------------------------------------------------------------------------- - Function codes - ---------------------------------------------------------------------------*/ -/*-------------------------------------------------------------------------*/ -/** - @brief Compute the hash key for a string. - @param key Character string to use for key. - @return 1 unsigned int on at least 32 bits. - - This hash function has been taken from an Article in Dr Dobbs Journal. - This is normally a collision-free function, distributing keys evenly. - The key is stored anyway in the struct so that collision can be avoided - by comparing the key itself in last resort. - */ -/*--------------------------------------------------------------------------*/ -unsigned dictionary_hash(const char * key) -{ - size_t len ; - unsigned hash ; - size_t i ; - - if (!key) - return 0 ; - - len = strlen(key); - for (hash=0, i=0 ; i>6) ; - } - hash += (hash <<3); - hash ^= (hash >>11); - hash += (hash <<15); - return hash ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Create a new dictionary object. - @param size Optional initial size of the dictionary. - @return 1 newly allocated dictionary object. - - This function allocates a new dictionary object of given size and returns - it. If you do not know in advance (roughly) the number of entries in the - dictionary, give size=0. - */ -/*-------------------------------------------------------------------------*/ -dictionary * dictionary_new(size_t size) -{ - dictionary * d ; - - /* If no size was specified, allocate space for DICTMINSZ */ - if (sizesize = size ; - d->val = (char**) calloc(size, sizeof *d->val); - d->key = (char**) calloc(size, sizeof *d->key); - d->hash = (unsigned*) calloc(size, sizeof *d->hash); - if (!d->size || !d->val || !d->hash) { - free((void *) d->size); - free((void *) d->val); - free((void *) d->hash); - free(d); - d = NULL; - } - } - return d ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Delete a dictionary object - @param d dictionary object to deallocate. - @return void - - Deallocate a dictionary object and all memory associated to it. - */ -/*--------------------------------------------------------------------------*/ -void dictionary_del(dictionary * d) -{ - size_t i ; - - if (d==NULL) return ; - for (i=0 ; isize ; i++) { - if (d->key[i]!=NULL) - free(d->key[i]); - if (d->val[i]!=NULL) - free(d->val[i]); - } - free(d->val); - free(d->key); - free(d->hash); - free(d); - return ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get a value from a dictionary. - @param d dictionary object to search. - @param key Key to look for in the dictionary. - @param def Default value to return if key not found. - @return 1 pointer to internally allocated character string. - - This function locates a key in a dictionary and returns a pointer to its - value, or the passed 'def' pointer if no such key can be found in - dictionary. The returned character pointer points to data internal to the - dictionary object, you should not try to free it or modify it. - */ -/*--------------------------------------------------------------------------*/ -const char * dictionary_get(const dictionary * d, const char * key, const char * def) -{ - unsigned hash ; - size_t i ; - - if(d == NULL || key == NULL) - return def ; - - hash = dictionary_hash(key); - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - /* Compare hash */ - if (hash==d->hash[i]) { - /* Compare string, to avoid hash collisions */ - if (!strcmp(key, d->key[i])) { - return d->val[i] ; - } - } - } - return def ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Set a value in a dictionary. - @param d dictionary object to modify. - @param key Key to modify or add. - @param val Value to add. - @return int 0 if Ok, anything else otherwise - - If the given key is found in the dictionary, the associated value is - replaced by the provided one. If the key cannot be found in the - dictionary, it is added to it. - - It is Ok to provide a NULL value for val, but NULL values for the dictionary - or the key are considered as errors: the function will return immediately - in such a case. - - Notice that if you dictionary_set a variable to NULL, a call to - dictionary_get will return a NULL value: the variable will be found, and - its value (NULL) is returned. In other words, setting the variable - content to NULL is equivalent to deleting the variable from the - dictionary. It is not possible (in this implementation) to have a key in - the dictionary without value. - - This function returns non-zero in case of failure. - */ -/*--------------------------------------------------------------------------*/ -int dictionary_set(dictionary * d, const char * key, const char * val) -{ - size_t i ; - unsigned hash ; - - if (d==NULL || key==NULL) return -1 ; - - /* Compute hash for this key */ - hash = dictionary_hash(key) ; - /* Find if value is already in dictionary */ - if (d->n>0) { - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - if (hash==d->hash[i]) { /* Same hash value */ - if (!strcmp(key, d->key[i])) { /* Same key */ - /* Found a value: modify and return */ - if (d->val[i]!=NULL) - free(d->val[i]); - d->val[i] = (val ? xstrdup(val) : NULL); - /* Value has been modified: return */ - return 0 ; - } - } - } - } - /* Add a new value */ - /* See if dictionary needs to grow */ - if (d->n==d->size) { - /* Reached maximum size: reallocate dictionary */ - if (dictionary_grow(d) != 0) - return -1; - } - - /* Insert key in the first empty slot. Start at d->n and wrap at - d->size. Because d->n < d->size this will necessarily - terminate. */ - for (i=d->n ; d->key[i] ; ) { - if(++i == d->size) i = 0; - } - /* Copy key */ - d->key[i] = xstrdup(key); - d->val[i] = (val ? xstrdup(val) : NULL) ; - d->hash[i] = hash; - d->n ++ ; - return 0 ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Delete a key in a dictionary - @param d dictionary object to modify. - @param key Key to remove. - @return void - - This function deletes a key in a dictionary. Nothing is done if the - key cannot be found. - */ -/*--------------------------------------------------------------------------*/ -void dictionary_unset(dictionary * d, const char * key) -{ - unsigned hash ; - size_t i ; - - if (key == NULL || d == NULL) { - return; - } - - hash = dictionary_hash(key); - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - /* Compare hash */ - if (hash==d->hash[i]) { - /* Compare string, to avoid hash collisions */ - if (!strcmp(key, d->key[i])) { - /* Found key */ - break ; - } - } - } - if (i>=d->size) - /* Key not found */ - return ; - - free(d->key[i]); - d->key[i] = NULL ; - if (d->val[i]!=NULL) { - free(d->val[i]); - d->val[i] = NULL ; - } - d->hash[i] = 0 ; - d->n -- ; - return ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Dump a dictionary to an opened file pointer. - @param d Dictionary to dump - @param f Opened file pointer. - @return void - - Dumps a dictionary onto an opened file pointer. Key pairs are printed out - as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as - output file pointers. - */ -/*--------------------------------------------------------------------------*/ -void dictionary_dump(const dictionary * d, FILE * out) -{ - size_t i ; - - if (d==NULL || out==NULL) return ; - if (d->n<1) { - fprintf(out, "empty dictionary\n"); - return ; - } - for (i=0 ; isize ; i++) { - if (d->key[i]) { - fprintf(out, "%20s\t[%s]\n", - d->key[i], - d->val[i] ? d->val[i] : "UNDEF"); - } - } - return ; -} diff --git a/CONFIG/vita/iniparser_paf/src/dictionary.h b/CONFIG/vita/iniparser_paf/src/dictionary.h deleted file mode 100644 index 8d3cc232..00000000 --- a/CONFIG/vita/iniparser_paf/src/dictionary.h +++ /dev/null @@ -1,167 +0,0 @@ - -/*-------------------------------------------------------------------------*/ -/** - @file dictionary.h - @author N. Devillard - @brief Implements a dictionary for string variables. - - This module implements a simple dictionary object, i.e. a list - of string/string associations. This object is useful to store e.g. - informations retrieved from a configuration file (ini files). -*/ -/*--------------------------------------------------------------------------*/ - -#ifndef _DICTIONARY_H_ -#define _DICTIONARY_H_ - -/*--------------------------------------------------------------------------- - Includes - ---------------------------------------------------------------------------*/ - -#include "pafstd.h" - -#ifdef __cplusplus -extern "C" -{ -#endif - - /*--------------------------------------------------------------------------- - New types - ---------------------------------------------------------------------------*/ - - /*-------------------------------------------------------------------------*/ - /** - @brief Dictionary object - - This object contains a list of string/string associations. Each - association is identified by a unique string key. Looking up values - in the dictionary is speeded up by the use of a (hopefully collision-free) - hash function. - */ - /*-------------------------------------------------------------------------*/ - typedef struct _dictionary_ { - unsigned n; /** Number of entries in dictionary */ - size_t size; /** Storage size */ - char** val; /** List of string values */ - char** key; /** List of string keys */ - unsigned* hash; /** List of hash values for keys */ - } dictionary; - - /*--------------------------------------------------------------------------- - Function prototypes - ---------------------------------------------------------------------------*/ - - /*-------------------------------------------------------------------------*/ - /** - @brief Compute the hash key for a string. - @param key Character string to use for key. - @return 1 unsigned int on at least 32 bits. - - This hash function has been taken from an Article in Dr Dobbs Journal. - This is normally a collision-free function, distributing keys evenly. - The key is stored anyway in the struct so that collision can be avoided - by comparing the key itself in last resort. - */ - /*--------------------------------------------------------------------------*/ - unsigned dictionary_hash(const char* key); - - /*-------------------------------------------------------------------------*/ - /** - @brief Create a new dictionary object. - @param size Optional initial size of the dictionary. - @return 1 newly allocated dictionary object. - - This function allocates a new dictionary object of given size and returns - it. If you do not know in advance (roughly) the number of entries in the - dictionary, give size=0. - */ - /*--------------------------------------------------------------------------*/ - dictionary* dictionary_new(size_t size); - - /*-------------------------------------------------------------------------*/ - /** - @brief Delete a dictionary object - @param d dictionary object to deallocate. - @return void - - Deallocate a dictionary object and all memory associated to it. - */ - /*--------------------------------------------------------------------------*/ - void dictionary_del(dictionary* vd); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get a value from a dictionary. - @param d dictionary object to search. - @param key Key to look for in the dictionary. - @param def Default value to return if key not found. - @return 1 pointer to internally allocated character string. - - This function locates a key in a dictionary and returns a pointer to its - value, or the passed 'def' pointer if no such key can be found in - dictionary. The returned character pointer points to data internal to the - dictionary object, you should not try to free it or modify it. - */ - /*--------------------------------------------------------------------------*/ - const char* dictionary_get(const dictionary* d, const char* key, const char* def); - - /*-------------------------------------------------------------------------*/ - /** - @brief Set a value in a dictionary. - @param d dictionary object to modify. - @param key Key to modify or add. - @param val Value to add. - @return int 0 if Ok, anything else otherwise - - If the given key is found in the dictionary, the associated value is - replaced by the provided one. If the key cannot be found in the - dictionary, it is added to it. - - It is Ok to provide a NULL value for val, but NULL values for the dictionary - or the key are considered as errors: the function will return immediately - in such a case. - - Notice that if you dictionary_set a variable to NULL, a call to - dictionary_get will return a NULL value: the variable will be found, and - its value (NULL) is returned. In other words, setting the variable - content to NULL is equivalent to deleting the variable from the - dictionary. It is not possible (in this implementation) to have a key in - the dictionary without value. - - This function returns non-zero in case of failure. - */ - /*--------------------------------------------------------------------------*/ - int dictionary_set(dictionary* vd, const char* key, const char* val); - - /*-------------------------------------------------------------------------*/ - /** - @brief Delete a key in a dictionary - @param d dictionary object to modify. - @param key Key to remove. - @return void - - This function deletes a key in a dictionary. Nothing is done if the - key cannot be found. - */ - /*--------------------------------------------------------------------------*/ - void dictionary_unset(dictionary* d, const char* key); - - /*-------------------------------------------------------------------------*/ - /** - @brief Dump a dictionary to an opened file pointer. - @param d Dictionary to dump - @param f Opened file pointer. - @return void - - Dumps a dictionary onto an opened file pointer. Key pairs are printed out - as @c [Key]=[Value], one per line. It is Ok to provide stdout or stderr as - output file pointers. - */ - /*--------------------------------------------------------------------------*/ - void dictionary_dump(const dictionary* d, FILE* out); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/CONFIG/vita/iniparser_paf/src/iniparser.c b/CONFIG/vita/iniparser_paf/src/iniparser.c deleted file mode 100644 index 222ebab9..00000000 --- a/CONFIG/vita/iniparser_paf/src/iniparser.c +++ /dev/null @@ -1,958 +0,0 @@ - -/*-------------------------------------------------------------------------*/ -/** - @file iniparser.c - @author N. Devillard - @brief Parser for ini files. -*/ -/*--------------------------------------------------------------------------*/ -/*---------------------------- Includes ------------------------------------*/ -#include -#include "pafstd.h" -#include -#include -#include "iniparser.h" - -/*---------------------------- Defines -------------------------------------*/ -#define ASCIILINESZ (1024) -#define INI_INVALID_KEY ((char*)-1) - -/*--------------------------------------------------------------------------- - Private to this module - ---------------------------------------------------------------------------*/ -/** - * This enum stores the status for each parsed line (internal use only). - */ -typedef enum _line_status_ { - LINE_UNPROCESSED, - LINE_ERROR, - LINE_EMPTY, - LINE_COMMENT, - LINE_SECTION, - LINE_VALUE -} line_status ; - -/*-------------------------------------------------------------------------*/ -/** - @brief Convert a string to lowercase. - @param in String to convert. - @param out Output buffer. - @param len Size of the out buffer. - @return ptr to the out buffer or NULL if an error occured. - - This function convert a string into lowercase. - At most len - 1 elements of the input string will be converted. - */ -/*--------------------------------------------------------------------------*/ -static const char * strlwc(const char * in, char *out, unsigned len) -{ - unsigned i ; - - if (in==NULL || out == NULL || len==0) return NULL ; - i=0 ; - while (in[i] != '\0' && i < len-1) { - out[i] = (char)tolower((int)in[i]); - i++ ; - } - out[i] = '\0'; - return out ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Duplicate a string - @param s String to duplicate - @return Pointer to a newly allocated string, to be freed with free() - - This is a replacement for strdup(). This implementation is provided - for systems that do not have it. - */ -/*--------------------------------------------------------------------------*/ -static char * xstrdup(const char * s) -{ - char * t ; - size_t len ; - if (!s) - return NULL ; - - len = strlen(s) + 1 ; - t = (char*) malloc(len) ; - if (t) { - memcpy(t, s, len) ; - } - return t ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Remove blanks at the beginning and the end of a string. - @param str String to parse and alter. - @return unsigned New size of the string. - */ -/*--------------------------------------------------------------------------*/ -static unsigned strstrip(char * s) -{ - char *last = NULL ; - char *dest = s; - - if (s==NULL) return 0; - - last = s + strlen(s); - while (isspace((unsigned char)*s) && *s) s++; - while (last > s) { - if (!isspace((unsigned char)*(last-1))) - break ; - last -- ; - } - *last = (char)0; - - memmove(dest,s,last - s + 1); - return last - s; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Default error callback for iniparser: wraps `fprintf(stderr, ...)`. - */ -/*--------------------------------------------------------------------------*/ -static int default_error_callback(const char *format, ...) -{ - int ret = 0; - va_list args; - va_start(args, format); - vprintf(format, args); - va_end(args); - return ret; -} - -static int (*iniparser_error_callback)(const char*, ...) = default_error_callback; - -/*-------------------------------------------------------------------------*/ -/** - @brief Configure a function to receive the error messages. - @param errback Function to call. - - By default, the error will be printed on stderr. If a null pointer is passed - as errback the error callback will be switched back to default. - */ -/*--------------------------------------------------------------------------*/ -void iniparser_set_error_callback(int (*errback)(const char *, ...)) -{ - if (errback) { - iniparser_error_callback = errback; - } else { - iniparser_error_callback = default_error_callback; - } -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get number of sections in a dictionary - @param d Dictionary to examine - @return int Number of sections found in dictionary - - This function returns the number of sections found in a dictionary. - The test to recognize sections is done on the string stored in the - dictionary: a section name is given as "section" whereas a key is - stored as "section:key", thus the test looks for entries that do not - contain a colon. - - This clearly fails in the case a section name contains a colon, but - this should simply be avoided. - - This function returns -1 in case of error. - */ -/*--------------------------------------------------------------------------*/ -int iniparser_getnsec(const dictionary * d) -{ - size_t i ; - int nsec ; - - if (d==NULL) return -1 ; - nsec=0 ; - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - if (strchr(d->key[i], ':')==NULL) { - nsec ++ ; - } - } - return nsec ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get name for section n in a dictionary. - @param d Dictionary to examine - @param n Section number (from 0 to nsec-1). - @return Pointer to char string - - This function locates the n-th section in a dictionary and returns - its name as a pointer to a string statically allocated inside the - dictionary. Do not free or modify the returned string! - - This function returns NULL in case of error. - */ -/*--------------------------------------------------------------------------*/ -const char * iniparser_getsecname(const dictionary * d, int n) -{ - size_t i ; - int foundsec ; - - if (d==NULL || n<0) return NULL ; - foundsec=0 ; - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - if (strchr(d->key[i], ':')==NULL) { - foundsec++ ; - if (foundsec>n) - break ; - } - } - if (foundsec<=n) { - return NULL ; - } - return d->key[i] ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Dump a dictionary to an opened file pointer. - @param d Dictionary to dump. - @param f Opened file pointer to dump to. - @return void - - This function prints out the contents of a dictionary, one element by - line, onto the provided file pointer. It is OK to specify @c stderr - or @c stdout as output files. This function is meant for debugging - purposes mostly. - */ -/*--------------------------------------------------------------------------*/ -void iniparser_dump(const dictionary * d, FILE * f) -{ - size_t i ; - - if (d==NULL || f==NULL) return ; - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - if (d->val[i]!=NULL) { - fprintf(f, "[%s]=[%s]\n", d->key[i], d->val[i]); - } else { - fprintf(f, "[%s]=UNDEF\n", d->key[i]); - } - } - return ; -} - -static void escape_value(char *escaped, char *value) { - char c; - int v = 0; - int e = 0; - - if(!escaped || !value) - return; - - while((c = value[v]) != '\0') { - if(c == '\\' || c == '"') { - escaped[e] = '\\'; - e++; - } - escaped[e] = c; - v++; - e++; - } - escaped[e] = '\0'; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Save a dictionary to a loadable ini file - @param d Dictionary to dump - @param f Opened file pointer to dump to - @return void - - This function dumps a given dictionary into a loadable ini file. - It is Ok to specify @c stderr or @c stdout as output files. - */ -/*--------------------------------------------------------------------------*/ -void iniparser_dump_ini(const dictionary * d, FILE * f) -{ - size_t i ; - size_t nsec ; - const char * secname ; - char escaped[(ASCIILINESZ * 2) + 2] = ""; - - if (d==NULL || f==NULL) return ; - - nsec = iniparser_getnsec(d); - if (nsec<1) { - /* No section in file: dump all keys as they are */ - for (i=0 ; isize ; i++) { - if (d->key[i]==NULL) - continue ; - escape_value(escaped, d->val[i]); - fprintf(f, "%s = \"%s\"\n", d->key[i], escaped); - } - return ; - } - for (i=0 ; i sizeof(keym)) return; - - seclen = (int)strlen(s); - fprintf(f, "\n[%s]\n", s); - sprintf(keym, "%s:", s); - for (j=0 ; jsize ; j++) { - if (d->key[j]==NULL) - continue ; - if (!strncmp(d->key[j], keym, seclen+1)) { - escape_value(escaped, d->val[j]); - fprintf(f, "%-30s = \"%s\"\n", d->key[j]+seclen+1, escaped); - } - } - fprintf(f, "\n"); - return ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the number of keys in a section of a dictionary. - @param d Dictionary to examine - @param s Section name of dictionary to examine - @return Number of keys in section - */ -/*--------------------------------------------------------------------------*/ -int iniparser_getsecnkeys(const dictionary * d, const char * s) -{ - int seclen, nkeys ; - char keym[ASCIILINESZ+1]; - size_t j ; - - nkeys = 0; - - if (d==NULL) return nkeys; - if (! iniparser_find_entry(d, s)) return nkeys; - - seclen = (int)strlen(s); - strlwc(s, keym, sizeof(keym)); - keym[seclen] = ':'; - - for (j=0 ; jsize ; j++) { - if (d->key[j]==NULL) - continue ; - if (!strncmp(d->key[j], keym, seclen+1)) - nkeys++; - } - - return nkeys; - -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the number of keys in a section of a dictionary. - @param d Dictionary to examine - @param s Section name of dictionary to examine - @param keys Already allocated array to store the keys in - @return The pointer passed as `keys` argument or NULL in case of error - - This function queries a dictionary and finds all keys in a given section. - The keys argument should be an array of pointers which size has been - determined by calling `iniparser_getsecnkeys` function prior to this one. - - Each pointer in the returned char pointer-to-pointer is pointing to - a string allocated in the dictionary; do not free or modify them. - */ -/*--------------------------------------------------------------------------*/ -const char ** iniparser_getseckeys(const dictionary * d, const char * s, const char ** keys) -{ - size_t i, j, seclen ; - char keym[ASCIILINESZ+1]; - - if (d==NULL || keys==NULL) return NULL; - if (! iniparser_find_entry(d, s)) return NULL; - - seclen = strlen(s); - strlwc(s, keym, sizeof(keym)); - keym[seclen] = ':'; - - i = 0; - - for (j=0 ; jsize ; j++) { - if (d->key[j]==NULL) - continue ; - if (!strncmp(d->key[j], keym, seclen+1)) { - keys[i] = d->key[j]; - i++; - } - } - - return keys; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the string associated to a key - @param d Dictionary to search - @param key Key string to look for - @param def Default value to return if key not found. - @return pointer to statically allocated character string - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the pointer passed as 'def' is returned. - The returned char pointer is pointing to a string allocated in - the dictionary, do not free or modify it. - */ -/*--------------------------------------------------------------------------*/ -const char * iniparser_getstring(const dictionary * d, const char * key, const char * def) -{ - const char * lc_key ; - const char * sval ; - char tmp_str[ASCIILINESZ+1]; - - if (d==NULL || key==NULL) - return def ; - - lc_key = strlwc(key, tmp_str, sizeof(tmp_str)); - sval = dictionary_get(d, lc_key, def); - return sval ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the string associated to a key, convert to an long int - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return long integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - "42" -> 42 - "042" -> 34 (octal -> decimal) - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtol(), see the associated man page for overflow - handling. - - Credits: Thanks to A. Becker for suggesting strtol() - */ -/*--------------------------------------------------------------------------*/ -long int iniparser_getlongint(const dictionary * d, const char * key, long int notfound) -{ - const char * str ; - - str = iniparser_getstring(d, key, INI_INVALID_KEY); - if (str==NULL || str==INI_INVALID_KEY) return notfound ; - return strtol(str, NULL, 0); -} - -int64_t iniparser_getint64(const dictionary * d, const char * key, int64_t notfound) -{ - const char * str ; - - str = iniparser_getstring(d, key, INI_INVALID_KEY); - if (str==NULL || str==INI_INVALID_KEY) return notfound ; - return strtoimax(str, NULL, 0); -} - -uint64_t iniparser_getuint64(const dictionary * d, const char * key, uint64_t notfound) -{ - const char * str ; - - str = iniparser_getstring(d, key, INI_INVALID_KEY); - if (str==NULL || str==INI_INVALID_KEY) return notfound ; - return strtoumax(str, NULL, 0); -} - - - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the string associated to a key, convert to an int - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - "42" -> 42 - "042" -> 34 (octal -> decimal) - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtol(), see the associated man page for overflow - handling. - - Credits: Thanks to A. Becker for suggesting strtol() - */ -/*--------------------------------------------------------------------------*/ -int iniparser_getint(const dictionary * d, const char * key, int notfound) -{ - return (int)iniparser_getlongint(d, key, notfound); -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the string associated to a key, convert to a double - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return double - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - */ -/*--------------------------------------------------------------------------*/ -double iniparser_getdouble(const dictionary * d, const char * key, double notfound) -{ - const char * str ; - - str = iniparser_getstring(d, key, INI_INVALID_KEY); - if (str==NULL || str==INI_INVALID_KEY) return notfound ; - return atof(str); -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Get the string associated to a key, convert to a boolean - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - A true boolean is found if one of the following is matched: - - - A string starting with 'y' - - A string starting with 'Y' - - A string starting with 't' - - A string starting with 'T' - - A string starting with '1' - - A false boolean is found if one of the following is matched: - - - A string starting with 'n' - - A string starting with 'N' - - A string starting with 'f' - - A string starting with 'F' - - A string starting with '0' - - The notfound value returned if no boolean is identified, does not - necessarily have to be 0 or 1. - */ -/*--------------------------------------------------------------------------*/ -int iniparser_getboolean(const dictionary * d, const char * key, int notfound) -{ - int ret ; - const char * c ; - - c = iniparser_getstring(d, key, INI_INVALID_KEY); - if (c==NULL || c==INI_INVALID_KEY) return notfound ; - if (c[0]=='y' || c[0]=='Y' || c[0]=='1' || c[0]=='t' || c[0]=='T') { - ret = 1 ; - } else if (c[0]=='n' || c[0]=='N' || c[0]=='0' || c[0]=='f' || c[0]=='F') { - ret = 0 ; - } else { - ret = notfound ; - } - return ret; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Finds out if a given entry exists in a dictionary - @param ini Dictionary to search - @param entry Name of the entry to look for - @return integer 1 if entry exists, 0 otherwise - - Finds out if a given entry exists in the dictionary. Since sections - are stored as keys with NULL associated values, this is the only way - of querying for the presence of sections in a dictionary. - */ -/*--------------------------------------------------------------------------*/ -int iniparser_find_entry(const dictionary * ini, const char * entry) -{ - int found=0 ; - if (iniparser_getstring(ini, entry, INI_INVALID_KEY)!=INI_INVALID_KEY) { - found = 1 ; - } - return found ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Set an entry in a dictionary. - @param ini Dictionary to modify. - @param entry Entry to modify (entry name) - @param val New value to associate to the entry. - @return int 0 if Ok, -1 otherwise. - - If the given entry can be found in the dictionary, it is modified to - contain the provided value. If it cannot be found, the entry is created. - It is Ok to set val to NULL. - */ -/*--------------------------------------------------------------------------*/ -int iniparser_set(dictionary * ini, const char * entry, const char * val) -{ - char tmp_key[ASCIILINESZ+1] = {0}; - char tmp_val[ASCIILINESZ+1] = {0}; - size_t len; - - if(val) { - len = strlen(val); - len = len > ASCIILINESZ ? ASCIILINESZ : len; - memcpy(tmp_val, val, len) ; - val = tmp_val; - } - return dictionary_set(ini, strlwc(entry, tmp_key, sizeof(tmp_key)), val); -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Delete an entry in a dictionary - @param ini Dictionary to modify - @param entry Entry to delete (entry name) - @return void - - If the given entry can be found, it is deleted from the dictionary. - */ -/*--------------------------------------------------------------------------*/ -void iniparser_unset(dictionary * ini, const char * entry) -{ - char tmp_str[ASCIILINESZ+1]; - dictionary_unset(ini, strlwc(entry, tmp_str, sizeof(tmp_str))); -} - -static void parse_quoted_value(char *value, char quote) { - char c; - char *quoted; - int q = 0, v = 0; - int esc = 0; - - if(!value) - return; - - quoted = xstrdup(value); - - if(!quoted) { - iniparser_error_callback("iniparser: memory allocation failure\n"); - goto end_of_value; - } - - while((c = quoted[q]) != '\0') { - if(!esc) { - if(c == '\\') { - esc = 1; - q++; - continue; - } - - if(c == quote) { - goto end_of_value; - } - } - esc = 0; - value[v] = c; - v++; - q++; - } -end_of_value: - value[v] = '\0'; - free(quoted); -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Load a single line from an INI file - @param input_line Input line, may be concatenated multi-line input - @param section Output space to store section - @param key Output space to store key - @param value Output space to store value - @return line_status value - */ -/*--------------------------------------------------------------------------*/ -static line_status iniparser_line( - const char * input_line, - char * section, - char * key, - char * value) -{ - line_status sta ; - char * line = NULL; - size_t len ; - int d_quote; - - line = xstrdup(input_line); - len = strstrip(line); - - sta = LINE_UNPROCESSED ; - if (len<1) { - /* Empty line */ - sta = LINE_EMPTY ; - } else if (line[0]=='#' || line[0]==';') { - /* Comment line */ - sta = LINE_COMMENT ; - } else if (line[0]=='[' && line[len-1]==']') { - /* Section name without opening square bracket */ - sscanf(line, "[%[^\n]", section); - len = strlen(section); - /* Section name without closing square bracket */ - if(section[len-1] == ']') - { - section[len-1] = '\0'; - } - strstrip(section); - strlwc(section, section, len); - sta = LINE_SECTION ; - } else if ((d_quote = sscanf (line, "%[^=] = \"%[^\n]\"", key, value)) == 2 - || sscanf (line, "%[^=] = '%[^\n]'", key, value) == 2) { - /* Usual key=value with quotes, with or without comments */ - strstrip(key); - strlwc(key, key, len); - if(d_quote == 2) - parse_quoted_value(value, '"'); - else - parse_quoted_value(value, '\''); - /* Don't strip spaces from values surrounded with quotes */ - sta = LINE_VALUE ; - } else if (sscanf (line, "%[^=] = %[^;#]", key, value) == 2) { - /* Usual key=value without quotes, with or without comments */ - strstrip(key); - strlwc(key, key, len); - strstrip(value); - /* - * sscanf cannot handle '' or "" as empty values - * this is done here - */ - if (!strcmp(value, "\"\"") || (!strcmp(value, "''"))) { - value[0]=0 ; - } - sta = LINE_VALUE ; - } else if (sscanf(line, "%[^=] = %[;#]", key, value)==2 - || sscanf(line, "%[^=] %[=]", key, value) == 2) { - /* - * Special cases: - * key= - * key=; - * key=# - */ - strstrip(key); - strlwc(key, key, len); - value[0]=0 ; - sta = LINE_VALUE ; - } else { - /* Generate syntax error */ - sta = LINE_ERROR ; - } - - free(line); - return sta ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Parse an ini file and return an allocated dictionary object - @param in File to read. - @param ininame Name of the ini file to read (only used for nicer error messages) - @return Pointer to newly allocated dictionary - - This is the parser for ini files. This function is called, providing - the file to be read. It returns a dictionary object that should not - be accessed directly, but through accessor functions instead. - - The returned dictionary must be freed using iniparser_freedict(). - */ -/*--------------------------------------------------------------------------*/ -dictionary * iniparser_load_file(FILE * in, const char * ininame) -{ - char line [ASCIILINESZ+1] ; - char section [ASCIILINESZ+1] ; - char key [ASCIILINESZ+1] ; - char tmp [(ASCIILINESZ * 2) + 2] ; - char val [ASCIILINESZ+1] ; - - int last=0 ; - int len ; - int lineno=0 ; - int errs=0; - int mem_err=0; - - dictionary * dict ; - - dict = dictionary_new(0) ; - if (!dict) { - return NULL ; - } - - memset(line, 0, ASCIILINESZ); - memset(section, 0, ASCIILINESZ); - memset(key, 0, ASCIILINESZ); - memset(val, 0, ASCIILINESZ); - last=0 ; - - while (fgets(line+last, ASCIILINESZ-last, in)!=NULL) { - lineno++ ; - len = (int)strlen(line)-1; - if (len<=0) - continue; - /* Safety check against buffer overflows */ - if (line[len]!='\n' && !feof(in)) { - iniparser_error_callback( - "iniparser: input line too long in %s (%d)\n", - ininame, - lineno); - dictionary_del(dict); - return NULL ; - } - /* Get rid of \n and spaces at end of line */ - while ((len>=0) && - ((line[len]=='\n') || (isspace((unsigned char)line[len])))) { - line[len]=0 ; - len-- ; - } - if (len < 0) { /* Line was entirely \n and/or spaces */ - len = 0; - } - /* Detect multi-line */ - if (line[len]=='\\') { - /* Multi-line value */ - last=len ; - continue ; - } else { - last=0 ; - } - switch (iniparser_line(line, section, key, val)) { - case LINE_EMPTY: - case LINE_COMMENT: - break ; - - case LINE_SECTION: - mem_err = dictionary_set(dict, section, NULL); - break ; - - case LINE_VALUE: - sprintf(tmp, "%s:%s", section, key); - mem_err = dictionary_set(dict, tmp, val); - break ; - - case LINE_ERROR: - iniparser_error_callback( - "iniparser: syntax error in %s (%d):\n-> %s\n", - ininame, - lineno, - line); - errs++ ; - break; - - default: - break ; - } - memset(line, 0, ASCIILINESZ); - last=0; - if (mem_err<0) { - iniparser_error_callback("iniparser: memory allocation failure\n"); - break ; - } - } - if (errs) { - dictionary_del(dict); - dict = NULL ; - } - return dict ; -} - -/*-------------------------------------------------------------------------*/ -/** - @brief Parse an ini file and return an allocated dictionary object - @param ininame Name of the ini file to read. - @return Pointer to newly allocated dictionary - - This is the parser for ini files. This function is called, providing - the name of the file to be read. It returns a dictionary object that - should not be accessed directly, but through accessor functions - instead. - - The returned dictionary must be freed using iniparser_freedict(). - */ -/*--------------------------------------------------------------------------*/ -dictionary * iniparser_load(const char * ininame) -{ - FILE * in ; - dictionary * dict ; - - if ((in=fopen(ininame, "r"))==NULL) { - iniparser_error_callback("iniparser: cannot open %s\n", ininame); - return NULL ; - } - - dict = iniparser_load_file(in, ininame); - fclose(in); - - return dict ; -} - - -/*-------------------------------------------------------------------------*/ -/** - @brief Free all memory associated to an ini dictionary - @param d Dictionary to free - @return void - - Free all memory associated to an ini dictionary. - It is mandatory to call this function before the dictionary object - gets out of the current context. - */ -/*--------------------------------------------------------------------------*/ -void iniparser_freedict(dictionary * d) -{ - dictionary_del(d); -} diff --git a/CONFIG/vita/iniparser_paf/src/iniparser.h b/CONFIG/vita/iniparser_paf/src/iniparser.h deleted file mode 100644 index 0e4f8162..00000000 --- a/CONFIG/vita/iniparser_paf/src/iniparser.h +++ /dev/null @@ -1,443 +0,0 @@ - -/*-------------------------------------------------------------------------*/ -/** - @file iniparser.h - @author N. Devillard - @brief Parser for ini files. -*/ -/*--------------------------------------------------------------------------*/ - -#ifndef _INIPARSER_H_ -#define _INIPARSER_H_ - -/*--------------------------------------------------------------------------- - Includes - ---------------------------------------------------------------------------*/ - -#include "dictionary.h" - -#include - -#ifdef __cplusplus -extern "C" -{ -#endif - - /*-------------------------------------------------------------------------*/ - /** - @brief Configure a function to receive the error messages. - @param errback Function to call. - - By default, the error will be printed on stderr. If a null pointer is passed - as errback the error callback will be switched back to default. - */ - /*--------------------------------------------------------------------------*/ - - void iniparser_set_error_callback(int (*errback)(const char*, ...)); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get number of sections in a dictionary - @param d Dictionary to examine - @return int Number of sections found in dictionary - - This function returns the number of sections found in a dictionary. - The test to recognize sections is done on the string stored in the - dictionary: a section name is given as "section" whereas a key is - stored as "section:key", thus the test looks for entries that do not - contain a colon. - - This clearly fails in the case a section name contains a colon, but - this should simply be avoided. - - This function returns -1 in case of error. - */ - /*--------------------------------------------------------------------------*/ - - int iniparser_getnsec(const dictionary* d); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get name for section n in a dictionary. - @param d Dictionary to examine - @param n Section number (from 0 to nsec-1). - @return Pointer to char string - - This function locates the n-th section in a dictionary and returns - its name as a pointer to a string statically allocated inside the - dictionary. Do not free or modify the returned string! - - This function returns NULL in case of error. - */ - /*--------------------------------------------------------------------------*/ - - const char* iniparser_getsecname(const dictionary* d, int n); - - /*-------------------------------------------------------------------------*/ - /** - @brief Save a dictionary to a loadable ini file - @param d Dictionary to dump - @param f Opened file pointer to dump to - - This function dumps a given dictionary into a loadable ini file. - It is Ok to specify @c stderr or @c stdout as output files. - - All values are quoted, these charecters are escaped: - - - ' : the quote character (e.g. "String with \"Quotes\"") - - \ : the backslash character (e.g. "C:\\tmp") - - */ - /*--------------------------------------------------------------------------*/ - - void iniparser_dump_ini(const dictionary* d, FILE* f); - - /*-------------------------------------------------------------------------*/ - /** - @brief Save a dictionary section to a loadable ini file - @param d Dictionary to dump - @param s Section name of dictionary to dump - @param f Opened file pointer to dump to - - This function dumps a given section of a given dictionary into a loadable ini - file. It is Ok to specify @c stderr or @c stdout as output files. - */ - /*--------------------------------------------------------------------------*/ - - void iniparser_dumpsection_ini(const dictionary* d, const char* s, FILE* f); - - /*-------------------------------------------------------------------------*/ - /** - @brief Dump a dictionary to an opened file pointer. - @param d Dictionary to dump. - @param f Opened file pointer to dump to. - - This function prints out the contents of a dictionary, one element by - line, onto the provided file pointer. It is OK to specify @c stderr - or @c stdout as output files. This function is meant for debugging - purposes mostly. - */ - /*--------------------------------------------------------------------------*/ - void iniparser_dump(const dictionary* d, FILE* f); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the number of keys in a section of a dictionary. - @param d Dictionary to examine - @param s Section name of dictionary to examine - @return Number of keys in section - */ - /*--------------------------------------------------------------------------*/ - int iniparser_getsecnkeys(const dictionary* d, const char* s); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the number of keys in a section of a dictionary. - @param d Dictionary to examine - @param s Section name of dictionary to examine - @param keys Already allocated array to store the keys in - @return The pointer passed as `keys` argument or NULL in case of error - - This function queries a dictionary and finds all keys in a given section. - The keys argument should be an array of pointers which size has been - determined by calling `iniparser_getsecnkeys` function prior to this one. - - Each pointer in the returned char pointer-to-pointer is pointing to - a string allocated in the dictionary; do not free or modify them. - */ - /*--------------------------------------------------------------------------*/ - const char** iniparser_getseckeys(const dictionary* d, const char* s, const char** keys); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key - @param d Dictionary to search - @param key Key string to look for - @param def Default value to return if key not found. - @return pointer to statically allocated character string - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the pointer passed as 'def' is returned. - The returned char pointer is pointing to a string allocated in - the dictionary, do not free or modify it. - */ - /*--------------------------------------------------------------------------*/ - const char* iniparser_getstring(const dictionary* d, const char* key, const char* def); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to an int - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - - "42" -> 42 - - "042" -> 34 (octal -> decimal) - - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtol(), see the associated man page for overflow - handling. - - Credits: Thanks to A. Becker for suggesting strtol() - */ - /*--------------------------------------------------------------------------*/ - int iniparser_getint(const dictionary* d, const char* key, int notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to an long int - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - - "42" -> 42 - - "042" -> 34 (octal -> decimal) - - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtol(), see the associated man page for overflow - handling. - */ - /*--------------------------------------------------------------------------*/ - long int iniparser_getlongint(const dictionary* d, const char* key, long int notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to an int64_t - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - - "42" -> 42 - - "042" -> 34 (octal -> decimal) - - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtoimax(), see the associated man page for overflow - handling. - - This function is usefull on 32bit architectures where `long int` is only - 32bit. - */ - /*--------------------------------------------------------------------------*/ - int64_t iniparser_getint64(const dictionary* d, const char* key, int64_t notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to an uint64_t - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - Supported values for integers include the usual C notation - so decimal, octal (starting with 0) and hexadecimal (starting with 0x) - are supported. Examples: - - - "42" -> 42 - - "042" -> 34 (octal -> decimal) - - "0x42" -> 66 (hexa -> decimal) - - Warning: the conversion may overflow in various ways. Conversion is - totally outsourced to strtoumax(), see the associated man page for overflow - handling. - - This function is usefull on 32bit architectures where `long int` is only - 32bit. - */ - /*--------------------------------------------------------------------------*/ - uint64_t iniparser_getuint64(const dictionary* d, const char* key, uint64_t notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to a double - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return double - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - */ - /*--------------------------------------------------------------------------*/ - double iniparser_getdouble(const dictionary* d, const char* key, double notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Get the string associated to a key, convert to a boolean - @param d Dictionary to search - @param key Key string to look for - @param notfound Value to return in case of error - @return integer - - This function queries a dictionary for a key. A key as read from an - ini file is given as "section:key". If the key cannot be found, - the notfound value is returned. - - A true boolean is found if one of the following is matched: - - - A string starting with 'y' - - A string starting with 'Y' - - A string starting with 't' - - A string starting with 'T' - - A string starting with '1' - - A false boolean is found if one of the following is matched: - - - A string starting with 'n' - - A string starting with 'N' - - A string starting with 'f' - - A string starting with 'F' - - A string starting with '0' - - The notfound value returned if no boolean is identified, does not - necessarily have to be 0 or 1. - */ - /*--------------------------------------------------------------------------*/ - int iniparser_getboolean(const dictionary* d, const char* key, int notfound); - - /*-------------------------------------------------------------------------*/ - /** - @brief Set an entry in a dictionary. - @param ini Dictionary to modify. - @param entry Entry to modify (entry name) - @param val New value to associate to the entry. - @return int 0 if Ok, -1 otherwise. - - If the given entry can be found in the dictionary, it is modified to - contain the provided value. If it cannot be found, the entry is created. - It is Ok to set val to NULL. - */ - /*--------------------------------------------------------------------------*/ - int iniparser_set(dictionary* ini, const char* entry, const char* val); - - /*-------------------------------------------------------------------------*/ - /** - @brief Delete an entry in a dictionary - @param ini Dictionary to modify - @param entry Entry to delete (entry name) - - If the given entry can be found, it is deleted from the dictionary. - */ - /*--------------------------------------------------------------------------*/ - void iniparser_unset(dictionary* ini, const char* entry); - - /*-------------------------------------------------------------------------*/ - /** - @brief Finds out if a given entry exists in a dictionary - @param ini Dictionary to search - @param entry Name of the entry to look for - @return integer 1 if entry exists, 0 otherwise - - Finds out if a given entry exists in the dictionary. Since sections - are stored as keys with NULL associated values, this is the only way - of querying for the presence of sections in a dictionary. - */ - /*--------------------------------------------------------------------------*/ - int iniparser_find_entry(const dictionary* ini, const char* entry); - - /*-------------------------------------------------------------------------*/ - /** - @brief Parse an ini file and return an allocated dictionary object - @param ininame Name of the ini file to read. - @return Pointer to newly allocated dictionary - - This is the parser for ini files. This function is called, providing - the name of the file to be read. It returns a dictionary object that - should not be accessed directly, but through accessor functions - instead. - - Iff the value is a quoted string it supports some escape sequences: - - - \" or ' : the quote character - (e.g. 'String with "Quotes"' or "String with 'Quotes'") - - \ : the backslash character (e.g. "C:\tmp") - - Escape sequences always start with a backslash. Additional escape sequences - might be added in the future. Backslash characters must be escaped. Any other - sequence then those outlined above is invalid and may lead to unpredictable - results. - - The returned dictionary must be freed using iniparser_freedict(). - */ - /*--------------------------------------------------------------------------*/ - dictionary* iniparser_load(const char* ininame); - - /*-------------------------------------------------------------------------*/ - /** - @brief Parse an ini file and return an allocated dictionary object - @param in File to read. - @param ininame Name of the ini file to read (only used for nicer error messages) - @return Pointer to newly allocated dictionary - - This is the parser for ini files. This function is called, providing - the file to be read. It returns a dictionary object that should not - be accessed directly, but through accessor functions instead. - - Iff the value is a quoted string it supports some escape sequences: - - - \" or ' : the quote character - (e.g. 'String with "Quotes"' or "String with 'Quotes'") - - \ : the backslash character (e.g. "C:\tmp") - - Escape sequences always start with a backslash. Additional escape sequences - might be added in the future. Backslash characters must be escaped. Any other - sequence then those outlined above is invalid and may lead to unpredictable - results. - - The returned dictionary must be freed using iniparser_freedict(). - */ - /*--------------------------------------------------------------------------*/ - dictionary* iniparser_load_file(FILE* in, const char* ininame); - - /*-------------------------------------------------------------------------*/ - /** - @brief Free all memory associated to an ini dictionary - @param d Dictionary to free - - Free all memory associated to an ini dictionary. - It is mandatory to call this function before the dictionary object - gets out of the current context. - */ - /*--------------------------------------------------------------------------*/ - void iniparser_freedict(dictionary* d); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/CONFIG/vita/iniparser_paf/src/pafstd.h b/CONFIG/vita/iniparser_paf/src/pafstd.h deleted file mode 100644 index f7878fe7..00000000 --- a/CONFIG/vita/iniparser_paf/src/pafstd.h +++ /dev/null @@ -1,47 +0,0 @@ -#ifndef __PAFSTD__ -#define __PAFSTD__ - -#include -#include - -#define malloc sce_paf_malloc -#define memcpy sce_paf_memcpy -#define memset sce_paf_memset -#define memmove sce_paf_memmove -#define free sce_paf_free -#define calloc sce_paf_calloc -#define strcmp sce_paf_strcmp -#define strlen sce_paf_strlen -#define strncmp sce_paf_strncmp -#define strchr sce_paf_strchr -#define strtol sce_paf_strtol -#define atof sce_paf_atof - -// _ctype_ isnt called that in scelibc, so just stub the functions that are needed - -inline int _is_space(char c) -{ - return (c == ' ' || c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v'); -} - -inline int _to_lower(int c) -{ - if (c >= 'A' && c <= 'Z') { - return c + ('a' - 'A'); - } - return c; -} - -inline int _is_digit(int c) -{ - return (c >= '0' && c <= '9'); -} - -#undef isspace -#undef tolower -#undef isdigit -#define isspace _is_space -#define tolower _to_lower -#define isdigit _is_digit - -#endif diff --git a/CONFIG/vita/src/app.cpp b/CONFIG/vita/src/app.cpp index 64e82ce3..a97841db 100644 --- a/CONFIG/vita/src/app.cpp +++ b/CONFIG/vita/src/app.cpp @@ -176,16 +176,19 @@ struct Config { case 's': { const char* value = iniparser_getstring(this->dict, m.key_ini, ""); this->settings->SetString(m.key_app, value); + sceClibPrintf("ini->settings %s = %s\n", m.key_app, value); break; } case 'i': { int32_t value = iniparser_getint(this->dict, m.key_ini, 0); this->settings->SetInt(m.key_app, value); + sceClibPrintf("ini->settings %s = %d\n", m.key_app, value); break; } case 'b': { bool value = iniparser_getboolean(this->dict, m.key_ini, 0) == 1; this->settings->SetBool(m.key_app, value); + sceClibPrintf("ini->settings %s = %s\n", m.key_app, value ? "true" : "false"); break; } default: { @@ -206,18 +209,21 @@ struct Config { const char* def = iniparser_getstring(this->dict, m.key_ini, ""); this->settings->GetString(m.key_app, this->buffer, sizeof(this->buffer), def); iniparser_set(this->dict, m.key_ini, buffer); + sceClibPrintf("settings->ini %s = %s\n", m.key_ini, buffer); break; } case 'i': { int32_t value = iniparser_getint(this->dict, m.key_ini, 0); this->settings->GetInt(m.key_app, &value, value); SetDictInt(m.key_ini, value); + sceClibPrintf("settings->ini %s = %d\n", m.key_ini, value); break; } case 'b': { bool value = iniparser_getboolean(this->dict, m.key_ini, 0) == 1; this->settings->GetBool(m.key_app, &value, value); SetDictBool(m.key_ini, value); + sceClibPrintf("settings->ini %s = %s\n", m.key_ini, value ? "true" : "false"); break; } default: { @@ -384,7 +390,7 @@ void open_settings() g_appSetIf->ShowFooter(); } -int paf_main(void) +int main() { paf::Framework::InitParam fwParam; fwParam.mode = paf::Framework::Mode_Normal; diff --git a/CONFIG/vita/src/main.cpp b/CONFIG/vita/src/main.cpp deleted file mode 100644 index fa5951f8..00000000 --- a/CONFIG/vita/src/main.cpp +++ /dev/null @@ -1,56 +0,0 @@ -#include -#include -#include -#include -#include - -char sceUserMainThreadName[] = "isle_config"; -int sceUserMainThreadPriority = 0x10000100; -int sceUserMainThreadCpuAffinityMask = 0x70000; -SceSize sceUserMainThreadStackSize = 0x4000; - -void operator delete(void* ptr, unsigned int n) -{ - return sce_paf_free(ptr); -} - -int paf_main(void); - -extern "C" int module_start(SceSize args, void* argp) -{ - int load_res; - ScePafInit init_param; - SceSysmoduleOpt sysmodule_opt; - - init_param.global_heap_size = 0x1000000; - init_param.cdlg_mode = 0; - init_param.global_heap_alignment = 0; - init_param.global_heap_disable_assert_on_alloc_failure = 0; - - load_res = 0xDEADBEEF; - sysmodule_opt.flags = 0; - sysmodule_opt.result = &load_res; - - int res = sceSysmoduleLoadModuleInternalWithArg( - SCE_SYSMODULE_INTERNAL_PAF, - sizeof(init_param), - &init_param, - &sysmodule_opt - ); - if ((res | load_res) != 0) { - sceClibPrintf( - "[PAF PRX Loader] Failed to load the PAF prx. (return value 0x%x, result code 0x%x )\n", - res, - load_res - ); - } - - res = paf_main(); - sceKernelExitProcess(res); - return SCE_KERNEL_START_SUCCESS; -} - -extern "C" void _start() -{ - module_start(0, nullptr); -} diff --git a/CONFIG/vita/src/paf_runtime.cpp b/CONFIG/vita/src/paf_runtime.cpp new file mode 100644 index 00000000..31266a1d --- /dev/null +++ b/CONFIG/vita/src/paf_runtime.cpp @@ -0,0 +1,169 @@ +#include +#include +#include +#include +#include + +char sceUserMainThreadName[] = "isle_config"; +int sceUserMainThreadPriority = 0x10000100; +int sceUserMainThreadCpuAffinityMask = 0x70000; +SceSize sceUserMainThreadStackSize = 0x4000; + +void operator delete(void* ptr, unsigned int n) +{ + return sce_paf_free(ptr); +} + +extern "C" +{ + void user_malloc_init() + { + } + + void user_malloc_finalize(void) + { + } + + void* user_malloc(size_t size) + { + return sce_paf_malloc(size); + } + + void user_free(void* ptr) + { + sce_paf_free(ptr); + } + + void* user_calloc(size_t nelem, size_t size) + { + return sce_paf_calloc(nelem, size); + } + + void* user_realloc(void* ptr, size_t new_size) + { + return sce_paf_realloc(ptr, new_size); + } + + void* user_memalign(size_t boundary, size_t size) + { + return sce_paf_memalign(boundary, size); + } + + void* user_reallocalign(void* ptr, size_t size, size_t boundary) + { + sceClibPrintf("[PAF2LIBC] reallocalign is not supported\n"); + abort(); + return NULL; + } + + int user_malloc_stats(struct malloc_managed_size* mmsize) + { + sceClibPrintf("malloc_stats\n"); + abort(); + return 0; + } + + int user_malloc_stats_fast(struct malloc_managed_size* mmsize) + { + sceClibPrintf("user_malloc_stats_fast\n"); + abort(); + return 0; + } + + size_t user_malloc_usable_size(void* ptr) + { + return sce_paf_musable_size(ptr); + } +} + +void* user_new(std::size_t size) +{ + return sce_paf_malloc(size); +} + +void* user_new(std::size_t size, const std::nothrow_t& x) +{ + return sce_paf_malloc(size); +} + +void* user_new_array(std::size_t size) +{ + return sce_paf_malloc(size); +} + +void* user_new_array(std::size_t size, const std::nothrow_t& x) +{ + return sce_paf_malloc(size); +} + +void user_delete(void* ptr) +{ + sce_paf_free(ptr); +} + +void user_delete(void* ptr, const std::nothrow_t& x) +{ + sce_paf_free(ptr); +} + +void user_delete_array(void* ptr) +{ + sce_paf_free(ptr); +} + +void user_delete_array(void* ptr, const std::nothrow_t& x) +{ + sce_paf_free(ptr); +} + +int paf_init() +{ + int load_res; + ScePafInit init_param; + SceSysmoduleOpt sysmodule_opt; + + init_param.global_heap_size = 0x1000000; + init_param.cdlg_mode = 0; + init_param.global_heap_alignment = 0; + init_param.global_heap_disable_assert_on_alloc_failure = 0; + + load_res = 0xDEADBEEF; + sysmodule_opt.flags = 0; + sysmodule_opt.result = &load_res; + + int res = sceSysmoduleLoadModuleInternalWithArg( + SCE_SYSMODULE_INTERNAL_PAF, + sizeof(init_param), + &init_param, + &sysmodule_opt + ); + if ((res | load_res) != 0) { + sceClibPrintf( + "[PAF PRX Loader] Failed to load the PAF prx. (return value 0x%x, result code 0x%x )\n", + res, + load_res + ); + return -1; + } + return 0; +} + +int main(); + +extern "C" int module_start(SceSize args, void* argp) +{ + int res = paf_init(); + if (res < 0) { + sceKernelExitProcess(res); + return SCE_KERNEL_START_FAILED; + } + + res = main(); + sceKernelExitProcess(res); + return SCE_KERNEL_START_SUCCESS; +} + +extern "C" void _start() +{ + module_start(0, nullptr); +} diff --git a/miniwin/CMakeLists.txt b/miniwin/CMakeLists.txt index 625d5261..4293780e 100644 --- a/miniwin/CMakeLists.txt +++ b/miniwin/CMakeLists.txt @@ -70,9 +70,12 @@ if(NOT (VITA OR WINDOWS_STORE)) endif() if(VITA) + add_subdirectory(src/d3drm/backends/gxm/shaders) + target_sources(miniwin PRIVATE - src/d3drm/backends/gxm/renderer.cpp - src/d3drm/backends/gxm/memory.cpp + src/d3drm/backends/gxm/gxm_context.cpp + src/d3drm/backends/gxm/gxm_renderer.cpp + src/d3drm/backends/gxm/gxm_memory.cpp src/d3drm/backends/gxm/tlsf.c ) target_link_libraries(miniwin PRIVATE @@ -80,11 +83,10 @@ if(VITA) SceRazorCapture_stub SceRazorHud_stub taihen_stub + gxm_shaders ) list(APPEND GRAPHICS_BACKENDS USE_GXM) list(REMOVE_ITEM GRAPHICS_BACKENDS USE_SOFTWARE_RENDER USE_SDL_GPU) - # for shaders incbin - target_include_directories(miniwin PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src/d3drm/backends/gxm) endif() if(NINTENDO_3DS) diff --git a/miniwin/src/d3drm/backends/gxm/gxm_context.cpp b/miniwin/src/d3drm/backends/gxm/gxm_context.cpp new file mode 100644 index 00000000..1e13d1d0 --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/gxm_context.cpp @@ -0,0 +1,680 @@ +#include "gxm_context.h" + +#include "gxm_memory.h" +#include "shaders/gxm_shaders.h" +#include "tlsf.h" +#include "utils.h" + +#include +#include +#include +#include +#include + +static bool gxm_initialized = false; + +bool with_razor_capture; +bool with_razor_hud; + +#define CDRAM_POOL_SIZE 64 * 1024 * 1024 +#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8 + +typedef struct GXMDisplayData { + void* address; + int index; +} GXMDisplayData; + +static void display_callback(const void* callback_data) +{ + const GXMDisplayData* display_data = (const GXMDisplayData*) callback_data; + + SceDisplayFrameBuf framebuf; + SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf)); + framebuf.size = sizeof(SceDisplayFrameBuf); + framebuf.base = display_data->address; + framebuf.pitch = VITA_GXM_SCREEN_STRIDE; + framebuf.pixelformat = VITA_GXM_PIXEL_FORMAT; + framebuf.width = VITA_GXM_SCREEN_WIDTH; + framebuf.height = VITA_GXM_SCREEN_HEIGHT; + sceDisplaySetFrameBuf(&framebuf, SCE_DISPLAY_SETBUF_NEXTFRAME); + sceDisplayWaitSetFrameBuf(); +} + +#ifdef GXM_WITH_RAZOR +static int load_suprx(const char* name) +{ + sceClibPrintf("loading %s\n", name); + int modid = _sceKernelLoadModule(name, 0, nullptr); + if (modid < 0) { + sceClibPrintf("%s load: 0x%08x\n", name, modid); + return modid; + } + int status; + int ret = sceKernelStartModule(modid, 0, nullptr, 0, nullptr, &status); + if (ret < 0) { + sceClibPrintf("%s start: 0x%08x\n", name, ret); + } + return ret; +} + +static void load_razor() +{ + with_razor_capture = false; + with_razor_hud = false; + if (load_suprx("app0:librazorcapture_es4.suprx") >= 0) { + with_razor_capture = true; + } + + if (with_razor_capture) { + // sceRazorGpuCaptureEnableSalvage("ux0:data/gpu_crash.sgx"); + } + + if (with_razor_hud) { + sceRazorGpuTraceSetFilename("ux0:data/gpu_trace", 3); + } +} +#endif + +int gxm_library_init() +{ + if (gxm_initialized) { + return 0; + } + +#ifdef GXM_WITH_RAZOR + load_razor(); +#endif + + SceGxmInitializeParams initializeParams; + SDL_memset(&initializeParams, 0, sizeof(SceGxmInitializeParams)); + initializeParams.flags = 0; + initializeParams.displayQueueMaxPendingCount = VITA_GXM_PENDING_SWAPS; + initializeParams.displayQueueCallback = display_callback; + initializeParams.displayQueueCallbackDataSize = sizeof(GXMDisplayData); + initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE; + + int err = sceGxmInitialize(&initializeParams); + if (err != 0) { + SDL_LogError(SDL_LOG_CATEGORY_RENDER, "gxm init failed: %d", err); + return err; + } + gxm_initialized = true; + return 0; +} + +GXMContext* gxm; + +void GXMContext::init_cdram_allocator() +{ + // allocator + this->cdramMem = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, + CDRAM_POOL_SIZE, + 16, + SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, + &this->cdramUID, + "cdram_pool" + ); + this->cdramPool = SDL_malloc(tlsf_size()); + tlsf_create(this->cdramPool); + tlsf_add_pool(this->cdramPool, this->cdramMem, CDRAM_POOL_SIZE); +} + +int GXMContext::init_context() +{ + int ret; + + const unsigned int patcherBufferSize = 64 * 1024; + const unsigned int patcherVertexUsseSize = 64 * 1024; + const unsigned int patcherFragmentUsseSize = 64 * 1024; + + // allocate buffers + this->vdmRingBuffer = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE, + 4, + SCE_GXM_MEMORY_ATTRIB_READ, + &this->vdmRingBufferUid, + "vdmRingBuffer" + ); + + this->vertexRingBuffer = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE, + 4, + SCE_GXM_MEMORY_ATTRIB_READ, + &this->vertexRingBufferUid, + "vertexRingBuffer" + ); + + this->fragmentRingBuffer = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE, + 4, + SCE_GXM_MEMORY_ATTRIB_READ, + &this->fragmentRingBufferUid, + "fragmentRingBuffer" + ); + + this->fragmentUsseRingBuffer = vita_mem_fragment_usse_alloc( + SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE, + &this->fragmentUsseRingBufferUid, + &this->fragmentUsseRingBufferOffset + ); + + // create context + SceGxmContextParams contextParams; + memset(&contextParams, 0, sizeof(SceGxmContextParams)); + contextParams.hostMem = SDL_malloc(SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE); + contextParams.hostMemSize = SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE; + contextParams.vdmRingBufferMem = this->vdmRingBuffer; + contextParams.vdmRingBufferMemSize = SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE; + contextParams.vertexRingBufferMem = this->vertexRingBuffer; + contextParams.vertexRingBufferMemSize = SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE; + contextParams.fragmentRingBufferMem = this->fragmentRingBuffer; + contextParams.fragmentRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE; + contextParams.fragmentUsseRingBufferMem = this->fragmentUsseRingBuffer; + contextParams.fragmentUsseRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE; + contextParams.fragmentUsseRingBufferOffset = this->fragmentUsseRingBufferOffset; + + ret = SCE_ERR(sceGxmCreateContext, &contextParams, &this->context); + if (ret < 0) { + return ret; + } + this->contextHostMem = contextParams.hostMem; + + // shader patcher + this->patcherBuffer = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + patcherBufferSize, + 4, + SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, + &this->patcherBufferUid, + "patcherBuffer" + ); + + this->patcherVertexUsse = + vita_mem_vertex_usse_alloc(patcherVertexUsseSize, &this->patcherVertexUsseUid, &this->patcherVertexUsseOffset); + + this->patcherFragmentUsse = vita_mem_fragment_usse_alloc( + patcherFragmentUsseSize, + &this->patcherFragmentUsseUid, + &this->patcherFragmentUsseOffset + ); + + SceGxmShaderPatcherParams patcherParams; + memset(&patcherParams, 0, sizeof(SceGxmShaderPatcherParams)); + patcherParams.userData = NULL; + patcherParams.hostAllocCallback = &patcher_host_alloc; + patcherParams.hostFreeCallback = &patcher_host_free; + patcherParams.bufferAllocCallback = NULL; + patcherParams.bufferFreeCallback = NULL; + patcherParams.bufferMem = this->patcherBuffer; + patcherParams.bufferMemSize = patcherBufferSize; + patcherParams.vertexUsseAllocCallback = NULL; + patcherParams.vertexUsseFreeCallback = NULL; + patcherParams.vertexUsseMem = this->patcherVertexUsse; + patcherParams.vertexUsseMemSize = patcherVertexUsseSize; + patcherParams.vertexUsseOffset = this->patcherVertexUsseOffset; + patcherParams.fragmentUsseAllocCallback = NULL; + patcherParams.fragmentUsseFreeCallback = NULL; + patcherParams.fragmentUsseMem = this->patcherFragmentUsse; + patcherParams.fragmentUsseMemSize = patcherFragmentUsseSize; + patcherParams.fragmentUsseOffset = this->patcherFragmentUsseOffset; + + ret = SCE_ERR(sceGxmShaderPatcherCreate, &patcherParams, &this->shaderPatcher); + if (ret < 0) { + return ret; + } + return 0; +} + +int GXMContext::create_display_buffers(SceGxmMultisampleMode msaaMode) +{ + int ret; + + const uint32_t alignedWidth = ALIGN(VITA_GXM_SCREEN_WIDTH, SCE_GXM_TILE_SIZEX); + const uint32_t alignedHeight = ALIGN(VITA_GXM_SCREEN_HEIGHT, SCE_GXM_TILE_SIZEY); + uint32_t sampleCount = alignedWidth * alignedHeight; + uint32_t depthStrideInSamples = alignedWidth; + + if (msaaMode == SCE_GXM_MULTISAMPLE_4X) { + sampleCount *= 4; + depthStrideInSamples *= 2; + } + else if (msaaMode == SCE_GXM_MULTISAMPLE_2X) { + sampleCount *= 2; + } + + // render target + SceGxmRenderTargetParams renderTargetParams; + memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams)); + renderTargetParams.flags = 0; + renderTargetParams.width = VITA_GXM_SCREEN_WIDTH; + renderTargetParams.height = VITA_GXM_SCREEN_HEIGHT; + renderTargetParams.scenesPerFrame = 1; + renderTargetParams.multisampleMode = msaaMode; + renderTargetParams.multisampleLocations = 0; + renderTargetParams.driverMemBlock = -1; // Invalid UID + ret = SCE_ERR(sceGxmCreateRenderTarget, &renderTargetParams, &this->renderTarget); + if (ret < 0) { + return ret; + } + this->renderTargetInit = true; + + for (int i = 0; i < GXM_DISPLAY_BUFFER_COUNT; i++) { + this->displayBuffers[i] = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, + 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT, + SCE_GXM_COLOR_SURFACE_ALIGNMENT, + SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, + &this->displayBuffersUid[i], + "displayBuffers" + ); + + ret = SCE_ERR( + sceGxmColorSurfaceInit, + &this->displayBuffersSurface[i], + SCE_GXM_COLOR_FORMAT_A8B8G8R8, + SCE_GXM_COLOR_SURFACE_LINEAR, + (msaaMode == SCE_GXM_MULTISAMPLE_NONE) ? SCE_GXM_COLOR_SURFACE_SCALE_NONE + : SCE_GXM_COLOR_SURFACE_SCALE_MSAA_DOWNSCALE, + SCE_GXM_OUTPUT_REGISTER_SIZE_32BIT, + VITA_GXM_SCREEN_WIDTH, + VITA_GXM_SCREEN_HEIGHT, + VITA_GXM_SCREEN_STRIDE, + this->displayBuffers[i] + ); + if (ret < 0) { + return ret; + } + + ret = SCE_ERR(sceGxmSyncObjectCreate, &this->displayBuffersSync[i]); + if (ret < 0) { + return ret; + } + } + + // depth & stencil + this->depthBufferData = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + 4 * sampleCount, + SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, + SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, + &this->depthBufferUid, + "depthBufferData" + ); + + this->stencilBufferData = vita_mem_alloc( + SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, + 1 * sampleCount, + SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, + SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, + &this->stencilBufferUid, + "stencilBufferData" + ); + + ret = SCE_ERR( + sceGxmDepthStencilSurfaceInit, + &this->depthSurface, + SCE_GXM_DEPTH_STENCIL_FORMAT_DF32_S8, + SCE_GXM_DEPTH_STENCIL_SURFACE_TILED, + depthStrideInSamples, + this->depthBufferData, + this->stencilBufferData + ); + if (ret < 0) { + return ret; + } + + return 0; +} + +void GXMContext::destroy_display_buffers() +{ + if (this->renderTargetInit) { + sceGxmFinish(this->context); + sceGxmDestroyRenderTarget(this->renderTarget); + this->renderTargetInit = false; + } + for (int i = 0; i < GXM_DISPLAY_BUFFER_COUNT; i++) { + if (this->displayBuffers[i]) { + vita_mem_free(this->displayBuffersUid[i]); + this->displayBuffers[i] = nullptr; + this->displayBuffersUid[i] = -1; + sceGxmSyncObjectDestroy(this->displayBuffersSync[i]); + } + } + + if (this->depthBufferData) { + vita_mem_free(this->depthBufferUid); + this->depthBufferData = nullptr; + this->depthBufferUid = -1; + } + + if (this->stencilBufferData) { + vita_mem_free(this->stencilBufferUid); + this->stencilBufferData = nullptr; + this->stencilBufferUid = -1; + } +} + +void GXMContext::init_clear_mesh() +{ + this->clearVertices = static_cast(this->alloc(sizeof(GXMVertex2D) * 4, 4)); + this->clearVertices[0] = {.position = {-1.0, 1.0}, .texCoord = {0, 0}}; + this->clearVertices[1] = {.position = {1.0, 1.0}, .texCoord = {0, 0}}; + this->clearVertices[2] = {.position = {-1.0, -1.0}, .texCoord = {0, 0}}; + this->clearVertices[3] = {.position = {1.0, -1.0}, .texCoord = {0, 0}}; + + this->clearIndices = static_cast(this->alloc(sizeof(uint16_t) * 4, 4)); + this->clearIndices[0] = 0; + this->clearIndices[1] = 1; + this->clearIndices[2] = 2; + this->clearIndices[3] = 3; +} + +int GXMContext::register_base_shaders() +{ + int ret; + // register plane, color, image shaders + ret = SCE_ERR( + sceGxmShaderPatcherRegisterProgram, + this->shaderPatcher, + planeVertexProgramGxp, + &this->planeVertexProgramId + ); + if (ret < 0) { + return ret; + } + + ret = SCE_ERR( + sceGxmShaderPatcherRegisterProgram, + this->shaderPatcher, + colorFragmentProgramGxp, + &this->colorFragmentProgramId + ); + if (ret < 0) { + return ret; + } + + ret = SCE_ERR( + sceGxmShaderPatcherRegisterProgram, + this->shaderPatcher, + imageFragmentProgramGxp, + &this->imageFragmentProgramId + ); + if (ret < 0) { + return ret; + } + this->color_uColor = sceGxmProgramFindParameterByName(colorFragmentProgramGxp, "uColor"); // vec4 + return 0; +} + +int GXMContext::patch_base_shaders(SceGxmMultisampleMode msaaMode) +{ + int ret; + { + GET_SHADER_PARAM(positionAttribute, planeVertexProgramGxp, "aPosition", -1); + GET_SHADER_PARAM(texCoordAttribute, planeVertexProgramGxp, "aTexCoord", -1); + + SceGxmVertexAttribute vertexAttributes[2]; + SceGxmVertexStream vertexStreams[1]; + + // position + vertexAttributes[0].streamIndex = 0; + vertexAttributes[0].offset = 0; + vertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; + vertexAttributes[0].componentCount = 2; + vertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(positionAttribute); + + // uv + vertexAttributes[1].streamIndex = 0; + vertexAttributes[1].offset = 8; + vertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; + vertexAttributes[1].componentCount = 2; + vertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(texCoordAttribute); + + vertexStreams[0].stride = sizeof(GXMVertex2D); + vertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; + + ret = SCE_ERR( + sceGxmShaderPatcherCreateVertexProgram, + this->shaderPatcher, + this->planeVertexProgramId, + vertexAttributes, + 2, + vertexStreams, + 1, + &this->planeVertexProgram + ); + if (ret < 0) { + return ret; + } + + ret = SCE_ERR( + sceGxmShaderPatcherCreateFragmentProgram, + this->shaderPatcher, + this->colorFragmentProgramId, + SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, + msaaMode, + NULL, + planeVertexProgramGxp, + &this->colorFragmentProgram + ); + if (ret < 0) { + return ret; + } + + ret = SCE_ERR( + sceGxmShaderPatcherCreateFragmentProgram, + this->shaderPatcher, + this->imageFragmentProgramId, + SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, + msaaMode, + &blendInfoTransparent, + planeVertexProgramGxp, + &this->imageFragmentProgram + ); + if (ret < 0) { + return ret; + } + } + + return 0; +} + +void GXMContext::destroy_base_shaders() +{ + sceGxmShaderPatcherReleaseVertexProgram(this->shaderPatcher, this->planeVertexProgram); + sceGxmShaderPatcherReleaseFragmentProgram(this->shaderPatcher, this->colorFragmentProgram); + sceGxmShaderPatcherReleaseFragmentProgram(this->shaderPatcher, this->imageFragmentProgram); +} + +int GXMContext::init(SceGxmMultisampleMode msaaMode) +{ + int ret = 0; + ret = gxm_library_init(); + if (ret < 0) { + return ret; + } + if (this->cdramPool == nullptr) { + this->init_cdram_allocator(); + } + + if (this->context == nullptr) { + ret = this->init_context(); + if (ret < 0) { + return ret; + } + } + + if (this->planeVertexProgramId == 0) { + ret = this->register_base_shaders(); + if (ret < 0) { + return ret; + } + } + + if (this->clearVertices == nullptr) { + this->init_clear_mesh(); + } + + // recreate when msaa is different + if (msaaMode != this->displayMsaa && this->renderTargetInit) { + this->destroy_display_buffers(); + this->destroy_base_shaders(); + } + + if (!this->renderTargetInit) { + ret = this->create_display_buffers(msaaMode); + if (ret < 0) { + return ret; + } + ret = this->patch_base_shaders(msaaMode); + if (ret < 0) { + return ret; + } + } + return 0; +} + +static int inuse_mem = 0; +void* GXMContext::alloc(size_t size, size_t align) +{ + if (this->cdramPool == nullptr) { + this->init_cdram_allocator(); + } + DEBUG_ONLY_PRINTF("cdram_alloc(%d, %d) inuse=%d ", size, align, inuse_mem); + void* ptr = tlsf_memalign(this->cdramPool, align, size); + DEBUG_ONLY_PRINTF("ptr=%p\n", ptr); + inuse_mem += tlsf_block_size(ptr); + return ptr; +} + +void GXMContext::free(void* ptr) +{ + inuse_mem -= tlsf_block_size(ptr); + DEBUG_ONLY_PRINTF("cdram_free(%p)\n", ptr); + tlsf_free(this->cdramPool, ptr); +} + +void GXMContext::clear(float r, float g, float b, bool new_scene) +{ + new_scene = new_scene && !this->sceneStarted; + if (new_scene) { + sceGxmBeginScene( + this->context, + 0, + this->renderTarget, + nullptr, + nullptr, + this->displayBuffersSync[this->backBufferIndex], + &this->displayBuffersSurface[this->backBufferIndex], + &this->depthSurface + ); + this->sceneStarted = true; + } + + float color[] = {r, g, b, 1}; + + sceGxmSetVertexProgram(this->context, this->planeVertexProgram); + sceGxmSetFragmentProgram(this->context, this->colorFragmentProgram); + + void* vertUniforms; + void* fragUniforms; + sceGxmReserveVertexDefaultUniformBuffer(gxm->context, &vertUniforms); + sceGxmReserveFragmentDefaultUniformBuffer(gxm->context, &fragUniforms); + + sceGxmSetVertexStream(gxm->context, 0, this->clearVertices); + sceGxmSetUniformDataF(fragUniforms, this->color_uColor, 0, 4, color); + + sceGxmSetFrontDepthFunc(gxm->context, SCE_GXM_DEPTH_FUNC_ALWAYS); + sceGxmDraw(gxm->context, SCE_GXM_PRIMITIVE_TRIANGLE_STRIP, SCE_GXM_INDEX_FORMAT_U16, this->clearIndices, 4); + if (new_scene) { + sceGxmEndScene(this->context, nullptr, nullptr); + this->sceneStarted = false; + } +} + +void GXMContext::copy_frontbuffer() +{ + SceGxmTexture texture; + sceGxmTextureInitLinearStrided( + &texture, + this->displayBuffers[this->frontBufferIndex], + SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR, + VITA_GXM_SCREEN_WIDTH, + VITA_GXM_SCREEN_HEIGHT, + VITA_GXM_SCREEN_STRIDE * 4 + ); + sceGxmSetVertexProgram(this->context, this->planeVertexProgram); + sceGxmSetFragmentProgram(this->context, this->imageFragmentProgram); + + void* vertUniforms; + void* fragUniforms; + sceGxmReserveVertexDefaultUniformBuffer(this->context, &vertUniforms); + sceGxmReserveFragmentDefaultUniformBuffer(this->context, &fragUniforms); + + sceGxmSetVertexStream(this->context, 0, this->clearVertices); + sceGxmSetFragmentTexture(this->context, 0, &texture); + + sceGxmSetFrontDepthFunc(this->context, SCE_GXM_DEPTH_FUNC_ALWAYS); + sceGxmDraw(this->context, SCE_GXM_PRIMITIVE_TRIANGLE_STRIP, SCE_GXM_INDEX_FORMAT_U16, this->clearIndices, 4); +} + +void GXMContext::destroy() +{ + sceGxmDisplayQueueFinish(); + if (gxm->context) { + sceGxmFinish(gxm->context); + } + + this->destroy_display_buffers(); + this->destroy_base_shaders(); + + sceGxmShaderPatcherDestroy(this->shaderPatcher); + sceGxmDestroyContext(this->context); + vita_mem_fragment_usse_free(this->fragmentUsseRingBufferUid); + vita_mem_free(this->fragmentRingBufferUid); + vita_mem_free(this->vertexRingBufferUid); + vita_mem_free(this->vdmRingBufferUid); + SDL_free(this->contextHostMem); +} + +void GXMContext::swap_display() +{ + if (this->sceneStarted) { + sceGxmEndScene(gxm->context, nullptr, nullptr); + this->sceneStarted = false; + } + + SceCommonDialogUpdateParam updateParam; + SDL_zero(updateParam); + updateParam.renderTarget.colorFormat = VITA_GXM_COLOR_FORMAT; + updateParam.renderTarget.surfaceType = SCE_GXM_COLOR_SURFACE_LINEAR; + updateParam.renderTarget.width = VITA_GXM_SCREEN_WIDTH; + updateParam.renderTarget.height = VITA_GXM_SCREEN_HEIGHT; + updateParam.renderTarget.strideInPixels = VITA_GXM_SCREEN_STRIDE; + updateParam.renderTarget.colorSurfaceData = this->displayBuffers[this->backBufferIndex]; + updateParam.displaySyncObject = this->displayBuffersSync[this->backBufferIndex]; + sceCommonDialogUpdate(&updateParam); + + sceGxmPadHeartbeat( + &this->displayBuffersSurface[this->backBufferIndex], + this->displayBuffersSync[this->backBufferIndex] + ); + + // display + GXMDisplayData displayData; + displayData.address = this->displayBuffers[this->backBufferIndex]; + displayData.index = this->backBufferIndex; + sceGxmDisplayQueueAddEntry( + this->displayBuffersSync[this->frontBufferIndex], + this->displayBuffersSync[this->backBufferIndex], + &displayData + ); + + this->frontBufferIndex = this->backBufferIndex; + this->backBufferIndex = (this->backBufferIndex + 1) % GXM_DISPLAY_BUFFER_COUNT; +} diff --git a/miniwin/src/d3drm/backends/gxm/gxm_context.h b/miniwin/src/d3drm/backends/gxm/gxm_context.h index ebf82da5..3b867f8d 100644 --- a/miniwin/src/d3drm/backends/gxm/gxm_context.h +++ b/miniwin/src/d3drm/backends/gxm/gxm_context.h @@ -1,9 +1,13 @@ #pragma once -#include "tlsf.h" - #include +#define VITA_GXM_SCREEN_WIDTH 960 +#define VITA_GXM_SCREEN_HEIGHT 544 +#define VITA_GXM_SCREEN_STRIDE 1024 +#define VITA_GXM_PENDING_SWAPS 2 +#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8 + #define GXM_DISPLAY_BUFFER_COUNT 3 typedef struct GXMVertex2D { @@ -72,7 +76,7 @@ typedef struct GXMContext { // allocator SceUID cdramUID; void* cdramMem; - tlsf_t cdramPool; + void* cdramPool; bool sceneStarted; @@ -96,3 +100,6 @@ typedef struct GXMContext { // global so that common dialog can be rendererd without GXMRenderer extern GXMContext* gxm; + +extern bool with_razor_capture; +extern bool with_razor_hud; diff --git a/miniwin/src/d3drm/backends/gxm/memory.cpp b/miniwin/src/d3drm/backends/gxm/gxm_memory.cpp similarity index 94% rename from miniwin/src/d3drm/backends/gxm/memory.cpp rename to miniwin/src/d3drm/backends/gxm/gxm_memory.cpp index e7c04bc4..01313d0a 100644 --- a/miniwin/src/d3drm/backends/gxm/memory.cpp +++ b/miniwin/src/d3drm/backends/gxm/gxm_memory.cpp @@ -1,4 +1,5 @@ #include "gxm_memory.h" + #include "tlsf.h" #include "utils.h" @@ -7,12 +8,6 @@ #include #include -#define CDRAM_POOL_SIZE 64 * 1024 * 1024 - -static SceUID cdramAllocatorUID = -1; -static tlsf_t cdramAllocator = nullptr; -int inuse_mem = 0; - void* patcher_host_alloc(void* user_data, unsigned int size) { void* mem = SDL_malloc(size); diff --git a/miniwin/src/d3drm/backends/gxm/renderer.cpp b/miniwin/src/d3drm/backends/gxm/gxm_renderer.cpp similarity index 59% rename from miniwin/src/d3drm/backends/gxm/renderer.cpp rename to miniwin/src/d3drm/backends/gxm/gxm_renderer.cpp index 3a491301..efb25bdd 100644 --- a/miniwin/src/d3drm/backends/gxm/renderer.cpp +++ b/miniwin/src/d3drm/backends/gxm/gxm_renderer.cpp @@ -3,6 +3,7 @@ #include "gxm_memory.h" #include "meshutils.h" #include "razor.h" +#include "shaders/gxm_shaders.h" #include "tlsf.h" #include "utils.h" @@ -15,12 +16,6 @@ #include #include #include -#define INCBIN_PREFIX _inc_ -#include "incbin.h" - -static bool with_razor_capture = false; -static bool with_razor_hud = false; -static bool gxm_initialized = false; // from isleapp extern bool g_dpadUp; @@ -28,748 +23,18 @@ extern bool g_dpadDown; extern bool g_dpadLeft; extern bool g_dpadRight; -#define VITA_GXM_SCREEN_WIDTH 960 -#define VITA_GXM_SCREEN_HEIGHT 544 -#define VITA_GXM_SCREEN_STRIDE 1024 -#define VITA_GXM_PENDING_SWAPS 2 -#define CDRAM_POOL_SIZE 64 * 1024 * 1024 - -#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8 -#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8 - -#define SCE_GXM_PRECOMPUTED_ALIGNMENT 16 - -#define INCSHADER(filename, name) \ - INCBIN(name, filename); \ - const SceGxmProgram* name = (const SceGxmProgram*) _inc_##name##Data; - -INCSHADER("shaders/main.vert.gxp", mainVertexProgramGxp); -INCSHADER("shaders/main.color.frag.gxp", mainColorFragmentProgramGxp); -INCSHADER("shaders/main.texture.frag.gxp", mainTextureFragmentProgramGxp); - -INCSHADER("shaders/plane.vert.gxp", planeVertexProgramGxp); -INCSHADER("shaders/image.frag.gxp", imageFragmentProgramGxp); -INCSHADER("shaders/color.frag.gxp", colorFragmentProgramGxp); - -static const SceGxmBlendInfo blendInfoOpaque = { - .colorMask = SCE_GXM_COLOR_MASK_ALL, - .colorFunc = SCE_GXM_BLEND_FUNC_NONE, - .alphaFunc = SCE_GXM_BLEND_FUNC_NONE, - .colorSrc = SCE_GXM_BLEND_FACTOR_ZERO, - .colorDst = SCE_GXM_BLEND_FACTOR_ZERO, - .alphaSrc = SCE_GXM_BLEND_FACTOR_ZERO, - .alphaDst = SCE_GXM_BLEND_FACTOR_ZERO, -}; - -static const SceGxmBlendInfo blendInfoTransparent = { - .colorMask = SCE_GXM_COLOR_MASK_ALL, - .colorFunc = SCE_GXM_BLEND_FUNC_ADD, - .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, - .colorSrc = SCE_GXM_BLEND_FACTOR_SRC_ALPHA, - .colorDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, - .alphaSrc = SCE_GXM_BLEND_FACTOR_ONE, - .alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, -}; - typedef struct GXMVertex { float position[3]; float normal[3]; float texCoord[2]; } GXMVertex; -typedef struct GXMDisplayData { - void* address; - int index; -} GXMDisplayData; - -static void display_callback(const void* callback_data) -{ - const GXMDisplayData* display_data = (const GXMDisplayData*) callback_data; - - GXMRenderer* renderer = static_cast(DDRenderer); - renderer->DeferredDelete(display_data->index); - - SceDisplayFrameBuf framebuf; - SDL_memset(&framebuf, 0x00, sizeof(SceDisplayFrameBuf)); - framebuf.size = sizeof(SceDisplayFrameBuf); - framebuf.base = display_data->address; - framebuf.pitch = VITA_GXM_SCREEN_STRIDE; - framebuf.pixelformat = VITA_GXM_PIXEL_FORMAT; - framebuf.width = VITA_GXM_SCREEN_WIDTH; - framebuf.height = VITA_GXM_SCREEN_HEIGHT; - sceDisplaySetFrameBuf(&framebuf, SCE_DISPLAY_SETBUF_NEXTFRAME); - sceDisplayWaitSetFrameBuf(); -} - -#ifdef GXM_WITH_RAZOR -#include - -static int load_skprx(const char* name) -{ - int modid = taiLoadKernelModule(name, 0, nullptr); - if (modid < 0) { - sceClibPrintf("%s load: 0x%08x\n", name, modid); - return modid; - } - int status; - int ret = taiStartKernelModule(modid, 0, nullptr, 0, nullptr, &status); - if (ret < 0) { - sceClibPrintf("%s start: 0x%08x\n", name, ret); - } - return ret; -} - -static int load_suprx(const char* name) -{ - sceClibPrintf("loading %s\n", name); - int modid = _sceKernelLoadModule(name, 0, nullptr); - if (modid < 0) { - sceClibPrintf("%s load: 0x%08x\n", name, modid); - return modid; - } - int status; - int ret = sceKernelStartModule(modid, 0, nullptr, 0, nullptr, &status); - if (ret < 0) { - sceClibPrintf("%s start: 0x%08x\n", name, ret); - } - return ret; -} - -static void load_razor() -{ - if (load_suprx("app0:librazorcapture_es4.suprx") >= 0) { - with_razor_capture = true; - } - - if (with_razor_capture) { - // sceRazorGpuCaptureEnableSalvage("ux0:data/gpu_crash.sgx"); - } - - if (with_razor_hud) { - sceRazorGpuTraceSetFilename("ux0:data/gpu_trace", 3); - } -} -#endif - -int gxm_library_init() -{ - if (gxm_initialized) { - return 0; - } - -#ifdef GXM_WITH_RAZOR - load_razor(); -#endif - - SceGxmInitializeParams initializeParams; - SDL_memset(&initializeParams, 0, sizeof(SceGxmInitializeParams)); - initializeParams.flags = 0; - initializeParams.displayQueueMaxPendingCount = VITA_GXM_PENDING_SWAPS; - initializeParams.displayQueueCallback = display_callback; - initializeParams.displayQueueCallbackDataSize = sizeof(GXMDisplayData); - initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE; - - int err = sceGxmInitialize(&initializeParams); - if (err != 0) { - SDL_LogError(SDL_LOG_CATEGORY_RENDER, "gxm init failed: %d", err); - return err; - } - gxm_initialized = true; - return 0; -} - -GXMContext* gxm; - -void GXMContext::init_cdram_allocator() -{ - // allocator - this->cdramMem = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, - CDRAM_POOL_SIZE, - 16, - SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, - &this->cdramUID, - "cdram_pool" - ); - this->cdramPool = SDL_malloc(tlsf_size()); - tlsf_create(this->cdramPool); - tlsf_add_pool(this->cdramPool, this->cdramMem, CDRAM_POOL_SIZE); -} - -int GXMContext::init_context() -{ - int ret; - - const unsigned int patcherBufferSize = 64 * 1024; - const unsigned int patcherVertexUsseSize = 64 * 1024; - const unsigned int patcherFragmentUsseSize = 64 * 1024; - - // allocate buffers - this->vdmRingBuffer = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE, - 4, - SCE_GXM_MEMORY_ATTRIB_READ, - &this->vdmRingBufferUid, - "vdmRingBuffer" - ); - - this->vertexRingBuffer = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE, - 4, - SCE_GXM_MEMORY_ATTRIB_READ, - &this->vertexRingBufferUid, - "vertexRingBuffer" - ); - - this->fragmentRingBuffer = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE, - 4, - SCE_GXM_MEMORY_ATTRIB_READ, - &this->fragmentRingBufferUid, - "fragmentRingBuffer" - ); - - this->fragmentUsseRingBuffer = vita_mem_fragment_usse_alloc( - SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE, - &this->fragmentUsseRingBufferUid, - &this->fragmentUsseRingBufferOffset - ); - - // create context - SceGxmContextParams contextParams; - memset(&contextParams, 0, sizeof(SceGxmContextParams)); - contextParams.hostMem = SDL_malloc(SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE); - contextParams.hostMemSize = SCE_GXM_MINIMUM_CONTEXT_HOST_MEM_SIZE; - contextParams.vdmRingBufferMem = this->vdmRingBuffer; - contextParams.vdmRingBufferMemSize = SCE_GXM_DEFAULT_VDM_RING_BUFFER_SIZE; - contextParams.vertexRingBufferMem = this->vertexRingBuffer; - contextParams.vertexRingBufferMemSize = SCE_GXM_DEFAULT_VERTEX_RING_BUFFER_SIZE; - contextParams.fragmentRingBufferMem = this->fragmentRingBuffer; - contextParams.fragmentRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_RING_BUFFER_SIZE; - contextParams.fragmentUsseRingBufferMem = this->fragmentUsseRingBuffer; - contextParams.fragmentUsseRingBufferMemSize = SCE_GXM_DEFAULT_FRAGMENT_USSE_RING_BUFFER_SIZE; - contextParams.fragmentUsseRingBufferOffset = this->fragmentUsseRingBufferOffset; - - ret = SCE_ERR(sceGxmCreateContext, &contextParams, &this->context); - if (ret < 0) { - return ret; - } - this->contextHostMem = contextParams.hostMem; - - // shader patcher - this->patcherBuffer = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - patcherBufferSize, - 4, - SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, - &this->patcherBufferUid, - "patcherBuffer" - ); - - this->patcherVertexUsse = - vita_mem_vertex_usse_alloc(patcherVertexUsseSize, &this->patcherVertexUsseUid, &this->patcherVertexUsseOffset); - - this->patcherFragmentUsse = vita_mem_fragment_usse_alloc( - patcherFragmentUsseSize, - &this->patcherFragmentUsseUid, - &this->patcherFragmentUsseOffset - ); - - SceGxmShaderPatcherParams patcherParams; - memset(&patcherParams, 0, sizeof(SceGxmShaderPatcherParams)); - patcherParams.userData = NULL; - patcherParams.hostAllocCallback = &patcher_host_alloc; - patcherParams.hostFreeCallback = &patcher_host_free; - patcherParams.bufferAllocCallback = NULL; - patcherParams.bufferFreeCallback = NULL; - patcherParams.bufferMem = this->patcherBuffer; - patcherParams.bufferMemSize = patcherBufferSize; - patcherParams.vertexUsseAllocCallback = NULL; - patcherParams.vertexUsseFreeCallback = NULL; - patcherParams.vertexUsseMem = this->patcherVertexUsse; - patcherParams.vertexUsseMemSize = patcherVertexUsseSize; - patcherParams.vertexUsseOffset = this->patcherVertexUsseOffset; - patcherParams.fragmentUsseAllocCallback = NULL; - patcherParams.fragmentUsseFreeCallback = NULL; - patcherParams.fragmentUsseMem = this->patcherFragmentUsse; - patcherParams.fragmentUsseMemSize = patcherFragmentUsseSize; - patcherParams.fragmentUsseOffset = this->patcherFragmentUsseOffset; - - ret = SCE_ERR(sceGxmShaderPatcherCreate, &patcherParams, &this->shaderPatcher); - if (ret < 0) { - return ret; - } - return 0; -} - -int GXMContext::create_display_buffers(SceGxmMultisampleMode msaaMode) -{ - int ret; - - const uint32_t alignedWidth = ALIGN(VITA_GXM_SCREEN_WIDTH, SCE_GXM_TILE_SIZEX); - const uint32_t alignedHeight = ALIGN(VITA_GXM_SCREEN_HEIGHT, SCE_GXM_TILE_SIZEY); - uint32_t sampleCount = alignedWidth * alignedHeight; - uint32_t depthStrideInSamples = alignedWidth; - - if (msaaMode == SCE_GXM_MULTISAMPLE_4X) { - sampleCount *= 4; - depthStrideInSamples *= 2; - } - else if (msaaMode == SCE_GXM_MULTISAMPLE_2X) { - sampleCount *= 2; - } - - // render target - SceGxmRenderTargetParams renderTargetParams; - memset(&renderTargetParams, 0, sizeof(SceGxmRenderTargetParams)); - renderTargetParams.flags = 0; - renderTargetParams.width = VITA_GXM_SCREEN_WIDTH; - renderTargetParams.height = VITA_GXM_SCREEN_HEIGHT; - renderTargetParams.scenesPerFrame = 1; - renderTargetParams.multisampleMode = msaaMode; - renderTargetParams.multisampleLocations = 0; - renderTargetParams.driverMemBlock = -1; // Invalid UID - ret = SCE_ERR(sceGxmCreateRenderTarget, &renderTargetParams, &this->renderTarget); - if (ret < 0) { - return ret; - } - this->renderTargetInit = true; - - for (int i = 0; i < GXM_DISPLAY_BUFFER_COUNT; i++) { - this->displayBuffers[i] = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, - 4 * VITA_GXM_SCREEN_STRIDE * VITA_GXM_SCREEN_HEIGHT, - SCE_GXM_COLOR_SURFACE_ALIGNMENT, - SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, - &this->displayBuffersUid[i], - "displayBuffers" - ); - - ret = SCE_ERR( - sceGxmColorSurfaceInit, - &this->displayBuffersSurface[i], - SCE_GXM_COLOR_FORMAT_A8B8G8R8, - SCE_GXM_COLOR_SURFACE_LINEAR, - (msaaMode == SCE_GXM_MULTISAMPLE_NONE) ? SCE_GXM_COLOR_SURFACE_SCALE_NONE - : SCE_GXM_COLOR_SURFACE_SCALE_MSAA_DOWNSCALE, - SCE_GXM_OUTPUT_REGISTER_SIZE_32BIT, - VITA_GXM_SCREEN_WIDTH, - VITA_GXM_SCREEN_HEIGHT, - VITA_GXM_SCREEN_STRIDE, - this->displayBuffers[i] - ); - if (ret < 0) { - return ret; - } - - ret = SCE_ERR(sceGxmSyncObjectCreate, &this->displayBuffersSync[i]); - if (ret < 0) { - return ret; - } - } - - // depth & stencil - this->depthBufferData = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - 4 * sampleCount, - SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, - SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, - &this->depthBufferUid, - "depthBufferData" - ); - - this->stencilBufferData = vita_mem_alloc( - SCE_KERNEL_MEMBLOCK_TYPE_USER_RW_UNCACHE, - 1 * sampleCount, - SCE_GXM_DEPTHSTENCIL_SURFACE_ALIGNMENT, - SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE, - &this->stencilBufferUid, - "stencilBufferData" - ); - - ret = SCE_ERR( - sceGxmDepthStencilSurfaceInit, - &this->depthSurface, - SCE_GXM_DEPTH_STENCIL_FORMAT_DF32_S8, - SCE_GXM_DEPTH_STENCIL_SURFACE_TILED, - depthStrideInSamples, - this->depthBufferData, - this->stencilBufferData - ); - if (ret < 0) { - return ret; - } - - return 0; -} - -void GXMContext::destroy_display_buffers() -{ - if (this->renderTargetInit) { - sceGxmFinish(this->context); - sceGxmDestroyRenderTarget(this->renderTarget); - this->renderTargetInit = false; - } - for (int i = 0; i < GXM_DISPLAY_BUFFER_COUNT; i++) { - if (this->displayBuffers[i]) { - vita_mem_free(this->displayBuffersUid[i]); - this->displayBuffers[i] = nullptr; - this->displayBuffersUid[i] = -1; - sceGxmSyncObjectDestroy(this->displayBuffersSync[i]); - } - } - - if (this->depthBufferData) { - vita_mem_free(this->depthBufferUid); - this->depthBufferData = nullptr; - this->depthBufferUid = -1; - } - - if (this->stencilBufferData) { - vita_mem_free(this->stencilBufferUid); - this->stencilBufferData = nullptr; - this->stencilBufferUid = -1; - } -} - -void GXMContext::init_clear_mesh() -{ - this->clearVertices = static_cast(this->alloc(sizeof(GXMVertex2D) * 4, 4)); - this->clearVertices[0] = {.position = {-1.0, 1.0}, .texCoord = {0, 0}}; - this->clearVertices[1] = {.position = {1.0, 1.0}, .texCoord = {0, 0}}; - this->clearVertices[2] = {.position = {-1.0, -1.0}, .texCoord = {0, 0}}; - this->clearVertices[3] = {.position = {1.0, -1.0}, .texCoord = {0, 0}}; - - this->clearIndices = static_cast(this->alloc(sizeof(uint16_t) * 4, 4)); - this->clearIndices[0] = 0; - this->clearIndices[1] = 1; - this->clearIndices[2] = 2; - this->clearIndices[3] = 3; -} - -int GXMContext::register_base_shaders() -{ - int ret; - // register plane, color, image shaders - ret = SCE_ERR( - sceGxmShaderPatcherRegisterProgram, - this->shaderPatcher, - planeVertexProgramGxp, - &this->planeVertexProgramId - ); - if (ret < 0) { - return ret; - } - - ret = SCE_ERR( - sceGxmShaderPatcherRegisterProgram, - this->shaderPatcher, - colorFragmentProgramGxp, - &this->colorFragmentProgramId - ); - if (ret < 0) { - return ret; - } - - ret = SCE_ERR( - sceGxmShaderPatcherRegisterProgram, - this->shaderPatcher, - imageFragmentProgramGxp, - &this->imageFragmentProgramId - ); - if (ret < 0) { - return ret; - } - this->color_uColor = sceGxmProgramFindParameterByName(colorFragmentProgramGxp, "uColor"); // vec4 - return 0; -} - -int GXMContext::patch_base_shaders(SceGxmMultisampleMode msaaMode) -{ - int ret; - { - GET_SHADER_PARAM(positionAttribute, planeVertexProgramGxp, "aPosition", -1); - GET_SHADER_PARAM(texCoordAttribute, planeVertexProgramGxp, "aTexCoord", -1); - - SceGxmVertexAttribute vertexAttributes[2]; - SceGxmVertexStream vertexStreams[1]; - - // position - vertexAttributes[0].streamIndex = 0; - vertexAttributes[0].offset = 0; - vertexAttributes[0].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; - vertexAttributes[0].componentCount = 2; - vertexAttributes[0].regIndex = sceGxmProgramParameterGetResourceIndex(positionAttribute); - - // uv - vertexAttributes[1].streamIndex = 0; - vertexAttributes[1].offset = 8; - vertexAttributes[1].format = SCE_GXM_ATTRIBUTE_FORMAT_F32; - vertexAttributes[1].componentCount = 2; - vertexAttributes[1].regIndex = sceGxmProgramParameterGetResourceIndex(texCoordAttribute); - - vertexStreams[0].stride = sizeof(GXMVertex2D); - vertexStreams[0].indexSource = SCE_GXM_INDEX_SOURCE_INDEX_16BIT; - - ret = SCE_ERR( - sceGxmShaderPatcherCreateVertexProgram, - this->shaderPatcher, - this->planeVertexProgramId, - vertexAttributes, - 2, - vertexStreams, - 1, - &this->planeVertexProgram - ); - if (ret < 0) { - return ret; - } - - ret = SCE_ERR( - sceGxmShaderPatcherCreateFragmentProgram, - this->shaderPatcher, - this->colorFragmentProgramId, - SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, - msaaMode, - NULL, - planeVertexProgramGxp, - &this->colorFragmentProgram - ); - if (ret < 0) { - return ret; - } - - ret = SCE_ERR( - sceGxmShaderPatcherCreateFragmentProgram, - this->shaderPatcher, - this->imageFragmentProgramId, - SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4, - msaaMode, - &blendInfoTransparent, - planeVertexProgramGxp, - &this->imageFragmentProgram - ); - if (ret < 0) { - return ret; - } - } - - return 0; -} - -void GXMContext::destroy_base_shaders() -{ - sceGxmShaderPatcherReleaseVertexProgram(this->shaderPatcher, this->planeVertexProgram); - sceGxmShaderPatcherReleaseFragmentProgram(this->shaderPatcher, this->colorFragmentProgram); - sceGxmShaderPatcherReleaseFragmentProgram(this->shaderPatcher, this->imageFragmentProgram); -} - -int GXMContext::init(SceGxmMultisampleMode msaaMode) -{ - int ret = 0; - ret = gxm_library_init(); - if (ret < 0) { - return ret; - } - if (this->cdramPool == nullptr) { - this->init_cdram_allocator(); - } - - if (this->context == nullptr) { - ret = this->init_context(); - if (ret < 0) { - return ret; - } - } - - if (this->planeVertexProgramId == 0) { - ret = this->register_base_shaders(); - if (ret < 0) { - return ret; - } - } - - if (this->clearVertices == nullptr) { - this->init_clear_mesh(); - } - - // recreate when msaa is different - if (msaaMode != this->displayMsaa && this->renderTargetInit) { - this->destroy_display_buffers(); - this->destroy_base_shaders(); - } - - if (!this->renderTargetInit) { - ret = this->create_display_buffers(msaaMode); - if (ret < 0) { - return ret; - } - ret = this->patch_base_shaders(msaaMode); - if (ret < 0) { - return ret; - } - } - return 0; -} - -static int inuse_mem = 0; -void* GXMContext::alloc(size_t size, size_t align) -{ - if (this->cdramPool == nullptr) { - this->init_cdram_allocator(); - } - DEBUG_ONLY_PRINTF("cdram_alloc(%d, %d) inuse=%d ", size, align, inuse_mem); - void* ptr = tlsf_memalign(this->cdramPool, align, size); - DEBUG_ONLY_PRINTF("ptr=%p\n", ptr); - inuse_mem += tlsf_block_size(ptr); - return ptr; -} - -void GXMContext::free(void* ptr) -{ - inuse_mem -= tlsf_block_size(ptr); - DEBUG_ONLY_PRINTF("cdram_free(%p)\n", ptr); - tlsf_free(this->cdramPool, ptr); -} - -void GXMContext::clear(float r, float g, float b, bool new_scene) -{ - new_scene = new_scene && !this->sceneStarted; - if (new_scene) { - sceGxmBeginScene( - this->context, - 0, - this->renderTarget, - nullptr, - nullptr, - this->displayBuffersSync[this->backBufferIndex], - &this->displayBuffersSurface[this->backBufferIndex], - &this->depthSurface - ); - this->sceneStarted = true; - } - - float color[] = {r, g, b, 1}; - - sceGxmSetVertexProgram(this->context, this->planeVertexProgram); - sceGxmSetFragmentProgram(this->context, this->colorFragmentProgram); - - void* vertUniforms; - void* fragUniforms; - sceGxmReserveVertexDefaultUniformBuffer(gxm->context, &vertUniforms); - sceGxmReserveFragmentDefaultUniformBuffer(gxm->context, &fragUniforms); - - sceGxmSetVertexStream(gxm->context, 0, this->clearVertices); - sceGxmSetUniformDataF(fragUniforms, this->color_uColor, 0, 4, color); - - sceGxmSetFrontDepthFunc(gxm->context, SCE_GXM_DEPTH_FUNC_ALWAYS); - sceGxmDraw(gxm->context, SCE_GXM_PRIMITIVE_TRIANGLE_STRIP, SCE_GXM_INDEX_FORMAT_U16, this->clearIndices, 4); - if (new_scene) { - sceGxmEndScene(this->context, nullptr, nullptr); - this->sceneStarted = false; - } -} - -void GXMContext::copy_frontbuffer() -{ - SceGxmTexture texture; - sceGxmTextureInitLinearStrided( - &texture, - this->displayBuffers[this->frontBufferIndex], - SCE_GXM_TEXTURE_FORMAT_U8U8U8U8_ABGR, - VITA_GXM_SCREEN_WIDTH, - VITA_GXM_SCREEN_HEIGHT, - VITA_GXM_SCREEN_STRIDE * 4 - ); - sceGxmSetVertexProgram(this->context, this->planeVertexProgram); - sceGxmSetFragmentProgram(this->context, this->imageFragmentProgram); - - void* vertUniforms; - void* fragUniforms; - sceGxmReserveVertexDefaultUniformBuffer(this->context, &vertUniforms); - sceGxmReserveFragmentDefaultUniformBuffer(this->context, &fragUniforms); - - sceGxmSetVertexStream(this->context, 0, this->clearVertices); - sceGxmSetFragmentTexture(this->context, 0, &texture); - - sceGxmSetFrontDepthFunc(this->context, SCE_GXM_DEPTH_FUNC_ALWAYS); - sceGxmDraw(this->context, SCE_GXM_PRIMITIVE_TRIANGLE_STRIP, SCE_GXM_INDEX_FORMAT_U16, this->clearIndices, 4); -} - -void GXMContext::destroy() -{ - sceGxmDisplayQueueFinish(); - if (gxm->context) { - sceGxmFinish(gxm->context); - } - - this->destroy_display_buffers(); - this->destroy_base_shaders(); - - sceGxmShaderPatcherDestroy(this->shaderPatcher); - sceGxmDestroyContext(this->context); - vita_mem_fragment_usse_free(this->fragmentUsseRingBufferUid); - vita_mem_free(this->fragmentRingBufferUid); - vita_mem_free(this->vertexRingBufferUid); - vita_mem_free(this->vdmRingBufferUid); - SDL_free(this->contextHostMem); -} - -void GXMContext::swap_display() -{ - if (this->sceneStarted) { - sceGxmEndScene(gxm->context, nullptr, nullptr); - this->sceneStarted = false; - } - - SceCommonDialogUpdateParam updateParam; - SDL_zero(updateParam); - updateParam.renderTarget.colorFormat = VITA_GXM_COLOR_FORMAT; - updateParam.renderTarget.surfaceType = SCE_GXM_COLOR_SURFACE_LINEAR; - updateParam.renderTarget.width = VITA_GXM_SCREEN_WIDTH; - updateParam.renderTarget.height = VITA_GXM_SCREEN_HEIGHT; - updateParam.renderTarget.strideInPixels = VITA_GXM_SCREEN_STRIDE; - updateParam.renderTarget.colorSurfaceData = this->displayBuffers[this->backBufferIndex]; - updateParam.displaySyncObject = this->displayBuffersSync[this->backBufferIndex]; - sceCommonDialogUpdate(&updateParam); - - sceGxmPadHeartbeat( - &this->displayBuffersSurface[this->backBufferIndex], - this->displayBuffersSync[this->backBufferIndex] - ); - - // display - GXMDisplayData displayData; - displayData.address = this->displayBuffers[this->backBufferIndex]; - displayData.index = this->backBufferIndex; - sceGxmDisplayQueueAddEntry( - this->displayBuffersSync[this->frontBufferIndex], - this->displayBuffersSync[this->backBufferIndex], - &displayData - ); - - this->frontBufferIndex = this->backBufferIndex; - this->backBufferIndex = (this->backBufferIndex + 1) % GXM_DISPLAY_BUFFER_COUNT; -} - Direct3DRMRenderer* GXMRenderer::Create(DWORD width, DWORD height, DWORD msaaSamples) { int ret = gxm_library_init(); if (ret < 0) { return nullptr; } - return new GXMRenderer(width, height, msaaSamples); -} - -GXMRenderer::GXMRenderer(DWORD width, DWORD height, DWORD msaaSamples) -{ - m_width = VITA_GXM_SCREEN_WIDTH; - m_height = VITA_GXM_SCREEN_HEIGHT; - m_virtualWidth = width; - m_virtualHeight = height; SceGxmMultisampleMode msaaMode = SCE_GXM_MULTISAMPLE_NONE; if (msaaSamples == 2) { @@ -779,18 +44,27 @@ GXMRenderer::GXMRenderer(DWORD width, DWORD height, DWORD msaaSamples) msaaMode = SCE_GXM_MULTISAMPLE_4X; } - int ret; if (!gxm) { gxm = (GXMContext*) SDL_malloc(sizeof(GXMContext)); memset(gxm, 0, sizeof(GXMContext)); } ret = SCE_ERR(gxm->init, msaaMode); if (ret < 0) { - return; + return nullptr; } + return new GXMRenderer(width, height, msaaMode); +} + +GXMRenderer::GXMRenderer(DWORD width, DWORD height, SceGxmMultisampleMode msaaMode) +{ + m_width = VITA_GXM_SCREEN_WIDTH; + m_height = VITA_GXM_SCREEN_HEIGHT; + m_virtualWidth = width; + m_virtualHeight = height; + // register shader programs - ret = SCE_ERR( + int ret = SCE_ERR( sceGxmShaderPatcherRegisterProgram, gxm->shaderPatcher, mainVertexProgramGxp, @@ -1516,6 +790,8 @@ void GXMRenderer::StartScene() return; } + this->DeferredDelete(gxm->frontBufferIndex); + #ifdef GXM_WITH_RAZOR bool dpad_up_clicked = !this->last_dpad_up && g_dpadUp; bool dpad_down_clicked = !this->last_dpad_down && g_dpadDown; diff --git a/miniwin/src/d3drm/backends/gxm/incbin.h b/miniwin/src/d3drm/backends/gxm/incbin.h deleted file mode 100644 index c4419b7f..00000000 --- a/miniwin/src/d3drm/backends/gxm/incbin.h +++ /dev/null @@ -1,415 +0,0 @@ -/** - * @file incbin.h - * @author Dale Weiler - * @brief Utility for including binary files - * - * Facilities for including binary files into the current translation unit and - * making use from them externally in other translation units. - */ -#ifndef INCBIN_HDR -#define INCBIN_HDR -#include -#if defined(__AVX512BW__) || defined(__AVX512CD__) || defined(__AVX512DQ__) || defined(__AVX512ER__) || \ - defined(__AVX512PF__) || defined(__AVX512VL__) || defined(__AVX512F__) -#define INCBIN_ALIGNMENT_INDEX 6 -#elif defined(__AVX__) || defined(__AVX2__) -#define INCBIN_ALIGNMENT_INDEX 5 -#elif defined(__SSE__) || defined(__SSE2__) || defined(__SSE3__) || defined(__SSSE3__) || defined(__SSE4_1__) || \ - defined(__SSE4_2__) || defined(__neon__) || defined(__ARM_NEON) || defined(__ALTIVEC__) -#define INCBIN_ALIGNMENT_INDEX 4 -#elif ULONG_MAX != 0xffffffffu -#define INCBIN_ALIGNMENT_INDEX 3 -#else -#define INCBIN_ALIGNMENT_INDEX 2 -#endif - -/* Lookup table of (1 << n) where `n' is `INCBIN_ALIGNMENT_INDEX' */ -#define INCBIN_ALIGN_SHIFT_0 1 -#define INCBIN_ALIGN_SHIFT_1 2 -#define INCBIN_ALIGN_SHIFT_2 4 -#define INCBIN_ALIGN_SHIFT_3 8 -#define INCBIN_ALIGN_SHIFT_4 16 -#define INCBIN_ALIGN_SHIFT_5 32 -#define INCBIN_ALIGN_SHIFT_6 64 - -/* Actual alignment value */ -#define INCBIN_ALIGNMENT INCBIN_CONCATENATE(INCBIN_CONCATENATE(INCBIN_ALIGN_SHIFT, _), INCBIN_ALIGNMENT_INDEX) - -/* Stringize */ -#define INCBIN_STR(X) #X -#define INCBIN_STRINGIZE(X) INCBIN_STR(X) -/* Concatenate */ -#define INCBIN_CAT(X, Y) X##Y -#define INCBIN_CONCATENATE(X, Y) INCBIN_CAT(X, Y) -/* Deferred macro expansion */ -#define INCBIN_EVAL(X) X -#define INCBIN_INVOKE(N, ...) INCBIN_EVAL(N(__VA_ARGS__)) -/* Variable argument count for overloading by arity */ -#define INCBIN_VA_ARG_COUNTER(_1, _2, _3, N, ...) N -#define INCBIN_VA_ARGC(...) INCBIN_VA_ARG_COUNTER(__VA_ARGS__, 3, 2, 1, 0) - -/* Green Hills uses a different directive for including binary data */ -#if defined(__ghs__) -#if (__ghs_asm == 2) -#define INCBIN_MACRO ".file" -/* Or consider the ".myrawdata" entry in the ld file */ -#else -#define INCBIN_MACRO "\tINCBIN" -#endif -#else -#define INCBIN_MACRO ".incbin" -#endif - -#ifndef _MSC_VER -#define INCBIN_ALIGN __attribute__((aligned(INCBIN_ALIGNMENT))) -#else -#define INCBIN_ALIGN __declspec(align(INCBIN_ALIGNMENT)) -#endif - -#if defined(__arm__) || /* GNU C and RealView */ \ - defined(__arm) || /* Diab */ \ - defined(_ARM) /* ImageCraft */ -#define INCBIN_ARM -#endif - -#ifdef __GNUC__ -/* Utilize .balign where supported */ -#define INCBIN_ALIGN_HOST ".balign " INCBIN_STRINGIZE(INCBIN_ALIGNMENT) "\n" -#define INCBIN_ALIGN_BYTE ".balign 1\n" -#elif defined(INCBIN_ARM) -/* - * On arm assemblers, the alignment value is calculated as (1 << n) where `n' is - * the shift count. This is the value passed to `.align' - */ -#define INCBIN_ALIGN_HOST ".align " INCBIN_STRINGIZE(INCBIN_ALIGNMENT_INDEX) "\n" -#define INCBIN_ALIGN_BYTE ".align 0\n" -#else -/* We assume other inline assembler's treat `.align' as `.balign' */ -#define INCBIN_ALIGN_HOST ".align " INCBIN_STRINGIZE(INCBIN_ALIGNMENT) "\n" -#define INCBIN_ALIGN_BYTE ".align 1\n" -#endif - -/* INCBIN_CONST is used by incbin.c generated files */ -#if defined(__cplusplus) -#define INCBIN_EXTERNAL extern "C" -#define INCBIN_CONST extern const -#else -#define INCBIN_EXTERNAL extern -#define INCBIN_CONST const -#endif - -/** - * @brief Optionally override the linker section into which size and data is - * emitted. - * - * @warning If you use this facility, you might have to deal with - * platform-specific linker output section naming on your own. - */ -#if !defined(INCBIN_OUTPUT_SECTION) -#if defined(__APPLE__) -#define INCBIN_OUTPUT_SECTION ".const_data" -#else -#define INCBIN_OUTPUT_SECTION ".rodata" -#endif -#endif - -/** - * @brief Optionally override the linker section into which data is emitted. - * - * @warning If you use this facility, you might have to deal with - * platform-specific linker output section naming on your own. - */ -#if !defined(INCBIN_OUTPUT_DATA_SECTION) -#define INCBIN_OUTPUT_DATA_SECTION INCBIN_OUTPUT_SECTION -#endif - -/** - * @brief Optionally override the linker section into which size is emitted. - * - * @warning If you use this facility, you might have to deal with - * platform-specific linker output section naming on your own. - * - * @note This is useful for Harvard architectures where program memory cannot - * be directly read from the program without special instructions. With this you - * can chose to put the size variable in RAM rather than ROM. - */ -#if !defined(INCBIN_OUTPUT_SIZE_SECTION) -#define INCBIN_OUTPUT_SIZE_SECTION INCBIN_OUTPUT_SECTION -#endif - -#if defined(__APPLE__) -#include -#if defined(TARGET_OS_IPHONE) && !defined(INCBIN_SILENCE_BITCODE_WARNING) -#warning \ - "incbin is incompatible with bitcode. Using the library will break upload to App Store if you have bitcode enabled. Add `#define INCBIN_SILENCE_BITCODE_WARNING` before including this header to silence this warning." -#endif -/* The directives are different for Apple branded compilers */ -#define INCBIN_SECTION INCBIN_OUTPUT_SECTION "\n" -#define INCBIN_GLOBAL(NAME) ".globl " INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME "\n" -#define INCBIN_INT ".long " -#define INCBIN_MANGLE "_" -#define INCBIN_BYTE ".byte " -#define INCBIN_TYPE(...) -#else -#define INCBIN_SECTION ".section " INCBIN_OUTPUT_SECTION "\n" -#define INCBIN_GLOBAL(NAME) ".global " INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME "\n" -#if defined(__ghs__) -#define INCBIN_INT ".word " -#else -#define INCBIN_INT ".int " -#endif -#if defined(__USER_LABEL_PREFIX__) -#define INCBIN_MANGLE INCBIN_STRINGIZE(__USER_LABEL_PREFIX__) -#else -#define INCBIN_MANGLE "" -#endif -#if defined(INCBIN_ARM) -/* On arm assemblers, `@' is used as a line comment token */ -#define INCBIN_TYPE(NAME) ".type " INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME ", %object\n" -#elif defined(__MINGW32__) || defined(__MINGW64__) || defined(__CYGWIN__) -/* Mingw and Cygwin don't support this directive either */ -#define INCBIN_TYPE(NAME) -#else -/* It's safe to use `@' on other architectures */ -#define INCBIN_TYPE(NAME) ".type " INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME ", @object\n" -#endif -#define INCBIN_BYTE ".byte " -#endif - -/* List of style types used for symbol names */ -#define INCBIN_STYLE_CAMEL 0 -#define INCBIN_STYLE_SNAKE 1 - -/** - * @brief Specify the prefix to use for symbol names. - * - * @note By default this is "g". - * - * @code - * #define INCBIN_PREFIX incbin - * #include "incbin.h" - * INCBIN(Foo, "foo.txt"); - * - * // Now you have the following symbols instead: - * // const unsigned char incbinFoo[]; - * // const unsigned char *const incbinFoo; - * // const unsigned int incbinFoo; - * @endcode - */ -#if !defined(INCBIN_PREFIX) -#define INCBIN_PREFIX g -#endif - -/** - * @brief Specify the style used for symbol names. - * - * Possible options are - * - INCBIN_STYLE_CAMEL "CamelCase" - * - INCBIN_STYLE_SNAKE "snake_case" - * - * @note By default this is INCBIN_STYLE_CAMEL - * - * @code - * #define INCBIN_STYLE INCBIN_STYLE_SNAKE - * #include "incbin.h" - * INCBIN(foo, "foo.txt"); - * - * // Now you have the following symbols: - * // const unsigned char foo_data[]; - * // const unsigned char *const foo_end; - * // const unsigned int foo_size; - * @endcode - */ -#if !defined(INCBIN_STYLE) -#define INCBIN_STYLE INCBIN_STYLE_CAMEL -#endif - -/* Style lookup tables */ -#define INCBIN_STYLE_0_DATA Data -#define INCBIN_STYLE_0_END End -#define INCBIN_STYLE_0_SIZE Size -#define INCBIN_STYLE_1_DATA _data -#define INCBIN_STYLE_1_END _end -#define INCBIN_STYLE_1_SIZE _size - -/* Style lookup: returning identifier */ -#define INCBIN_STYLE_IDENT(TYPE) \ - INCBIN_CONCATENATE(INCBIN_STYLE_, INCBIN_CONCATENATE(INCBIN_EVAL(INCBIN_STYLE), INCBIN_CONCATENATE(_, TYPE))) - -/* Style lookup: returning string literal */ -#define INCBIN_STYLE_STRING(TYPE) INCBIN_STRINGIZE(INCBIN_STYLE_IDENT(TYPE)) - -/* Generate the global labels by indirectly invoking the macro with our style - * type and concatenating the name against them. */ -#define INCBIN_GLOBAL_LABELS(NAME, TYPE) \ - INCBIN_INVOKE(INCBIN_GLOBAL, INCBIN_CONCATENATE(NAME, INCBIN_INVOKE(INCBIN_STYLE_IDENT, TYPE))) \ - INCBIN_INVOKE(INCBIN_TYPE, INCBIN_CONCATENATE(NAME, INCBIN_INVOKE(INCBIN_STYLE_IDENT, TYPE))) - -/** - * @brief Externally reference binary data included in another translation unit. - * - * Produces three external symbols that reference the binary data included in - * another translation unit. - * - * The symbol names are a concatenation of `INCBIN_PREFIX' before *NAME*; with - * "Data", as well as "End" and "Size" after. An example is provided below. - * - * @param TYPE Optional array type. Omitting this picks a default of `unsigned char`. - * @param NAME The name given for the binary data - * - * @code - * INCBIN_EXTERN(Foo); - * - * // Now you have the following symbols: - * // extern const unsigned char Foo[]; - * // extern const unsigned char *const Foo; - * // extern const unsigned int Foo; - * @endcode - * - * You may specify a custom optional data type as well as the first argument. - * @code - * INCBIN_EXTERN(custom_type, Foo); - * - * // Now you have the following symbols: - * // extern const custom_type Foo[]; - * // extern const custom_type *const Foo; - * // extern const unsigned int Foo; - * @endcode - */ -#define INCBIN_EXTERN(...) INCBIN_CONCATENATE(INCBIN_EXTERN_, INCBIN_VA_ARGC(__VA_ARGS__))(__VA_ARGS__) -#define INCBIN_EXTERN_1(NAME, ...) INCBIN_EXTERN_2(unsigned char, NAME) -#define INCBIN_EXTERN_2(TYPE, NAME) \ - INCBIN_EXTERNAL const INCBIN_ALIGN TYPE \ - INCBIN_CONCATENATE(INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), INCBIN_STYLE_IDENT(DATA))[]; \ - INCBIN_EXTERNAL const INCBIN_ALIGN \ - TYPE* const INCBIN_CONCATENATE(INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), INCBIN_STYLE_IDENT(END)); \ - INCBIN_EXTERNAL const unsigned int INCBIN_CONCATENATE( \ - INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \ - INCBIN_STYLE_IDENT(SIZE) \ - ) - -/** - * @brief Externally reference textual data included in another translation unit. - * - * Produces three external symbols that reference the textual data included in - * another translation unit. - * - * The symbol names are a concatenation of `INCBIN_PREFIX' before *NAME*; with - * "Data", as well as "End" and "Size" after. An example is provided below. - * - * @param NAME The name given for the textual data - * - * @code - * INCBIN_EXTERN(Foo); - * - * // Now you have the following symbols: - * // extern const char Foo[]; - * // extern const char *const Foo; - * // extern const unsigned int Foo; - * @endcode - */ -#define INCTXT_EXTERN(NAME) INCBIN_EXTERN_2(char, NAME) - -/** - * @brief Include a binary file into the current translation unit. - * - * Includes a binary file into the current translation unit, producing three symbols - * for objects that encode the data and size respectively. - * - * The symbol names are a concatenation of `INCBIN_PREFIX' before *NAME*; with - * "Data", as well as "End" and "Size" after. An example is provided below. - * - * @param TYPE Optional array type. Omitting this picks a default of `unsigned char`. - * @param NAME The name to associate with this binary data (as an identifier.) - * @param FILENAME The file to include (as a string literal.) - * - * @code - * INCBIN(Icon, "icon.png"); - * - * // Now you have the following symbols: - * // const unsigned char Icon[]; - * // const unsigned char *const Icon; - * // const unsigned int Icon; - * @endcode - * - * You may specify a custom optional data type as well as the first argument. - * These macros are specialized by arity. - * @code - * INCBIN(custom_type, Icon, "icon.png"); - * - * // Now you have the following symbols: - * // const custom_type Icon[]; - * // const custom_type *const Icon; - * // const unsigned int Icon; - * @endcode - * - * @warning This must be used in global scope - * @warning The identifiers may be different if INCBIN_STYLE is not default - * - * To externally reference the data included by this in another translation unit - * please @see INCBIN_EXTERN. - */ -#ifdef _MSC_VER -#define INCBIN(NAME, FILENAME) INCBIN_EXTERN(NAME) -#else -#define INCBIN(...) INCBIN_CONCATENATE(INCBIN_, INCBIN_VA_ARGC(__VA_ARGS__))(__VA_ARGS__) -#if defined(__GNUC__) -#define INCBIN_1(...) _Pragma("GCC error \"Single argument INCBIN not allowed\"") -#elif defined(__clang__) -#define INCBIN_1(...) _Pragma("clang error \"Single argument INCBIN not allowed\"") -#else -#define INCBIN_1(...) /* Cannot do anything here */ -#endif -#define INCBIN_2(NAME, FILENAME) INCBIN_3(unsigned char, NAME, FILENAME) -#define INCBIN_3(TYPE, NAME, FILENAME) INCBIN_COMMON(TYPE, NAME, FILENAME, /* No terminator for binary data */) -#define INCBIN_COMMON(TYPE, NAME, FILENAME, TERMINATOR) \ - __asm__(INCBIN_SECTION INCBIN_GLOBAL_LABELS(NAME, DATA) \ - INCBIN_ALIGN_HOST INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA \ - ) ":\n" INCBIN_MACRO " \"" FILENAME "\"\n" TERMINATOR INCBIN_GLOBAL_LABELS(NAME, END) \ - INCBIN_ALIGN_BYTE INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END \ - ) ":\n" INCBIN_BYTE "1\n" INCBIN_GLOBAL_LABELS(NAME, SIZE) \ - INCBIN_ALIGN_HOST INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(SIZE \ - ) ":\n" INCBIN_INT INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END \ - ) " - " INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA \ - ) "\n" INCBIN_ALIGN_HOST ".text\n"); \ - INCBIN_EXTERN(TYPE, NAME) -#endif - -/** - * @brief Include a textual file into the current translation unit. - * - * This behaves the same as INCBIN except it produces char compatible arrays - * and implicitly adds a null-terminator byte, thus the size of data included - * by this is one byte larger than that of INCBIN. - * - * Includes a textual file into the current translation unit, producing three - * symbols for objects that encode the data and size respectively. - * - * The symbol names are a concatenation of `INCBIN_PREFIX' before *NAME*; with - * "Data", as well as "End" and "Size" after. An example is provided below. - * - * @param NAME The name to associate with this binary data (as an identifier.) - * @param FILENAME The file to include (as a string literal.) - * - * @code - * INCTXT(Readme, "readme.txt"); - * - * // Now you have the following symbols: - * // const char Readme[]; - * // const char *const Readme; - * // const unsigned int Readme; - * @endcode - * - * @warning This must be used in global scope - * @warning The identifiers may be different if INCBIN_STYLE is not default - * - * To externally reference the data included by this in another translation unit - * please @see INCBIN_EXTERN. - */ -#if defined(_MSC_VER) -#define INCTXT(NAME, FILENAME) INCBIN_EXTERN(NAME) -#else -#define INCTXT(NAME, FILENAME) INCBIN_COMMON(char, NAME, FILENAME, INCBIN_BYTE "0\n") -#endif - -#endif diff --git a/miniwin/src/d3drm/backends/gxm/shaders/.gitignore b/miniwin/src/d3drm/backends/gxm/shaders/.gitignore index 04193dc2..21ce5a1f 100644 --- a/miniwin/src/d3drm/backends/gxm/shaders/.gitignore +++ b/miniwin/src/d3drm/backends/gxm/shaders/.gitignore @@ -1,3 +1,2 @@ *.exe -cache/ -*.perf.txt \ No newline at end of file +cache/ \ No newline at end of file diff --git a/miniwin/src/d3drm/backends/gxm/shaders/CMakeLists.txt b/miniwin/src/d3drm/backends/gxm/shaders/CMakeLists.txt new file mode 100644 index 00000000..8e32a537 --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/CMakeLists.txt @@ -0,0 +1,105 @@ +cmake_minimum_required(VERSION 3.25...4.0 FATAL_ERROR) + +find_program(PSP2CGC NAMES ${CMAKE_CURRENT_SOURCE_DIR}/psp2cgc.exe psp2cgc.exe psp2cgc REQUIRED) +find_program(PSP2SHADERPERF NAMES ${CMAKE_CURRENT_SOURCE_DIR}/psp2shaderperf.exe psp2shaderperf.exe psp2shaderperf REQUIRED) + +list(APPEND CGC_COMMON_FLAGS "-Wperf" "-cache" "-cachedir" "${CMAKE_CURRENT_BINARY_DIR}/cache" "-W4" "-Wsuppress=5206,5203") + +make_directory("${CMAKE_CURRENT_BINARY_DIR}/cache") + +# compile .cg to .gxp if psp2cgc is found +macro(COMPILE_SHADER INPUT_CG OUTPUT_GXP PROFILE) + set(EXTRA_FLAGS "${ARGN}") + + set(INPUT_CG_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${INPUT_CG}") + set(OUTPUT_GXP_PATH "${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT_GXP}") + set(TRACKED_GXP_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${OUTPUT_GXP}") + + if(PSP2CGC) + if(EXISTS ${TRACKED_GXP_PATH}) + file(COPY ${TRACKED_GXP_PATH} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + endif() + add_custom_command( + OUTPUT "${OUTPUT_GXP_PATH}" + COMMAND "${PSP2CGC}" ${CGC_COMMON_FLAGS} -profile "${PROFILE}" ${EXTRA_FLAGS} "${INPUT_CG_PATH}" -o "${OUTPUT_GXP_PATH}" + COMMAND ${CMAKE_COMMAND} -E copy "${OUTPUT_GXP_PATH}" "${TRACKED_GXP_PATH}" + DEPENDS "${INPUT_CG_PATH}" + COMMENT "Compiling ${INPUT_CG} -> ${OUTPUT_GXP} ${PROFILE}" + ) + else() + if(NOT EXISTS "${TRACKED_GXP_PATH}") + message(FATAL_ERROR "missing shader ${TRACKED_GXP_PATH} ${INPUT_CG}, but psp2cgc.exe not found") + endif() + add_custom_command( + OUTPUT "${OUTPUT_GXP_PATH}" + COMMAND /usr/bin/env bash + ARGS "-c" + "if [ \"${INPUT_CG_PATH}\" -nt \"${TRACKED_GXP_PATH}\" ]; then + echo '${INPUT_CG} changed but dont have psp2cgc, cant compile' >&2; + exit 1; + fi" + COMMAND ${CMAKE_COMMAND} -E copy "${TRACKED_GXP_PATH}" "${OUTPUT_GXP_PATH}" + DEPENDS "${INPUT_CG_PATH}" "${TRACKED_GXP_PATH}" + VERBATIM + COMMENT "Copy ${TRACKED_GXP_PATH} -> ${OUTPUT_GXP} ${PROFILE}" + ) + endif() + set(TARGET_NAME "compile_${OUTPUT_GXP}") + string(REPLACE "." "_" TARGET_NAME "${TARGET_NAME}") + add_custom_target("${TARGET_NAME}" DEPENDS "${OUTPUT_GXP_PATH}") + add_dependencies(gxm_shaders_compile "${TARGET_NAME}") +endmacro() + + +# analyze gxp to create a .perf.txt +macro(GENERATE_PERF GXP_FILE) + set(GXP_PATH "${CMAKE_CURRENT_BINARY_DIR}/${GXP_FILE}") + string(REPLACE ".gxp" ".perf.txt" PERF_FILE_NAME "${GXP_FILE}") + set(PERF_FILE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/${PERF_FILE_NAME}") + + add_custom_command( + OUTPUT "${PERF_FILE_PATH}" + COMMAND "${PSP2SHADERPERF}" -stats -symbols -disasm "${GXP_PATH}" > "${PERF_FILE_PATH}" + DEPENDS "${GXP_PATH}" + COMMENT "Generating performance analysis for ${GXP_FILE}" + ) + set(TARGET_NAME "perf_${PERF_FILE_NAME}") + string(REPLACE "." "_" TARGET_NAME "${TARGET_NAME}") + add_custom_target("${TARGET_NAME}" DEPENDS "${PERF_FILE_PATH}") + add_dependencies(gxm_perfs "${TARGET_NAME}" ) +endmacro() + + + +add_library(gxm_shaders STATIC gxm_shaders.s) + +target_include_directories(gxm_shaders PRIVATE + ${CMAKE_CURRENT_BINARY_DIR} +) + +add_custom_target(gxm_shaders_compile) +add_dependencies(gxm_shaders gxm_shaders_compile) + +COMPILE_SHADER(plane.vert.cg plane.vert.gxp sce_vp_psp2) +COMPILE_SHADER(color.frag.cg color.frag.gxp sce_fp_psp2) +COMPILE_SHADER(image.frag.cg image.frag.gxp sce_fp_psp2) +COMPILE_SHADER(main.vert.cg main.vert.gxp sce_vp_psp2) +COMPILE_SHADER(main.frag.cg main.color.frag.gxp sce_fp_psp2) +COMPILE_SHADER(main.frag.cg main.texture.frag.gxp sce_fp_psp2 -DTEXTURED=1) + + +# .perf.txt +if(PSP2SHADERPERF) + add_custom_target(gxm_perfs) + add_dependencies(gxm_shaders gxm_perfs) + GENERATE_PERF(plane.vert.gxp) + GENERATE_PERF(color.frag.gxp) + GENERATE_PERF(image.frag.gxp) + GENERATE_PERF(main.vert.gxp) + GENERATE_PERF(main.color.frag.gxp) + GENERATE_PERF(main.texture.frag.gxp) +else() + message(STATUS "psp2shaderperf not found") +endif() + + diff --git a/miniwin/src/d3drm/backends/gxm/shaders/Makefile b/miniwin/src/d3drm/backends/gxm/shaders/Makefile deleted file mode 100644 index 741b7731..00000000 --- a/miniwin/src/d3drm/backends/gxm/shaders/Makefile +++ /dev/null @@ -1,27 +0,0 @@ -shaders += plane.vert.gxp color.frag.gxp image.frag.gxp -shaders += main.vert.gxp main.color.frag.gxp main.texture.frag.gxp - -PERFS = $(shaders:.gxp=.perf.txt) - -all: $(shaders) -perfs: $(PERFS) - -CGCFLAGS = -Wperf -cache -cachedir cache -W4 -Wsuppress=5206,5203 - -cache: - mkdir -p cache - -%.vert.gxp: %.vert.cg | cache - ./psp2cgc.exe $(CGCFLAGS) -profile sce_vp_psp2 $< -o $@ - -%.frag.gxp: %.frag.cg | cache - ./psp2cgc.exe $(CGCFLAGS) -profile sce_fp_psp2 $< -o $@ - -main.color.frag.gxp: main.frag.cg | cache - ./psp2cgc.exe $(CGCFLAGS) -profile sce_fp_psp2 $< -o $@ - -main.texture.frag.gxp: main.frag.cg | cache - ./psp2cgc.exe $(CGCFLAGS) -DTEXTURED=1 -profile sce_fp_psp2 $< -o $@ - -%.perf.txt: %.gxp - ./psp2shaderperf.exe -stats -symbols -disasm $< > $@ diff --git a/miniwin/src/d3drm/backends/gxm/shaders/color.frag.gxp b/miniwin/src/d3drm/backends/gxm/shaders/color.frag.gxp index 854275fba9f2a6a60a6f1536f1f993a88df87a7b..dea3d7eb0cb0c10951912f13220266c553f79b77 100644 GIT binary patch delta 28 kcmaFD_=Hi!JtBaCku`w%F#`hwPaSvYx9v>(CW>4D0CO)0)&Kwi delta 28 kcmaFD_=Hi!JtBaCku`w%F#`hwPaSt?joRI(6Gbin0C83b%>V!Z diff --git a/miniwin/src/d3drm/backends/gxm/shaders/color.frag.perf.txt b/miniwin/src/d3drm/backends/gxm/shaders/color.frag.perf.txt new file mode 100644 index 00000000..cabaa25d --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/color.frag.perf.txt @@ -0,0 +1,26 @@ +Total estimated cost: 1 cycles, parallel mode +Register count: 2 PAs, 0 temps, 4 SAs * +Texture reads: 0 non-dependent, dependent: 0 unconditional, 0 conditional + +High level analysis: +No warnings. + +* Please refer to the Razor documentation for details regarding the meaning of these numbers. Decreasing the number of registers used will not necessarily increase performance + +Instruction statistics: +Number of alu ops: 1 +Number of mem ops: 0 +Number of tex ops: 0 +Number of floating point ops: 0 +Number of integer ops: 0 +Number of pack ops: 1 +Number of mov ops: 0 +Number of nop ops: 0 + +Constants: +[DEFAULT + 0 ] sa0 = (float4) uColor + + +Primary program: + 0: pack.f16.f32 pa0.xyzw, sa0.xyzw + diff --git a/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.h b/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.h new file mode 100644 index 00000000..0fa9ab41 --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.h @@ -0,0 +1,32 @@ +#include + +#define GXP(sym) \ + extern uint8_t _inc_##sym[]; \ + static const SceGxmProgram* sym = (const SceGxmProgram*) _inc_##sym; + +GXP(mainVertexProgramGxp); +GXP(mainColorFragmentProgramGxp); +GXP(mainTextureFragmentProgramGxp); +GXP(planeVertexProgramGxp); +GXP(imageFragmentProgramGxp); +GXP(colorFragmentProgramGxp); + +static const SceGxmBlendInfo blendInfoOpaque = { + .colorMask = SCE_GXM_COLOR_MASK_ALL, + .colorFunc = SCE_GXM_BLEND_FUNC_NONE, + .alphaFunc = SCE_GXM_BLEND_FUNC_NONE, + .colorSrc = SCE_GXM_BLEND_FACTOR_ZERO, + .colorDst = SCE_GXM_BLEND_FACTOR_ZERO, + .alphaSrc = SCE_GXM_BLEND_FACTOR_ZERO, + .alphaDst = SCE_GXM_BLEND_FACTOR_ZERO, +}; + +static const SceGxmBlendInfo blendInfoTransparent = { + .colorMask = SCE_GXM_COLOR_MASK_ALL, + .colorFunc = SCE_GXM_BLEND_FUNC_ADD, + .alphaFunc = SCE_GXM_BLEND_FUNC_ADD, + .colorSrc = SCE_GXM_BLEND_FACTOR_SRC_ALPHA, + .colorDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, + .alphaSrc = SCE_GXM_BLEND_FACTOR_ONE, + .alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA, +}; diff --git a/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.s b/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.s new file mode 100644 index 00000000..2421947d --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/gxm_shaders.s @@ -0,0 +1,15 @@ +.section .rodata, "a", %progbits + +.macro embed file, symbol +.global _inc_\symbol +.align 16 +_inc_\symbol: + .incbin "\file" +.endm + +embed "main.vert.gxp", mainVertexProgramGxp +embed "main.color.frag.gxp", mainColorFragmentProgramGxp +embed "main.texture.frag.gxp", mainTextureFragmentProgramGxp +embed "plane.vert.gxp", planeVertexProgramGxp +embed "image.frag.gxp", imageFragmentProgramGxp +embed "color.frag.gxp", colorFragmentProgramGxp diff --git a/miniwin/src/d3drm/backends/gxm/shaders/image.frag.gxp b/miniwin/src/d3drm/backends/gxm/shaders/image.frag.gxp index 9ca3b63e74678707fce1c0fbbe256affed883cdf..fefde5f0ee5d234b85ac9b626ce2afa4af56d59f 100644 GIT binary patch delta 28 jcmeBR>R=Laj|gC3WDQ_uWn^IJjC!~Bf0^;Ni6UPBVQUEN delta 28 jcmeBR>R=Laj|gC3WDQ_uWn^IJjC!}W<*C=Si6UPBV4Dcn diff --git a/miniwin/src/d3drm/backends/gxm/shaders/image.frag.perf.txt b/miniwin/src/d3drm/backends/gxm/shaders/image.frag.perf.txt new file mode 100644 index 00000000..4b69dc4b --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/image.frag.perf.txt @@ -0,0 +1,29 @@ +Total estimated cost: 0 cycles, parallel mode +Register count: 2 PAs, 0 temps, 0 SAs * +Texture reads: 1 non-dependent, dependent: 0 unconditional, 0 conditional + +High level analysis: +No warnings. + +* Please refer to the Razor documentation for details regarding the meaning of these numbers. Decreasing the number of registers used will not necessarily increase performance + +Instruction statistics: +Number of alu ops: 0 +Number of mem ops: 0 +Number of tex ops: 0 +Number of floating point ops: 0 +Number of integer ops: 0 +Number of pack ops: 0 +Number of mov ops: 0 +Number of nop ops: 0 + + +Samplers: +TEXUNIT0 = uTexture + +Iterators: + + +Primary program: +pa0 = tex2D(uTexture, TEXCOORD0.xy) + diff --git a/miniwin/src/d3drm/backends/gxm/shaders/main.color.frag.gxp b/miniwin/src/d3drm/backends/gxm/shaders/main.color.frag.gxp index 6954ddd79487ef988d2bd6e99270dfb044976b5f..713e10c9ed88b5b800a9f484fd88afc7747a6ecc 100644 GIT binary patch delta 29 lcmaFB`G8ZzJtBaCku`w%9t#7*io|S>&EW?vI&HJKsCyLBrWZ1Ydp9KJ$vkCzK delta 34 qcmZ3$wSY^+JtBaCku`u>o|S>&0z=Q@ug+VuCW_2qWZt+jp9KJ&fC@zb diff --git a/miniwin/src/d3drm/backends/gxm/shaders/main.texture.frag.perf.txt b/miniwin/src/d3drm/backends/gxm/shaders/main.texture.frag.perf.txt new file mode 100644 index 00000000..ef379b18 --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/main.texture.frag.perf.txt @@ -0,0 +1,139 @@ +Total estimated cost: 64.5 cycles, parallel mode +Register count: 12 PAs, 16 temps, 38 SAs * +Texture reads: 1 non-dependent, dependent: 0 unconditional, 0 conditional + +High level analysis: +No warnings. + +* Please refer to the Razor documentation for details regarding the meaning of these numbers. Decreasing the number of registers used will not necessarily increase performance + +Instruction statistics: +Number of alu ops: 64 +Number of mem ops: 0 +Number of tex ops: 0 +Number of floating point ops: 44 +Number of integer ops: 1 +Number of pack ops: 1 +Number of mov ops: 15 +Number of nop ops: 2 + +Constants: +[DEFAULT + 0 ] sa0 = (float1) uShininess +[DEFAULT + 2 ] sa2 = (float4) uColor +[BUFFER0 + 0 ] = (float4) uLights[0].color +[BUFFER0 + 4 ] = (float4) uLights[0].vec +[BUFFER0 + 8 ] = (float1) uLights[0].isDirectional +[BUFFER0 + 10 ] = (float4) uLights[1].color +[BUFFER0 + 14 ] = (float4) uLights[1].vec +[BUFFER0 + 18 ] = (float1) uLights[1].isDirectional +[BUFFER0 + 20 ] = (float3) uAmbientLight +[LITERAL + 1 ] sa7 = 0xffffffff (-1.#QNAN0f) (-1.#QNANh, -1.#QNANh) +[LITERAL + 2 ] sa8 = 0x3f800000 (1.000000f) (0.00000h, 1.87500h) +[BUFFER0 ] sa6 = buffer base address + +Samplers: +TEXUNIT0 = uTexture + +Iterators: +pa0 = (float4) TEXCOORD1 +pa8 = (float4) TEXCOORD2 + + +Secondary program: + 0 : lda32 sa1, [sa6, 0x9] + 1 : lda32.fetch3 sa9, [sa6, 0x4] + 2 : mul.f32 sa32.xy, -sa8.yz, sa0.yy + 3 : mul.f32 sa34.x, -sa10.y, sa0.y + 4 : lda32.fetch4 sa12, [sa6, 0x0] + 5 : mov.f32 sa36.xy, {0, 0} + 6 : mov.f32 sa30.x, {0} + 7 : lda32 sa15, [sa6, 0x13] + 8 : lda32.fetch3 sa16, [sa6, 0xe] + 9 : mul.f32 sa26.xy, -sa16.xy, sa14.yy + 10: mul.f32 sa28.x, -sa18.x, sa14.y + 11: lda32.fetch4 sa19, [sa6, 0xa] + 12: lda32.fetch3 sa22, [sa6, 0x14] + 13: nop + +Primary program: +pa4 = tex2D(uTexture, TEXCOORD0.xy) + 0 : cmp.gt.f32 p0, sa0.x, {0} + 1 : mov.f32 i0.xyz, pa0.xyz + 2 : add.f32 i1.xyz, sa8.yzw, -i0.xyz + 2 : +dot.f32 pa3.x, i0.xyz, i0.xyz + 3 : mov.f32 i2.xyz, sa32.xyz + 4 : mad.f32 i2.xyz, -sa0.yyy, i1.xyz, i2.xyz + 5 : add.f32 i1.xyz, i2.xyz, i1.xyz + 5 : +rsq.f32 pa3.x, pa3.x + 6 : dot.f32 i2.x, i1.xyz, i1.xyz + 7 : rsq.f32 pa3.x, i2.x + 7 : +mul.f32 i0.xyz, -i0.xyz, pa2.yyy + 8 : mad.f32 i2.xyz, pa2.yyy, i1.xyz, i0.xyz + 8 : +mov.f32 r6.xy, i0.xy + 9 : mov.f32 r8.x, i0.z + 10: dot.f32 i0.x, i2.xyz, i2.xyz + 10: +mov.f32 r2.xy, i2.xy + 11: mov.f32 r4.x, i2.z + 12: rsq.f32 pa3.x, i0.x + 12: +mul.f32 i0.xyz, i1.xyz, pa2.yyy + 13: dot.f32 i0.x, pa8.xyz, i0.xyz + 14: max.f32 r14.x, i0.x, {0} + 15: p0 br #19 + 16: mov.f32 r10.xy, sa36.xy + 17: or.u32 r12.x, sa30.x, 0x0 + 18: br #30 +#19: cmov.lezero.f32 r0.x, r14.x, {0}, sa8.x + 20: cmov.ltzero.f32 i0.x, r14.x, sa8.x, {0} + 21: mad.f32 i0.x, r0.x, {1}, -i0.x + 22: mul.f32 i1.xyz, r2.xyz, pa2.yyy + 23: dot.f32 i1.x, pa8.xyz, i1.xyz + 24: max.f32 i1.x, i1.x, {0} + 25: mul.f32 i0.xyz, sa12.xyz, i0.xxx + 25: +log.f32 pa3.x, i1.x + 26: mul.f32 i1.x, sa0.x, pa2.y + 27: exp.f32 i1.x, i1.x + 28: mad.f32 r10.xy, i0.xy, i1.xx, {0, 0} + 29: mul.f32 r12.x, i0.z, i1.x +#30: nop + 31: mov.f32 i0.xyz, sa16.xyz + 32: mad.f32 i0.xyz, -pa0.xyz, {1, 1, 1}, i0.xyz + 33: mov.f32 i1.xyz, sa26.xyz + 34: mad.f32 i1.xyz, -sa14.yyy, i0.xyz, i1.xyz + 35: add.f32 i0.xyz, i1.xyz, i0.xyz + 35: +mov.f32 i2.xyz, r6.xyz + 36: dot.f32 i1.x, i0.xyz, i0.xyz + 37: rsq.f32 i1.x, i1.x + 38: mad.f32 i2.xyz, i1.xxx, i0.xyz, i2.xyz + 39: mul.f32 i0.xyz, i0.xyz, i1.xxx + 39: +mov.f32 r0.xy, i2.xy + 40: dot.f32 i0.x, pa8.xyz, i0.xyz + 41: max.f32 pa2.x, i0.x, {0} + 42: dot.f32 i0.x, i2.xyz, i2.xyz + 43: mov.f32 r2.x, i2.z + 44: rsq.f32 pa0.-y, i0.x + 45: !p0 br #57 + 46: cmov.lezero.f32 pa0.x, pa2.x, {0}, sa8.x + 47: cmov.ltzero.f32 i0.x, pa2.x, sa8.x, {0} + 48: mad.f32 i0.x, pa0.x, {1}, -i0.x + 49: mul.f32 i1.xyz, r0.xyz, pa0.yyy + 50: dot.f32 i1.x, pa8.xyz, i1.xyz + 51: max.f32 i1.x, i1.x, {0} + 52: mul.f32 i0.xyz, sa18.yzw, i0.xxx + 52: +log.f32 pa0.x, i1.x + 53: mul.f32 i1.x, sa0.x, pa0.x + 54: exp.f32 i1.x, i1.x + 55: mad.f32 r10.xy, i0.xy, i1.xx, r10.xy + 56: mad.f32 r12.x, i0.z, i1.x, r12.x +#57: nop + 58: mad.f32 i0.xy, r14.xx, sa12.xy, sa22.xy + 59: mad.f32 i0.--z, r14.--x, sa14.--x, sa24.--x + 60: mov.f32 i1.xyz, sa18.yzw + 61: mad.f32 i0.xyz, pa2.xxx, i1.xyz, i0.xyz + 62: mov.f32 i1.xyz, r10.xyz + 63: mov.f32 i2.xyzw, sa2.xyzw + 64: mad.f32 i0.xyz, i2.xyz, i0.xyz, i1.xyz + 65: min.f32 i0.xyz, i0.xyz, {1, 1, 1} + 66: max.f32 i0.xyz, i0.xyz, {0, 0, 0} + 67: mad.f32 i2.xyz, pa4.xyz, i0.xyz, {0, 0, 0} + 68: pack.f16.f32 pa0.xyzw, i2.xyzw + diff --git a/miniwin/src/d3drm/backends/gxm/shaders/main.vert.cg b/miniwin/src/d3drm/backends/gxm/shaders/main.vert.cg index 6d078f07..2f74fee6 100644 --- a/miniwin/src/d3drm/backends/gxm/shaders/main.vert.cg +++ b/miniwin/src/d3drm/backends/gxm/shaders/main.vert.cg @@ -8,9 +8,9 @@ void main( column_major uniform float4x4 uProjectionMatrix, out float4 vPosition : POSITION, + out float2 vTexCoord : TEXCOORD0, out float3 vViewPos : TEXCOORD1, - out float3 vNormal : TEXCOORD2, - out float2 vTexCoord : TEXCOORD3 + out float3 vNormal : TEXCOORD2 ) { float4 viewPos = mul(uModelViewMatrix, float4(aPosition, 1.0)); vPosition = mul(uProjectionMatrix, viewPos); diff --git a/miniwin/src/d3drm/backends/gxm/shaders/main.vert.gxp b/miniwin/src/d3drm/backends/gxm/shaders/main.vert.gxp index 3deaddf4bea0a7733a0028fd69c9974dfdc3d4a1..b4d3427db1fb1ad7850fa0e5775fd878df32f95f 100644 GIT binary patch delta 80 zcmV-W0I&a$29O36M_5n*0R>P44FdoGi+f@)G|u5HkrbQ)*#NP!AOQgglhXlLBK^>T mD3BODqEQckh=CY^KA;Z(3V<+tfk6?0f#DcDfB_McOajEoRvD`R delta 80 zcmV-W0I&a$29O36M_5n*0R>P44FdoG)_iD3gLcIMkrbQ)*aES#AOQgslhXlLBE8Uo mD3BODqEQckh=CY^KA;Z(3V<+tfdLVLf#DcDfWZ)xOajEqI2sTD diff --git a/miniwin/src/d3drm/backends/gxm/shaders/main.vert.perf.txt b/miniwin/src/d3drm/backends/gxm/shaders/main.vert.perf.txt new file mode 100644 index 00000000..ab3c679e --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/main.vert.perf.txt @@ -0,0 +1,87 @@ +Total estimated cost: 18 cycles, parallel mode +Register count: 12 PAs, 0 temps, 56 SAs * +Texture reads: 0 non-dependent, dependent: 0 unconditional, 0 conditional + +High level analysis: +- One or multiple vertex outputs are misaligned due to a three coefficient TEXCOORD vertex output. This will lead to additional data movement instructions being generated. If only one three coefficient TEXCOORD output is present, assigning it the coordinate with the greatest index will allow the previous coordinates to be aligned. + +* Please refer to the Razor documentation for details regarding the meaning of these numbers. Decreasing the number of registers used will not necessarily increase performance + +Instruction statistics: +Number of alu ops: 19 +Number of mem ops: 0 +Number of tex ops: 0 +Number of floating point ops: 14 +Number of integer ops: 0 +Number of pack ops: 0 +Number of mov ops: 4 +Number of nop ops: 0 + +Constants: +[DEFAULT + 0 ] sa0 = (float4) uModelViewMatrix[4] +[DEFAULT + 32 ] sa32 = (float3) uNormalMatrix[3] +[DEFAULT + 16 ] sa16 = (float4) uProjectionMatrix[4] + +Vertex attributes: +pa0 = (float4) aPosition +pa4 = (float4) aNormal +pa8 = (float4) aTexCoord + + +Secondary program: + 0 : nop + 1 : mov.f32 i0.xyzw, sa8.xyzw + 2 : mul.f32 i1.xyzw, sa16.xyzw, i0.xxxx + 3 : mad.f32 i1.xyzw, sa20.xyzw, i0.yyyy, i1.xyzw + 4 : mad.f32 i1.xyzw, sa24.xyzw, i0.zzzz, i1.xyzw + 5 : mad.f32 sa52.xy, sa28.xy, i0.ww, i1.xy + 6 : mad.f32 sa54.xy, sa30.xy, i0.ww, i1.zw + 7 : mov.f32 i1.xyzw, sa12.xyzw + 8 : mul.f32 i2.xyzw, sa28.xyzw, i1.wwww + 9 : mad.f32 i2.xyzw, sa24.xyzw, i1.zzzz, i2.xyzw + 10: mad.f32 i2.xyzw, sa20.xyzw, i1.yyyy, i2.xyzw + 11: mad.f32 sa48.xy, sa16.xy, i1.xx, i2.xy + 12: mad.f32 sa50.xy, sa18.xy, i1.xx, i2.zw + 13: mov.f32 i2.xyzw, sa4.xyzw + 14: mul.f32 i1.xyzw, sa16.xyzw, i2.xxxx + 15: mad.f32 i1.xyzw, sa20.xyzw, i2.yyyy, i1.xyzw + 16: mad.f32 i1.xyzw, sa24.xyzw, i2.zzzz, i1.xyzw + 17: mad.f32 sa44.xy, sa28.xy, i2.ww, i1.xy + 18: mad.f32 sa46.xy, sa30.xy, i2.ww, i1.zw + 19: mov.f32 i1.xyzw, sa0.xyzw + 20: mul.f32 i0.xyzw, sa16.xyzw, i1.xxxx + 20: +mov.f32 sa4.xy, i1.yy + 21: mad.f32 i0.xyzw, sa20.xyzw, i1.yyyy, i0.xyzw + 22: mad.f32 i0.xyzw, sa24.xyzw, i1.zzzz, i0.xyzw + 23: mad.f32 sa18.xy, sa28.xy, i1.ww, i0.xy + 24: mad.f32 sa16.xy, sa30.xy, i1.ww, i0.zw + 25: mov.f32 sa4.-y, i2.-y + 26: mov.f32 sa6.xy, (sa8.y, sa12.y) + 27: mov.f32 sa0.x, i1.x + 28: mov.f32 sa0.-y, i2.-x + 29: mov.f32 sa8.-y, sa12.-x + 30: mov.f32 sa10.-y, sa14.-x + 31: mov.f32 sa2.xy, sa8.xy + 32: mov.f32 sa8.x, i1.z + 33: mov.f32 sa8.-y, i2.-z + +Primary program: + 0 : mov.f32 o4.xy, pa8.xy + 1 : mov.f32 i0.xyz, pa4.xyz + 2 : mad.f32 i1.xyz, sa32.xyz, i0.xxx, {0, 0, 0} + 3 : mad.f32 i1.xyz, sa36.xyz, i0.yyy, i1.xyz + 4 : mad.f32 i0.xyz, sa40.xyz, i0.zzz, i1.xyz + 5 : mov.f32 i1.xyz, pa0.xyz + 6 : mov.f32 i2.xyzw, sa48.xyzw + 7 : mad.f32 i2.xyzw, sa52.xyzw, i1.zzzz, i2.xyzw + 8 : mad.f32 i2.xyzw, sa44.xyzw, i1.yyyy, i2.xyzw + 9 : mad.f32 o0.xy, sa18.xy, i1.xx, i2.xy + 10: mad.f32 o2.xy, sa16.xy, i1.xx, i2.zw + 11: dot.f32 o6.x, sa0.xyzw, i1.xyz1 + 12: dot.f32 o6.-y, sa4.xyzw, i1.xyz1 + 13: dot.f32 o6.--z, sa8.xyzw, i1.xyz1 + 14: dot.f32 i1.x, i0.xyz, i0.xyz + 15: rsq.f32 i1.x, i1.x + 16: mad.f32 o10.xy, i0.yz, i1.xx, {0, 0} + 17: mad.f32 o8.-y, i0.-x, i1.-x, {0, 0} + diff --git a/miniwin/src/d3drm/backends/gxm/shaders/plane.vert.gxp b/miniwin/src/d3drm/backends/gxm/shaders/plane.vert.gxp index ea8292f3dd58b4f95f8cf541b3f8788cdf071bae..b9a45ae858e364e9a219726f8ad631114492277e 100644 GIT binary patch delta 29 kcmbQkG>1vVJtBaCku`u>hLM56W^Re*R!RT+8$~!60bxf5_5c6? delta 29 kcmbQkG>1vVJtBaCku`u>hLM56W^Re5RY%S4jUpV30ASJv^8f$< diff --git a/miniwin/src/d3drm/backends/gxm/shaders/plane.vert.perf.txt b/miniwin/src/d3drm/backends/gxm/shaders/plane.vert.perf.txt new file mode 100644 index 00000000..60080fde --- /dev/null +++ b/miniwin/src/d3drm/backends/gxm/shaders/plane.vert.perf.txt @@ -0,0 +1,30 @@ +Total estimated cost: 3 cycles, parallel mode +Register count: 8 PAs, 0 temps, 0 SAs * +Texture reads: 0 non-dependent, dependent: 0 unconditional, 0 conditional + +High level analysis: +No warnings. + +* Please refer to the Razor documentation for details regarding the meaning of these numbers. Decreasing the number of registers used will not necessarily increase performance + +Instruction statistics: +Number of alu ops: 4 +Number of mem ops: 0 +Number of tex ops: 0 +Number of floating point ops: 2 +Number of integer ops: 0 +Number of pack ops: 0 +Number of mov ops: 1 +Number of nop ops: 0 + + +Vertex attributes: +pa0 = (float4) aPosition +pa4 = (float4) aTexCoord + + +Primary program: + 0: mov.f32 o4.xy, pa4.xy + 1: mul.f32 o0.xy, pa0.xy, {1, 1} + 2: mul.f32 o2.xy, {1, 1}, {1, 1} + diff --git a/miniwin/src/internal/d3drmrenderer_gxm.h b/miniwin/src/internal/d3drmrenderer_gxm.h index 6371cbdb..1a8fe16c 100644 --- a/miniwin/src/internal/d3drmrenderer_gxm.h +++ b/miniwin/src/internal/d3drmrenderer_gxm.h @@ -1,10 +1,10 @@ #pragma once +#include "../d3drm/backends/gxm/gxm_context.h" #include "d3drmrenderer.h" #include "d3drmtexture_impl.h" #include "ddpalette_impl.h" #include "ddraw_impl.h" -#include "gxm_context.h" #include #include @@ -52,7 +52,7 @@ struct GXMSceneLightUniform { class GXMRenderer : public Direct3DRMRenderer { public: static Direct3DRMRenderer* Create(DWORD width, DWORD height, DWORD msaaSamples); - GXMRenderer(DWORD width, DWORD height, DWORD msaaSamples); + GXMRenderer(DWORD width, DWORD height, SceGxmMultisampleMode msaaMode); ~GXMRenderer() override; void PushLights(const SceneLight* lightsArray, size_t count) override; diff --git a/packaging/vita/sce_module/libc.suprx b/packaging/vita/sce_module/libc.suprx deleted file mode 100644 index 077c0005314beada85e046307d2a239ed4250de1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412936 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⪙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

OGbjPc?cXgYd@K3ht0haA~5wJX)%srelk)+V&Wy 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 z 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 R&#ZnN`~BYSnFE`${vV4HRs{e6