00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef PXL_DEFINES_H
00020 #define PXL_DEFINES_H
00021
00022 #include <limits.h>
00023 #include "PXL_API.h"
00024
00025 enum PXL_DataFormat
00026 {
00027 PXL_INT8 = 0,
00028 PXL_INT16,
00029 PXL_INT32,
00030 PXL_FLOAT32,
00031 PXL_FLOAT16,
00032 PXL_MAX_DATA_FORMAT
00033 };
00034
00035 enum PXL_Packing
00036 {
00037 PACK_SINGLE =0,
00038 PACK_DUAL,
00039 PACK_DUAL_NI,
00040 PACK_RGB,
00041 PACK_RGBA,
00042 PACK_RGB_NI,
00043 PACK_RGBA_NI,
00044
00045 PACK_UNKNOWN = 255
00046 };
00047
00048
00049 #define PXL_WHITE_8 UCHAR_MAX
00050 #define PXL_WHITE_16 USHRT_MAX
00051 #define PXL_WHITE_32 UINT_MAX
00052
00053 PXL_API extern const int pxlDefinesDepth[6];
00054 PXL_API extern const int pxlDefinesPComp[256];
00055 PXL_API extern const int pxlDefinesPDepth[256];
00056 PXL_API extern const unsigned int pxlDefinesWhite[6];
00057
00058 inline int PXLformatDepth(PXL_DataFormat d)
00059 { return pxlDefinesDepth[(int) d]; }
00060
00061 inline int PXLpackingComponents(PXL_Packing p)
00062 { return pxlDefinesPComp[(int) p]; }
00063
00064 inline int PXLpackingDepth(PXL_Packing p)
00065 { return pxlDefinesPDepth[(int) p]; }
00066
00067 inline unsigned int PXLwhitePoint(PXL_DataFormat dt)
00068 { return pxlDefinesWhite[ (int) dt]; }
00069
00070
00071
00072 PXL_API void PXLdetermineProcCaps();
00073 PXL_API bool PXLcpuHasMMX();
00074 PXL_API int PXLcpuHasSSE();
00075 PXL_API bool PXLcpuHasXMMX();
00076 PXL_API bool PXLcpuHasCondMov();
00077
00078 inline int PXLclampChar(int t)
00079 {
00080 #if defined(LINUX) && !defined(IA64) && !defined(AMD64) && !defined(PPC)
00081 __asm__ __volatile__ (
00082 "xor %%ebx, %%ebx \n"
00083 "mov $255, %%ecx \n"
00084 "cmp $0, %%eax \n"
00085 "cmovs %%ebx, %%eax \n"
00086 "cmp $255, %%eax \n"
00087 "cmova %%ecx, %%eax \n"
00088 : "=a" (t) : "a" (t) : "%ebx", "%ecx" );
00089 #else
00090 if(t < 0)
00091 t = 0;
00092 else if(t > 255)
00093 t = 255;
00094 #endif
00095
00096 return t;
00097 }
00098
00099 inline int PXLclampShort(int t)
00100 {
00101 #if defined(LINUX) && !defined(IA64) && !defined(AMD64) && !defined(PPC)
00102 __asm__ __volatile__ (
00103 "xor %%ebx, %%ebx \n"
00104 "mov $65535, %%ecx \n"
00105 "cmp $0, %%eax \n"
00106 "cmovs %%ebx, %%eax \n"
00107 "cmp $65535, %%eax \n"
00108 "cmova %%ecx, %%eax \n"
00109 : "=a" (t) : "a" (t) : "%ebx", "%ecx" );
00110 #else
00111 if(t < 0)
00112 t = 0;
00113 else if(t > 65535)
00114 t = 65535;
00115 #endif
00116 return t;
00117 }
00118
00119
00120 #endif