1. 16 May, 2020 2 commits
    • Vulkan: Save linked ProgramExecutable data · d34ab323
      Tim Van Patten authored
      PPOs need to support drawing with Programs that failed their last
      linkProgram() if they had previously successfully linked. This requires
      saving the ProgramExecutable when linkProgram() succeeds, and not
      overwriting it with subsequent linkProgram() calls unil the next
      successful one.
      
      To achieve this, the new member ProgramState::mLinkedExecutable will
      point to the last successfully linked ProgramExecutable and
      ProgramState::mExecutable will point to a new ProgramExecutable when the
      next linkProgram() is attempted. If the link fails, the newly allocated
      ProgramExecutable will be delete()'ed and mExecutable will point to the
      previous 'good' ProgramExecutable still being tracked by
      mLinkedExecutable. If it succeeds, the old mLinkedExecutable will be
      delete()'ed and mLinkedExecutable will be updated to point to the ne
      one.
      
      Bug: angleproject:4514
      Test: KHR-GLES31.core.sepshaderobjs.StateInteraction
      Change-Id: I0677602a6d652a055404667ec9e9305fed5b4177
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2181450
      Commit-Queue: Tim Van Patten <timvp@google.com>
      Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
    • Resolve Bad Binary Link Failures · 5d01d538
      Rafael Cintron authored
      When ANGLE_PROGRAM_BINARY_LOAD is enabled, Program::loadBinary
      unconditionally returns angle::Result::Continue to the caller. The
      caller, gl::Program::link, postpones the resolution of the link
      until resolveLinkImpl.
      
      Unfortunately, resolveLinkImpl is not able to tell whether the link
      failed because the shader from the developer is bad or because the
      loaded binary is not compatible with the backend. The former case
      should fail link. In the latter case, we should fallback to linking
      the program from the original shader sources. The loaded binary could
      be read from the on-disk shader cache and be corrupted or serialized
      with different revision and subsystem id than the currently loaded
      ANGLE backend.
      
      This fix adjusts Program::loadBinary and ProgramD3D::load so that
      angle::Result::Incomplete is returned to gl::Program::link when the
      binary is incompatible with the backend.  gl::Program:link falls back
      to compilation from original shader sources.
      
      Since no code checks the return value of SizedMRUCache::eraseByKey,
      modified it to now return void.
      
      Bug: chromium:1079497
      Change-Id: Id5271d7badad8627563e87859d1c9fdb81de5785
      Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2197944Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
      Reviewed-by: 's avatarTim Van Patten <timvp@google.com>
      Commit-Queue: Rafael Cintron <rafael.cintron@microsoft.com>
  2. 15 May, 2020 13 commits
  3. 14 May, 2020 12 commits
  4. 13 May, 2020 10 commits
  5. 12 May, 2020 3 commits