glslang/Test/testlist
qining 9220dbb078 Precise and noContraction propagation
Reimplement the whole workflow to make that: precise'ness of struct
    members won't spread to other non-precise members of the same struct
    instance.

    Approach:
    1. Build the map from symbols to their defining nodes. And for each
    object node (StructIndex, DirectIndex, Symbol nodes, etc), generates an
    accesschain path. Different AST nodes that indicating a same object
    should have the same accesschain path.

    2. Along the building phase in step 1, collect the initial set of
    'precise' (AST qualifier: 'noContraction') objects' accesschain paths.

    3. Start with the initial set of 'precise' accesschain paths, use it as
    a worklist, do as the following steps until the worklist is empty:

        1) Pop an accesschain path from worklist.
        2) Get the symbol part from the accesschain path.
        3) Find the defining nodes of that symbol.
        4) For each defining node, check whether it is defining a 'precise'
        object, or its assignee has nested 'precise' object. Get the
        incremental path from assignee to its nested 'precise' object (if
        any).
        5) Traverse the right side of the defining node, obtain the
        accesschain paths of the corresponding involved 'precise' objects.
        Update the worklist with those new objects' accesschain paths.
        Label involved operations with 'noContraction'.

    In each step, whenever we find the parent object of an nested object is
    'precise' (has 'noContraction' qualifier), we let the nested object
    inherit the 'precise'ness from its parent object.
2016-05-09 10:46:40 -04:00

134 lines
1.8 KiB
Plaintext

sample.frag
sample.vert
decls.frag
specExamples.frag
specExamples.vert
versionsClean.frag
versionsClean.vert
versionsErrors.frag
versionsErrors.vert
100.frag
120.vert
120.frag
130.vert
130.frag
140.vert
140.frag
150.vert
150.geom
150.frag
precision.frag
precision.vert
nonSquare.vert
matrixError.vert
cppSimple.vert
cppIndent.vert
cppNest.vert
cppComplexExpr.vert
badChars.frag
pointCoord.frag
array.frag
array100.frag
comment.frag
300.vert
300.frag
300BuiltIns.frag
300layout.vert
300layout.frag
300operations.frag
300block.frag
310.comp
310.vert
310.geom
310.frag
310.tesc
310.tese
310implicitSizeArrayError.vert
310AofA.vert
330.frag
330comp.frag
constErrors.frag
constFold.frag
errors.frag
forwardRef.frag
uint.frag
switch.frag
tokenLength.vert
100Limits.vert
100scope.vert
110scope.vert
300scope.vert
400.frag
420.frag
420.vert
420.geom
420_size_gl_in.geom
430scope.vert
lineContinuation100.vert
lineContinuation.vert
numeral.frag
400.geom
400.tesc
400.tese
410.tesc
420.tesc
420.tese
410.geom
430.vert
430.comp
430AofA.frag
440.vert
440.frag
450.vert
450.geom
450.tesc
450.tese
450.frag
450.comp
dce.frag
atomic_uint.frag
aggOps.frag
always-discard.frag
always-discard2.frag
conditionalDiscard.frag
conversion.frag
dataOut.frag
dataOutIndirect.frag
deepRvalue.frag
depthOut.frag
discard-dce.frag
doWhileLoop.frag
earlyReturnDiscard.frag
flowControl.frag
forLoop.frag
functionCall.frag
functionSemantics.frag
length.frag
localAggregates.frag
loops.frag
loopsArtificial.frag
matrix.frag
matrix2.frag
newTexture.frag
Operations.frag
prepost.frag
simpleFunctionCall.frag
structAssignment.frag
structDeref.frag
structure.frag
swizzle.frag
syntaxError.frag
test.frag
texture.frag
types.frag
uniformArray.frag
variableArrayIndex.frag
varyingArray.frag
varyingArrayIndirect.frag
voidFunction.frag
whileLoop.frag
nonVulkan.frag
spv.atomic.comp
precise.tesc
precise_struct_block.vert