// // Copyright 2015 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // VaryingPacking: // Class which describes a mapping from varyings to registers, according // to the spec, or using custom packing algorithms. We also keep a register // allocation list for the D3D renderer. // #ifndef LIBANGLE_VARYINGPACKING_H_ #define LIBANGLE_VARYINGPACKING_H_ #include <GLSLANG/ShaderVars.h> #include "angle_gl.h" #include "common/angleutils.h" #include "libANGLE/angletypes.h" #include <map> namespace gl { class InfoLog; class ProgramExecutable; struct Caps; struct LinkingVariables; struct ProgramVaryingRef; ProgramMergedVaryings; // A varying can have different names between stages if matched by the location layout qualifier. // Additionally, same name varyings could still be of two identical struct types with different // names. This struct contains information on the varying in one of the two stages. PackedVarying // will thus contain two copies of this along with common information, such as interpolation or // field index. struct VaryingInShaderRef : angle::NonCopyable { … }; struct PackedVarying : angle::NonCopyable { … }; struct PackedVaryingRegister final { … }; // Supported packing modes: enum class PackMode { … }; enum class PerVertexMember { … }; PerVertexMemberBitSet; class VaryingPacking final : angle::NonCopyable { … }; class ProgramVaryingPacking final : angle::NonCopyable { … }; ProgramMergedVaryings GetMergedVaryingsFromLinkingVariables( const LinkingVariables &linkingVariables); } // namespace gl #endif // LIBANGLE_VARYINGPACKING_H_