mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-19 05:41:17 +00:00
run clang-format
This commit is contained in:
parent
13c269eacf
commit
3e47c9a779
@ -1,8 +1,6 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <SDL3/SDL_stdinc.h>
|
#include <SDL3/SDL_stdinc.h>
|
||||||
#include <psp2/kernel/clib.h>
|
|
||||||
#include <psp2/kernel/sysmem.h>
|
|
||||||
#include <psp2/types.h>
|
#include <psp2/types.h>
|
||||||
|
|
||||||
void* patcher_host_alloc(void* user_data, unsigned int size);
|
void* patcher_host_alloc(void* user_data, unsigned int size);
|
||||||
@ -16,3 +14,6 @@ void vita_mem_vertex_usse_free(SceUID uid);
|
|||||||
void* vita_mem_fragment_usse_alloc(unsigned int size, SceUID* uid, unsigned int* usse_offset);
|
void* vita_mem_fragment_usse_alloc(unsigned int size, SceUID* uid, unsigned int* usse_offset);
|
||||||
void vita_mem_fragment_usse_free(SceUID uid);
|
void vita_mem_fragment_usse_free(SceUID uid);
|
||||||
|
|
||||||
|
bool cdram_allocator_create();
|
||||||
|
void* cdram_alloc(size_t size, size_t align);
|
||||||
|
void cdram_free(void* ptr);
|
||||||
|
|||||||
@ -9,26 +9,13 @@
|
|||||||
#ifndef INCBIN_HDR
|
#ifndef INCBIN_HDR
|
||||||
#define INCBIN_HDR
|
#define INCBIN_HDR
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
#if defined(__AVX512BW__) || \
|
#if defined(__AVX512BW__) || defined(__AVX512CD__) || defined(__AVX512DQ__) || defined(__AVX512ER__) || \
|
||||||
defined(__AVX512CD__) || \
|
defined(__AVX512PF__) || defined(__AVX512VL__) || defined(__AVX512F__)
|
||||||
defined(__AVX512DQ__) || \
|
|
||||||
defined(__AVX512ER__) || \
|
|
||||||
defined(__AVX512PF__) || \
|
|
||||||
defined(__AVX512VL__) || \
|
|
||||||
defined(__AVX512F__)
|
|
||||||
#define INCBIN_ALIGNMENT_INDEX 6
|
#define INCBIN_ALIGNMENT_INDEX 6
|
||||||
#elif defined(__AVX__) || \
|
#elif defined(__AVX__) || defined(__AVX2__)
|
||||||
defined(__AVX2__)
|
|
||||||
#define INCBIN_ALIGNMENT_INDEX 5
|
#define INCBIN_ALIGNMENT_INDEX 5
|
||||||
#elif defined(__SSE__) || \
|
#elif defined(__SSE__) || defined(__SSE2__) || defined(__SSE3__) || defined(__SSSE3__) || defined(__SSE4_1__) || \
|
||||||
defined(__SSE2__) || \
|
defined(__SSE4_2__) || defined(__neon__) || defined(__ARM_NEON) || defined(__ALTIVEC__)
|
||||||
defined(__SSE3__) || \
|
|
||||||
defined(__SSSE3__) || \
|
|
||||||
defined(__SSE4_1__) || \
|
|
||||||
defined(__SSE4_2__) || \
|
|
||||||
defined(__neon__) || \
|
|
||||||
defined(__ARM_NEON) || \
|
|
||||||
defined(__ALTIVEC__)
|
|
||||||
#define INCBIN_ALIGNMENT_INDEX 4
|
#define INCBIN_ALIGNMENT_INDEX 4
|
||||||
#elif ULONG_MAX != 0xffffffffu
|
#elif ULONG_MAX != 0xffffffffu
|
||||||
#define INCBIN_ALIGNMENT_INDEX 3
|
#define INCBIN_ALIGNMENT_INDEX 3
|
||||||
@ -46,26 +33,17 @@
|
|||||||
#define INCBIN_ALIGN_SHIFT_6 64
|
#define INCBIN_ALIGN_SHIFT_6 64
|
||||||
|
|
||||||
/* Actual alignment value */
|
/* Actual alignment value */
|
||||||
#define INCBIN_ALIGNMENT \
|
#define INCBIN_ALIGNMENT INCBIN_CONCATENATE(INCBIN_CONCATENATE(INCBIN_ALIGN_SHIFT, _), INCBIN_ALIGNMENT_INDEX)
|
||||||
INCBIN_CONCATENATE( \
|
|
||||||
INCBIN_CONCATENATE(INCBIN_ALIGN_SHIFT, _), \
|
|
||||||
INCBIN_ALIGNMENT_INDEX)
|
|
||||||
|
|
||||||
/* Stringize */
|
/* Stringize */
|
||||||
#define INCBIN_STR(X) \
|
#define INCBIN_STR(X) #X
|
||||||
#X
|
#define INCBIN_STRINGIZE(X) INCBIN_STR(X)
|
||||||
#define INCBIN_STRINGIZE(X) \
|
|
||||||
INCBIN_STR(X)
|
|
||||||
/* Concatenate */
|
/* Concatenate */
|
||||||
#define INCBIN_CAT(X, Y) \
|
#define INCBIN_CAT(X, Y) X##Y
|
||||||
X ## Y
|
#define INCBIN_CONCATENATE(X, Y) INCBIN_CAT(X, Y)
|
||||||
#define INCBIN_CONCATENATE(X, Y) \
|
|
||||||
INCBIN_CAT(X, Y)
|
|
||||||
/* Deferred macro expansion */
|
/* Deferred macro expansion */
|
||||||
#define INCBIN_EVAL(X) \
|
#define INCBIN_EVAL(X) X
|
||||||
X
|
#define INCBIN_INVOKE(N, ...) INCBIN_EVAL(N(__VA_ARGS__))
|
||||||
#define INCBIN_INVOKE(N, ...) \
|
|
||||||
INCBIN_EVAL(N(__VA_ARGS__))
|
|
||||||
/* Variable argument count for overloading by arity */
|
/* Variable argument count for overloading by arity */
|
||||||
#define INCBIN_VA_ARG_COUNTER(_1, _2, _3, N, ...) N
|
#define INCBIN_VA_ARG_COUNTER(_1, _2, _3, N, ...) N
|
||||||
#define INCBIN_VA_ARGC(...) INCBIN_VA_ARG_COUNTER(__VA_ARGS__, 3, 2, 1, 0)
|
#define INCBIN_VA_ARGC(...) INCBIN_VA_ARG_COUNTER(__VA_ARGS__, 3, 2, 1, 0)
|
||||||
@ -83,8 +61,7 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
# define INCBIN_ALIGN \
|
#define INCBIN_ALIGN __attribute__((aligned(INCBIN_ALIGNMENT)))
|
||||||
__attribute__((aligned(INCBIN_ALIGNMENT)))
|
|
||||||
#else
|
#else
|
||||||
#define INCBIN_ALIGN __declspec(align(INCBIN_ALIGNMENT))
|
#define INCBIN_ALIGN __declspec(align(INCBIN_ALIGNMENT))
|
||||||
#endif
|
#endif
|
||||||
@ -163,7 +140,8 @@
|
|||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
#include <TargetConditionals.h>
|
#include <TargetConditionals.h>
|
||||||
#if defined(TARGET_OS_IPHONE) && !defined(INCBIN_SILENCE_BITCODE_WARNING)
|
#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."
|
#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
|
#endif
|
||||||
/* The directives are different for Apple branded compilers */
|
/* The directives are different for Apple branded compilers */
|
||||||
#define INCBIN_SECTION INCBIN_OUTPUT_SECTION "\n"
|
#define INCBIN_SECTION INCBIN_OUTPUT_SECTION "\n"
|
||||||
@ -256,34 +234,16 @@
|
|||||||
|
|
||||||
/* Style lookup: returning identifier */
|
/* Style lookup: returning identifier */
|
||||||
#define INCBIN_STYLE_IDENT(TYPE) \
|
#define INCBIN_STYLE_IDENT(TYPE) \
|
||||||
INCBIN_CONCATENATE( \
|
INCBIN_CONCATENATE(INCBIN_STYLE_, INCBIN_CONCATENATE(INCBIN_EVAL(INCBIN_STYLE), INCBIN_CONCATENATE(_, TYPE)))
|
||||||
INCBIN_STYLE_, \
|
|
||||||
INCBIN_CONCATENATE( \
|
|
||||||
INCBIN_EVAL(INCBIN_STYLE), \
|
|
||||||
INCBIN_CONCATENATE(_, TYPE)))
|
|
||||||
|
|
||||||
/* Style lookup: returning string literal */
|
/* Style lookup: returning string literal */
|
||||||
#define INCBIN_STYLE_STRING(TYPE) \
|
#define INCBIN_STYLE_STRING(TYPE) INCBIN_STRINGIZE(INCBIN_STYLE_IDENT(TYPE))
|
||||||
INCBIN_STRINGIZE( \
|
|
||||||
INCBIN_STYLE_IDENT(TYPE)) \
|
|
||||||
|
|
||||||
/* Generate the global labels by indirectly invoking the macro with our style
|
/* Generate the global labels by indirectly invoking the macro with our style
|
||||||
* type and concatenating the name against them. */
|
* type and concatenating the name against them. */
|
||||||
#define INCBIN_GLOBAL_LABELS(NAME, TYPE) \
|
#define INCBIN_GLOBAL_LABELS(NAME, TYPE) \
|
||||||
INCBIN_INVOKE( \
|
INCBIN_INVOKE(INCBIN_GLOBAL, INCBIN_CONCATENATE(NAME, INCBIN_INVOKE(INCBIN_STYLE_IDENT, TYPE))) \
|
||||||
INCBIN_GLOBAL, \
|
INCBIN_INVOKE(INCBIN_TYPE, INCBIN_CONCATENATE(NAME, INCBIN_INVOKE(INCBIN_STYLE_IDENT, TYPE)))
|
||||||
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.
|
* @brief Externally reference binary data included in another translation unit.
|
||||||
@ -316,23 +276,19 @@
|
|||||||
* // extern const unsigned int <prefix>Foo<size>;
|
* // extern const unsigned int <prefix>Foo<size>;
|
||||||
* @endcode
|
* @endcode
|
||||||
*/
|
*/
|
||||||
#define INCBIN_EXTERN(...) \
|
#define INCBIN_EXTERN(...) INCBIN_CONCATENATE(INCBIN_EXTERN_, INCBIN_VA_ARGC(__VA_ARGS__))(__VA_ARGS__)
|
||||||
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_1(NAME, ...) \
|
|
||||||
INCBIN_EXTERN_2(unsigned char, NAME)
|
|
||||||
#define INCBIN_EXTERN_2(TYPE, NAME) \
|
#define INCBIN_EXTERN_2(TYPE, NAME) \
|
||||||
INCBIN_EXTERNAL const INCBIN_ALIGN TYPE \
|
INCBIN_EXTERNAL const INCBIN_ALIGN TYPE \
|
||||||
INCBIN_CONCATENATE( \
|
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_CONCATENATE(INCBIN_PREFIX, NAME), \
|
||||||
INCBIN_STYLE_IDENT(DATA))[]; \
|
INCBIN_STYLE_IDENT(END) \
|
||||||
INCBIN_EXTERNAL const INCBIN_ALIGN TYPE *const \
|
); \
|
||||||
INCBIN_CONCATENATE( \
|
INCBIN_EXTERNAL const unsigned int INCBIN_CONCATENATE( \
|
||||||
INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \
|
INCBIN_CONCATENATE(INCBIN_PREFIX, NAME), \
|
||||||
INCBIN_STYLE_IDENT(END)); \
|
INCBIN_STYLE_IDENT(SIZE) \
|
||||||
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.
|
* @brief Externally reference textual data included in another translation unit.
|
||||||
@ -354,8 +310,7 @@
|
|||||||
* // extern const unsigned int <prefix>Foo<size>;
|
* // extern const unsigned int <prefix>Foo<size>;
|
||||||
* @endcode
|
* @endcode
|
||||||
*/
|
*/
|
||||||
#define INCTXT_EXTERN(NAME) \
|
#define INCTXT_EXTERN(NAME) INCBIN_EXTERN_2(char, NAME)
|
||||||
INCBIN_EXTERN_2(char, NAME)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Include a binary file into the current translation unit.
|
* @brief Include a binary file into the current translation unit.
|
||||||
@ -397,11 +352,9 @@
|
|||||||
* please @see INCBIN_EXTERN.
|
* please @see INCBIN_EXTERN.
|
||||||
*/
|
*/
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
# define INCBIN(NAME, FILENAME) \
|
#define INCBIN(NAME, FILENAME) INCBIN_EXTERN(NAME)
|
||||||
INCBIN_EXTERN(NAME)
|
|
||||||
#else
|
#else
|
||||||
# define INCBIN(...) \
|
#define INCBIN(...) INCBIN_CONCATENATE(INCBIN_, INCBIN_VA_ARGC(__VA_ARGS__))(__VA_ARGS__)
|
||||||
INCBIN_CONCATENATE(INCBIN_, INCBIN_VA_ARGC(__VA_ARGS__))(__VA_ARGS__)
|
|
||||||
#if defined(__GNUC__)
|
#if defined(__GNUC__)
|
||||||
#define INCBIN_1(...) _Pragma("GCC error \"Single argument INCBIN not allowed\"")
|
#define INCBIN_1(...) _Pragma("GCC error \"Single argument INCBIN not allowed\"")
|
||||||
#elif defined(__clang__)
|
#elif defined(__clang__)
|
||||||
@ -409,28 +362,18 @@
|
|||||||
#else
|
#else
|
||||||
#define INCBIN_1(...) /* Cannot do anything here */
|
#define INCBIN_1(...) /* Cannot do anything here */
|
||||||
#endif
|
#endif
|
||||||
# define INCBIN_2(NAME, FILENAME) \
|
#define INCBIN_2(NAME, FILENAME) INCBIN_3(unsigned char, 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_3(TYPE, NAME, FILENAME) INCBIN_COMMON(TYPE, NAME, FILENAME, /* No terminator for binary data */)
|
||||||
#define INCBIN_COMMON(TYPE, NAME, FILENAME, TERMINATOR) \
|
#define INCBIN_COMMON(TYPE, NAME, FILENAME, TERMINATOR) \
|
||||||
__asm__(INCBIN_SECTION \
|
__asm__(INCBIN_SECTION INCBIN_GLOBAL_LABELS(NAME, DATA) \
|
||||||
INCBIN_GLOBAL_LABELS(NAME, DATA) \
|
INCBIN_ALIGN_HOST INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA \
|
||||||
INCBIN_ALIGN_HOST \
|
) ":\n" INCBIN_MACRO " \"" FILENAME "\"\n" TERMINATOR INCBIN_GLOBAL_LABELS(NAME, END) \
|
||||||
INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA) ":\n" \
|
INCBIN_ALIGN_BYTE INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END \
|
||||||
INCBIN_MACRO " \"" FILENAME "\"\n" \
|
) ":\n" INCBIN_BYTE "1\n" INCBIN_GLOBAL_LABELS(NAME, SIZE) \
|
||||||
TERMINATOR \
|
INCBIN_ALIGN_HOST INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(SIZE \
|
||||||
INCBIN_GLOBAL_LABELS(NAME, END) \
|
) ":\n" INCBIN_INT INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END \
|
||||||
INCBIN_ALIGN_BYTE \
|
) " - " INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(DATA \
|
||||||
INCBIN_MANGLE INCBIN_STRINGIZE(INCBIN_PREFIX) #NAME INCBIN_STYLE_STRING(END) ":\n" \
|
) "\n" INCBIN_ALIGN_HOST ".text\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)
|
INCBIN_EXTERN(TYPE, NAME)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -466,11 +409,9 @@
|
|||||||
* please @see INCBIN_EXTERN.
|
* please @see INCBIN_EXTERN.
|
||||||
*/
|
*/
|
||||||
#if defined(_MSC_VER)
|
#if defined(_MSC_VER)
|
||||||
# define INCTXT(NAME, FILENAME) \
|
#define INCTXT(NAME, FILENAME) INCBIN_EXTERN(NAME)
|
||||||
INCBIN_EXTERN(NAME)
|
|
||||||
#else
|
#else
|
||||||
# define INCTXT(NAME, FILENAME) \
|
#define INCTXT(NAME, FILENAME) INCBIN_COMMON(char, NAME, FILENAME, INCBIN_BYTE "0\n")
|
||||||
INCBIN_COMMON(char, NAME, FILENAME, INCBIN_BYTE "0\n")
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@ -1,9 +1,17 @@
|
|||||||
#include "gxm_memory.h"
|
#include "gxm_memory.h"
|
||||||
|
#include "tlsf.h"
|
||||||
#include "utils.h"
|
#include "utils.h"
|
||||||
|
|
||||||
#include <SDL3/SDL_stdinc.h>
|
#include <SDL3/SDL_stdinc.h>
|
||||||
#include <psp2/gxm.h>
|
#include <psp2/gxm.h>
|
||||||
|
#include <psp2/kernel/clib.h>
|
||||||
|
#include <psp2/kernel/sysmem.h>
|
||||||
|
|
||||||
|
#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* patcher_host_alloc(void* user_data, unsigned int size)
|
||||||
{
|
{
|
||||||
@ -114,3 +122,53 @@ void vita_mem_fragment_usse_free(SceUID uid)
|
|||||||
sceGxmUnmapFragmentUsseMemory(mem);
|
sceGxmUnmapFragmentUsseMemory(mem);
|
||||||
sceKernelFreeMemBlock(uid);
|
sceKernelFreeMemBlock(uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool cdram_allocator_create()
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = sceKernelAllocMemBlock("gpu_cdram_pool", SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW, CDRAM_POOL_SIZE, NULL);
|
||||||
|
if (ret < 0) {
|
||||||
|
sceClibPrintf("sceKernelAllocMemBlock failed: %08x\n", ret);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
cdramAllocatorUID = ret;
|
||||||
|
|
||||||
|
void* mem;
|
||||||
|
ret = sceKernelGetMemBlockBase(cdramAllocatorUID, &mem);
|
||||||
|
if (ret < 0) {
|
||||||
|
sceClibPrintf("sceKernelGetMemBlockBase failed: %08x\n", ret);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = sceGxmMapMemory(
|
||||||
|
mem,
|
||||||
|
CDRAM_POOL_SIZE,
|
||||||
|
(SceGxmMemoryAttribFlags) (SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE)
|
||||||
|
);
|
||||||
|
if (ret < 0) {
|
||||||
|
sceClibPrintf("sceGxmMapMemory failed: %08x\n", ret);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
cdramAllocator = SDL_malloc(tlsf_size());
|
||||||
|
tlsf_create(cdramAllocator);
|
||||||
|
tlsf_add_pool(cdramAllocator, mem, CDRAM_POOL_SIZE);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void* cdram_alloc(size_t size, size_t align)
|
||||||
|
{
|
||||||
|
DEBUG_ONLY_PRINTF("cdram_alloc(%d, %d) inuse=%d ", size, align, inuse_mem);
|
||||||
|
void* ptr = tlsf_memalign(cdramAllocator, align, size);
|
||||||
|
DEBUG_ONLY_PRINTF("ptr=%p\n", ptr);
|
||||||
|
inuse_mem += tlsf_block_size(ptr);
|
||||||
|
return ptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
void cdram_free(void* ptr)
|
||||||
|
{
|
||||||
|
inuse_mem -= tlsf_block_size(ptr);
|
||||||
|
DEBUG_ONLY_PRINTF("cdram_free(%p)\n", ptr);
|
||||||
|
tlsf_free(cdramAllocator, ptr);
|
||||||
|
}
|
||||||
|
|||||||
@ -3,7 +3,8 @@
|
|||||||
#include <psp2/razor_capture.h>
|
#include <psp2/razor_capture.h>
|
||||||
#include <psp2/razor_hud.h>
|
#include <psp2/razor_hud.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C"
|
||||||
|
{
|
||||||
extern int sceRazorGpuCaptureSetTrigger(int frames, const char* path);
|
extern int sceRazorGpuCaptureSetTrigger(int frames, const char* path);
|
||||||
|
|
||||||
extern int sceRazorGpuTraceTrigger();
|
extern int sceRazorGpuTraceTrigger();
|
||||||
|
|||||||
@ -1,15 +1,16 @@
|
|||||||
#include "d3drmrenderer_gxm.h"
|
#include "d3drmrenderer_gxm.h"
|
||||||
#include "gxm_memory.h"
|
#include "gxm_memory.h"
|
||||||
#include "meshutils.h"
|
#include "meshutils.h"
|
||||||
#include "utils.h"
|
|
||||||
#include "razor.h"
|
#include "razor.h"
|
||||||
#include "tlsf.h"
|
#include "tlsf.h"
|
||||||
|
#include "utils.h"
|
||||||
|
|
||||||
#include <SDL3/SDL.h>
|
#include <SDL3/SDL.h>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <psp2/display.h>
|
#include <psp2/display.h>
|
||||||
#include <psp2/gxm.h>
|
#include <psp2/gxm.h>
|
||||||
#include <psp2/kernel/modulemgr.h>
|
#include <psp2/kernel/modulemgr.h>
|
||||||
|
#include <psp2/kernel/sysmem.h>
|
||||||
#include <psp2/types.h>
|
#include <psp2/types.h>
|
||||||
#include <string>
|
#include <string>
|
||||||
#define INCBIN_PREFIX _inc_
|
#define INCBIN_PREFIX _inc_
|
||||||
@ -27,9 +28,6 @@ bool gxm_initialized = false;
|
|||||||
#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8
|
#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8
|
||||||
#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
|
#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
|
||||||
|
|
||||||
#define CDRAM_POOL_SIZE 64*1024*1024
|
|
||||||
|
|
||||||
|
|
||||||
INCBIN(main_vert_gxp, "shaders/main.vert.gxp");
|
INCBIN(main_vert_gxp, "shaders/main.vert.gxp");
|
||||||
INCBIN(main_frag_gxp, "shaders/main.frag.gxp");
|
INCBIN(main_frag_gxp, "shaders/main.frag.gxp");
|
||||||
INCBIN(color_frag_gxp, "shaders/color.frag.gxp");
|
INCBIN(color_frag_gxp, "shaders/color.frag.gxp");
|
||||||
@ -60,7 +58,6 @@ static const SceGxmBlendInfo blendInfoTransparent = {
|
|||||||
.alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
|
.alphaDst = SCE_GXM_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
static GXMRendererContext gxm_renderer_context;
|
static GXMRendererContext gxm_renderer_context;
|
||||||
|
|
||||||
static void display_callback(const void* callback_data)
|
static void display_callback(const void* callback_data)
|
||||||
@ -165,62 +162,6 @@ bool gxm_init()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static SceUID cdramAllocatorUID = -1;
|
|
||||||
static tlsf_t cdramAllocator = nullptr;
|
|
||||||
|
|
||||||
bool cdram_allocator_create() {
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
ret = sceKernelAllocMemBlock(
|
|
||||||
"gpu_cdram_pool",
|
|
||||||
SCE_KERNEL_MEMBLOCK_TYPE_USER_CDRAM_RW,
|
|
||||||
CDRAM_POOL_SIZE,
|
|
||||||
NULL
|
|
||||||
);
|
|
||||||
if (ret < 0) {
|
|
||||||
sceClibPrintf("sceKernelAllocMemBlock failed: %08x\n", ret);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
cdramAllocatorUID = ret;
|
|
||||||
|
|
||||||
void* mem;
|
|
||||||
ret = sceKernelGetMemBlockBase(cdramAllocatorUID, &mem);
|
|
||||||
if (ret < 0) {
|
|
||||||
sceClibPrintf("sceKernelGetMemBlockBase failed: %08x\n", ret);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
ret = sceGxmMapMemory(
|
|
||||||
mem,
|
|
||||||
CDRAM_POOL_SIZE,
|
|
||||||
(SceGxmMemoryAttribFlags) (SCE_GXM_MEMORY_ATTRIB_READ | SCE_GXM_MEMORY_ATTRIB_WRITE)
|
|
||||||
);
|
|
||||||
if (ret < 0) {
|
|
||||||
sceClibPrintf("sceGxmMapMemory failed: %08x\n", ret);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
cdramAllocator = SDL_malloc(tlsf_size());
|
|
||||||
tlsf_create(cdramAllocator);
|
|
||||||
tlsf_add_pool(cdramAllocator, mem, CDRAM_POOL_SIZE);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
int inuse_mem = 0;
|
|
||||||
inline void* cdram_alloc(size_t size, size_t align) {
|
|
||||||
sceClibPrintf("cdram_alloc(%d, %d) inuse=%d ", size, align, inuse_mem);
|
|
||||||
void* ptr = tlsf_memalign(cdramAllocator, align, size);
|
|
||||||
sceClibPrintf("ptr=%p\n", ptr);
|
|
||||||
inuse_mem += tlsf_block_size(ptr);
|
|
||||||
return ptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline void cdram_free(void* ptr) {
|
|
||||||
inuse_mem -= tlsf_block_size(ptr);
|
|
||||||
sceClibPrintf("cdram_free(%p)\n", ptr);
|
|
||||||
tlsf_free(cdramAllocator, ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
static bool create_gxm_context()
|
static bool create_gxm_context()
|
||||||
{
|
{
|
||||||
GXMRendererContext* data = &gxm_renderer_context;
|
GXMRendererContext* data = &gxm_renderer_context;
|
||||||
@ -635,7 +576,6 @@ GXMRenderer::GXMRenderer(DWORD width, DWORD height)
|
|||||||
// clear uniforms
|
// clear uniforms
|
||||||
this->colorShader_uColor = sceGxmProgramFindParameterByName(colorFragmentProgramGxp, "uColor"); // vec4
|
this->colorShader_uColor = sceGxmProgramFindParameterByName(colorFragmentProgramGxp, "uColor"); // vec4
|
||||||
|
|
||||||
|
|
||||||
for (int i = 0; i < GXM_FRAGMENT_BUFFER_COUNT; i++) {
|
for (int i = 0; i < GXM_FRAGMENT_BUFFER_COUNT; i++) {
|
||||||
this->lights[i] = static_cast<GXMSceneLightUniform*>(cdram_alloc(sizeof(GXMSceneLightUniform), 4));
|
this->lights[i] = static_cast<GXMSceneLightUniform*>(cdram_alloc(sizeof(GXMSceneLightUniform), 4));
|
||||||
}
|
}
|
||||||
@ -782,9 +722,6 @@ void copySurfaceToGxm(DirectDrawSurfaceImpl* surface, uint8_t* textureData, size
|
|||||||
uint8_t* srcRow = (uint8_t*) src->pixels + (y * src->pitch);
|
uint8_t* srcRow = (uint8_t*) src->pixels + (y * src->pitch);
|
||||||
uint8_t* dstRow = textureData + (y * dstStride);
|
uint8_t* dstRow = textureData + (y * dstStride);
|
||||||
size_t rowSize = src->w * 4;
|
size_t rowSize = src->w * 4;
|
||||||
if((dstRow - textureData)+rowSize > dstSize) {
|
|
||||||
sceClibPrintf("buffer overrun!!! size=%d y=%d rowSize=%d\n", dstSize, y, rowSize);
|
|
||||||
}
|
|
||||||
memcpy(dstRow, srcRow, rowSize);
|
memcpy(dstRow, srcRow, rowSize);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -805,14 +742,11 @@ void copySurfaceToGxm(DirectDrawSurfaceImpl* surface, uint8_t* textureData, size
|
|||||||
int alignBytes = ALIGNMENT(pixelsSize, SCE_GXM_PALETTE_ALIGNMENT);
|
int alignBytes = ALIGNMENT(pixelsSize, SCE_GXM_PALETTE_ALIGNMENT);
|
||||||
uint8_t* paletteData = textureData + pixelsSize + alignBytes;
|
uint8_t* paletteData = textureData + pixelsSize + alignBytes;
|
||||||
memcpy(paletteData, palette->m_palette->colors, 256 * 4);
|
memcpy(paletteData, palette->m_palette->colors, 256 * 4);
|
||||||
if((paletteData-textureData) + 256*4 > dstSize) {
|
|
||||||
sceClibPrintf("buffer overrun!!! textureData=%p paletteData=%p size=%d\n", textureData, paletteData, dstSize);
|
|
||||||
}
|
|
||||||
palette->Release();
|
palette->Release();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
sceClibPrintf("unsupported format %d\n", SDL_GetPixelFormatName(src->format));
|
DEBUG_ONLY_PRINTF("unsupported format %d\n", SDL_GetPixelFormatName(src->format));
|
||||||
SDL_Surface* dst = SDL_CreateSurfaceFrom(src->w, src->h, SDL_PIXELFORMAT_ABGR8888, textureData, src->w * 4);
|
SDL_Surface* dst = SDL_CreateSurfaceFrom(src->w, src->h, SDL_PIXELFORMAT_ABGR8888, textureData, src->w * 4);
|
||||||
SDL_BlitSurface(src, nullptr, dst, nullptr);
|
SDL_BlitSurface(src, nullptr, dst, nullptr);
|
||||||
SDL_DestroySurface(dst);
|
SDL_DestroySurface(dst);
|
||||||
@ -862,7 +796,8 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture, bool isUi)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sceClibPrintf("Create Texture %s w=%d h=%d s=%d size=%d align=%d\n",
|
DEBUG_ONLY_PRINTF(
|
||||||
|
"Create Texture %s w=%d h=%d s=%d size=%d align=%d\n",
|
||||||
SDL_GetPixelFormatName(surface->m_surface->format),
|
SDL_GetPixelFormatName(surface->m_surface->format),
|
||||||
textureWidth,
|
textureWidth,
|
||||||
textureHeight,
|
textureHeight,
|
||||||
@ -876,15 +811,7 @@ Uint32 GXMRenderer::GetTextureId(IDirect3DRMTexture* iTexture, bool isUi)
|
|||||||
copySurfaceToGxm(surface, (uint8_t*) textureData, textureStride, textureSize);
|
copySurfaceToGxm(surface, (uint8_t*) textureData, textureStride, textureSize);
|
||||||
|
|
||||||
SceGxmTexture gxmTexture;
|
SceGxmTexture gxmTexture;
|
||||||
SCE_ERR(
|
SCE_ERR(sceGxmTextureInitLinear, &gxmTexture, textureData, gxmTextureFormat, textureWidth, textureHeight, 0);
|
||||||
sceGxmTextureInitLinear,
|
|
||||||
&gxmTexture,
|
|
||||||
textureData,
|
|
||||||
gxmTextureFormat,
|
|
||||||
textureWidth,
|
|
||||||
textureHeight,
|
|
||||||
0
|
|
||||||
);
|
|
||||||
sceGxmTextureSetMinFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR);
|
sceGxmTextureSetMinFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR);
|
||||||
sceGxmTextureSetMagFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR);
|
sceGxmTextureSetMagFilter(&gxmTexture, SCE_GXM_TEXTURE_FILTER_LINEAR);
|
||||||
sceGxmTextureSetUAddrMode(&gxmTexture, SCE_GXM_TEXTURE_ADDR_REPEAT);
|
sceGxmTextureSetUAddrMode(&gxmTexture, SCE_GXM_TEXTURE_ADDR_REPEAT);
|
||||||
@ -1067,7 +994,8 @@ void GXMRenderer::StartScene()
|
|||||||
if (razor_live_started) {
|
if (razor_live_started) {
|
||||||
sceRazorGpuLiveStop();
|
sceRazorGpuLiveStop();
|
||||||
razor_live_started = false;
|
razor_live_started = false;
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
sceRazorGpuLiveStart();
|
sceRazorGpuLiveStart();
|
||||||
razor_live_started = true;
|
razor_live_started = true;
|
||||||
}
|
}
|
||||||
@ -1099,7 +1027,6 @@ void GXMRenderer::StartScene()
|
|||||||
sceGxmNotificationWait(&this->fragmentNotifications[this->currentFragmentBufferIndex]);
|
sceGxmNotificationWait(&this->fragmentNotifications[this->currentFragmentBufferIndex]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
HRESULT GXMRenderer::BeginFrame()
|
HRESULT GXMRenderer::BeginFrame()
|
||||||
{
|
{
|
||||||
this->transparencyEnabled = false;
|
this->transparencyEnabled = false;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user