Hash :
cc56e1aa
Author :
Date :
2021-04-09T23:35:07
Vulkan: Remove special output of structs and keep them in AST The code that separated out declaration of nameless structs from uniform variable declarations is generalized to separate out declaration of all structs from uniform variable declarations. As a result, a pass that outputs the struct types at the top of the shader is no longer necessary. The struct declarations are kept in the AST to be output to GLSL as they normally would when not used in conjunction with uniform variables. After this change, the Vulkan and Metal translators no longer intermix transformations and code generation; transformations are done first entirely in AST, and code generation is done at the end. Bug: angleproject:2461 Bug: angleproject:4889 Change-Id: Ieb4d3f7091845e50c3dc399603ab01182692521d Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2818153 Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org> Reviewed-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Tim Van Patten <timvp@google.com>
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
//
// Copyright 2018 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.
//
// SeparateStructFromUniformDeclarations: Separate struct declarations from uniform declarations.
// It necessarily gives nameless uniform structs internal names.
//
// For example:
// uniform struct { int a; } uni;
// becomes:
// struct s1 { int a; };
// uniform s1 uni;
//
// And:
// uniform struct S { int a; } uni;
// becomes:
// struct S { int a; };
// uniform S uni;
//
//
#ifndef COMPILER_TRANSLATOR_TREEOPS_VULKAN_SEPARATESTRUCTFROMUNIFORMDECLARATIONS_H_
#define COMPILER_TRANSLATOR_TREEOPS_VULKAN_SEPARATESTRUCTFROMUNIFORMDECLARATIONS_H_
#include "common/angleutils.h"
namespace sh
{
class TCompiler;
class TIntermBlock;
class TSymbolTable;
ANGLE_NO_DISCARD bool SeparateStructFromUniformDeclarations(TCompiler *compiler,
TIntermBlock *root,
TSymbolTable *symbolTable);
} // namespace sh
#endif // COMPILER_TRANSLATOR_TREEOPS_VULKAN_SEPARATESTRUCTFROMUNIFORMDECLARATIONS_H_