Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
A
angle
  • Project
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Chen Yisong
  • angle
  • Repository

Switch branch/tag
  • angle
  • src
  • compiler
  • translator
  • Operator.h
Find file
BlameHistoryPermalink
  • Jiawei Shao's avatar
    ES31: Support atomic functions on D3D11 - Part I · a6a7842f
    Jiawei Shao authored Jun 28, 2018
    This patch is the first one of the implementation of atomic
    functions in D3D11.
    
    There are mainly two differences in the usage of GLSL and HLSL
    atomic functions:
    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 and InterlockedCompareExchange results
       in a compile error from HLSL compiler.
    
    To handle these differences, we plan to implement the translation
    in two steps:
    1. Support direct translations from GLSL atomic functions to HLSL
       ones.
    Direct translation can only handle the following two situations:
    (1) The sentence is a GLSL atomic function call without requesting
        a return value and it is not atomicExchange or atomicCompSwap:
        e.g.
        GLSL: atomicAdd(mem, value);
     -> HLSL: InterlockedAdd(mem, value);
    (2) The sentence is a simple assignment expression: its right is
        a GLSL atomic function call and its left is a declared variable.
        e.g.
        GLSL: oldValue = atomicAdd(mem, value);
     -> HLSL: InterlockedAdd(mem, value, oldValue);
    
    2. Support atomic functions in the situations that don't support
       direct translations.
    We will modify the intermediate tree to make direct translation work
    on all these situations.
    e.g.
       atomicExchange(mem, value);
    -> int oldValue;
       oldValue = atomicExchange(mem, value);
    
       int oldValue = atomicAdd(mem, value);
    -> int oldValue;
       oldValue = atomicAdd(mem, value);
    
       return atomicAdd(mem, value);
    -> int temp;
       temp = atomicAdd(mem, value);
       return temp;
    
       for (i = 0; i < atomicAdd(mem, value); ++i)
    -> int temp;
       temp = atomicAdd(mem, value);
       for (i = 0; i < temp; ++i)
       {
           ...
           temp = atomicAdd(mem, value);
       }
    
       int result = isTrue ? atomicAdd(mem, value) : 0;
    -> int result;
       if (isTrue)
       {
           result = atomicAdd(mem, value);
       }
       else
       {
           result = 0;
       }
    
    This patch completes Step 1 which mainly focus on the translation
    from GLSL atomic functions to HLSL ones.
    
    BUG=angleproject:2682
    TEST=angle_end2end_tests
    
    Change-Id: I3b655b6e286dad4fd97f255f7fe87521c94db30c
    Reviewed-on: https://chromium-review.googlesource.com/1121835
    Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
    Reviewed-by: 's avatarOlli Etuaho <oetuaho@nvidia.com>
    a6a7842f
Operator.h 5.13 KB
EditWeb IDE
×

Replace Operator.h

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.