1. 07 Mar, 2018 2 commits
  2. 26 Jan, 2018 1 commit
    • Iago Toral's avatar
      anv/descriptor_set: add reference counting for descriptor set layouts · 14f6275c
      Iago Toral authored
      The spec states that descriptor set layouts can be destroyed almost
      at any time:
      
         "VkDescriptorSetLayout objects may be accessed by commands that
          operate on descriptor sets allocated using that layout, and those
          descriptor sets must not be updated with vkUpdateDescriptorSets
          after the descriptor set layout has been destroyed. Otherwise,
          descriptor set layouts can be destroyed any time they are not in
          use by an API command."
      
      v2: allocate off the device allocator with DEVICE scope (Jason)
      
      Fixes the following work-in-progress CTS tests:
      dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.graphics
      dEQP-VK.api.descriptor_set.descriptor_set_layout_lifetime.compute
      Suggested-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
      Reviewed-by: Jason Ekstrand's avatarJason Ekstrand <jason@jlekstrand.net>
      14f6275c
  3. 24 Jan, 2018 1 commit
  4. 12 Jan, 2018 1 commit
  5. 06 Oct, 2017 1 commit
  6. 20 Sep, 2017 1 commit
  7. 23 Jul, 2017 1 commit
  8. 05 May, 2017 1 commit
  9. 08 Apr, 2017 1 commit
  10. 15 Mar, 2017 1 commit
  11. 13 Mar, 2017 2 commits
    • Jason Ekstrand's avatar
      anv: Use on-the-fly surface states for dynamic buffer descriptors · dd4db846
      Jason Ekstrand authored
      We have a performance problem with dynamic buffer descriptors.  Because
      we are currently implementing them by pushing an offset into the shader
      and adding that offset onto the already existing offset for the UBO/SSBO
      operation, all UBO/SSBO operations on dynamic descriptors are indirect.
      The back-end compiler implements indirect pull constant loads using what
      basically amounts to a texelFetch instruction.  For pull constant loads
      with constant offsets, however, we use an oword block read message which
      goes through the constant cache and reads a whole cache line at a time.
      Because of these two things, direct pull constant loads are much faster
      than indirect pull constant loads.  Because all loads from dynamically
      bound buffers are indirect, the user takes a substantial performance
      penalty when using this "performance" feature.
      
      There are two potential solutions I have seen for this problem.  The
      alternate solution is to continue pushing offsets into the shader but
      wire things up in the back-end compiler so that we use the oword block
      read messages anyway.  The only reason we can do this because we know a
      priori that the dynamic offsets are uniform and 16-byte aligned.
      Unfortunately, thanks to the 16-byte alignment requirement of the oword
      messages, we can't do some general "if the indirect offset is uniform,
      use an oword message" sort of thing.
      
      This solution, however, is recommended for a few of reasons:
      
       1. Surface states are relatively cheap.  We've been using on-the-fly
          surface state setup for some time in GL and it works well.  Also,
          dynamic offsets with on-the-fly surface state should still be
          cheaper than allocating new descriptor sets every time you want to
          change a buffer offset which is really the only requirement of the
          dynamic offsets feature.
      
       2. This requires substantially less compiler plumbing.  Not only can we
          delete the entire apply_dynamic_offsets pass but we can also avoid
          having to add architecture for passing dynamic offsets to the back-
          end compiler in such a way that it can continue using oword messages.
      
       3. We get robust buffer access range-checking for free.  Because the
          offset and range are baked into the surface state, we no longer need
          to pass ranges around and do bounds-checking in the shader.
      
       4. Once we finally get UBO pushing implemented, it will be much easier
          to handle pushing chunks of dynamic descriptors if the compiler
          remains blissfully unaware of dynamic descriptors.
      
      This commit improves performance of The Talos Principle on ULTRA
      settings by around 50% and brings it nicely into line with OpenGL
      performance.
      Reviewed-by: Lionel Landwerlin's avatarLionel Landwerlin <lionel.g.landwerlin@intel.com>
      dd4db846
    • Jason Ekstrand's avatar
  12. 02 Mar, 2017 5 commits
  13. 26 Jan, 2017 1 commit
  14. 24 Jan, 2017 1 commit
  15. 21 Jan, 2017 1 commit
  16. 20 Jan, 2017 1 commit
  17. 22 Nov, 2016 1 commit
    • Jason Ekstrand's avatar
      anv: Set up binding tables and surface states for input attachments · 1d5ac0a4
      Jason Ekstrand authored
      This commit adds the last remaining bits to support input attachments in
      the Intel Vulkan driver.  For color and depth attachments, we allocate an
      input attachment surface state during vkCmdBeginRenderPass like we do for
      the render target surface states.  This is so that we can incorporate the
      clear color and aux information as used in rendering.  For stencil, we just
      treat it like a regular texture because we don't there is no aux.  Also,
      only having to worry about at most one input attachment surface for each
      attachment makes some of the vkCmdBeginRenderPass code simpler.
      Reviewed-by: Jordan Justen's avatarJordan Justen <jordan.l.justen@intel.com>
      1d5ac0a4
  18. 17 Nov, 2016 3 commits
  19. 18 Oct, 2016 1 commit
  20. 30 Aug, 2016 1 commit
  21. 25 Aug, 2016 1 commit
  22. 15 Jul, 2016 1 commit
  23. 10 Jun, 2016 3 commits
  24. 17 May, 2016 1 commit
  25. 24 Feb, 2016 1 commit
  26. 23 Feb, 2016 3 commits
  27. 18 Feb, 2016 2 commits