tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

RewriteAtomicFunctionExpressions.h (1886B)


      1 //
      2 // Copyright 2018 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 // RewriteAtomicFunctionExpressions rewrites the expressions that contain
      7 // atomic function calls and cannot be directly translated into HLSL into
      8 // several simple ones that can be easily handled in the HLSL translator.
      9 //
     10 // We need to rewite these expressions because:
     11 // 1. All GLSL atomic functions have return values, which all represent the
     12 //    original value of the shared or ssbo variable; while all HLSL atomic
     13 //    functions don't, and the original value can be stored in the last
     14 //    parameter of the function call.
     15 // 2. For HLSL atomic functions, the last parameter that stores the original
     16 //    value is optional except for InterlockedExchange and
     17 //    InterlockedCompareExchange. Missing original_value in the call of
     18 //    InterlockedExchange or InterlockedCompareExchange results in a compile
     19 //    error from HLSL compiler.
     20 //
     21 // RewriteAtomicFunctionExpressions is a function that can modify the AST
     22 // to ensure all the expressions that contain atomic function calls can be
     23 // directly translated into HLSL expressions.
     24 
     25 #ifndef COMPILER_TRANSLATOR_TREEOPS_D3D_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_
     26 #define COMPILER_TRANSLATOR_TREEOPS_D3D_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_
     27 
     28 #include "common/angleutils.h"
     29 
     30 namespace sh
     31 {
     32 class TCompiler;
     33 class TIntermNode;
     34 class TSymbolTable;
     35 
     36 [[nodiscard]] bool RewriteAtomicFunctionExpressions(TCompiler *compiler,
     37                                                    TIntermNode *root,
     38                                                    TSymbolTable *symbolTable,
     39                                                    int shaderVersion);
     40 }  // namespace sh
     41 
     42 #endif  // COMPILER_TRANSLATOR_TREEOPS_D3D_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_