diff options
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_ |