1. 16 Jan, 2020 13 commits
  2. 15 Jan, 2020 2 commits
  3. 14 Jan, 2020 13 commits
  4. 13 Jan, 2020 7 commits
  5. 11 Jan, 2020 5 commits
    • Add a perf test for drawing with alternating programs · ed074852
      Shahbaz Youssefi authored
      The programs have a different shader interface, to force rebinding
      descriptor sets in the Vulkan backend.
      
      Bug: angleproject:4261
      Change-Id: I7a18a441483dfe34bd40b5a30ca34b7fd0dc3219
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1990085
      Commit-Queue: Jamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
    • Fix GLSLTest_ES3.MixedRowAndColumnMajorMatrices_ReadSideEffect · f0be7c81
      Shahbaz Youssefi authored
      The test had two array sizes swapped, causing failure on vendors that
      statically verified index-out-of-bound accesses.
      
      Bug: angleproject:3831
      Change-Id: I8ec32e9c11b38b69f03b1a22e60dfb6c6e82c2a4
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1947123Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com>
      Reviewed-by: 's avatarShahbaz Youssefi <syoussefi@chromium.org>
      Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    • Vulkan: Optimize getIndexRange · 5e33e647
      Shahbaz Youssefi authored
      This function was unconditionally calling finishImpl().  This is changed
      to finishToSerial() to only wait until the serial that actually used the
      buffer.
      
      Bug: angleproject:3072
      Change-Id: Ida89bb119b4ba6420f12404b911af0e3b4583a51
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1993407
      Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
      Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
    • Vulkan: Workaround vertex attributes vs stride issue on AMD · 6b275406
      Shahbaz Youssefi authored
      Under robustBufferAccess, Vulkan states that:
      
      Vertex input attributes are considered out of bounds if the offset of
      the attribute in the bound vertex buffer range plus the size of the
      attribute is greater than either:
      
      - vertexBufferRangeSize, if bindingStride == 0; or
      - (vertexBufferRangeSize - (vertexBufferRangeSize % bindingStride))
      
      The latter implies that if the buffer size is not a multiple of the
      vertex attribute stride, what lies beyond the last multiple of stride is
      considered out of bounds.
      
      It also says:
      
      Out-of-bounds buffer loads will return any of the following values:
      
      - Values from anywhere within the memory range(s) bound to the buffer
        (possibly including bytes of memory past the end of the buffer, up to
        the end of the bound range).
      - Zero values, or (0,0,0,x) vectors for vector reads where x is a valid
        value represented in the type of the vector components and may be any
        of ...
      
      The first bullet point indicates that the driver is allowed to load the
      attribute values from the buffer if its range still lies within the
      buffer size.
      
      Take the following example:
      
      - Buffer size = 12
      - Attribute stride = 8
      - Attribute offset = 0
      - Attribute size = 4
      
      Basically the buffer is thus laid out as follows:
      
                attr stride
            _________/\_________
           /                    \
          +----------+----------+----------+
          | vertex 0 | padding  | vertex 1 |
          +----------+----------+----------+
           \___ ____/
               V
           attr size
      
      In the above example, the attribute for vertex 1 is considered out of
      bounds, but the driver is allowed to either read it correctly, or return
      (0, 0, 0, 1) for it.
      
      Most drivers implement the former, while AMD implements the latter.
      This change introduces a workaround for AMD where
      GL_MAX_VERTEX_ATTRIB_STRIDE is limited to 2048 (the common value for it
      according to gpuinfo.org) and conservatively rounds up every buffer
      allocation to that size.
      
      While technically, this workaround should be applied on any device with
      the robustBufferAccess feature enabled, it is currently limited to AMD
      to avoid the inefficiency.  A possible future revision of Vulkan may
      relax the above restrictions.
      
      Bug: angleproject:2848
      Change-Id: Ida5ae5d777da10f22ce8be5a09a7644b5bbd778e
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1991709Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
      Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
    • Vulkan: fix default uniform descriptor rebind on program change · 8fde1151
      Shahbaz Youssefi authored
      When the program binding changes, we set the descriptor sets binding
      dirty bit if the program had any textures, UBOs, SSBOs, images or atomic
      counters.  The check for default uniforms was missing.  So if the two
      programs had no resources and were only using default uniforms, then
      drawing with one after the other didn't update the descriptor set
      binding of the default uniforms for the second draw.
      
      Bug: angleproject:4277
      Change-Id: I631a1619658ee713484cfaee99fe1e39987e16e7
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1993408
      Commit-Queue: Shahbaz Youssefi <syoussefi@chromium.org>
      Reviewed-by: 's avatarCody Northrop <cnorthrop@google.com>