mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-12-12 05:11:45 +00:00
040cb17370
# Conflicts: # CMakeLists.txt # libraries/glslang/OGLCompilersDLL/CMakeLists.txt # libraries/glslang/OGLCompilersDLL/InitializeDll.cpp # libraries/glslang/OGLCompilersDLL/InitializeDll.h # libraries/glslang/glslang/CMakeLists.txt # libraries/glslang/glslang/GenericCodeGen/CodeGen.cpp # libraries/glslang/glslang/GenericCodeGen/Link.cpp # libraries/glslang/glslang/Include/BaseTypes.h # libraries/glslang/glslang/Include/Common.h # libraries/glslang/glslang/Include/ConstantUnion.h # libraries/glslang/glslang/Include/InfoSink.h # libraries/glslang/glslang/Include/InitializeGlobals.h # libraries/glslang/glslang/Include/PoolAlloc.h # libraries/glslang/glslang/Include/ResourceLimits.h # libraries/glslang/glslang/Include/ShHandle.h # libraries/glslang/glslang/Include/Types.h # libraries/glslang/glslang/Include/arrays.h # libraries/glslang/glslang/Include/intermediate.h # libraries/glslang/glslang/Include/revision.h # libraries/glslang/glslang/Include/revision.template # libraries/glslang/glslang/MachineIndependent/Constant.cpp # libraries/glslang/glslang/MachineIndependent/InfoSink.cpp # libraries/glslang/glslang/MachineIndependent/Initialize.cpp # libraries/glslang/glslang/MachineIndependent/Initialize.h # libraries/glslang/glslang/MachineIndependent/IntermTraverse.cpp # libraries/glslang/glslang/MachineIndependent/Intermediate.cpp # libraries/glslang/glslang/MachineIndependent/LiveTraverser.h # libraries/glslang/glslang/MachineIndependent/ParseContextBase.cpp # libraries/glslang/glslang/MachineIndependent/ParseHelper.cpp # libraries/glslang/glslang/MachineIndependent/ParseHelper.h # libraries/glslang/glslang/MachineIndependent/PoolAlloc.cpp # libraries/glslang/glslang/MachineIndependent/RemoveTree.cpp # libraries/glslang/glslang/MachineIndependent/RemoveTree.h # libraries/glslang/glslang/MachineIndependent/Scan.cpp # libraries/glslang/glslang/MachineIndependent/Scan.h # libraries/glslang/glslang/MachineIndependent/ScanContext.h # libraries/glslang/glslang/MachineIndependent/ShaderLang.cpp # libraries/glslang/glslang/MachineIndependent/SymbolTable.cpp # libraries/glslang/glslang/MachineIndependent/SymbolTable.h # libraries/glslang/glslang/MachineIndependent/Versions.cpp # libraries/glslang/glslang/MachineIndependent/Versions.h # libraries/glslang/glslang/MachineIndependent/attribute.cpp # libraries/glslang/glslang/MachineIndependent/attribute.h # libraries/glslang/glslang/MachineIndependent/gl_types.h # libraries/glslang/glslang/MachineIndependent/glslang.y # libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp # libraries/glslang/glslang/MachineIndependent/glslang_tab.cpp.h # libraries/glslang/glslang/MachineIndependent/intermOut.cpp # libraries/glslang/glslang/MachineIndependent/iomapper.cpp # libraries/glslang/glslang/MachineIndependent/iomapper.h # libraries/glslang/glslang/MachineIndependent/limits.cpp # libraries/glslang/glslang/MachineIndependent/linkValidate.cpp # libraries/glslang/glslang/MachineIndependent/localintermediate.h # libraries/glslang/glslang/MachineIndependent/parseConst.cpp # libraries/glslang/glslang/MachineIndependent/parseVersions.h # libraries/glslang/glslang/MachineIndependent/pch.cpp # libraries/glslang/glslang/MachineIndependent/pch.h # libraries/glslang/glslang/MachineIndependent/preprocessor/Pp.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpAtom.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpContext.h # libraries/glslang/glslang/MachineIndependent/preprocessor/PpScanner.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.cpp # libraries/glslang/glslang/MachineIndependent/preprocessor/PpTokens.h # libraries/glslang/glslang/MachineIndependent/propagateNoContraction.cpp # libraries/glslang/glslang/MachineIndependent/propagateNoContraction.h # libraries/glslang/glslang/MachineIndependent/reflection.cpp # libraries/glslang/glslang/MachineIndependent/reflection.h # libraries/glslang/glslang/OSDependent/Unix/CMakeLists.txt # libraries/glslang/glslang/OSDependent/Unix/ossource.cpp # libraries/glslang/glslang/OSDependent/Windows/CMakeLists.txt # libraries/glslang/glslang/OSDependent/Windows/main.cpp # libraries/glslang/glslang/OSDependent/Windows/ossource.cpp # libraries/glslang/glslang/OSDependent/osinclude.h # libraries/glslang/glslang/Public/ShaderLang.h # libraries/glslang/glslang/updateGrammar # libraries/glslang/spirv/CMakeLists.txt # libraries/glslang/spirv/GLSL.ext.AMD.h # libraries/glslang/spirv/GLSL.ext.EXT.h # libraries/glslang/spirv/GLSL.ext.KHR.h # libraries/glslang/spirv/GLSL.ext.NV.h # libraries/glslang/spirv/GLSL.std.450.h # libraries/glslang/spirv/GlslangToSpv.cpp # libraries/glslang/spirv/GlslangToSpv.h # libraries/glslang/spirv/InReadableOrder.cpp # libraries/glslang/spirv/Logger.cpp # libraries/glslang/spirv/Logger.h # libraries/glslang/spirv/SPVRemapper.cpp # libraries/glslang/spirv/SPVRemapper.h # libraries/glslang/spirv/SpvBuilder.cpp # libraries/glslang/spirv/SpvBuilder.h # libraries/glslang/spirv/SpvPostProcess.cpp # libraries/glslang/spirv/SpvTools.cpp # libraries/glslang/spirv/SpvTools.h # libraries/glslang/spirv/bitutils.h # libraries/glslang/spirv/disassemble.cpp # libraries/glslang/spirv/disassemble.h # libraries/glslang/spirv/doc.cpp # libraries/glslang/spirv/doc.h # libraries/glslang/spirv/hex_float.h # libraries/glslang/spirv/spirv.hpp # libraries/glslang/spirv/spvIR.h # src/CMakeLists.txt
146 lines
3.1 KiB
C
146 lines
3.1 KiB
C
/* Bcj2.h -- BCJ2 Converter for x86 code
|
|
2014-11-10 : Igor Pavlov : Public domain */
|
|
|
|
#ifndef __BCJ2_H
|
|
#define __BCJ2_H
|
|
|
|
#include "7zTypes.h"
|
|
|
|
EXTERN_C_BEGIN
|
|
|
|
#define BCJ2_NUM_STREAMS 4
|
|
|
|
enum
|
|
{
|
|
BCJ2_STREAM_MAIN,
|
|
BCJ2_STREAM_CALL,
|
|
BCJ2_STREAM_JUMP,
|
|
BCJ2_STREAM_RC
|
|
};
|
|
|
|
enum
|
|
{
|
|
BCJ2_DEC_STATE_ORIG_0 = BCJ2_NUM_STREAMS,
|
|
BCJ2_DEC_STATE_ORIG_1,
|
|
BCJ2_DEC_STATE_ORIG_2,
|
|
BCJ2_DEC_STATE_ORIG_3,
|
|
|
|
BCJ2_DEC_STATE_ORIG,
|
|
BCJ2_DEC_STATE_OK
|
|
};
|
|
|
|
enum
|
|
{
|
|
BCJ2_ENC_STATE_ORIG = BCJ2_NUM_STREAMS,
|
|
BCJ2_ENC_STATE_OK
|
|
};
|
|
|
|
|
|
#define BCJ2_IS_32BIT_STREAM(s) ((s) == BCJ2_STREAM_CALL || (s) == BCJ2_STREAM_JUMP)
|
|
|
|
/*
|
|
CBcj2Dec / CBcj2Enc
|
|
bufs sizes:
|
|
BUF_SIZE(n) = lims[n] - bufs[n]
|
|
bufs sizes for BCJ2_STREAM_CALL and BCJ2_STREAM_JUMP must be mutliply of 4:
|
|
(BUF_SIZE(BCJ2_STREAM_CALL) & 3) == 0
|
|
(BUF_SIZE(BCJ2_STREAM_JUMP) & 3) == 0
|
|
*/
|
|
|
|
/*
|
|
CBcj2Dec:
|
|
dest is allowed to overlap with bufs[BCJ2_STREAM_MAIN], with the following conditions:
|
|
bufs[BCJ2_STREAM_MAIN] >= dest &&
|
|
bufs[BCJ2_STREAM_MAIN] - dest >= tempReserv +
|
|
BUF_SIZE(BCJ2_STREAM_CALL) +
|
|
BUF_SIZE(BCJ2_STREAM_JUMP)
|
|
tempReserv = 0 : for first call of Bcj2Dec_Decode
|
|
tempReserv = 4 : for any other calls of Bcj2Dec_Decode
|
|
overlap with offset = 1 is not allowed
|
|
*/
|
|
|
|
typedef struct
|
|
{
|
|
const Byte *bufs[BCJ2_NUM_STREAMS];
|
|
const Byte *lims[BCJ2_NUM_STREAMS];
|
|
Byte *dest;
|
|
const Byte *destLim;
|
|
|
|
unsigned state; /* BCJ2_STREAM_MAIN has more priority than BCJ2_STATE_ORIG */
|
|
|
|
UInt32 ip;
|
|
Byte temp[4];
|
|
UInt32 range;
|
|
UInt32 code;
|
|
UInt16 probs[2 + 256];
|
|
} CBcj2Dec;
|
|
|
|
void Bcj2Dec_Init(CBcj2Dec *p);
|
|
|
|
/* Returns: SZ_OK or SZ_ERROR_DATA */
|
|
SRes Bcj2Dec_Decode(CBcj2Dec *p);
|
|
|
|
#define Bcj2Dec_IsFinished(_p_) ((_p_)->code == 0)
|
|
|
|
|
|
|
|
typedef enum
|
|
{
|
|
BCJ2_ENC_FINISH_MODE_CONTINUE,
|
|
BCJ2_ENC_FINISH_MODE_END_BLOCK,
|
|
BCJ2_ENC_FINISH_MODE_END_STREAM
|
|
} EBcj2Enc_FinishMode;
|
|
|
|
typedef struct
|
|
{
|
|
Byte *bufs[BCJ2_NUM_STREAMS];
|
|
const Byte *lims[BCJ2_NUM_STREAMS];
|
|
const Byte *src;
|
|
const Byte *srcLim;
|
|
|
|
unsigned state;
|
|
EBcj2Enc_FinishMode finishMode;
|
|
|
|
Byte prevByte;
|
|
|
|
Byte cache;
|
|
UInt32 range;
|
|
UInt64 low;
|
|
UInt64 cacheSize;
|
|
|
|
UInt32 ip;
|
|
|
|
/* 32-bit ralative offset in JUMP/CALL commands is
|
|
- (mod 4 GB) in 32-bit mode
|
|
- signed Int32 in 64-bit mode
|
|
We use (mod 4 GB) check for fileSize.
|
|
Use fileSize up to 2 GB, if you want to support 32-bit and 64-bit code conversion. */
|
|
UInt32 fileIp;
|
|
UInt32 fileSize; /* (fileSize <= ((UInt32)1 << 31)), 0 means no_limit */
|
|
UInt32 relatLimit; /* (relatLimit <= ((UInt32)1 << 31)), 0 means desable_conversion */
|
|
|
|
UInt32 tempTarget;
|
|
unsigned tempPos;
|
|
Byte temp[4 * 2];
|
|
|
|
unsigned flushPos;
|
|
|
|
UInt16 probs[2 + 256];
|
|
} CBcj2Enc;
|
|
|
|
void Bcj2Enc_Init(CBcj2Enc *p);
|
|
void Bcj2Enc_Encode(CBcj2Enc *p);
|
|
|
|
#define Bcj2Enc_Get_InputData_Size(p) ((SizeT)((p)->srcLim - (p)->src) + (p)->tempPos)
|
|
#define Bcj2Enc_IsFinished(p) ((p)->flushPos == 5)
|
|
|
|
|
|
#define BCJ2_RELAT_LIMIT_NUM_BITS 26
|
|
#define BCJ2_RELAT_LIMIT ((UInt32)1 << BCJ2_RELAT_LIMIT_NUM_BITS)
|
|
|
|
/* limit for CBcj2Enc::fileSize variable */
|
|
#define BCJ2_FileSize_MAX ((UInt32)1 << 31)
|
|
|
|
EXTERN_C_END
|
|
|
|
#endif
|