Hash :
b7582680
Author :
Date :
2025-02-24T18:04:32
Reland: GL: Allow untranslated shaders to pass through on GLES Add an EGL extension EGL_ANGLE_create_context_passthrough_shaders which uses the NULL translator and passes the original shader to the driver. The parser is still used for shader reflection. Always enable the null compiler backend. It has almost no binary size cost and is now potentially used when the null ANGLE backend is not enabled. Bug: angleproject:398857482 Change-Id: Id528189ccbbacb1c444eacb151baadfda9fcc04b Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/6488609 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Geoff Lang <geofflang@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104
//
// Copyright 2013 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.
//
#include "compiler/translator/null/TranslatorNULL.h"
#ifdef ANGLE_ENABLE_ESSL
# include "compiler/translator/glsl/TranslatorESSL.h"
#endif // ANGLE_ENABLE_ESSL
#ifdef ANGLE_ENABLE_GLSL
# include "compiler/translator/glsl/TranslatorGLSL.h"
#endif // ANGLE_ENABLE_GLSL
#ifdef ANGLE_ENABLE_HLSL
# include "compiler/translator/hlsl/TranslatorHLSL.h"
#endif // ANGLE_ENABLE_HLSL
#ifdef ANGLE_ENABLE_VULKAN
# include "compiler/translator/spirv/TranslatorSPIRV.h"
#endif // ANGLE_ENABLE_VULKAN
#ifdef ANGLE_ENABLE_METAL
# include "compiler/translator/msl/TranslatorMSL.h"
#endif // ANGLE_ENABLE_METAL
#ifdef ANGLE_ENABLE_WGPU
# include "compiler/translator/wgsl/TranslatorWGSL.h"
#endif // ANGLE_ENABLE_WGPU
#include "compiler/translator/util.h"
namespace sh
{
//
// This function must be provided to create the actual
// compile object used by higher level code. It returns
// a subclass of TCompiler.
//
TCompiler *ConstructCompiler(sh::GLenum type, ShShaderSpec spec, ShShaderOutput output)
{
if (IsOutputNULL(output))
{
return new TranslatorNULL(type, spec);
}
#ifdef ANGLE_ENABLE_ESSL
if (IsOutputESSL(output))
{
return new TranslatorESSL(type, spec);
}
#endif // ANGLE_ENABLE_ESSL
#ifdef ANGLE_ENABLE_GLSL
if (IsOutputGLSL(output))
{
return new TranslatorGLSL(type, spec, output);
}
#endif // ANGLE_ENABLE_GLSL
#ifdef ANGLE_ENABLE_HLSL
if (IsOutputHLSL(output))
{
return new TranslatorHLSL(type, spec, output);
}
#endif // ANGLE_ENABLE_HLSL
#ifdef ANGLE_ENABLE_VULKAN
if (IsOutputSPIRV(output))
{
return new TranslatorSPIRV(type, spec);
}
#endif // ANGLE_ENABLE_VULKAN
#ifdef ANGLE_ENABLE_METAL
if (IsOutputMSL(output))
{
return new TranslatorMSL(type, spec, output);
}
#endif // ANGLE_ENABLE_METAL
#ifdef ANGLE_ENABLE_WGPU
if (IsOutputWGSL(output))
{
return new TranslatorWGSL(type, spec, output);
}
#endif // ANGLE_ENABLE_WGPU
// Unsupported compiler or unknown format. Return nullptr per the sh::ConstructCompiler API.
return nullptr;
}
//
// Delete the compiler made by ConstructCompiler
//
void DeleteCompiler(TCompiler *compiler)
{
SafeDelete(compiler);
}
} // namespace sh