Flutter Engine
The Flutter Engine
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
SkSLUtil.cpp
Go to the documentation of this file.
1/*
2 * Copyright 2016 Google Inc.
3 *
4 * Use of this source code is governed by a BSD-style license that can be
5 * found in the LICENSE file.
6 */
7
8#include "src/sksl/SkSLUtil.h"
9
16
17#include <string>
18
19namespace SkSL {
20
21// TODO: Once Graphite has its own GPU-caps system, SK_GRAPHITE should get its own mode.
22// At the moment, it either mimics what GrShaderCaps reports, or it uses these hard-coded values
23// depending on the build.
24#if defined(SKSL_STANDALONE) || !defined(SK_GANESH)
25std::unique_ptr<ShaderCaps> ShaderCapsFactory::MakeShaderCaps() {
26 std::unique_ptr<ShaderCaps> standalone = std::make_unique<ShaderCaps>();
27 standalone->fShaderDerivativeSupport = true;
28 standalone->fExplicitTextureLodSupport = true;
29 standalone->fFlatInterpolationSupport = true;
30 standalone->fNoPerspectiveInterpolationSupport = true;
31 standalone->fSampleMaskSupport = true;
32 standalone->fExternalTextureSupport = true;
33 standalone->fFloatBufferArrayName = "floatData";
34 return standalone;
35}
36#else
37std::unique_ptr<ShaderCaps> ShaderCapsFactory::MakeShaderCaps() {
38 return std::make_unique<ShaderCaps>();
39}
40#endif // defined(SKSL_STANDALONE) || !defined(SK_GANESH)
41
43 out.write(s.str().c_str(), s.str().size());
44}
45
46bool type_to_sksltype(const Context& context, const Type& type, SkSLType* outType) {
47 // If a new GrSL type is added, this function will need to be updated.
48 static_assert(kSkSLTypeCount == 41);
49
50 if (type.matches(*context.fTypes.fVoid )) { *outType = SkSLType::kVoid; return true; }
51 if (type.matches(*context.fTypes.fBool )) { *outType = SkSLType::kBool; return true; }
52 if (type.matches(*context.fTypes.fBool2 )) { *outType = SkSLType::kBool2; return true; }
53 if (type.matches(*context.fTypes.fBool3 )) { *outType = SkSLType::kBool3; return true; }
54 if (type.matches(*context.fTypes.fBool4 )) { *outType = SkSLType::kBool4; return true; }
55 if (type.matches(*context.fTypes.fShort )) { *outType = SkSLType::kShort; return true; }
56 if (type.matches(*context.fTypes.fShort2 )) { *outType = SkSLType::kShort2; return true; }
57 if (type.matches(*context.fTypes.fShort3 )) { *outType = SkSLType::kShort3; return true; }
58 if (type.matches(*context.fTypes.fShort4 )) { *outType = SkSLType::kShort4; return true; }
59 if (type.matches(*context.fTypes.fUShort )) { *outType = SkSLType::kUShort; return true; }
60 if (type.matches(*context.fTypes.fUShort2 )) { *outType = SkSLType::kUShort2; return true; }
61 if (type.matches(*context.fTypes.fUShort3 )) { *outType = SkSLType::kUShort3; return true; }
62 if (type.matches(*context.fTypes.fUShort4 )) { *outType = SkSLType::kUShort4; return true; }
63 if (type.matches(*context.fTypes.fFloat )) { *outType = SkSLType::kFloat; return true; }
64 if (type.matches(*context.fTypes.fFloat2 )) { *outType = SkSLType::kFloat2; return true; }
65 if (type.matches(*context.fTypes.fFloat3 )) { *outType = SkSLType::kFloat3; return true; }
66 if (type.matches(*context.fTypes.fFloat4 )) { *outType = SkSLType::kFloat4; return true; }
67 if (type.matches(*context.fTypes.fFloat2x2)) { *outType = SkSLType::kFloat2x2; return true; }
68 if (type.matches(*context.fTypes.fFloat3x3)) { *outType = SkSLType::kFloat3x3; return true; }
69 if (type.matches(*context.fTypes.fFloat4x4)) { *outType = SkSLType::kFloat4x4; return true; }
70 if (type.matches(*context.fTypes.fHalf )) { *outType = SkSLType::kHalf; return true; }
71 if (type.matches(*context.fTypes.fHalf2 )) { *outType = SkSLType::kHalf2; return true; }
72 if (type.matches(*context.fTypes.fHalf3 )) { *outType = SkSLType::kHalf3; return true; }
73 if (type.matches(*context.fTypes.fHalf4 )) { *outType = SkSLType::kHalf4; return true; }
74 if (type.matches(*context.fTypes.fHalf2x2 )) { *outType = SkSLType::kHalf2x2; return true; }
75 if (type.matches(*context.fTypes.fHalf3x3 )) { *outType = SkSLType::kHalf3x3; return true; }
76 if (type.matches(*context.fTypes.fHalf4x4 )) { *outType = SkSLType::kHalf4x4; return true; }
77 if (type.matches(*context.fTypes.fInt )) { *outType = SkSLType::kInt; return true; }
78 if (type.matches(*context.fTypes.fInt2 )) { *outType = SkSLType::kInt2; return true; }
79 if (type.matches(*context.fTypes.fInt3 )) { *outType = SkSLType::kInt3; return true; }
80 if (type.matches(*context.fTypes.fInt4 )) { *outType = SkSLType::kInt4; return true; }
81 if (type.matches(*context.fTypes.fUInt )) { *outType = SkSLType::kUInt; return true; }
82 if (type.matches(*context.fTypes.fUInt2 )) { *outType = SkSLType::kUInt2; return true; }
83 if (type.matches(*context.fTypes.fUInt3 )) { *outType = SkSLType::kUInt3; return true; }
84 if (type.matches(*context.fTypes.fUInt4 )) { *outType = SkSLType::kUInt4; return true; }
85 return false;
86}
87
88} // namespace SkSL
static const int kSkSLTypeCount
SkSLType
GLenum type
const std::unique_ptr< Type > fFloat2
const std::unique_ptr< Type > fHalf4
const std::unique_ptr< Type > fInt4
const std::unique_ptr< Type > fHalf2x2
const std::unique_ptr< Type > fUInt2
const std::unique_ptr< Type > fShort3
const std::unique_ptr< Type > fInt2
const std::unique_ptr< Type > fUShort
const std::unique_ptr< Type > fInt
const std::unique_ptr< Type > fFloat2x2
const std::unique_ptr< Type > fFloat4x4
const std::unique_ptr< Type > fShort2
const std::unique_ptr< Type > fShort
const std::unique_ptr< Type > fInt3
const std::unique_ptr< Type > fUInt3
const std::unique_ptr< Type > fUShort4
const std::unique_ptr< Type > fFloat4
const std::unique_ptr< Type > fHalf2
const std::unique_ptr< Type > fUInt4
const std::unique_ptr< Type > fHalf3x3
const std::unique_ptr< Type > fShort4
const std::unique_ptr< Type > fBool2
const std::unique_ptr< Type > fFloat3x3
const std::unique_ptr< Type > fUShort2
const std::unique_ptr< Type > fBool3
const std::unique_ptr< Type > fUInt
const std::unique_ptr< Type > fUShort3
const std::unique_ptr< Type > fBool
const std::unique_ptr< Type > fVoid
const std::unique_ptr< Type > fHalf3
const std::unique_ptr< Type > fFloat
const std::unique_ptr< Type > fFloat3
const std::unique_ptr< Type > fHalf
const std::unique_ptr< Type > fHalf4x4
const std::unique_ptr< Type > fBool4
const BuiltinTypes & fTypes
Definition: SkSLContext.h:30
static std::unique_ptr< ShaderCaps > MakeShaderCaps()
Definition: SkSLUtil.cpp:25
struct MyStruct s
void write_stringstream(const StringStream &s, OutputStream &out)
Definition: SkSLUtil.cpp:42
bool type_to_sksltype(const Context &context, const Type &type, SkSLType *outType)
Definition: SkSLUtil.cpp:46