1. 11 Jul, 2018 2 commits
    • Vulkan/D3D11: Improve blit framebuffer tests and fix bug in D3D11 · 5c8113d3
      Luc Ferron authored
      - Improving the tests revealed a bug in D3D 11 Fast Path rendering.
      - These changes here are preliminary to implementing the blit for
      depth/stencil in Vulkan when using the viewport flipping.
      
      Bug: angleproject:2673
      Bug: angleproject:2719
      Change-Id: I6d55084e559d3110c8eeb0e7acb4e6fb09b6c1b5
      Reviewed-on: https://chromium-review.googlesource.com/1132125Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
      Commit-Queue: Luc Ferron <lucferron@chromium.org>
    • ES31: Support atomic functions on D3D11 - Part I · a6a7842f
      Jiawei Shao authored
      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>
  2. 10 Jul, 2018 18 commits
  3. 09 Jul, 2018 12 commits
  4. 06 Jul, 2018 1 commit
  5. 05 Jul, 2018 7 commits