• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 Adobe Systems Incorporated. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  *
8  * 1. Redistributions of source code must retain the above
9  *    copyright notice, this list of conditions and the following
10  *    disclaimer.
11  * 2. Redistributions in binary form must reproduce the above
12  *    copyright notice, this list of conditions and the following
13  *    disclaimer in the documentation and/or other materials
14  *    provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
20  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
21  * OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
22  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
23  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
25  * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
26  * THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27  * SUCH DAMAGE.
28  */
29 
30 #ifndef CustomFilterGlobalContext_h
31 #define CustomFilterGlobalContext_h
32 
33 #include "platform/graphics/angle/ANGLEPlatformBridge.h"
34 #include "platform/graphics/filters/custom/CustomFilterProgramInfo.h"
35 #include "wtf/HashMap.h"
36 #include "wtf/Noncopyable.h"
37 #include "wtf/RefPtr.h"
38 
39 namespace WebCore {
40 
41 class CustomFilterValidatedProgram;
42 class GraphicsContext3D;
43 
44 typedef HashMap<CustomFilterProgramInfo, CustomFilterValidatedProgram*> CustomFilterValidatedProgramsMap;
45 
46 class PLATFORM_EXPORT CustomFilterGlobalContext {
47     WTF_MAKE_NONCOPYABLE(CustomFilterGlobalContext);
48 public:
49     CustomFilterGlobalContext();
50     ~CustomFilterGlobalContext();
51 
context()52     GraphicsContext3D* context() const { return m_context.get(); }
53 
54     // CSS shaders not referenced from the CSS mix function should be validated just like regular WebGL shaders.
55     // This ANGLE validator uses the SH_WEBGL_SPEC flag.
56     ANGLEPlatformBridge* webglShaderValidator();
57 
58     // CSS shaders referenced from the CSS mix function should be validated slightly differently than WebGL shaders.
59     // This ANGLE validator uses the SH_CSS_SHADERS_SPEC flag.
60     // Under this flag, most notably:
61     // - The "gl_FragColor" built-in is not available.
62     // - Instead, the "css_MixColor" and "css_ColorMatrix" built-ins are available.
63     // - The "css_" prefix is reserved.
64     // - In the translated source that ANGLE returns, ANGLE renames the author's "main" function to "css_main".
65     // The complete details are documented in ANGLE/ShaderLang.h.
66     ANGLEPlatformBridge* mixShaderValidator();
67 
68     void prepareContextIfNeeded();
69 
70     PassRefPtr<CustomFilterValidatedProgram> getValidatedProgram(const CustomFilterProgramInfo&);
71     void removeValidatedProgram(const CustomFilterValidatedProgram*);
72 private:
73     static PassOwnPtr<ANGLEPlatformBridge> createShaderValidator(ShShaderSpec);
74 
75     RefPtr<GraphicsContext3D> m_context;
76     OwnPtr<ANGLEPlatformBridge> m_webglShaderValidator;
77     OwnPtr<ANGLEPlatformBridge> m_mixShaderValidator;
78     CustomFilterValidatedProgramsMap m_programs;
79 };
80 
81 } // namespace WebCore
82 
83 #endif // CustomFilterGlobalContext_h
84