Hash :
c2a9300c
Author :
Date :
2024-09-10T19:33:33
WGSL: Rewrite input/output variables GLSL builtin variables and in/out variables correspond to WGSL's main function params and return value, so rewrite them accordingly. This is done by generating structs to use as main function params and return values, generating similar global structs, and copying the former into the latter so the rest of the program can just use the variables stored in the global structs. Bug: angleproject:42267100 Change-Id: Ic3e1196f6fb95b963ce03845096a59ea7599d608 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/5835347 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Commit-Queue: Matthew Denton <mpdenton@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
//
// 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.
//
#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)
{
#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