mirror of
https://github.com/RPCS3/glslang.git
synced 2024-12-01 07:01:12 +00:00
9220dbb078
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.
116 lines
2.3 KiB
Plaintext
116 lines
2.3 KiB
Plaintext
# Test looping constructs.
|
|
# No tests yet for making sure break and continue from a nested loop
|
|
# goes to the innermost target.
|
|
spv.do-simple.vert
|
|
spv.do-while-continue-break.vert
|
|
spv.for-complex-condition.vert
|
|
spv.for-continue-break.vert
|
|
spv.for-simple.vert
|
|
spv.for-notest.vert
|
|
spv.for-nobody.vert
|
|
spv.while-continue-break.vert
|
|
spv.while-simple.vert
|
|
# vulkan-specific tests
|
|
spv.set.vert
|
|
spv.double.comp
|
|
spv.100ops.frag
|
|
spv.130.frag
|
|
spv.140.frag
|
|
spv.150.geom
|
|
spv.150.vert
|
|
spv.300BuiltIns.vert
|
|
spv.300layout.frag
|
|
spv.300layout.vert
|
|
spv.300layoutp.vert
|
|
spv.310.comp
|
|
spv.330.geom
|
|
spv.400.frag
|
|
spv.400.tesc
|
|
spv.400.tese
|
|
spv.420.geom
|
|
spv.430.vert
|
|
spv.accessChain.frag
|
|
spv.aggOps.frag
|
|
spv.always-discard.frag
|
|
spv.always-discard2.frag
|
|
spv.bitCast.frag
|
|
spv.bool.vert
|
|
spv.boolInBlock.frag
|
|
spv.branch-return.vert
|
|
spv.conditionalDiscard.frag
|
|
spv.conversion.frag
|
|
spv.dataOut.frag
|
|
spv.dataOutIndirect.frag
|
|
spv.dataOutIndirect.vert
|
|
spv.deepRvalue.frag
|
|
spv.depthOut.frag
|
|
spv.discard-dce.frag
|
|
spv.doWhileLoop.frag
|
|
spv.earlyReturnDiscard.frag
|
|
spv.flowControl.frag
|
|
spv.forLoop.frag
|
|
spv.forwardFun.frag
|
|
spv.functionCall.frag
|
|
spv.functionSemantics.frag
|
|
spv.interpOps.frag
|
|
spv.int64.frag
|
|
spv.layoutNested.vert
|
|
spv.length.frag
|
|
spv.localAggregates.frag
|
|
spv.loops.frag
|
|
spv.loopsArtificial.frag
|
|
spv.matFun.vert
|
|
spv.matrix.frag
|
|
spv.matrix2.frag
|
|
spv.memoryQualifier.frag
|
|
spv.merge-unreachable.frag
|
|
spv.newTexture.frag
|
|
spv.noDeadDecorations.vert
|
|
spv.nonSquare.vert
|
|
spv.Operations.frag
|
|
spv.intOps.vert
|
|
spv.precision.frag
|
|
spv.prepost.frag
|
|
spv.qualifiers.vert
|
|
spv.shaderBallot.comp
|
|
spv.shaderGroupVote.comp
|
|
spv.shiftOps.frag
|
|
spv.simpleFunctionCall.frag
|
|
spv.simpleMat.vert
|
|
spv.sparseTexture.frag
|
|
spv.sparseTextureClamp.frag
|
|
spv.structAssignment.frag
|
|
spv.structDeref.frag
|
|
spv.structure.frag
|
|
spv.switch.frag
|
|
spv.swizzle.frag
|
|
spv.test.frag
|
|
spv.test.vert
|
|
spv.texture.frag
|
|
spv.texture.vert
|
|
spv.image.frag
|
|
spv.types.frag
|
|
spv.uint.frag
|
|
spv.uniformArray.frag
|
|
spv.variableArrayIndex.frag
|
|
spv.varyingArray.frag
|
|
spv.varyingArrayIndirect.frag
|
|
spv.voidFunction.frag
|
|
spv.whileLoop.frag
|
|
spv.AofA.frag
|
|
spv.queryL.frag
|
|
spv.separate.frag
|
|
spv.shortCircuit.frag
|
|
spv.pushConstant.vert
|
|
spv.subpass.frag
|
|
spv.specConstant.vert
|
|
spv.specConstant.comp
|
|
spv.specConstantComposite.vert
|
|
spv.specConstantOperations.vert
|
|
spv.precise.tese
|
|
spv.precise.tesc
|
|
# GLSL-level semantics
|
|
vulkan.frag
|
|
vulkan.vert
|
|
vulkan.comp
|