view opencl/c/platform.d @ 0:3cea44337083

initial commit
author Trass3r
date Wed, 02 Dec 2009 17:40:59 +0100
parents
children
line wrap: on
line source

/**********************************************************************************
 * Copyright (c) 2008-2009 The Khronos Group Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and/or associated documentation files (the
 * "Materials"), to deal in the Materials without restriction, including
 * without limitation the rights to use, copy, modify, merge, publish,
 * distribute, sublicense, and/or sell copies of the Materials, and to
 * permit persons to whom the Materials are 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 Materials.
 *
 * THE MATERIALS ARE 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
 * MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
 **********************************************************************************/

// $Revision: 9283 $ on $Date: 2009-10-14 10:18:57 -0700 (Wed, 14 Oct 2009) $

module opencl.c.platform;

/* scalar types  */
alias byte		cl_char;
alias ubyte		cl_uchar;
alias short		cl_short;
alias ushort	cl_ushort;
alias int		cl_int;
alias uint		cl_uint;
alias long		cl_long;
alias ulong		cl_ulong;

alias ushort	cl_half;
alias float		cl_float;
alias double	cl_double;

/*
 * Vector types 
 *
 *  Note:   OpenCL requires that all types be naturally aligned. 
 *          This means that vector types must be naturally aligned.
 *          For example, a vector of four floats must be aligned to
 *          a 16 byte boundary (calculated as 4 * the natural 4-byte 
 *          alignment of the float).  The alignment qualifiers here
 *          will only function properly if your compiler supports them
 *          and if you don't actively work to defeat them.  For example,
 *          in order for a cl_float4 to be 16 byte aligned in a struct,
 *          the start of the struct must itself be 16-byte aligned. 
 *
 *          Maintaining proper alignment is the user's responsibility.
 */

alias byte[2]		cl_char2;
alias byte[4]		cl_char4;
alias byte[8]		cl_char8;
alias byte[16]		cl_char16;
alias ubyte[2]		cl_uchar2;
alias ubyte[4]		cl_uchar4;
alias ubyte[8]		cl_uchar8;
alias ubyte[16]		cl_uchar16;

alias short[2]		cl_short2;
alias short[4]		cl_short4;
alias short[8]		cl_short8;
alias short[16]		cl_short16;
alias ushort[2]		cl_ushort2;
alias ushort[4]		cl_ushort4;
alias ushort[8]		cl_ushort8;
alias ushort[16]	cl_ushort16;

alias int[2]		cl_int2;
alias int[4]		cl_int4;
alias int[8]		cl_int8;
alias int[16]		cl_int16;
alias uint[2]		cl_uint2;
alias uint[4]		cl_uint4;
alias uint[8]		cl_uint8;
alias uint[16]		cl_uint16;

alias long[2]		cl_long2;
alias long[4]		cl_long4;
alias long[8]		cl_long8;
alias long[16]		cl_long16;
alias ulong[2]		cl_ulong2;
alias ulong[4]		cl_ulong4;
alias ulong[8]		cl_ulong8;
alias ulong[16]		cl_ulong16;

alias float[2]		cl_float2;
alias float[4]		cl_float4;
alias float[8]		cl_float8;
alias float[16]		cl_float16;

alias double[2]		cl_double2;
alias double[4]		cl_double4;
alias double[8]		cl_double8;
alias double[16]	cl_double16;

/* There are no vector types for half */

enum
{
CL_CHAR_BIT         = 8,
CL_SCHAR_MAX        = 127,
CL_SCHAR_MIN        = (-127-1),
CL_CHAR_MAX         = CL_SCHAR_MAX,
CL_CHAR_MIN         = CL_SCHAR_MIN,
CL_UCHAR_MAX        = 255,
CL_SHRT_MAX         = 32767,
CL_SHRT_MIN         = (-32767-1),
CL_USHRT_MAX        = 65535,
CL_INT_MAX          = 2147483647,
CL_INT_MIN          = (-2147483647-1),
CL_UINT_MAX         = 0xffffffffU,
CL_LONG_MAX         = 0x7FFFFFFFFFFFFFFFL,
CL_LONG_MIN         = -0x7FFFFFFFFFFFFFFFL - 1L,
CL_ULONG_MAX        = 0xFFFFFFFFFFFFFFFFUL,

CL_FLT_DIG          = 6,
CL_FLT_MANT_DIG     = 24,
CL_FLT_MAX_10_EXP   = +38,
CL_FLT_MAX_EXP      = +128,
CL_FLT_MIN_10_EXP   = -37,
CL_FLT_MIN_EXP      = -125,
CL_FLT_RADIX        = 2,
CL_FLT_MAX          = 0x1.fffffep127f,
CL_FLT_MIN          = 0x1.0p-126f,
CL_FLT_EPSILON      = 0x1.0p-23f,

CL_DBL_DIG          = 15,
CL_DBL_MANT_DIG     = 53,
CL_DBL_MAX_10_EXP   = +308,
CL_DBL_MAX_EXP      = +1024,
CL_DBL_MIN_10_EXP   = -307,
CL_DBL_MIN_EXP      = -1021,
CL_DBL_RADIX        = 2,
CL_DBL_MAX          = 0x1.fffffffffffffp1023,
CL_DBL_MIN          = 0x1.0p-1022,
CL_DBL_EPSILON      = 0x1.0p-52
}