Merge pull request #3707 from frangarcj/master

Various things
This commit is contained in:
Francisco José García García 2016-10-02 13:05:36 +01:00 committed by GitHub
commit ce1164c939
3 changed files with 50 additions and 54 deletions

View File

@ -1,6 +1,6 @@
#include <errno.h> #include <errno.h>
#include <reent.h> #include <reent.h>
#include "../../defines/psp_defines.h"
static int _newlib_heap_memblock; static int _newlib_heap_memblock;
static unsigned _newlib_heap_size; static unsigned _newlib_heap_size;
static char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur; static char *_newlib_heap_base, *_newlib_heap_end, *_newlib_heap_cur;
@ -11,19 +11,19 @@ static int _newlib_vm_memblock;
extern int _newlib_vm_size_user __attribute__((weak)); extern int _newlib_vm_size_user __attribute__((weak));
void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) { void * _sbrk_r(struct _reent *reent, ptrdiff_t incr) {
if (sceKernelLockLwMutex(_newlib_sbrk_mutex, 1, 0) < 0) if (sceKernelLockLwMutex((struct SceKernelLwMutexWork*)_newlib_sbrk_mutex, 1, 0) < 0)
goto fail; goto fail;
if (!_newlib_heap_base || _newlib_heap_cur + incr >= _newlib_heap_end) { if (!_newlib_heap_base || _newlib_heap_cur + incr >= _newlib_heap_end) {
sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); sceKernelUnlockLwMutex((struct SceKernelLwMutexWork*)_newlib_sbrk_mutex, 1);
fail: fail:
reent->_errno = ENOMEM; reent->_errno = ENOMEM;
return -1; return (void*)-1;
} }
char *prev_heap_end = _newlib_heap_cur; char *prev_heap_end = _newlib_heap_cur;
_newlib_heap_cur += incr; _newlib_heap_cur += incr;
sceKernelUnlockLwMutex(_newlib_sbrk_mutex, 1); sceKernelUnlockLwMutex((struct SceKernelLwMutexWork*)_newlib_sbrk_mutex, 1);
return (void*) prev_heap_end; return (void*) prev_heap_end;
} }
@ -35,7 +35,7 @@ void _init_vita_heap(void) {
_newlib_vm_memblock = sceKernelAllocMemBlockForVM("code", _newlib_vm_size_user); _newlib_vm_memblock = sceKernelAllocMemBlockForVM("code", _newlib_vm_size_user);
if (_newlib_vm_memblock < 0){ if (_newlib_vm_memblock < 0){
sceClibPrintf("sceKernelAllocMemBlockForVM failed\n"); //sceClibPrintf("sceKernelAllocMemBlockForVM failed\n");
goto failure; goto failure;
} }
}else{ }else{
@ -44,15 +44,11 @@ void _init_vita_heap(void) {
// Create a mutex to use inside _sbrk_r // Create a mutex to use inside _sbrk_r
if (sceKernelCreateLwMutex(_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) { if (sceKernelCreateLwMutex((struct SceKernelLwMutexWork*)_newlib_sbrk_mutex, "sbrk mutex", 0, 0, 0) < 0) {
goto failure; goto failure;
} }
if (&_newlib_heap_size_user != NULL) {
_newlib_heap_size = _newlib_heap_size_user; _newlib_heap_size = _newlib_heap_size_user;
} else {
// Create a memblock for the heap memory, 32MB
_newlib_heap_size = 32 * 1024 * 1024;
}
_newlib_heap_size -= _newlib_vm_size; _newlib_heap_size -= _newlib_vm_size;
@ -60,7 +56,7 @@ void _init_vita_heap(void) {
if (_newlib_heap_memblock < 0) { if (_newlib_heap_memblock < 0) {
goto failure; goto failure;
} }
if (sceKernelGetMemBlockBase(_newlib_heap_memblock, &_newlib_heap_base) < 0) { if (sceKernelGetMemBlockBase(_newlib_heap_memblock, (void**)&_newlib_heap_base) < 0) {
goto failure; goto failure;
} }
_newlib_heap_end = _newlib_heap_base + _newlib_heap_size; _newlib_heap_end = _newlib_heap_base + _newlib_heap_size;
@ -81,7 +77,7 @@ int getVMBlock(){
void _free_vita_heap(void) { void _free_vita_heap(void) {
// Destroy the sbrk mutex // Destroy the sbrk mutex
sceKernelDeleteLwMutex(_newlib_sbrk_mutex); sceKernelDeleteLwMutex((struct SceKernelLwMutexWork*)_newlib_sbrk_mutex);
// Free the heap memblock to avoid memory leakage. // Free the heap memblock to avoid memory leakage.
sceKernelFreeMemBlock(_newlib_heap_memblock); sceKernelFreeMemBlock(_newlib_heap_memblock);

View File

@ -11,9 +11,9 @@
#ifdef DEBUG_BUILD #ifdef DEBUG_BUILD
# include <stdio.h> # include <stdio.h>
# define DEBUG(...) printf(__VA_ARGS__) # define VITA2D_DEBUG(...) printf(__VA_ARGS__)
#else #else
# define DEBUG(...) # define VITA2D_DEBUG(...)
#endif #endif
/* Defines */ /* Defines */
@ -160,7 +160,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
UNUSED(err); UNUSED(err);
if (vita2d_initialized) { if (vita2d_initialized) {
DEBUG("libvita2d is already initialized!\n"); VITA2D_DEBUG("libvita2d is already initialized!\n");
return 1; return 1;
} }
@ -173,7 +173,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE; initializeParams.parameterBufferSize = SCE_GXM_DEFAULT_PARAMETER_BUFFER_SIZE;
err = sceGxmInitialize(&initializeParams); err = sceGxmInitialize(&initializeParams);
DEBUG("sceGxmInitialize(): 0x%08X\n", err); VITA2D_DEBUG("sceGxmInitialize(): 0x%08X\n", err);
// allocate ring buffer memory using default sizes // allocate ring buffer memory using default sizes
void *vdmRingBuffer = gpu_alloc( void *vdmRingBuffer = gpu_alloc(
@ -217,7 +217,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
contextParams.fragmentUsseRingBufferOffset = fragmentUsseRingBufferOffset; contextParams.fragmentUsseRingBufferOffset = fragmentUsseRingBufferOffset;
err = sceGxmCreateContext(&contextParams, &_vita2d_context); err = sceGxmCreateContext(&contextParams, &_vita2d_context);
DEBUG("sceGxmCreateContext(): 0x%08X\n", err); VITA2D_DEBUG("sceGxmCreateContext(): 0x%08X\n", err);
// set up parameters // set up parameters
SceGxmRenderTargetParams renderTargetParams; SceGxmRenderTargetParams renderTargetParams;
@ -232,7 +232,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
// create the render target // create the render target
err = sceGxmCreateRenderTarget(&renderTargetParams, &renderTarget); err = sceGxmCreateRenderTarget(&renderTargetParams, &renderTarget);
DEBUG("sceGxmCreateRenderTarget(): 0x%08X\n", err); VITA2D_DEBUG("sceGxmCreateRenderTarget(): 0x%08X\n", err);
// allocate memory and sync objects for display buffers // allocate memory and sync objects for display buffers
for (i = 0; i < DISPLAY_BUFFER_COUNT; i++) { for (i = 0; i < DISPLAY_BUFFER_COUNT; i++) {
@ -346,45 +346,45 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
patcherParams.fragmentUsseOffset = patcherFragmentUsseOffset; patcherParams.fragmentUsseOffset = patcherFragmentUsseOffset;
err = sceGxmShaderPatcherCreate(&patcherParams, &shaderPatcher); err = sceGxmShaderPatcherCreate(&patcherParams, &shaderPatcher);
DEBUG("sceGxmShaderPatcherCreate(): 0x%08X\n", err); VITA2D_DEBUG("sceGxmShaderPatcherCreate(): 0x%08X\n", err);
// check the shaders // check the shaders
err = sceGxmProgramCheck(clearVertexProgramGxp); err = sceGxmProgramCheck(clearVertexProgramGxp);
DEBUG("clear_v sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("clear_v sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(clearFragmentProgramGxp); err = sceGxmProgramCheck(clearFragmentProgramGxp);
DEBUG("clear_f sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("clear_f sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(colorVertexProgramGxp); err = sceGxmProgramCheck(colorVertexProgramGxp);
DEBUG("color_v sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("color_v sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(colorFragmentProgramGxp); err = sceGxmProgramCheck(colorFragmentProgramGxp);
DEBUG("color_f sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("color_f sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(textureVertexProgramGxp); err = sceGxmProgramCheck(textureVertexProgramGxp);
DEBUG("texture_v sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("texture_v sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(textureFragmentProgramGxp); err = sceGxmProgramCheck(textureFragmentProgramGxp);
DEBUG("texture_f sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("texture_f sceGxmProgramCheck(): 0x%08X\n", err);
err = sceGxmProgramCheck(textureTintFragmentProgramGxp); err = sceGxmProgramCheck(textureTintFragmentProgramGxp);
DEBUG("texture_tint_f sceGxmProgramCheck(): 0x%08X\n", err); VITA2D_DEBUG("texture_tint_f sceGxmProgramCheck(): 0x%08X\n", err);
// register programs with the patcher // register programs with the patcher
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, clearVertexProgramGxp, &clearVertexProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, clearVertexProgramGxp, &clearVertexProgramId);
DEBUG("clear_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("clear_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, clearFragmentProgramGxp, &clearFragmentProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, clearFragmentProgramGxp, &clearFragmentProgramId);
DEBUG("clear_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("clear_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, colorVertexProgramGxp, &colorVertexProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, colorVertexProgramGxp, &colorVertexProgramId);
DEBUG("color_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("color_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, colorFragmentProgramGxp, &colorFragmentProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, colorFragmentProgramGxp, &colorFragmentProgramId);
DEBUG("color_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("color_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureVertexProgramGxp, &textureVertexProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureVertexProgramGxp, &textureVertexProgramId);
DEBUG("texture_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture_v sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureFragmentProgramGxp, &textureFragmentProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureFragmentProgramGxp, &textureFragmentProgramId);
DEBUG("texture_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureTintFragmentProgramGxp, &textureTintFragmentProgramId); err = sceGxmShaderPatcherRegisterProgram(shaderPatcher, textureTintFragmentProgramGxp, &textureTintFragmentProgramId);
DEBUG("texture_tint_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture_tint_f sceGxmShaderPatcherRegisterProgram(): 0x%08X\n", err);
// Fill SceGxmBlendInfo // Fill SceGxmBlendInfo
static const SceGxmBlendInfo blend_info = { static const SceGxmBlendInfo blend_info = {
@ -421,7 +421,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
1, 1,
&clearVertexProgram); &clearVertexProgram);
DEBUG("clear sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err); VITA2D_DEBUG("clear sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherCreateFragmentProgram( err = sceGxmShaderPatcherCreateFragmentProgram(
shaderPatcher, shaderPatcher,
@ -432,7 +432,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
clearVertexProgramGxp, clearVertexProgramGxp,
&clearFragmentProgram); &clearFragmentProgram);
DEBUG("clear sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err); VITA2D_DEBUG("clear sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err);
// create the clear triangle vertex/index data // create the clear triangle vertex/index data
clearVertices = (vita2d_clear_vertex *)gpu_alloc( clearVertices = (vita2d_clear_vertex *)gpu_alloc(
@ -461,10 +461,10 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
clearIndices[2] = 2; clearIndices[2] = 2;
const SceGxmProgramParameter *paramColorPositionAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aPosition"); const SceGxmProgramParameter *paramColorPositionAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aPosition");
DEBUG("aPosition sceGxmProgramFindParameterByName(): %p\n", paramColorPositionAttribute); VITA2D_DEBUG("aPosition sceGxmProgramFindParameterByName(): %p\n", paramColorPositionAttribute);
const SceGxmProgramParameter *paramColorColorAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aColor"); const SceGxmProgramParameter *paramColorColorAttribute = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "aColor");
DEBUG("aColor sceGxmProgramFindParameterByName(): %p\n", paramColorColorAttribute); VITA2D_DEBUG("aColor sceGxmProgramFindParameterByName(): %p\n", paramColorColorAttribute);
// create color vertex format // create color vertex format
SceGxmVertexAttribute colorVertexAttributes[2]; SceGxmVertexAttribute colorVertexAttributes[2];
@ -495,7 +495,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
1, 1,
&_vita2d_colorVertexProgram); &_vita2d_colorVertexProgram);
DEBUG("color sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err); VITA2D_DEBUG("color sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherCreateFragmentProgram( err = sceGxmShaderPatcherCreateFragmentProgram(
shaderPatcher, shaderPatcher,
@ -506,14 +506,14 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
colorVertexProgramGxp, colorVertexProgramGxp,
&_vita2d_colorFragmentProgram); &_vita2d_colorFragmentProgram);
DEBUG("color sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err); VITA2D_DEBUG("color sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err);
const SceGxmProgramParameter *paramTexturePositionAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aPosition"); const SceGxmProgramParameter *paramTexturePositionAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aPosition");
DEBUG("aPosition sceGxmProgramFindParameterByName(): %p\n", paramTexturePositionAttribute); VITA2D_DEBUG("aPosition sceGxmProgramFindParameterByName(): %p\n", paramTexturePositionAttribute);
const SceGxmProgramParameter *paramTextureTexcoordAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aTexcoord"); const SceGxmProgramParameter *paramTextureTexcoordAttribute = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "aTexcoord");
DEBUG("aTexcoord sceGxmProgramFindParameterByName(): %p\n", paramTextureTexcoordAttribute); VITA2D_DEBUG("aTexcoord sceGxmProgramFindParameterByName(): %p\n", paramTextureTexcoordAttribute);
// create texture vertex format // create texture vertex format
SceGxmVertexAttribute textureVertexAttributes[2]; SceGxmVertexAttribute textureVertexAttributes[2];
@ -544,7 +544,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
1, 1,
&_vita2d_textureVertexProgram); &_vita2d_textureVertexProgram);
DEBUG("texture sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture sceGxmShaderPatcherCreateVertexProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherCreateFragmentProgram( err = sceGxmShaderPatcherCreateFragmentProgram(
shaderPatcher, shaderPatcher,
@ -555,7 +555,7 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
textureVertexProgramGxp, textureVertexProgramGxp,
&_vita2d_textureFragmentProgram); &_vita2d_textureFragmentProgram);
DEBUG("texture sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err);
err = sceGxmShaderPatcherCreateFragmentProgram( err = sceGxmShaderPatcherCreateFragmentProgram(
shaderPatcher, shaderPatcher,
@ -566,20 +566,20 @@ int vita2d_init_advanced(unsigned int temp_pool_size)
textureVertexProgramGxp, textureVertexProgramGxp,
&_vita2d_textureTintFragmentProgram); &_vita2d_textureTintFragmentProgram);
DEBUG("texture_tint sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err); VITA2D_DEBUG("texture_tint sceGxmShaderPatcherCreateFragmentProgram(): 0x%08X\n", err);
// find vertex uniforms by name and cache parameter information // find vertex uniforms by name and cache parameter information
_vita2d_clearClearColorParam = sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uClearColor"); _vita2d_clearClearColorParam = sceGxmProgramFindParameterByName(clearFragmentProgramGxp, "uClearColor");
DEBUG("_vita2d_clearClearColorParam sceGxmProgramFindParameterByName(): %p\n", _vita2d_clearClearColorParam); VITA2D_DEBUG("_vita2d_clearClearColorParam sceGxmProgramFindParameterByName(): %p\n", _vita2d_clearClearColorParam);
_vita2d_colorWvpParam = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "wvp"); _vita2d_colorWvpParam = sceGxmProgramFindParameterByName(colorVertexProgramGxp, "wvp");
DEBUG("color wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_colorWvpParam); VITA2D_DEBUG("color wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_colorWvpParam);
_vita2d_textureWvpParam = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "wvp"); _vita2d_textureWvpParam = sceGxmProgramFindParameterByName(textureVertexProgramGxp, "wvp");
DEBUG("texture wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_textureWvpParam); VITA2D_DEBUG("texture wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_textureWvpParam);
_vita2d_textureTintColorParam = sceGxmProgramFindParameterByName(textureTintFragmentProgramGxp, "uTintColor"); _vita2d_textureTintColorParam = sceGxmProgramFindParameterByName(textureTintFragmentProgramGxp, "uTintColor");
DEBUG("texture wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_textureWvpParam); VITA2D_DEBUG("texture wvp sceGxmProgramFindParameterByName(): %p\n", _vita2d_textureWvpParam);
// Allocate memory for the memory pool // Allocate memory for the memory pool
pool_size = temp_pool_size; pool_size = temp_pool_size;
@ -614,7 +614,7 @@ int vita2d_fini()
unsigned int i; unsigned int i;
if (!vita2d_initialized) { if (!vita2d_initialized) {
DEBUG("libvita2d is not initialized!\n"); VITA2D_DEBUG("libvita2d is not initialized!\n");
return 1; return 1;
} }

View File

@ -304,12 +304,12 @@ static bool psp_joypad_rumble(unsigned pad,
case RETRO_RUMBLE_WEAK: case RETRO_RUMBLE_WEAK:
if (strength > 1) if (strength > 1)
strength = 1; strength = 1;
params.unk = strength; params.small = strength;
break; break;
case RETRO_RUMBLE_STRONG: case RETRO_RUMBLE_STRONG:
if (strength > 255) if (strength > 255)
strength = 255; strength = 255;
params.enable = strength; params.large = strength;
break; break;
case RETRO_RUMBLE_DUMMY: case RETRO_RUMBLE_DUMMY:
default: default: