Hash :
c55aefe3
Author :
Date :
2018-08-28T19:59:00
ES31: Support atomic functions on D3D11 - Part III This patch is the third one to support atomic functions on D3D11. In this patch we enable support for atomic function returns outside of assignments (e.g. part of arithmetic operations or to index into arrays) and when used directly initialize a variable. Note that we are still missing the functionality to be tag loops with [allow_uav_condition] as required by InterlockedCompareExchange. BUG=angleproject:2682 TEST=angle_end2end_tests Change-Id: Ia409ebb10621fd5c514cf6c76f366a320a9d9fc1 Reviewed-on: https://chromium-review.googlesource.com/1208317 Reviewed-by: Bryan Bernhart <bryan.bernhart@intel.com> Reviewed-by: Corentin Wallez <cwallez@chromium.org> Commit-Queue: Corentin Wallez <cwallez@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
//
// Copyright (c) 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.
//
// RewriteAtomicFunctionExpressions rewrites the expressions that contain
// atomic function calls and cannot be directly translated into HLSL into
// several simple ones that can be easily handled in the HLSL translator.
//
// We need to rewite these expressions because:
// 1. All GLSL atomic functions have return values, which all represent the
// original value of the shared or ssbo variable; while all HLSL atomic
// functions don't, and the original value can be stored in the last
// parameter of the function call.
// 2. For HLSL atomic functions, the last parameter that stores the original
// value is optional except for InterlockedExchange and
// InterlockedCompareExchange. Missing original_value in the call of
// InterlockedExchange or InterlockedCompareExchange results in a compile
// error from HLSL compiler.
//
// RewriteAtomicFunctionExpressions is a function that can modify the AST
// to ensure all the expressions that contain atomic function calls can be
// directly translated into HLSL expressions.
#ifndef COMPILER_TRANSLATOR_TREEOPS_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_
#define COMPILER_TRANSLATOR_TREEOPS_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_
namespace sh
{
class TIntermNode;
class TSymbolTable;
void RewriteAtomicFunctionExpressions(TIntermNode *root,
TSymbolTable *symbolTable,
int shaderVersion);
} // namespace sh
#endif // COMPILER_TRANSLATOR_TREEOPS_REWRITE_ATOMIC_FUNCTION_EXPRESSIONS_H_