Flutter Impeller
types.h
Go to the documentation of this file.
1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef FLUTTER_IMPELLER_COMPILER_TYPES_H_
6 #define FLUTTER_IMPELLER_COMPILER_TYPES_H_
7 
8 #include <codecvt>
9 #include <locale>
10 #include <map>
11 #include <optional>
12 #include <string>
13 
14 #include "flutter/fml/macros.h"
15 #include "shaderc/shaderc.hpp"
16 #include "spirv_cross.hpp"
17 #include "spirv_msl.hpp"
18 
19 namespace impeller {
20 namespace compiler {
21 
22 enum class SourceType {
23  kUnknown,
27 };
28 
29 enum class TargetPlatform {
30  kUnknown,
32  kMetalIOS,
33  kOpenGLES,
35  kVulkan,
39  kSkSL,
40 };
41 
42 enum class SourceLanguage {
43  kUnknown,
44  kGLSL,
45  kHLSL,
46 };
47 
49  std::string name;
50  size_t location = 0u;
51  spirv_cross::SPIRType::BaseType type = spirv_cross::SPIRType::BaseType::Float;
52  size_t rows = 0u;
53  size_t columns = 0u;
54  size_t bit_width = 0u;
55  std::optional<size_t> array_elements = std::nullopt;
56  std::vector<uint8_t> struct_layout = {};
57  size_t struct_float_count = 0u;
58 };
59 
61  std::string name;
62  size_t location;
63  size_t set;
64  size_t binding;
65  spirv_cross::SPIRType::BaseType type =
66  spirv_cross::SPIRType::BaseType::Unknown;
67  size_t bit_width;
68  size_t vec_size;
69  size_t columns;
70  size_t offset;
71 };
72 
73 /// A shader config parsed as part of a ShaderBundleConfig.
74 struct ShaderConfig {
75  std::string source_file_name;
78  std::string entry_point;
79 };
80 
81 using ShaderBundleConfig = std::unordered_map<std::string, ShaderConfig>;
82 
84 
86 
88 
89 SourceType SourceTypeFromFileName(const std::string& file_name);
90 
91 SourceType SourceTypeFromString(std::string name);
92 
93 std::string SourceTypeToString(SourceType type);
94 
95 std::string TargetPlatformToString(TargetPlatform platform);
96 
97 SourceLanguage ToSourceLanguage(const std::string& source_language);
98 
99 std::string SourceLanguageToString(SourceLanguage source_language);
100 
101 std::string TargetPlatformSLExtension(TargetPlatform platform);
102 
104  const std::string& file_name,
105  SourceType type,
106  SourceLanguage source_language,
107  const std::string& entry_point_name);
108 
110 
112 
113 std::string ShaderCErrorToString(shaderc_compilation_status status);
114 
115 shaderc_shader_kind ToShaderCShaderKind(SourceType type);
116 
117 spv::ExecutionModel ToExecutionModel(SourceType type);
118 
119 spirv_cross::CompilerMSL::Options::Platform TargetPlatformToMSLPlatform(
120  TargetPlatform platform);
121 
122 } // namespace compiler
123 } // namespace impeller
124 
125 #endif // FLUTTER_IMPELLER_COMPILER_TYPES_H_
impeller::compiler::ShaderConfig::entry_point
std::string entry_point
Definition: types.h:78
impeller::compiler::InputDescription::offset
size_t offset
Definition: types.h:70
impeller::compiler::InputDescription::binding
size_t binding
Definition: types.h:64
impeller::compiler::ShaderConfig::language
SourceLanguage language
Definition: types.h:77
impeller::compiler::SourceType::kUnknown
@ kUnknown
impeller::compiler::TargetPlatformSLExtension
std::string TargetPlatformSLExtension(TargetPlatform platform)
Definition: types.cc:246
impeller::compiler::InputDescription::name
std::string name
Definition: types.h:61
impeller::compiler::UniformDescription::type
spirv_cross::SPIRType::BaseType type
Definition: types.h:51
impeller::compiler::UniformDescription::array_elements
std::optional< size_t > array_elements
Definition: types.h:55
impeller::compiler::TargetPlatform::kMetalDesktop
@ kMetalDesktop
impeller::compiler::UniformDescription::columns
size_t columns
Definition: types.h:53
impeller::compiler::TargetPlatformToMSLPlatform
spirv_cross::CompilerMSL::Options::Platform TargetPlatformToMSLPlatform(TargetPlatform platform)
Definition: types.cc:212
impeller::compiler::SourceLanguageToString
std::string SourceLanguageToString(SourceLanguage source_language)
Definition: types.cc:100
impeller::compiler::UniformDescription::location
size_t location
Definition: types.h:50
impeller::compiler::TargetPlatformNeedsReflection
bool TargetPlatformNeedsReflection(TargetPlatform platform)
Definition: types.cc:141
impeller::compiler::TargetPlatform::kMetalIOS
@ kMetalIOS
impeller::compiler::TargetPlatform
TargetPlatform
Definition: types.h:29
impeller::compiler::UniformDescription::struct_layout
std::vector< uint8_t > struct_layout
Definition: types.h:56
impeller::compiler::InputDescription::vec_size
size_t vec_size
Definition: types.h:68
impeller::compiler::SourceLanguage::kGLSL
@ kGLSL
impeller::compiler::UniformDescription::name
std::string name
Definition: types.h:49
impeller::compiler::ShaderConfig::type
SourceType type
Definition: types.h:76
impeller::compiler::UniformDescription::rows
size_t rows
Definition: types.h:52
impeller::compiler::ToSourceLanguage
SourceLanguage ToSourceLanguage(const std::string &source_language)
Definition: types.cc:64
impeller::compiler::SourceLanguage::kHLSL
@ kHLSL
impeller::compiler::TargetPlatform::kVulkan
@ kVulkan
impeller::compiler::SourceType::kFragmentShader
@ kFragmentShader
impeller::compiler::TargetPlatform::kRuntimeStageVulkan
@ kRuntimeStageVulkan
impeller::compiler::InputDescription::type
spirv_cross::SPIRType::BaseType type
Definition: types.h:65
impeller::compiler::InputDescription::bit_width
size_t bit_width
Definition: types.h:67
impeller::compiler::SourceType::kComputeShader
@ kComputeShader
impeller::compiler::TargetPlatformIsOpenGL
bool TargetPlatformIsOpenGL(TargetPlatform platform)
Definition: types.cc:266
impeller::compiler::EntryPointFunctionNameFromSourceName
std::string EntryPointFunctionNameFromSourceName(const std::string &file_name, SourceType type, SourceLanguage source_language, const std::string &entry_point_name)
Definition: types.cc:111
impeller::compiler::TargetPlatformIsMetal
bool TargetPlatformIsMetal(TargetPlatform platform)
Definition: types.cc:284
impeller::compiler::TargetPlatformIsVulkan
bool TargetPlatformIsVulkan(TargetPlatform platform)
Definition: types.cc:302
impeller::compiler::UniformDescription::bit_width
size_t bit_width
Definition: types.h:54
impeller::compiler::SourceType
SourceType
Definition: types.h:22
impeller::compiler::InputDescription::set
size_t set
Definition: types.h:63
impeller::compiler::SourceLanguage::kUnknown
@ kUnknown
impeller::compiler::ToExecutionModel
spv::ExecutionModel ToExecutionModel(SourceType type)
Definition: types.cc:198
impeller::compiler::InputDescription::columns
size_t columns
Definition: types.h:69
impeller::compiler::SourceTypeFromFileName
SourceType SourceTypeFromFileName(const std::string &file_name)
Definition: types.cc:30
impeller::compiler::UniformDescription
Definition: types.h:48
impeller::compiler::InputDescription
Definition: types.h:60
impeller::compiler::UniformDescription::struct_float_count
size_t struct_float_count
Definition: types.h:57
impeller::compiler::ShaderBundleConfig
std::unordered_map< std::string, ShaderConfig > ShaderBundleConfig
Definition: types.h:81
impeller::compiler::SourceLanguage
SourceLanguage
Definition: types.h:42
impeller::compiler::TargetPlatform::kOpenGLDesktop
@ kOpenGLDesktop
impeller::compiler::SourceTypeFromString
SourceType SourceTypeFromString(std::string name)
Definition: types.cc:46
impeller::compiler::TargetPlatformToString
std::string TargetPlatformToString(TargetPlatform platform)
Definition: types.cc:74
impeller::compiler::TargetPlatform::kUnknown
@ kUnknown
impeller::compiler::SourceTypeToString
std::string SourceTypeToString(SourceType type)
Definition: types.cc:232
impeller::compiler::ShaderConfig::source_file_name
std::string source_file_name
Definition: types.h:75
impeller::compiler::TargetPlatform::kOpenGLES
@ kOpenGLES
impeller::compiler::TargetPlatform::kRuntimeStageMetal
@ kRuntimeStageMetal
impeller::compiler::InputDescription::location
size_t location
Definition: types.h:62
impeller::compiler::SourceType::kVertexShader
@ kVertexShader
impeller::compiler::ToShaderCShaderKind
shaderc_shader_kind ToShaderCShaderKind(SourceType type)
Definition: types.cc:184
impeller::compiler::TargetPlatformBundlesSkSL
bool TargetPlatformBundlesSkSL(TargetPlatform platform)
Definition: types.cc:320
impeller
Definition: aiks_blur_unittests.cc:20
impeller::compiler::ShaderConfig
A shader config parsed as part of a ShaderBundleConfig.
Definition: types.h:74
impeller::compiler::ShaderCErrorToString
std::string ShaderCErrorToString(shaderc_compilation_status status)
Definition: types.cc:159
impeller::compiler::TargetPlatform::kSkSL
@ kSkSL
impeller::compiler::TargetPlatform::kRuntimeStageGLES
@ kRuntimeStageGLES