001/*
002 * To change this template, choose Tools | Templates
003 * and open the template in the editor.
004 */
005
006package com.nativelibs4java.opencl.util;
007
008public enum Primitive {
009    Float(Float.class, 1, OpenCLType.Float),
010    Double(Double.class, 1, OpenCLType.Double),
011    Long(Long.class, 1, OpenCLType.Long),
012    Int(Integer.class, 1, OpenCLType.Int),
013    Short(Short.class, 1, OpenCLType.Short),
014    Byte(Byte.class, 1, OpenCLType.Byte),
015
016    Float2(Float.class, 2, OpenCLType.Float),
017    Double2(Double.class, 2, OpenCLType.Double),
018    Long2(Long.class, 2, OpenCLType.Long),
019    Int2(Integer.class, 2, OpenCLType.Int),
020    Short2(Short.class, 2, OpenCLType.Short),
021    Byte2(Byte.class, 2, OpenCLType.Byte),
022
023    Float3(Float.class, 3, OpenCLType.Float),
024    Double3(Double.class, 3, OpenCLType.Double),
025    Long3(Long.class, 3, OpenCLType.Long),
026    Int3(Integer.class, 3, OpenCLType.Int),
027    Short3(Short.class, 3, OpenCLType.Short),
028    Byte3(Byte.class, 3, OpenCLType.Byte),
029
030    Float4(Float.class, 4, OpenCLType.Float),
031    Double4(Double.class, 4, OpenCLType.Double),
032    Long4(Long.class, 4, OpenCLType.Long),
033    Int4(Integer.class, 4, OpenCLType.Int),
034    Short4(Short.class, 4, OpenCLType.Short),
035    Byte4(Byte.class, 4, OpenCLType.Byte),
036
037    Float8(Float.class, 8, OpenCLType.Float),
038    Double8(Double.class, 8, OpenCLType.Double),
039    Long8(Long.class, 8, OpenCLType.Long),
040    Int8(Integer.class, 8, OpenCLType.Int),
041    Short8(Short.class, 8, OpenCLType.Short),
042    Byte8(Byte.class, 8, OpenCLType.Byte),
043
044    Float16(Float.class, 16, OpenCLType.Float),
045    Double16(Double.class, 16, OpenCLType.Double),
046    Long16(Long.class, 16, OpenCLType.Long),
047    Int16(Integer.class, 16, OpenCLType.Int),
048    Short16(Short.class, 16, OpenCLType.Short),
049    Byte16(Byte.class, 16, OpenCLType.Byte);
050
051    Primitive(Class<?> primitiveType, int primitiveCount, OpenCLType oclType) {
052        this.primitiveCount = primitiveCount;
053        this.primitiveType = primitiveType;
054        this.oclType = oclType;
055    }
056    public final OpenCLType oclType;
057    public final int primitiveCount;
058    public final Class<?> primitiveType;
059    public String clTypeName() {
060        return name().toLowerCase();
061    }
062    public String getRequiredPragmas() {
063        if (primitiveType == Double.class)
064                return "#pragma OPENCL EXTENSION cl_khr_fp64 : enable\n";
065        return "";
066    }
067}