1. 07 Nov, 2017 2 commits
    • Refactor interface block linking. · 977abce7
      Jamie Madill authored
      This moves the logic for interface block linking. The new design is
      intended to be flexible enough to be passed into a back-end call to
      ProgramImpl::link. Then, the Impl object can be responsible for both
      filtering out unreferenced interface blocks as well as having access
      to the linked interface block information.
      
      A future change will pass the InterfaceBlockLinker objects (or objects
      when dealing with ES 3.1 and Shader Storage Blocks) to the Impl. This
      will help fix a D3D11 back-end bug where we would need acess to the
      Shader objects to finish a deferred uniform block link.
      
      This should also potentially make it easier for the back-ends to
      determine Shader Storage Block size and properties without defining
      new Impl methods.
      
      BUG=angleproject:2208
      
      Change-Id: Ic5244a808dba44ba1a8c08d9ee701952034d2b18
      Reviewed-on: https://chromium-review.googlesource.com/746203
      Commit-Queue: Jamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org>
    • Clean up HLSL constructor output · bd3cd506
      Olli Etuaho authored
      Split generating HLSL struct constructors from generating built-in
      type constructors, as these didn't have much in common. Struct
      constructors are now only generated when they are needed, as opposed
      to before, when they were generated on any use of a struct.
      
      This changes built-in constructor naming to include "_ctor" and gets
      rid of having special built-in type names just for constructors.
      
      This will make it easier to do changes to constructor output, for
      example to add constructors for structs in std140 layout. This might
      be needed to implement SSBOs efficiently.
      
      This includes one bug fix for writing out struct declarations for
      varyings.
      
      Also improves const-correctness of accessing structs through TType
      in general.
      
      BUG=angleproject:2218
      TEST=angle_unittests, angle_end2end_tests
      
      Change-Id: If865fb56f86486b9c4a2c31e016ea16427f4a5fa
      Reviewed-on: https://chromium-review.googlesource.com/753883Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
      Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
  2. 06 Nov, 2017 6 commits
  3. 05 Nov, 2017 1 commit
    • Fix dEQP test expectations. · ebb1ea2d
      Jamie Madill authored
      These were broken in 1f4d68db because of a lack of test expectation.
      Also narrow the expectations to the Quadro P400.
      Also add a new GLES3 OpenGL expectation.
      
      Note that putting in a certain configs breaks the GPU test
      expectations logic on Android:
      
      I   20.617s list_tests(01000be22172ac54)    Fail to identify GPU
      I   20.617s list_tests(01000be22172ac54)    [ CRASHED      ]
      
      BUG=angleproject:2222
      
      Change-Id: I783c5e36414a201df64b21c6b7cf8410b2260534
      Reviewed-on: https://chromium-review.googlesource.com/754591
      Commit-Queue: Jamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
  4. 04 Nov, 2017 1 commit
  5. 03 Nov, 2017 4 commits
    • Fix writing uniform block maps to HLSL output · 2ef23e2d
      Olli Etuaho authored
      HLSL output maps structs in std140 uniform blocks to a different
      layout in order to eliminate padding. The padding may have been
      inserted to comply with std140 packing rules.
      
      There used to be two issues in writing the maps: Sometimes the same
      map could be written multiple times, and the maps were not being
      written for uniform blocks with instance names.
      
      Rewrite how the uniform buffer struct maps get generated so that
      the code works correctly. Instead of flagging accesses, structs inside
      uniform blocks are gathered from uniform block declarations. When
      accesses to structs in uniform blocks are written out in OutputHLSL,
      it's checked whether a mapped struct needs to be used instead of the
      original one.
      
      This code could still be optimized further by limiting mapped structs
      generation to those ones that really need to be used. This is left to
      be done later.
      
      BUG=angleproject:2084
      TEST=angle_end2end_tests
      
      Change-Id: Iee24b3ef15847d2af64554ac74b8e4be5060d18c
      Reviewed-on: https://chromium-review.googlesource.com/751506Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
      Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
    • Store shader interface variables as per query spec · d255123c
      Olli Etuaho authored
      GLES 3.1 section 7.3.1.1 specifies how active variable entries should
      be generated and how active variables are named. The specs for program
      interface variable queries are built on top of this section.
      
      ANGLE has already followed this spec for the most part for generating
      variable lists in ProgramState, but now we also follow the naming spec
      for arrays and include [0] at the end of the stored name.
      
      This will make implementing arrays of arrays more straightforward.
      Most logic for variable queries will just keep working as is when
      arrays of arrays are added instead of needing more complex logic for
      handling array indexing.
      
      BUG=angleproject:2125
      TEST=angle_end2end_tests
      
      Change-Id: I3acd14253153e10bc312114b0303065da2efb506
      Reviewed-on: https://chromium-review.googlesource.com/739826Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
    • Squash State dirty bits to below 64. · c67323a9
      Jamie Madill authored
      This will dramatically speed up performance on 64-bit systems due to
      the efficiency of angle::BitSet64. Improves performance of the GL
      back-end on benchmarks quite a bit.
      
      Squashes the Pack and Unpack states together. Also moves the current
      value dirty bits to a single dirty bit, with a separate set for each
      attribute. Also squashes a multisample dirty bit.
      
      Also fixes an incorrect dirty bit in StateManagerGL.
      
      We may want to implement a semi-fast version of BitSet64 for 32-bit
      systems if we find performance is not satisfactory.
      
      BUG=angleproject:2188
      
      Change-Id: I4616782bf75413252ede3e3ac752b9ccdb9aab49
      Reviewed-on: https://chromium-review.googlesource.com/722423Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Commit-Queue: Jamie Madill <jmadill@chromium.org>
    • Vulkan: Upgrade RGB8 textures to RGBA8. · 1d7be50a
      Jamie Madill authored
      It's unlikely any real hardware supports this format. Hack in a fixed
      fallback format for RGB8. We could consider implementing conditional
      support by checking the VkPhysicalDevice properties.
      
      This extends the Vulkan format support info in the RendererVk class
      to distinguish between a Buffer and Texture format. This is closely
      related to how Vulkan has separate format support bits for Linear
      Textures, Optimal Textures, and Buffers. We probably won't need to
      keep separate caps for Linear/Optimal, but it makes sense for Buffers
      to eventually use the same format tables.
      
      BUG=angleproject:2207
      
      Change-Id: I8d427a99db15b314b13dd99f31aa1ac5055f0881
      Reviewed-on: https://chromium-review.googlesource.com/742376
      Commit-Queue: Jamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
      Reviewed-by: 's avatarFrank Henigman <fjhenigman@chromium.org>
  6. 02 Nov, 2017 15 commits
  7. 01 Nov, 2017 11 commits