diff options
Diffstat (limited to 'chromium/third_party/angle/src/libGLESv2/DynamicHLSL.h')
-rw-r--r-- | chromium/third_party/angle/src/libGLESv2/DynamicHLSL.h | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/chromium/third_party/angle/src/libGLESv2/DynamicHLSL.h b/chromium/third_party/angle/src/libGLESv2/DynamicHLSL.h new file mode 100644 index 00000000000..07c2a2f2bbc --- /dev/null +++ b/chromium/third_party/angle/src/libGLESv2/DynamicHLSL.h @@ -0,0 +1,78 @@ +// +// Copyright (c) 2014 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. +// +// DynamicHLSL.h: Interface for link and run-time HLSL generation +// + +#ifndef LIBGLESV2_DYNAMIC_HLSL_H_ +#define LIBGLESV2_DYNAMIC_HLSL_H_ + +#include "common/angleutils.h" +#include "libGLESv2/constants.h" + +namespace rx +{ +class Renderer; +} + +namespace gl +{ + +class InfoLog; +class FragmentShader; +class VertexShader; +struct VariableLocation; +struct LinkedVarying; +class VertexAttribute; +struct VertexFormat; +struct ShaderVariable; +struct Varying; +struct Attribute; +struct PackedVarying; + +typedef const PackedVarying *VaryingPacking[IMPLEMENTATION_MAX_VARYING_VECTORS][4]; + +class DynamicHLSL +{ + public: + explicit DynamicHLSL(rx::Renderer *const renderer); + + int packVaryings(InfoLog &infoLog, VaryingPacking packing, FragmentShader *fragmentShader, + VertexShader *vertexShader, const std::vector<std::string>& transformFeedbackVaryings); + std::string generateInputLayoutHLSL(const VertexFormat inputLayout[], const Attribute shaderAttributes[]) const; + bool generateShaderLinkHLSL(InfoLog &infoLog, int registers, const VaryingPacking packing, + std::string& pixelHLSL, std::string& vertexHLSL, + FragmentShader *fragmentShader, VertexShader *vertexShader, + const std::vector<std::string>& transformFeedbackVaryings, + std::vector<LinkedVarying> *linkedVaryings, + std::map<int, VariableLocation> *programOutputVars) const; + + std::string generateGeometryShaderHLSL(int registers, FragmentShader *fragmentShader, VertexShader *vertexShader) const; + void getInputLayoutSignature(const VertexFormat inputLayout[], GLenum signature[]) const; + + static const std::string VERTEX_ATTRIBUTE_STUB_STRING; + + private: + DISALLOW_COPY_AND_ASSIGN(DynamicHLSL); + + rx::Renderer *const mRenderer; + + std::string generateVaryingHLSL(VertexShader *shader, const std::string &varyingSemantic, + std::vector<LinkedVarying> *linkedVaryings) const; + void defineOutputVariables(FragmentShader *fragmentShader, std::map<int, VariableLocation> *programOutputVars) const; + std::string generatePointSpriteHLSL(int registers, FragmentShader *fragmentShader, VertexShader *vertexShader) const; + + // Prepend an underscore + static std::string decorateVariable(const std::string &name); + + std::string generateAttributeConversionHLSL(const VertexFormat &vertexFormat, const ShaderVariable &shaderAttrib) const; +}; + +// Utility method shared between ProgramBinary and DynamicHLSL +std::string ArrayString(unsigned int i); + +} + +#endif // LIBGLESV2_DYNAMIC_HLSL_H_ |