Edit

kc3-lang/angle/src/compiler/translator/tree_ops/RewriteStructSamplers.h

Branch :

  • Show log

    Commit

  • Author : Kenneth Russell
    Date : 2021-07-28 00:36:12
    Hash : aec5e65c
    Message : Get direct-to-Metal backend to run angle_end2end_tests. Cherry-pick nameless struct fix from Apple in https://bugs.webkit.org/show_bug.cgi?id=227482 . Fix SeparateCompoundStructDeclarations pass to stop generating multiple declarations; thanks syoussefi@ for advice. Incorporate additional passes from TranslatorVulkan (MonomorphizeUnsupportedFunctionsInVulkanGLSL, RewriteArrayOfArrayOfOpaqueUniforms, SeparateStructFromUniformDeclarations) needed by RewriteStructSamplers pass in TranslatorMetalDirect. Fixes many assertion failures in GLSL tests. Moved these passes out of tree_ops/vulkan. Thanks again to syoussefi@ for advice and help. Disable a validation check related to the RewritePipelines pass. Skip two tests that were failing for other reasons. With these changes, angle_end2end_tests runs to completion when the direct-to-Metal backend is turned on. There are still ~1300 failures of the ~4000 tests which will be investigated next. Bug: angleproject:5505 Change-Id: Ibca77822543e8e8e8d2a8c862e92cdf74bfa3545 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/3058524 Reviewed-by: Shahbaz Youssefi <syoussefi@chromium.org> Commit-Queue: Kenneth Russell <kbr@chromium.org>

  • src/compiler/translator/tree_ops/RewriteStructSamplers.h
  • //
    // 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.
    //
    // RewriteStructSamplers: Extract structs from samplers.
    //
    // This traverser is designed to strip out samplers from structs. It moves them into separate
    // uniform sampler declarations. This allows the struct to be stored in the default uniform block.
    // This transformation requires MonomorphizeUnsupportedFunctions to have been run so it
    // wouldn't need to deal with functions that are passed such structs.
    //
    // For example:
    //   struct S { sampler2D samp; int i; };
    //   uniform S uni;
    // Is rewritten as:
    //   struct S { int i; };
    //   uniform S uni;
    //   uniform sampler2D uni_i;
    
    #ifndef COMPILER_TRANSLATOR_TREEOPS_REWRITESTRUCTSAMPLERS_H_
    #define COMPILER_TRANSLATOR_TREEOPS_REWRITESTRUCTSAMPLERS_H_
    
    #include "common/angleutils.h"
    
    namespace sh
    {
    class TCompiler;
    class TIntermBlock;
    class TSymbolTable;
    
    ANGLE_NO_DISCARD bool RewriteStructSamplers(TCompiler *compiler,
                                                TIntermBlock *root,
                                                TSymbolTable *symbolTable,
                                                int *removedUniformsCountOut);
    }  // namespace sh
    
    #endif  // COMPILER_TRANSLATOR_TREEOPS_VULKAN_REWRITESTRUCTSAMPLERS_H_