Skip to content

  • Projects
  • Groups
  • Snippets
  • Help
  • This project
    • Loading...
  • Sign in / Register
A
angle
  • Project
    • Overview
    • Details
    • Activity
    • Cycle Analytics
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
    • Charts
  • Issues 0
    • Issues 0
    • List
    • Board
    • Labels
    • Milestones
  • Merge Requests 0
    • Merge Requests 0
  • CI / CD
    • CI / CD
    • Pipelines
    • Jobs
    • Schedules
    • Charts
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Collapse sidebar
  • Activity
  • Graph
  • Charts
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
  • Chen Yisong
  • angle
  • Repository

Switch branch/tag
  • angle
  • src
  • compiler
  • translator
  • Compiler.cpp
Find file
BlameHistoryPermalink
  • Jamie Madill's avatar
    Revert "Remove dynamic indexing of matrices and vectors in HLSL" · 2e2f3b79
    Jamie Madill authored Oct 26, 2015
    This reverts commit 3766a40d.
    
    This CL was causing crashes in UniformHLSL.cpp, where an internal
    uniform "base" was attempted to be declared in HLSL. Was crashing
    on an external WebGL 3D canvas page (http://www.taccgl.org/?dbg=t).
    
    BUG=546686
    
    Original commit message:
    
    Re-landing after fixing D3D9 specific issues.
    
    HLSL doesn't support dynamic indexing of matrices and vectors, so replace
    that with helper functions that unroll dynamic indexing into switch/case
    and static indexing.
    
    Both the indexed vector/matrix expression and the index may have side
    effects, and these will be evaluated correctly. If necessary, index
    expressions that have side effects will be written to a temporary
    variable that will replace the index.
    
    Besides dEQP tests, this change is tested by a WebGL 2 conformance test.
    
    In the case that a dynamic index is out-of-range, the base ESSL 3.00 spec
    allows undefined behavior. KHR_robust_buffer_access_behavior adds the
    requirement that program termination should not occur and that
    out-of-range reads must return either a value from the active program's
    memory or zero, and out-of-range writes should only affect the active
    program's memory or do nothing. This patch clamps out-of-range indices so
    that either the first or last item of the matrix/vector is accessed.
    
    The code is not transformed in case the it fits within the limited subset
    of ESSL 1.00 given in Appendix A of the spec. If the code isn't within
    the restricted subset, even ESSL 1.00 shaders may require this
    workaround.
    
    BUG=angleproject:1116
    TEST=dEQP-GLES3.functional.shaders.indexing.* (all pass after change)
         WebGL 2 conformance tests (glsl3/vector-dynamic-indexing.html)
    
    Change-Id: I1d4b2e3888e91af7d5eebf743d12778698b6b903
    Reviewed-on: https://chromium-review.googlesource.com/310270Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org>
    Tested-by: 's avatarJamie Madill <jmadill@chromium.org>
    2e2f3b79
Compiler.cpp 26.5 KB
EditWeb IDE
×

Replace Compiler.cpp

Attach a file by drag & drop or click to upload


Cancel
A new branch will be created in your fork and a new merge request will be started.