mirror of
https://github.com/ekeeke/Genesis-Plus-GX.git
synced 2025-01-28 02:45:27 +01:00
cruft
This commit is contained in:
parent
ec97868026
commit
d714a4f68f
@ -1,39 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (boolean.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIBRETRO_SDK_BOOLEAN_H
|
|
||||||
#define __LIBRETRO_SDK_BOOLEAN_H
|
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(SN_TARGET_PS3)
|
|
||||||
/* Hack applied for MSVC when compiling in C89 mode as it isn't C99 compliant. */
|
|
||||||
#define bool unsigned char
|
|
||||||
#define true 1
|
|
||||||
#define false 0
|
|
||||||
#else
|
|
||||||
#include <stdbool.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,65 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (clamping.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LIBRETRO_SDK_CLAMPING_H
|
|
||||||
#define _LIBRETRO_SDK_CLAMPING_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <retro_inline.h>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clamp_float:
|
|
||||||
* @val : initial value
|
|
||||||
* @lower : lower limit that value should be clamped against
|
|
||||||
* @upper : upper limit that value should be clamped against
|
|
||||||
*
|
|
||||||
* Clamps a floating point value.
|
|
||||||
*
|
|
||||||
* Returns: a clamped value of initial float value @val.
|
|
||||||
*/
|
|
||||||
static INLINE float clamp_float(float val, float lower, float upper)
|
|
||||||
{
|
|
||||||
if (val < lower)
|
|
||||||
return lower;
|
|
||||||
if (val > upper)
|
|
||||||
return upper;
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* clamp_8bit:
|
|
||||||
* @val : initial value
|
|
||||||
*
|
|
||||||
* Clamps an unsigned 8-bit value.
|
|
||||||
*
|
|
||||||
* Returns: a clamped value of initial unsigned 8-bit value @val.
|
|
||||||
*/
|
|
||||||
static INLINE uint8_t clamp_8bit(int val)
|
|
||||||
{
|
|
||||||
if (val > 255)
|
|
||||||
return 255;
|
|
||||||
if (val < 0)
|
|
||||||
return 0;
|
|
||||||
return (uint8_t)val;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,94 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (fastcpy.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* in the future ASM and new c++ features can be added to speed up copying */
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <retro_inline.h>
|
|
||||||
|
|
||||||
static INLINE void* memcpy16(void* dst,void* src,size_t size)
|
|
||||||
{
|
|
||||||
return memcpy(dst,src,size * 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memcpy32(void* dst,void* src,size_t size)
|
|
||||||
{
|
|
||||||
return memcpy(dst,src,size * 4);
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memcpy64(void* dst,void* src,size_t size)
|
|
||||||
{
|
|
||||||
return memcpy(dst,src,size * 8);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef USECPPSTDFILL
|
|
||||||
#include <algorithm>
|
|
||||||
|
|
||||||
static INLINE void* memset16(void* dst,uint16_t val,size_t size)
|
|
||||||
{
|
|
||||||
uint16_t* typedptr = (uint16_t*)dst;
|
|
||||||
std::fill(typedptr, typedptr + size, val);
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memset32(void* dst,uint32_t val,size_t size)
|
|
||||||
{
|
|
||||||
uint32_t* typedptr = (uint32_t*)dst;
|
|
||||||
std::fill(typedptr, typedptr + size, val);
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memset64(void* dst,uint64_t val,size_t size)
|
|
||||||
{
|
|
||||||
uint64_t* typedptr = (uint64_t*)dst;
|
|
||||||
std::fill(typedptr, typedptr + size, val);
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
|
|
||||||
static INLINE void* memset16(void* dst,uint16_t val,size_t size)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
uint16_t* typedptr = (uint16_t*)dst;
|
|
||||||
for(i = 0;i < size;i++)
|
|
||||||
typedptr[i] = val;
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memset32(void* dst,uint32_t val,size_t size)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
uint32_t* typedptr = (uint32_t*)dst;
|
|
||||||
for(i = 0;i < size;i++)
|
|
||||||
typedptr[i] = val;
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE void* memset64(void* dst,uint64_t val,size_t size)
|
|
||||||
{
|
|
||||||
size_t i;
|
|
||||||
uint64_t* typedptr = (uint64_t*)dst;
|
|
||||||
for(i = 0;i < size;i++)
|
|
||||||
typedptr[i] = val;
|
|
||||||
return dst;
|
|
||||||
}
|
|
||||||
#endif
|
|
@ -1,93 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (filters.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LIBRETRO_SDK_FILTERS_H
|
|
||||||
#define _LIBRETRO_SDK_FILTERS_H
|
|
||||||
|
|
||||||
/* for MSVC; should be benign under any circumstances */
|
|
||||||
#define _USE_MATH_DEFINES
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include <retro_inline.h>
|
|
||||||
#include <retro_miscellaneous.h>
|
|
||||||
|
|
||||||
static INLINE double sinc(double val)
|
|
||||||
{
|
|
||||||
if (fabs(val) < 0.00001)
|
|
||||||
return 1.0;
|
|
||||||
return sin(val) / val;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Paeth prediction filter. */
|
|
||||||
static INLINE int paeth(int a, int b, int c)
|
|
||||||
{
|
|
||||||
int p = a + b - c;
|
|
||||||
int pa = abs(p - a);
|
|
||||||
int pb = abs(p - b);
|
|
||||||
int pc = abs(p - c);
|
|
||||||
|
|
||||||
if (pa <= pb && pa <= pc)
|
|
||||||
return a;
|
|
||||||
else if (pb <= pc)
|
|
||||||
return b;
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Modified Bessel function of first order.
|
|
||||||
* Check Wiki for mathematical definition ... */
|
|
||||||
static INLINE double besseli0(double x)
|
|
||||||
{
|
|
||||||
unsigned i;
|
|
||||||
double sum = 0.0;
|
|
||||||
double factorial = 1.0;
|
|
||||||
double factorial_mult = 0.0;
|
|
||||||
double x_pow = 1.0;
|
|
||||||
double two_div_pow = 1.0;
|
|
||||||
double x_sqr = x * x;
|
|
||||||
|
|
||||||
/* Approximate. This is an infinite sum.
|
|
||||||
* Luckily, it converges rather fast. */
|
|
||||||
for (i = 0; i < 18; i++)
|
|
||||||
{
|
|
||||||
sum += x_pow * two_div_pow / (factorial * factorial);
|
|
||||||
|
|
||||||
factorial_mult += 1.0;
|
|
||||||
x_pow *= x_sqr;
|
|
||||||
two_div_pow *= 0.25;
|
|
||||||
factorial *= factorial_mult;
|
|
||||||
}
|
|
||||||
|
|
||||||
return sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE double kaiser_window_function(double index, double beta)
|
|
||||||
{
|
|
||||||
return besseli0(beta * sqrtf(1 - index * index));
|
|
||||||
}
|
|
||||||
|
|
||||||
static INLINE double lanzcos_window_function(double index)
|
|
||||||
{
|
|
||||||
return sinc(M_PI * index);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,79 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (libco.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LIBCO_H
|
|
||||||
#define LIBCO_H
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
|
|
||||||
#ifdef LIBCO_C
|
|
||||||
#ifdef LIBCO_MP
|
|
||||||
#define thread_local __thread
|
|
||||||
#else
|
|
||||||
#define thread_local
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
typedef void* cothread_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* co_active:
|
|
||||||
*
|
|
||||||
* Gets the currently active context.
|
|
||||||
*
|
|
||||||
* Returns: active context.
|
|
||||||
**/
|
|
||||||
cothread_t co_active(void);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* co_create:
|
|
||||||
* @int : stack size
|
|
||||||
* @funcptr : thread entry function callback
|
|
||||||
*
|
|
||||||
* Create a co_thread.
|
|
||||||
*
|
|
||||||
* Returns: cothread if successful, otherwise NULL.
|
|
||||||
*/
|
|
||||||
cothread_t co_create(unsigned int, void (*)(void));
|
|
||||||
|
|
||||||
/**
|
|
||||||
* co_delete:
|
|
||||||
* @cothread : cothread object
|
|
||||||
*
|
|
||||||
* Frees a co_thread.
|
|
||||||
*/
|
|
||||||
void co_delete(cothread_t cothread);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* co_switch:
|
|
||||||
* @cothread : cothread object to switch to
|
|
||||||
*
|
|
||||||
* Do a context switch to @cothread.
|
|
||||||
*/
|
|
||||||
void co_switch(cothread_t cothread);
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
/* ifndef LIBCO_H */
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load Diff
@ -1,187 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this libretro API header (libretro_dspfilter.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LIBRETRO_DSPFILTER_API_H__
|
|
||||||
#define LIBRETRO_DSPFILTER_API_H__
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
#define DSPFILTER_SIMD_SSE (1 << 0)
|
|
||||||
#define DSPFILTER_SIMD_SSE2 (1 << 1)
|
|
||||||
#define DSPFILTER_SIMD_VMX (1 << 2)
|
|
||||||
#define DSPFILTER_SIMD_VMX128 (1 << 3)
|
|
||||||
#define DSPFILTER_SIMD_AVX (1 << 4)
|
|
||||||
#define DSPFILTER_SIMD_NEON (1 << 5)
|
|
||||||
#define DSPFILTER_SIMD_SSE3 (1 << 6)
|
|
||||||
#define DSPFILTER_SIMD_SSSE3 (1 << 7)
|
|
||||||
#define DSPFILTER_SIMD_MMX (1 << 8)
|
|
||||||
#define DSPFILTER_SIMD_MMXEXT (1 << 9)
|
|
||||||
#define DSPFILTER_SIMD_SSE4 (1 << 10)
|
|
||||||
#define DSPFILTER_SIMD_SSE42 (1 << 11)
|
|
||||||
#define DSPFILTER_SIMD_AVX2 (1 << 12)
|
|
||||||
#define DSPFILTER_SIMD_VFPU (1 << 13)
|
|
||||||
#define DSPFILTER_SIMD_PS (1 << 14)
|
|
||||||
|
|
||||||
/* A bit-mask of all supported SIMD instruction sets.
|
|
||||||
* Allows an implementation to pick different
|
|
||||||
* dspfilter_implementation structs.
|
|
||||||
*/
|
|
||||||
typedef unsigned dspfilter_simd_mask_t;
|
|
||||||
|
|
||||||
/* Dynamic library endpoint. */
|
|
||||||
typedef const struct dspfilter_implementation *(
|
|
||||||
*dspfilter_get_implementation_t)(dspfilter_simd_mask_t mask);
|
|
||||||
|
|
||||||
/* The same SIMD mask argument is forwarded to create() callback
|
|
||||||
* as well to avoid having to keep lots of state around. */
|
|
||||||
const struct dspfilter_implementation *dspfilter_get_implementation(
|
|
||||||
dspfilter_simd_mask_t mask);
|
|
||||||
|
|
||||||
#define DSPFILTER_API_VERSION 1
|
|
||||||
|
|
||||||
struct dspfilter_info
|
|
||||||
{
|
|
||||||
/* Input sample rate that the DSP plugin receives. */
|
|
||||||
float input_rate;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dspfilter_output
|
|
||||||
{
|
|
||||||
/* The DSP plugin has to provide the buffering for the
|
|
||||||
* output samples or reuse the input buffer directly.
|
|
||||||
*
|
|
||||||
* The samples are laid out in interleaving order: LRLRLRLR
|
|
||||||
* The range of the samples are [-1.0, 1.0].
|
|
||||||
*
|
|
||||||
* It is not necessary to manually clip values. */
|
|
||||||
float *samples;
|
|
||||||
|
|
||||||
/* Frames which the DSP plugin outputted for the current process.
|
|
||||||
*
|
|
||||||
* One frame is here defined as a combined sample of
|
|
||||||
* left and right channels.
|
|
||||||
*
|
|
||||||
* (I.e. 44.1kHz, 16bit stereo will have
|
|
||||||
* 88.2k samples/sec and 44.1k frames/sec.)
|
|
||||||
*/
|
|
||||||
unsigned frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dspfilter_input
|
|
||||||
{
|
|
||||||
/* Input data for the DSP. The samples are interleaved in order: LRLRLRLR
|
|
||||||
*
|
|
||||||
* It is valid for a DSP plug to use this buffer for output as long as
|
|
||||||
* the output size is less or equal to the input.
|
|
||||||
*
|
|
||||||
* This is useful for filters which can output one sample for each
|
|
||||||
* input sample and do not need to maintain its own buffers.
|
|
||||||
*
|
|
||||||
* Block based filters must provide their own buffering scheme.
|
|
||||||
*
|
|
||||||
* The input size is not bound, but it can be safely assumed that it
|
|
||||||
* will not exceed ~100ms worth of audio at a time. */
|
|
||||||
float *samples;
|
|
||||||
|
|
||||||
/* Number of frames for input data.
|
|
||||||
* One frame is here defined as a combined sample of
|
|
||||||
* left and right channels.
|
|
||||||
*
|
|
||||||
* (I.e. 44.1kHz, 16bit stereo will have
|
|
||||||
* 88.2k samples/sec and 44.1k frames/sec.)
|
|
||||||
*/
|
|
||||||
unsigned frames;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Returns true if config key was found. Otherwise,
|
|
||||||
* returns false, and sets value to default value.
|
|
||||||
*/
|
|
||||||
typedef int (*dspfilter_config_get_float_t)(void *userdata,
|
|
||||||
const char *key, float *value, float default_value);
|
|
||||||
|
|
||||||
typedef int (*dspfilter_config_get_int_t)(void *userdata,
|
|
||||||
const char *key, int *value, int default_value);
|
|
||||||
|
|
||||||
/* Allocates an array with values. free() with dspfilter_config_free_t. */
|
|
||||||
typedef int (*dspfilter_config_get_float_array_t)(void *userdata,
|
|
||||||
const char *key, float **values, unsigned *out_num_values,
|
|
||||||
const float *default_values, unsigned num_default_values);
|
|
||||||
|
|
||||||
typedef int (*dspfilter_config_get_int_array_t)(void *userdata,
|
|
||||||
const char *key, int **values, unsigned *out_num_values,
|
|
||||||
const int *default_values, unsigned num_default_values);
|
|
||||||
|
|
||||||
typedef int (*dspfilter_config_get_string_t)(void *userdata,
|
|
||||||
const char *key, char **output, const char *default_output);
|
|
||||||
|
|
||||||
/* Calls free() in host runtime. Sometimes needed on Windows.
|
|
||||||
* free() on NULL is fine. */
|
|
||||||
typedef void (*dspfilter_config_free_t)(void *ptr);
|
|
||||||
|
|
||||||
struct dspfilter_config
|
|
||||||
{
|
|
||||||
dspfilter_config_get_float_t get_float;
|
|
||||||
dspfilter_config_get_int_t get_int;
|
|
||||||
|
|
||||||
dspfilter_config_get_float_array_t get_float_array;
|
|
||||||
dspfilter_config_get_int_array_t get_int_array;
|
|
||||||
|
|
||||||
dspfilter_config_get_string_t get_string;
|
|
||||||
/* Avoid problems where DSP plug and host are
|
|
||||||
* linked against different C runtimes. */
|
|
||||||
dspfilter_config_free_t free;
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Creates a handle of the plugin. Returns NULL if failed. */
|
|
||||||
typedef void *(*dspfilter_init_t)(const struct dspfilter_info *info,
|
|
||||||
const struct dspfilter_config *config, void *userdata);
|
|
||||||
|
|
||||||
/* Frees the handle. */
|
|
||||||
typedef void (*dspfilter_free_t)(void *data);
|
|
||||||
|
|
||||||
/* Processes input data.
|
|
||||||
* The plugin is allowed to return variable sizes for output data. */
|
|
||||||
typedef void (*dspfilter_process_t)(void *data,
|
|
||||||
struct dspfilter_output *output, const struct dspfilter_input *input);
|
|
||||||
|
|
||||||
struct dspfilter_implementation
|
|
||||||
{
|
|
||||||
dspfilter_init_t init;
|
|
||||||
dspfilter_process_t process;
|
|
||||||
dspfilter_free_t free;
|
|
||||||
|
|
||||||
/* Must be DSPFILTER_API_VERSION */
|
|
||||||
unsigned api_version;
|
|
||||||
|
|
||||||
/* Human readable identifier of implementation. */
|
|
||||||
const char *ident;
|
|
||||||
|
|
||||||
/* Computer-friendly short version of ident.
|
|
||||||
* Lower case, no spaces and special characters, etc. */
|
|
||||||
const char *short_ident;
|
|
||||||
};
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,398 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this libretro API header (libretro_vulkan.h)
|
|
||||||
* ---------------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef LIBRETRO_VULKAN_H__
|
|
||||||
#define LIBRETRO_VULKAN_H__
|
|
||||||
|
|
||||||
#include <libretro.h>
|
|
||||||
#include <vulkan/vulkan.h>
|
|
||||||
|
|
||||||
#define RETRO_HW_RENDER_INTERFACE_VULKAN_VERSION 5
|
|
||||||
#define RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN_VERSION 1
|
|
||||||
|
|
||||||
struct retro_vulkan_image
|
|
||||||
{
|
|
||||||
VkImageView image_view;
|
|
||||||
VkImageLayout image_layout;
|
|
||||||
VkImageViewCreateInfo create_info;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*retro_vulkan_set_image_t)(void *handle,
|
|
||||||
const struct retro_vulkan_image *image,
|
|
||||||
uint32_t num_semaphores,
|
|
||||||
const VkSemaphore *semaphores,
|
|
||||||
uint32_t src_queue_family);
|
|
||||||
|
|
||||||
typedef uint32_t (*retro_vulkan_get_sync_index_t)(void *handle);
|
|
||||||
typedef uint32_t (*retro_vulkan_get_sync_index_mask_t)(void *handle);
|
|
||||||
typedef void (*retro_vulkan_set_command_buffers_t)(void *handle,
|
|
||||||
uint32_t num_cmd,
|
|
||||||
const VkCommandBuffer *cmd);
|
|
||||||
typedef void (*retro_vulkan_wait_sync_index_t)(void *handle);
|
|
||||||
typedef void (*retro_vulkan_lock_queue_t)(void *handle);
|
|
||||||
typedef void (*retro_vulkan_unlock_queue_t)(void *handle);
|
|
||||||
typedef void (*retro_vulkan_set_signal_semaphore_t)(void *handle, VkSemaphore semaphore);
|
|
||||||
|
|
||||||
typedef const VkApplicationInfo *(*retro_vulkan_get_application_info_t)(void);
|
|
||||||
|
|
||||||
struct retro_vulkan_context
|
|
||||||
{
|
|
||||||
VkPhysicalDevice gpu;
|
|
||||||
VkDevice device;
|
|
||||||
VkQueue queue;
|
|
||||||
uint32_t queue_family_index;
|
|
||||||
VkQueue presentation_queue;
|
|
||||||
uint32_t presentation_queue_family_index;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef bool (*retro_vulkan_create_device_t)(
|
|
||||||
struct retro_vulkan_context *context,
|
|
||||||
VkInstance instance,
|
|
||||||
VkPhysicalDevice gpu,
|
|
||||||
VkSurfaceKHR surface,
|
|
||||||
PFN_vkGetInstanceProcAddr get_instance_proc_addr,
|
|
||||||
const char **required_device_extensions,
|
|
||||||
unsigned num_required_device_extensions,
|
|
||||||
const char **required_device_layers,
|
|
||||||
unsigned num_required_device_layers,
|
|
||||||
const VkPhysicalDeviceFeatures *required_features);
|
|
||||||
|
|
||||||
typedef void (*retro_vulkan_destroy_device_t)(void);
|
|
||||||
|
|
||||||
/* Note on thread safety:
|
|
||||||
* The Vulkan API is heavily designed around multi-threading, and
|
|
||||||
* the libretro interface for it should also be threading friendly.
|
|
||||||
* A core should be able to build command buffers and submit
|
|
||||||
* command buffers to the GPU from any thread.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct retro_hw_render_context_negotiation_interface_vulkan
|
|
||||||
{
|
|
||||||
/* Must be set to RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN. */
|
|
||||||
enum retro_hw_render_context_negotiation_interface_type interface_type;
|
|
||||||
/* Must be set to RETRO_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_VULKAN_VERSION. */
|
|
||||||
unsigned interface_version;
|
|
||||||
|
|
||||||
/* If non-NULL, returns a VkApplicationInfo struct that the frontend can use instead of
|
|
||||||
* its "default" application info.
|
|
||||||
*/
|
|
||||||
retro_vulkan_get_application_info_t get_application_info;
|
|
||||||
|
|
||||||
/* If non-NULL, the libretro core will choose one or more physical devices,
|
|
||||||
* create one or more logical devices and create one or more queues.
|
|
||||||
* The core must prepare a designated PhysicalDevice, Device, Queue and queue family index
|
|
||||||
* which the frontend will use for its internal operation.
|
|
||||||
*
|
|
||||||
* If gpu is not VK_NULL_HANDLE, the physical device provided to the frontend must be this PhysicalDevice.
|
|
||||||
* The core is still free to use other physical devices.
|
|
||||||
*
|
|
||||||
* The frontend will request certain extensions and layers for a device which is created.
|
|
||||||
* The core must ensure that the queue and queue_family_index support GRAPHICS and COMPUTE.
|
|
||||||
*
|
|
||||||
* If surface is not VK_NULL_HANDLE, the core must consider presentation when creating the queues.
|
|
||||||
* If presentation to "surface" is supported on the queue, presentation_queue must be equal to queue.
|
|
||||||
* If not, a second queue must be provided in presentation_queue and presentation_queue_index.
|
|
||||||
* If surface is not VK_NULL_HANDLE, the instance from frontend will have been created with supported for
|
|
||||||
* VK_KHR_surface extension.
|
|
||||||
*
|
|
||||||
* The core is free to set its own queue priorities.
|
|
||||||
* Device provided to frontend is owned by the frontend, but any additional device resources must be freed by core
|
|
||||||
* in destroy_device callback.
|
|
||||||
*
|
|
||||||
* If this function returns true, a PhysicalDevice, Device and Queues are initialized.
|
|
||||||
* If false, none of the above have been initialized and the frontend will attempt
|
|
||||||
* to fallback to "default" device creation, as if this function was never called.
|
|
||||||
*/
|
|
||||||
retro_vulkan_create_device_t create_device;
|
|
||||||
|
|
||||||
/* If non-NULL, this callback is called similar to context_destroy for HW_RENDER_INTERFACE.
|
|
||||||
* However, it will be called even if context_reset was not called.
|
|
||||||
* This can happen if the context never succeeds in being created.
|
|
||||||
* destroy_device will always be called before the VkInstance
|
|
||||||
* of the frontend is destroyed if create_device was called successfully so that the core has a chance of
|
|
||||||
* tearing down its own device resources.
|
|
||||||
*
|
|
||||||
* Only auxillary resources should be freed here, i.e. resources which are not part of retro_vulkan_context.
|
|
||||||
*/
|
|
||||||
retro_vulkan_destroy_device_t destroy_device;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct retro_hw_render_interface_vulkan
|
|
||||||
{
|
|
||||||
/* Must be set to RETRO_HW_RENDER_INTERFACE_VULKAN. */
|
|
||||||
enum retro_hw_render_interface_type interface_type;
|
|
||||||
/* Must be set to RETRO_HW_RENDER_INTERFACE_VULKAN_VERSION. */
|
|
||||||
unsigned interface_version;
|
|
||||||
|
|
||||||
/* Opaque handle to the Vulkan backend in the frontend
|
|
||||||
* which must be passed along to all function pointers
|
|
||||||
* in this interface.
|
|
||||||
*
|
|
||||||
* The rationale for including a handle here (which libretro v1
|
|
||||||
* doesn't currently do in general) is:
|
|
||||||
*
|
|
||||||
* - Vulkan cores should be able to be freely threaded without lots of fuzz.
|
|
||||||
* This would break frontends which currently rely on TLS
|
|
||||||
* to deal with multiple cores loaded at the same time.
|
|
||||||
* - Fixing this in general is TODO for an eventual libretro v2.
|
|
||||||
*/
|
|
||||||
void *handle;
|
|
||||||
|
|
||||||
/* The Vulkan instance the context is using. */
|
|
||||||
VkInstance instance;
|
|
||||||
/* The physical device used. */
|
|
||||||
VkPhysicalDevice gpu;
|
|
||||||
/* The logical device used. */
|
|
||||||
VkDevice device;
|
|
||||||
|
|
||||||
/* Allows a core to fetch all its needed symbols without having to link
|
|
||||||
* against the loader itself. */
|
|
||||||
PFN_vkGetDeviceProcAddr get_device_proc_addr;
|
|
||||||
PFN_vkGetInstanceProcAddr get_instance_proc_addr;
|
|
||||||
|
|
||||||
/* The queue the core must use to submit data.
|
|
||||||
* This queue and index must remain constant throughout the lifetime
|
|
||||||
* of the context.
|
|
||||||
*
|
|
||||||
* This queue will be the queue that supports graphics and compute
|
|
||||||
* if the device supports compute.
|
|
||||||
*/
|
|
||||||
VkQueue queue;
|
|
||||||
unsigned queue_index;
|
|
||||||
|
|
||||||
/* Before calling retro_video_refresh_t with RETRO_HW_FRAME_BUFFER_VALID,
|
|
||||||
* set which image to use for this frame.
|
|
||||||
*
|
|
||||||
* If num_semaphores is non-zero, the frontend will wait for the
|
|
||||||
* semaphores provided to be signaled before using the results further
|
|
||||||
* in the pipeline.
|
|
||||||
*
|
|
||||||
* Semaphores provided by a single call to set_image will only be
|
|
||||||
* waited for once (waiting for a semaphore resets it).
|
|
||||||
* E.g. set_image, video_refresh, and then another
|
|
||||||
* video_refresh without set_image,
|
|
||||||
* but same image will only wait for semaphores once.
|
|
||||||
*
|
|
||||||
* For this reason, ownership transfer will only occur if semaphores
|
|
||||||
* are waited on for a particular frame in the frontend.
|
|
||||||
*
|
|
||||||
* Using semaphores is optional for synchronization purposes,
|
|
||||||
* but if not using
|
|
||||||
* semaphores, an image memory barrier in vkCmdPipelineBarrier
|
|
||||||
* should be used in the graphics_queue.
|
|
||||||
* Example:
|
|
||||||
*
|
|
||||||
* vkCmdPipelineBarrier(cmd,
|
|
||||||
* srcStageMask = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
|
|
||||||
* dstStageMask = VK_PIPELINE_STAGE_FRAGMENT_SHADER_BIT,
|
|
||||||
* image_memory_barrier = {
|
|
||||||
* srcAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT,
|
|
||||||
* dstAccessMask = VK_ACCESS_SHADER_READ_BIT,
|
|
||||||
* });
|
|
||||||
*
|
|
||||||
* The use of pipeline barriers instead of semaphores is encouraged
|
|
||||||
* as it is simpler and more fine-grained. A layout transition
|
|
||||||
* must generally happen anyways which requires a
|
|
||||||
* pipeline barrier.
|
|
||||||
*
|
|
||||||
* The image passed to set_image must have imageUsage flags set to at least
|
|
||||||
* VK_IMAGE_USAGE_TRANSFER_SRC_BIT and VK_IMAGE_USAGE_SAMPLED_BIT.
|
|
||||||
* The core will naturally want to use flags such as
|
|
||||||
* VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT and/or
|
|
||||||
* VK_IMAGE_USAGE_TRANSFER_DST_BIT depending
|
|
||||||
* on how the final image is created.
|
|
||||||
*
|
|
||||||
* The image must also have been created with MUTABLE_FORMAT bit set if
|
|
||||||
* 8-bit formats are used, so that the frontend can reinterpret sRGB
|
|
||||||
* formats as it sees fit.
|
|
||||||
*
|
|
||||||
* Images passed to set_image should be created with TILING_OPTIMAL.
|
|
||||||
* The image layout should be transitioned to either
|
|
||||||
* VK_IMAGE_LAYOUT_GENERIC or VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL.
|
|
||||||
* The actual image layout used must be set in image_layout.
|
|
||||||
*
|
|
||||||
* The image must be a 2D texture which may or not be layered
|
|
||||||
* and/or mipmapped.
|
|
||||||
*
|
|
||||||
* The image must be suitable for linear sampling.
|
|
||||||
* While the image_view is typically the only field used,
|
|
||||||
* the frontend may want to reinterpret the texture as sRGB vs.
|
|
||||||
* non-sRGB for example so the VkImageViewCreateInfo used to
|
|
||||||
* create the image view must also be passed in.
|
|
||||||
*
|
|
||||||
* The data in the pointer to the image struct will not be copied
|
|
||||||
* as the pNext field in create_info cannot be reliably deep-copied.
|
|
||||||
* The image pointer passed to set_image must be valid until
|
|
||||||
* retro_video_refresh_t has returned.
|
|
||||||
*
|
|
||||||
* If frame duping is used when passing NULL to retro_video_refresh_t,
|
|
||||||
* the frontend is free to either use the latest image passed to
|
|
||||||
* set_image or reuse the older pointer passed to set_image the
|
|
||||||
* frame RETRO_HW_FRAME_BUFFER_VALID was last used.
|
|
||||||
*
|
|
||||||
* Essentially, the lifetime of the pointer passed to
|
|
||||||
* retro_video_refresh_t should be extended if frame duping is used
|
|
||||||
* so that the frontend can reuse the older pointer.
|
|
||||||
*
|
|
||||||
* The image itself however, must not be touched by the core until
|
|
||||||
* wait_sync_index has been completed later. The frontend may perform
|
|
||||||
* layout transitions on the image, so even read-only access is not defined.
|
|
||||||
* The exception to read-only rule is if GENERAL layout is used for the image.
|
|
||||||
* In this case, the frontend is not allowed to perform any layout transitions,
|
|
||||||
* so concurrent reads from core and frontend are allowed.
|
|
||||||
*
|
|
||||||
* If frame duping is used, or if set_command_buffers is used,
|
|
||||||
* the frontend will not wait for any semaphores.
|
|
||||||
*
|
|
||||||
* The src_queue_family is used to specify which queue family
|
|
||||||
* the image is currently owned by. If using multiple queue families
|
|
||||||
* (e.g. async compute), the frontend will need to acquire ownership of the
|
|
||||||
* image before rendering with it and release the image afterwards.
|
|
||||||
*
|
|
||||||
* If src_queue_family is equal to the queue family (queue_index),
|
|
||||||
* no ownership transfer will occur.
|
|
||||||
* Similarly, if src_queue_family is VK_QUEUE_FAMILY_IGNORED,
|
|
||||||
* no ownership transfer will occur.
|
|
||||||
*
|
|
||||||
* The frontend will always release ownership back to src_queue_family.
|
|
||||||
* Waiting for frontend to complete with wait_sync_index() ensures that
|
|
||||||
* the frontend has released ownership back to the application.
|
|
||||||
* Note that in Vulkan, transfering ownership is a two-part process.
|
|
||||||
*
|
|
||||||
* Example frame:
|
|
||||||
* - core releases ownership from src_queue_index to queue_index with VkImageMemoryBarrier.
|
|
||||||
* - core calls set_image with src_queue_index.
|
|
||||||
* - Frontend will acquire the image with src_queue_index -> queue_index as well, completing the ownership transfer.
|
|
||||||
* - Frontend renders the frame.
|
|
||||||
* - Frontend releases ownership with queue_index -> src_queue_index.
|
|
||||||
* - Next time image is used, core must acquire ownership from queue_index ...
|
|
||||||
*
|
|
||||||
* Since the frontend releases ownership, we cannot necessarily dupe the frame because
|
|
||||||
* the core needs to make the roundtrip of ownership transfer.
|
|
||||||
*/
|
|
||||||
retro_vulkan_set_image_t set_image;
|
|
||||||
|
|
||||||
/* Get the current sync index for this frame which is obtained in
|
|
||||||
* frontend by calling e.g. vkAcquireNextImageKHR before calling
|
|
||||||
* retro_run().
|
|
||||||
*
|
|
||||||
* This index will correspond to which swapchain buffer is currently
|
|
||||||
* the active one.
|
|
||||||
*
|
|
||||||
* Knowing this index is very useful for maintaining safe asynchronous CPU
|
|
||||||
* and GPU operation without stalling.
|
|
||||||
*
|
|
||||||
* The common pattern for synchronization is to receive fences when
|
|
||||||
* submitting command buffers to Vulkan (vkQueueSubmit) and add this fence
|
|
||||||
* to a list of fences for frame number get_sync_index().
|
|
||||||
*
|
|
||||||
* Next time we receive the same get_sync_index(), we can wait for the
|
|
||||||
* fences from before, which will usually return immediately as the
|
|
||||||
* frontend will generally also avoid letting the GPU run ahead too much.
|
|
||||||
*
|
|
||||||
* After the fence has signaled, we know that the GPU has completed all
|
|
||||||
* GPU work related to work submitted in the frame we last saw get_sync_index().
|
|
||||||
*
|
|
||||||
* This means we can safely reuse or free resources allocated in this frame.
|
|
||||||
*
|
|
||||||
* In theory, even if we wait for the fences correctly, it is not technically
|
|
||||||
* safe to write to the image we earlier passed to the frontend since we're
|
|
||||||
* not waiting for the frontend GPU jobs to complete.
|
|
||||||
*
|
|
||||||
* The frontend will guarantee that the appropriate pipeline barrier
|
|
||||||
* in graphics_queue has been used such that
|
|
||||||
* VK_PIPELINE_STAGE_COLOR_ATTACHMENT_OUTPUT_BIT cannot
|
|
||||||
* start until the frontend is done with the image.
|
|
||||||
*/
|
|
||||||
retro_vulkan_get_sync_index_t get_sync_index;
|
|
||||||
|
|
||||||
/* Returns a bitmask of how many swapchain images we currently have
|
|
||||||
* in the frontend.
|
|
||||||
*
|
|
||||||
* If bit #N is set in the return value, get_sync_index can return N.
|
|
||||||
* Knowing this value is useful for preallocating per-frame management
|
|
||||||
* structures ahead of time.
|
|
||||||
*
|
|
||||||
* While this value will typically remain constant throughout the
|
|
||||||
* applications lifecycle, it may for example change if the frontend
|
|
||||||
* suddently changes fullscreen state and/or latency.
|
|
||||||
*
|
|
||||||
* If this value ever changes, it is safe to assume that the device
|
|
||||||
* is completely idle and all synchronization objects can be deleted
|
|
||||||
* right away as desired.
|
|
||||||
*/
|
|
||||||
retro_vulkan_get_sync_index_mask_t get_sync_index_mask;
|
|
||||||
|
|
||||||
/* Instead of submitting the command buffer to the queue first, the core
|
|
||||||
* can pass along its command buffer to the frontend, and the frontend
|
|
||||||
* will submit the command buffer together with the frontends command buffers.
|
|
||||||
*
|
|
||||||
* This has the advantage that the overhead of vkQueueSubmit can be
|
|
||||||
* amortized into a single call. For this mode, semaphores in set_image
|
|
||||||
* will be ignored, so vkCmdPipelineBarrier must be used to synchronize
|
|
||||||
* the core and frontend.
|
|
||||||
*
|
|
||||||
* The command buffers in set_command_buffers are only executed once,
|
|
||||||
* even if frame duping is used.
|
|
||||||
*
|
|
||||||
* If frame duping is used, set_image should be used for the frames
|
|
||||||
* which should be duped instead.
|
|
||||||
*
|
|
||||||
* Command buffers passed to the frontend with set_command_buffers
|
|
||||||
* must not actually be submitted to the GPU until retro_video_refresh_t
|
|
||||||
* is called.
|
|
||||||
*
|
|
||||||
* The frontend must submit the command buffer before submitting any
|
|
||||||
* other command buffers provided by set_command_buffers. */
|
|
||||||
retro_vulkan_set_command_buffers_t set_command_buffers;
|
|
||||||
|
|
||||||
/* Waits on CPU for device activity for the current sync index to complete.
|
|
||||||
* This is useful since the core will not have a relevant fence to sync with
|
|
||||||
* when the frontend is submitting the command buffers. */
|
|
||||||
retro_vulkan_wait_sync_index_t wait_sync_index;
|
|
||||||
|
|
||||||
/* If the core submits command buffers itself to any of the queues provided
|
|
||||||
* in this interface, the core must lock and unlock the frontend from
|
|
||||||
* racing on the VkQueue.
|
|
||||||
*
|
|
||||||
* Queue submission can happen on any thread.
|
|
||||||
* Even if queue submission happens on the same thread as retro_run(),
|
|
||||||
* the lock/unlock functions must still be called.
|
|
||||||
*
|
|
||||||
* NOTE: Queue submissions are heavy-weight. */
|
|
||||||
retro_vulkan_lock_queue_t lock_queue;
|
|
||||||
retro_vulkan_unlock_queue_t unlock_queue;
|
|
||||||
|
|
||||||
/* Sets a semaphore which is signaled when the image in set_image can safely be reused.
|
|
||||||
* The semaphore is consumed next call to retro_video_refresh_t.
|
|
||||||
* The semaphore will be signalled even for duped frames.
|
|
||||||
* The semaphore will be signalled only once, so set_signal_semaphore should be called every frame.
|
|
||||||
* The semaphore may be VK_NULL_HANDLE, which disables semaphore signalling for next call to retro_video_refresh_t.
|
|
||||||
*
|
|
||||||
* This is mostly useful to support use cases where you're rendering to a single image that
|
|
||||||
* is recycled in a ping-pong fashion with the frontend to save memory (but potentially less throughput).
|
|
||||||
*/
|
|
||||||
retro_vulkan_set_signal_semaphore_t set_signal_semaphore;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (memalign.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _LIBRETRO_MEMALIGN_H
|
|
||||||
#define _LIBRETRO_MEMALIGN_H
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
void *memalign_alloc(size_t boundary, size_t size);
|
|
||||||
|
|
||||||
void *memalign_alloc_aligned(size_t size);
|
|
||||||
|
|
||||||
void memalign_free(void *ptr);
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,36 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (retro_assert.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RETRO_ASSERT_H
|
|
||||||
#define __RETRO_ASSERT_H
|
|
||||||
|
|
||||||
#include <assert.h>
|
|
||||||
|
|
||||||
#ifdef RARCH_INTERNAL
|
|
||||||
#define retro_assert(cond) do { \
|
|
||||||
if (!(cond)) { printf("Assertion failed at %s:%d.\n", __FILE__, __LINE__); abort(); } \
|
|
||||||
} while(0)
|
|
||||||
#else
|
|
||||||
#define retro_assert(cond) assert(cond)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,107 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (retro_dirent.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RETRO_DIRENT_H
|
|
||||||
#define __RETRO_DIRENT_H
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
#include <retro_miscellaneous.h>
|
|
||||||
|
|
||||||
#include <boolean.h>
|
|
||||||
|
|
||||||
#if defined(_WIN32)
|
|
||||||
# ifdef _MSC_VER
|
|
||||||
# define setmode _setmode
|
|
||||||
# endif
|
|
||||||
# ifdef _XBOX
|
|
||||||
# include <xtl.h>
|
|
||||||
# define INVALID_FILE_ATTRIBUTES -1
|
|
||||||
# else
|
|
||||||
# include <io.h>
|
|
||||||
# include <fcntl.h>
|
|
||||||
# include <direct.h>
|
|
||||||
# include <windows.h>
|
|
||||||
# endif
|
|
||||||
#elif defined(VITA)
|
|
||||||
# include <psp2/io/fcntl.h>
|
|
||||||
# include <psp2/io/dirent.h>
|
|
||||||
#else
|
|
||||||
# if defined(PSP)
|
|
||||||
# include <pspiofilemgr.h>
|
|
||||||
# endif
|
|
||||||
# include <sys/types.h>
|
|
||||||
# include <sys/stat.h>
|
|
||||||
# include <dirent.h>
|
|
||||||
# include <unistd.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef __CELLOS_LV2__
|
|
||||||
#include <cell/cell_fs.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
struct RDIR
|
|
||||||
{
|
|
||||||
#if defined(_WIN32)
|
|
||||||
WIN32_FIND_DATA entry;
|
|
||||||
HANDLE directory;
|
|
||||||
bool next;
|
|
||||||
char path[PATH_MAX_LENGTH];
|
|
||||||
#elif defined(VITA) || defined(PSP)
|
|
||||||
SceUID directory;
|
|
||||||
SceIoDirent entry;
|
|
||||||
#elif defined(__CELLOS_LV2__)
|
|
||||||
CellFsErrno error;
|
|
||||||
int directory;
|
|
||||||
CellFsDirent entry;
|
|
||||||
#else
|
|
||||||
DIR *directory;
|
|
||||||
const struct dirent *entry;
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
struct RDIR *retro_opendir(const char *name);
|
|
||||||
|
|
||||||
int retro_readdir(struct RDIR *rdir);
|
|
||||||
|
|
||||||
bool retro_dirent_error(struct RDIR *rdir);
|
|
||||||
|
|
||||||
const char *retro_dirent_get_name(struct RDIR *rdir);
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* retro_dirent_is_dir:
|
|
||||||
* @rdir : pointer to the directory entry.
|
|
||||||
*
|
|
||||||
* Is the directory listing entry a directory?
|
|
||||||
*
|
|
||||||
* Returns: true if directory listing entry is
|
|
||||||
* a directory, false if not.
|
|
||||||
*/
|
|
||||||
bool retro_dirent_is_dir(struct RDIR *rdir, const char *path);
|
|
||||||
|
|
||||||
void retro_closedir(struct RDIR *rdir);
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,246 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (retro_endianness.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIBRETRO_SDK_ENDIANNESS_H
|
|
||||||
#define __LIBRETRO_SDK_ENDIANNESS_H
|
|
||||||
|
|
||||||
#include <retro_inline.h>
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
|
|
||||||
#if defined(_MSC_VER)
|
|
||||||
#define SWAP16 _byteswap_ushort
|
|
||||||
#define SWAP32 _byteswap_ulong
|
|
||||||
#else
|
|
||||||
#define SWAP16(x) ((uint16_t)( \
|
|
||||||
(((uint16_t)(x) & 0x00ff) << 8) | \
|
|
||||||
(((uint16_t)(x) & 0xff00) >> 8) \
|
|
||||||
))
|
|
||||||
#define SWAP32(x) ((uint32_t)( \
|
|
||||||
(((uint32_t)(x) & 0x000000ff) << 24) | \
|
|
||||||
(((uint32_t)(x) & 0x0000ff00) << 8) | \
|
|
||||||
(((uint32_t)(x) & 0x00ff0000) >> 8) | \
|
|
||||||
(((uint32_t)(x) & 0xff000000) >> 24) \
|
|
||||||
))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define SWAP64(val) \
|
|
||||||
((((uint64_t)(val) & 0x00000000000000ffULL) << 56) \
|
|
||||||
| (((uint64_t)(val) & 0x000000000000ff00ULL) << 40) \
|
|
||||||
| (((uint64_t)(val) & 0x0000000000ff0000ULL) << 24) \
|
|
||||||
| (((uint64_t)(val) & 0x00000000ff000000ULL) << 8) \
|
|
||||||
| (((uint64_t)(val) & 0x000000ff00000000ULL) >> 8) \
|
|
||||||
| (((uint64_t)(val) & 0x0000ff0000000000ULL) >> 24) \
|
|
||||||
| (((uint64_t)(val) & 0x00ff000000000000ULL) >> 40) \
|
|
||||||
| (((uint64_t)(val) & 0xff00000000000000ULL) >> 56))
|
|
||||||
|
|
||||||
/**
|
|
||||||
* is_little_endian:
|
|
||||||
*
|
|
||||||
* Checks if the system is little endian or big-endian.
|
|
||||||
*
|
|
||||||
* Returns: greater than 0 if little-endian,
|
|
||||||
* otherwise big-endian.
|
|
||||||
**/
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define is_little_endian() (0)
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define is_little_endian() (1)
|
|
||||||
#else
|
|
||||||
static INLINE uint8_t is_little_endian(void)
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
uint16_t x;
|
|
||||||
uint8_t y[2];
|
|
||||||
} u;
|
|
||||||
|
|
||||||
u.x = 1;
|
|
||||||
return u.y[0];
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_big64:
|
|
||||||
* @val : unsigned 64-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 64-bit value if system is big-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is big-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_big64(val) (SWAP64(val))
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_big64(val) (val)
|
|
||||||
#else
|
|
||||||
static INLINE uint64_t swap_if_big64(uint64_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return val;
|
|
||||||
return SWAP64(val);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_big32:
|
|
||||||
* @val : unsigned 32-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 32-bit value if system is big-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is big-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_big32(val) (SWAP32(val))
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_big32(val) (val)
|
|
||||||
#else
|
|
||||||
static INLINE uint32_t swap_if_big32(uint32_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return val;
|
|
||||||
return SWAP32(val);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_little64:
|
|
||||||
* @val : unsigned 64-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 64-bit value if system is little-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is little-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_little64(val) (val)
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_little64(val) (SWAP64(val))
|
|
||||||
#else
|
|
||||||
static INLINE uint64_t swap_if_little64(uint64_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return SWAP64(val);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_little32:
|
|
||||||
* @val : unsigned 32-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 32-bit value if system is little-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is little-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_little32(val) (val)
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_little32(val) (SWAP32(val))
|
|
||||||
#else
|
|
||||||
static INLINE uint32_t swap_if_little32(uint32_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return SWAP32(val);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_big16:
|
|
||||||
* @val : unsigned 16-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 16-bit value if system is big-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is big-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_big16(val) (SWAP16(val))
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_big16(val) (val)
|
|
||||||
#else
|
|
||||||
static INLINE uint16_t swap_if_big16(uint16_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return val;
|
|
||||||
return SWAP16(val);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* swap_if_little16:
|
|
||||||
* @val : unsigned 16-bit value
|
|
||||||
*
|
|
||||||
* Byteswap unsigned 16-bit value if system is little-endian.
|
|
||||||
*
|
|
||||||
* Returns: Byteswapped value in case system is little-endian,
|
|
||||||
* otherwise returns same value.
|
|
||||||
**/
|
|
||||||
|
|
||||||
#if defined(MSB_FIRST)
|
|
||||||
#define swap_if_little16(val) (val)
|
|
||||||
#elif defined(__x86_64) || defined(__i386) || defined(_M_IX86) || defined(_M_X64)
|
|
||||||
#define swap_if_little16(val) (SWAP16(val))
|
|
||||||
#else
|
|
||||||
static INLINE uint16_t swap_if_little16(uint16_t val)
|
|
||||||
{
|
|
||||||
if (is_little_endian())
|
|
||||||
return SWAP16(val);
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/**
|
|
||||||
* store32be:
|
|
||||||
* @addr : pointer to unsigned 32-bit buffer
|
|
||||||
* @data : unsigned 32-bit value to write
|
|
||||||
*
|
|
||||||
* Write data to address. Endian-safe. Byteswaps the data
|
|
||||||
* first if necessary before storing it.
|
|
||||||
**/
|
|
||||||
static INLINE void store32be(uint32_t *addr, uint32_t data)
|
|
||||||
{
|
|
||||||
*addr = swap_if_little32(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* load32be:
|
|
||||||
* @addr : pointer to unsigned 32-bit buffer
|
|
||||||
*
|
|
||||||
* Load value from address. Endian-safe.
|
|
||||||
*
|
|
||||||
* Returns: value from address, byte-swapped if necessary.
|
|
||||||
**/
|
|
||||||
static INLINE uint32_t load32be(const uint32_t *addr)
|
|
||||||
{
|
|
||||||
return swap_if_little32(*addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,78 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (retro_environment.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __LIBRETRO_SDK_ENVIRONMENT_H
|
|
||||||
#define __LIBRETRO_SDK_ENVIRONMENT_H
|
|
||||||
|
|
||||||
/*
|
|
||||||
This file is designed to create a normalized environment for compiling
|
|
||||||
libretro-common's private implementations, or any other sources which might
|
|
||||||
enjoy use of it's environment (RetroArch for instance).
|
|
||||||
This should be an elaborately crafted environment so that sources don't
|
|
||||||
need to be full of platform-specific workarounds.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#if defined (__cplusplus)
|
|
||||||
#if 0
|
|
||||||
printf("This is C++, version %d.\n", __cplusplus);
|
|
||||||
#endif
|
|
||||||
/* The expected values would be
|
|
||||||
* 199711L, for ISO/IEC 14882:1998 or 14882:2003
|
|
||||||
*/
|
|
||||||
|
|
||||||
#elif defined(__STDC__)
|
|
||||||
/* This is standard C. */
|
|
||||||
|
|
||||||
#if (__STDC__ == 1)
|
|
||||||
/* The implementation is ISO-conforming. */
|
|
||||||
#define __STDC_ISO__
|
|
||||||
#else
|
|
||||||
/* The implementation is not ISO-conforming. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__STDC_VERSION__)
|
|
||||||
#if (__STDC_VERSION__ >= 201112L)
|
|
||||||
/* This is C11. */
|
|
||||||
#define __STDC_C11__
|
|
||||||
#elif (__STDC_VERSION__ >= 199901L)
|
|
||||||
/* This is C99. */
|
|
||||||
#define __STDC_C99__
|
|
||||||
#elif (__STDC_VERSION__ >= 199409L)
|
|
||||||
/* This is C89 with amendment 1. */
|
|
||||||
#define __STDC_C89__
|
|
||||||
#define __STDC_C89_AMENDMENT_1__
|
|
||||||
#else
|
|
||||||
/* This is C89 without amendment 1. */
|
|
||||||
#define __STDC_C89__
|
|
||||||
#endif
|
|
||||||
#else /* !defined(__STDC_VERSION__) */
|
|
||||||
/* This is C89. __STDC_VERSION__ is not defined. */
|
|
||||||
#define __STDC_C89__
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* !defined(__STDC__) */
|
|
||||||
/* This is not standard C. __STDC__ is not defined. */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
@ -1,132 +0,0 @@
|
|||||||
/* Copyright (C) 2010-2017 The RetroArch team
|
|
||||||
*
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
* The following license statement only applies to this file (rhash.h).
|
|
||||||
* ---------------------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Permission is hereby granted, free of charge,
|
|
||||||
* to any person obtaining a copy of this software and associated documentation files (the "Software"),
|
|
||||||
* to deal in the Software without restriction, including without limitation the rights to
|
|
||||||
* use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
* and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
||||||
*
|
|
||||||
* The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
||||||
*
|
|
||||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
|
|
||||||
* INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
|
||||||
* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* sha1.h
|
|
||||||
*
|
|
||||||
* Copyright (C) 1998, 2009
|
|
||||||
* Paul E. Jones <paulej@packetizer.com>
|
|
||||||
* All Rights Reserved
|
|
||||||
*
|
|
||||||
*****************************************************************************
|
|
||||||
* $Id: sha1.h 12 2009-06-22 19:34:25Z paulej $
|
|
||||||
*****************************************************************************
|
|
||||||
*
|
|
||||||
* Description:
|
|
||||||
* This class implements the Secure Hashing Standard as defined
|
|
||||||
* in FIPS PUB 180-1 published April 17, 1995.
|
|
||||||
*
|
|
||||||
* Many of the variable names in the SHA1Context, especially the
|
|
||||||
* single character names, were used because those were the names
|
|
||||||
* used in the publication.
|
|
||||||
*
|
|
||||||
* Please read the file sha1.c for more information.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __RARCH_HASH_H
|
|
||||||
#define __RARCH_HASH_H
|
|
||||||
|
|
||||||
#include <stdint.h>
|
|
||||||
#include <stddef.h>
|
|
||||||
|
|
||||||
#include <compat/msvc.h>
|
|
||||||
#ifdef HAVE_CONFIG_H
|
|
||||||
#include "config.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <retro_inline.h>
|
|
||||||
|
|
||||||
#include <retro_common_api.h>
|
|
||||||
|
|
||||||
RETRO_BEGIN_DECLS
|
|
||||||
|
|
||||||
/**
|
|
||||||
* sha256_hash:
|
|
||||||
* @out : Output.
|
|
||||||
* @in : Input.
|
|
||||||
* @size : Size of @out.
|
|
||||||
*
|
|
||||||
* Hashes SHA256 and outputs a human readable string.
|
|
||||||
**/
|
|
||||||
void sha256_hash(char *out, const uint8_t *in, size_t size);
|
|
||||||
|
|
||||||
typedef struct SHA1Context
|
|
||||||
{
|
|
||||||
unsigned Message_Digest[5]; /* Message Digest (output) */
|
|
||||||
|
|
||||||
unsigned Length_Low; /* Message length in bits */
|
|
||||||
unsigned Length_High; /* Message length in bits */
|
|
||||||
|
|
||||||
unsigned char Message_Block[64]; /* 512-bit message blocks */
|
|
||||||
int Message_Block_Index; /* Index into message block array */
|
|
||||||
|
|
||||||
int Computed; /* Is the digest computed? */
|
|
||||||
int Corrupted; /* Is the message digest corruped? */
|
|
||||||
} SHA1Context;
|
|
||||||
|
|
||||||
int sha1_calculate(const char *path, char *result);
|
|
||||||
|
|
||||||
uint32_t djb2_calculate(const char *str);
|
|
||||||
|
|
||||||
/* Any 32-bit or wider unsigned integer data type will do */
|
|
||||||
typedef unsigned int MD5_u32plus;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
MD5_u32plus lo, hi;
|
|
||||||
MD5_u32plus a, b, c, d;
|
|
||||||
unsigned char buffer[64];
|
|
||||||
MD5_u32plus block[16];
|
|
||||||
} MD5_CTX;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is an OpenSSL-compatible implementation of the RSA Data Security, Inc.
|
|
||||||
* MD5 Message-Digest Algorithm (RFC 1321).
|
|
||||||
*
|
|
||||||
* Homepage:
|
|
||||||
* http://openwall.info/wiki/people/solar/software/public-domain-source-code/md5
|
|
||||||
*
|
|
||||||
* Author:
|
|
||||||
* Alexander Peslyak, better known as Solar Designer <solar at openwall.com>
|
|
||||||
*
|
|
||||||
* This software was written by Alexander Peslyak in 2001. No copyright is
|
|
||||||
* claimed, and the software is hereby placed in the public domain.
|
|
||||||
* In case this attempt to disclaim copyright and place the software in the
|
|
||||||
* public domain is deemed null and void, then the software is
|
|
||||||
* Copyright (c) 2001 Alexander Peslyak and it is hereby released to the
|
|
||||||
* general public under the following terms:
|
|
||||||
*
|
|
||||||
* Redistribution and use in source and binary forms, with or without
|
|
||||||
* modification, are permitted.
|
|
||||||
*
|
|
||||||
* There's ABSOLUTELY NO WARRANTY, express or implied.
|
|
||||||
*
|
|
||||||
* See md5.c for more information.
|
|
||||||
*/
|
|
||||||
|
|
||||||
void MD5_Init(MD5_CTX *ctx);
|
|
||||||
void MD5_Update(MD5_CTX *ctx, const void *data, unsigned long size);
|
|
||||||
void MD5_Final(unsigned char *result, MD5_CTX *ctx);
|
|
||||||
|
|
||||||
RETRO_END_DECLS
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
x
Reference in New Issue
Block a user