glslang/Test/test-spirv-list
qining 135452061a Spec Constant Operations
Approach:
Add a flag in `Builder` to indicate 'spec constant mode' and 'normal
mode'. When the builder is in 'normal mode', nothing changed. When the
builder is in 'spec constant mode', binary, unary and other instruction
creation rountines will be redirected to `createSpecConstantOp()` to
create instrution at module level with `OpSpecConstantOp <original
opcode> <operands>`.

'spec constant mode' should be enabled if and only if we are creating
spec constants. So a flager setter/recover guard is added when handling
binary/unary nodes in `createSpvConstantsFromConstSubTree()`.

Note when handling spec constants which are represented as ConstantUnion
Node, we should not use `OpSpecConstantOp` to initialize the composite
constant, so builder is set to 'normal mode'.

Tests:
Tests are added in Test/spv.specConstantOperations.vert, including:

1) Arithmetic, shift opeations for both scalar and composite type spec constants.
2) Size conversion from/to float and double for both scalar and vector.
3) Bitwise and/or/xor for both scalar and vector.
4) Unary negate/not for both scalar and vector.
5) Vector swizzles.
6) Comparisons for scalars.
7) == and != for composite type spec constants

Issues:
1) To implement == and != for composite type spec constants, the Spec needs
to allow OpAll, OpAny, OpFOrdEqual, OpFUnordEqual, OpOrdNotEqual,
OpFUnordNotEqual. Currently none of them are allowed in the Spec.
2016-03-30 16:18:26 -04:00

111 lines
2.2 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.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.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
# GLSL-level semantics
vulkan.frag
vulkan.vert
vulkan.comp