diff options
author | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-10-09 17:56:51 +0200 |
---|---|---|
committer | Frederik Gladhorn <frederik.gladhorn@digia.com> | 2014-10-09 17:56:52 +0200 |
commit | 881ceeff428c377d02ae3881beccdbb028385075 (patch) | |
tree | 65bd4335d7f67b81b04e33f2cbb17a41cf966dd8 /src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h | |
parent | b3d2c867ed14cd6337d5e32b8750f198b5b7d331 (diff) | |
parent | 106487387d493dab934e19b33bfed55b8df62d67 (diff) |
Merge remote-tracking branch 'origin/5.4' into dev
Change-Id: I05fcd8dc66d9ad0dc76bb7f5bae05c9876bfba14
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h new file mode 100644 index 0000000000..40e64cf36c --- /dev/null +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/ShaderD3D.h @@ -0,0 +1,94 @@ +// +// 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. +// + +// ShaderD3D.h: Defines the rx::ShaderD3D class which implements rx::ShaderImpl. + +#ifndef LIBGLESV2_RENDERER_SHADERD3D_H_ +#define LIBGLESV2_RENDERER_SHADERD3D_H_ + +#include "libGLESv2/renderer/ShaderImpl.h" +#include "libGLESv2/Shader.h" + +#include <map> + +namespace rx +{ +class DynamicHLSL; +class Renderer; + +class ShaderD3D : public ShaderImpl +{ + friend class DynamicHLSL; + + public: + ShaderD3D(GLenum type, rx::Renderer *renderer); + virtual ~ShaderD3D(); + + static ShaderD3D *makeShaderD3D(ShaderImpl *impl); + static const ShaderD3D *makeShaderD3D(const ShaderImpl *impl); + + // ShaderImpl implementation + const std::string &getInfoLog() const { return mInfoLog; } + const std::string &getTranslatedSource() const { return mHlsl; } + + // D3D-specific methods + virtual void uncompile(); + void resetVaryingsRegisterAssignment(); + unsigned int getUniformRegister(const std::string &uniformName) const; + unsigned int getInterfaceBlockRegister(const std::string &blockName) const; + int getSemanticIndex(const std::string &attributeName) const; + + rx::D3DWorkaroundType getD3DWorkarounds() const; + int getShaderVersion() const { return mShaderVersion; } + bool usesDepthRange() const { return mUsesDepthRange; } + bool usesPointSize() const { return mUsesPointSize; } + + static void releaseCompiler(); + static ShShaderOutput getCompilerOutputType(GLenum shader); + + virtual bool compile(const std::string &source); + + private: + DISALLOW_COPY_AND_ASSIGN(ShaderD3D); + + void compileToHLSL(void *compiler, const std::string &source); + void parseVaryings(void *compiler); + + void initializeCompiler(); + void parseAttributes(void *compiler); + void *getCompiler(); + + static bool compareVarying(const gl::PackedVarying &x, const gl::PackedVarying &y); + + static void *mFragmentCompiler; + static void *mVertexCompiler; + + GLenum mType; + rx::Renderer *mRenderer; + + int mShaderVersion; + + bool mUsesMultipleRenderTargets; + bool mUsesFragColor; + bool mUsesFragData; + bool mUsesFragCoord; + bool mUsesFrontFacing; + bool mUsesPointSize; + bool mUsesPointCoord; + bool mUsesDepthRange; + bool mUsesFragDepth; + bool mUsesDiscardRewriting; + bool mUsesNestedBreak; + + std::string mHlsl; + std::string mInfoLog; + std::map<std::string, unsigned int> mUniformRegisterMap; + std::map<std::string, unsigned int> mInterfaceBlockRegisterMap; +}; + +} + +#endif // LIBGLESV2_RENDERER_SHADERD3D_H_ |