• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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