diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /dom/canvas/WebGLShaderValidator.h | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/canvas/WebGLShaderValidator.h')
-rw-r--r-- | dom/canvas/WebGLShaderValidator.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/dom/canvas/WebGLShaderValidator.h b/dom/canvas/WebGLShaderValidator.h new file mode 100644 index 0000000000..ab05528f19 --- /dev/null +++ b/dom/canvas/WebGLShaderValidator.h @@ -0,0 +1,76 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#ifndef WEBGL_SHADER_VALIDATOR_H_ +#define WEBGL_SHADER_VALIDATOR_H_ + +#include <memory> +#include <string> +#include <unordered_map> + +#include "GLDefs.h" +#include "GLSLANG/ShaderLang.h" +#include "nsString.h" + +namespace mozilla::webgl { + +class ShaderValidatorResults final { + public: + std::string mInfoLog; + bool mValid = false; + + std::string mObjectCode; + int mShaderVersion = 0; + int mVertexShaderNumViews = 0; + + std::vector<sh::Attribute> mAttributes; + std::vector<sh::InterfaceBlock> mInterfaceBlocks; + std::vector<sh::OutputVariable> mOutputVariables; + std::vector<sh::Uniform> mUniforms; + std::vector<sh::Varying> mVaryings; + + std::unordered_map<std::string, std::string> mNameMap; + + int mMaxVaryingVectors = 0; + + bool mNeeds_webgl_gl_VertexID_Offset = false; + + bool CanLinkTo(const ShaderValidatorResults& vert, + nsCString* const out_log) const; + size_t SizeOfIncludingThis(MallocSizeOf) const; +}; + +class ShaderValidator final { + public: + const ShHandle mHandle; + + private: + const ShCompileOptions mCompileOptions; + const int mMaxVaryingVectors; + + public: + bool mIfNeeded_webgl_gl_VertexID_Offset = false; + + static std::unique_ptr<ShaderValidator> Create( + GLenum shaderType, ShShaderSpec spec, ShShaderOutput outputLanguage, + const ShBuiltInResources& resources, ShCompileOptions compileOptions); + + private: + ShaderValidator(ShHandle handle, ShCompileOptions compileOptions, + int maxVaryingVectors) + : mHandle(handle), + mCompileOptions(compileOptions), + mMaxVaryingVectors(maxVaryingVectors) {} + + public: + ~ShaderValidator(); + + std::unique_ptr<const ShaderValidatorResults> ValidateAndTranslate( + const char*) const; +}; + +} // namespace mozilla::webgl + +#endif // WEBGL_SHADER_VALIDATOR_H_ |