Home | History | Annotate | Download | only in arm
      1 /*
      2  * Copyright (C) 2011 University of Szeged
      3  * Copyright (C) 2011 Zoltan Herczeg
      4  *
      5  * Redistribution and use in source and binary forms, with or without
      6  * modification, are permitted provided that the following conditions
      7  * are met:
      8  * 1. Redistributions of source code must retain the above copyright
      9  *    notice, this list of conditions and the following disclaimer.
     10  * 2. Redistributions in binary form must reproduce the above copyright
     11  *    notice, this list of conditions and the following disclaimer in the
     12  *    documentation and/or other materials provided with the distribution.
     13  *
     14  * THIS SOFTWARE IS PROVIDED BY UNIVERSITY OF SZEGED ``AS IS'' AND ANY
     15  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
     16  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     17  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL UNIVERSITY OF SZEGED OR
     18  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     19  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     20  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
     21  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
     22  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     23  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
     24  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     25  */
     26 
     27 #ifndef FELightingNeon_h
     28 #define FELightingNeon_h
     29 
     30 #include <wtf/Platform.h>
     31 
     32 #if CPU(ARM_NEON) && COMPILER(GCC)
     33 
     34 namespace WebCore {
     35 
     36 // Otherwise: Distant Light.
     37 #define FLAG_POINT_LIGHT                 0x01
     38 #define FLAG_SPOT_LIGHT                  0x02
     39 #define FLAG_CONE_EXPONENT_IS_1          0x04
     40 
     41 // Otherwise: Diffuse light.
     42 #define FLAG_SPECULAR_LIGHT              0x10
     43 #define FLAG_DIFFUSE_CONST_IS_1          0x20
     44 #define FLAG_SPECULAR_EXPONENT_IS_1      0x40
     45 
     46 // Must be aligned to 16 bytes.
     47 struct FELightingFloatArgumentsForNeon {
     48     float surfaceScale;
     49     float minusSurfaceScaleDividedByFour;
     50     float diffuseConstant;
     51     float padding1;
     52 
     53     float coneCutOffLimit;
     54     float coneFullLight;
     55     float coneCutOffRange;
     56     float constOne;
     57 
     58     float lightX;
     59     float lightY;
     60     float lightZ;
     61     float padding2;
     62 
     63     float directionX;
     64     float directionY;
     65     float directionZ;
     66     float padding3;
     67 
     68     float colorRed;
     69     float colorGreen;
     70     float colorBlue;
     71     float padding4;
     72 };
     73 
     74 struct FELightingPaintingDataForNeon {
     75     unsigned char* pixels;
     76     int widthDecreasedByTwo;
     77     int heightDecreasedByTwo;
     78     // Combination of FLAG constants above.
     79     int flags;
     80     int specularExponent;
     81     int coneExponent;
     82     FELightingFloatArgumentsForNeon* floatArguments;
     83     short* paintingConstants;
     84 };
     85 
     86 short* feLightingConstantsForNeon();
     87 
     88 extern "C" {
     89 void neonDrawLighting(FELightingPaintingDataForNeon*);
     90 }
     91 
     92 } // namespace WebCore
     93 
     94 #endif // CPU(ARM_NEON) && COMPILER(GCC)
     95 
     96 #endif // FELightingNeon_h
     97