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 /gfx/angle/checkout/src/compiler/translator/TranslatorMetal.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 'gfx/angle/checkout/src/compiler/translator/TranslatorMetal.h')
-rw-r--r-- | gfx/angle/checkout/src/compiler/translator/TranslatorMetal.h | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/gfx/angle/checkout/src/compiler/translator/TranslatorMetal.h b/gfx/angle/checkout/src/compiler/translator/TranslatorMetal.h new file mode 100644 index 0000000000..32b7564f34 --- /dev/null +++ b/gfx/angle/checkout/src/compiler/translator/TranslatorMetal.h @@ -0,0 +1,62 @@ +// +// Copyright 2019 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. +// +// TranslatorMetal: +// A GLSL-based translator that outputs shaders that fit GL_KHR_vulkan_glsl. +// It takes into account some considerations for Metal backend also. +// The shaders are then fed into glslang to spit out SPIR-V. +// See: https://www.khronos.org/registry/vulkan/specs/misc/GL_KHR_vulkan_glsl.txt +// +// The SPIR-V will then be translated to Metal Shading Language later in Metal backend. +// + +#ifndef LIBANGLE_RENDERER_METAL_TRANSLATORMETAL_H_ +#define LIBANGLE_RENDERER_METAL_TRANSLATORMETAL_H_ + +#include "compiler/translator/DriverUniformMetal.h" +#include "compiler/translator/TranslatorVulkan.h" +#include "compiler/translator/tree_util/DriverUniform.h" +#include "compiler/translator/tree_util/SpecializationConstant.h" + +namespace sh +{ + +// TODO: http://anglebug.com/5339 Implement it using actual specialization constant. For now we are +// redirecting to driver uniforms +class SpecConstMetal : public SpecConst +{ + public: + SpecConstMetal(TSymbolTable *symbolTable, + const ShCompileOptions &compileOptions, + GLenum shaderType) + : SpecConst(symbolTable, compileOptions, shaderType) + {} + ~SpecConstMetal() override {} + + private: +}; + +class TranslatorMetal : public TranslatorVulkan +{ + public: + TranslatorMetal(sh::GLenum type, ShShaderSpec spec); + + protected: + [[nodiscard]] bool translate(TIntermBlock *root, + const ShCompileOptions &compileOptions, + PerformanceDiagnostics *perfDiagnostics) override; + + [[nodiscard]] bool transformDepthBeforeCorrection(TIntermBlock *root, + const DriverUniform *driverUniforms) override; + + [[nodiscard]] bool insertSampleMaskWritingLogic(TInfoSinkBase &sink, + TIntermBlock *root, + const DriverUniformMetal *driverUniforms); + [[nodiscard]] bool insertRasterizerDiscardLogic(TInfoSinkBase &sink, TIntermBlock *root); +}; + +} // namespace sh + +#endif /* LIBANGLE_RENDERER_METAL_TRANSLATORMETAL_H_ */ |