Lines Matching refs:accessChain
1371 assert(accessChain.base != NoResult);
1372 Id typeId = getTypeId(accessChain.base);
1377 for (int i = 0; i < (int)accessChain.indexChain.size(); ++i) {
1379 assert(isConstantScalar(accessChain.indexChain[i]));
1380 typeId = getContainedTypeId(typeId, getConstantScalar(accessChain.indexChain[i]));
1382 typeId = getContainedTypeId(typeId, accessChain.indexChain[i]);
3632 accessChain.base = NoResult;
3633 accessChain.indexChain.clear();
3634 accessChain.instr = NoResult;
3635 accessChain.swizzle.clear();
3636 accessChain.component = NoResult;
3637 accessChain.preSwizzleBaseType = NoType;
3638 accessChain.isRValue = false;
3639 accessChain.coherentFlags.clear();
3640 accessChain.alignment = 0;
3647 accessChain.coherentFlags |= coherentFlags;
3648 accessChain.alignment |= alignment;
3652 if (accessChain.preSwizzleBaseType == NoType)
3653 accessChain.preSwizzleBaseType = preSwizzleBaseType;
3656 if (accessChain.swizzle.size() > 0) {
3657 std::vector<unsigned> oldSwizzle = accessChain.swizzle;
3658 accessChain.swizzle.resize(0);
3661 accessChain.swizzle.push_back(oldSwizzle[swizzle[i]]);
3664 accessChain.swizzle = swizzle;
3673 assert(accessChain.isRValue == false);
3678 if (accessChain.swizzle.size() > 0 &&
3679 getNumTypeComponents(getResultingAccessChainType()) != (int)accessChain.swizzle.size() &&
3680 accessChain.component == NoResult) {
3681 for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) {
3682 accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle[i]));
3683 accessChain.instr = NoResult;
3688 accessChain.indexChain.pop_back();
3689 accessChain.instr = NoResult;
3692 assert(accessChain.component == NoResult);
3712 assert(accessChain.component == NoResult);
3716 if (accessChain.swizzle.size() > 0) {
3718 source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle);
3738 if (accessChain.isRValue) {
3741 if (accessChain.indexChain.size() > 0) {
3742 Id swizzleBase = accessChain.preSwizzleBaseType != NoType ? accessChain.preSwizzleBaseType : resultType;
3747 for (int i = 0; i < (int)accessChain.indexChain.size(); ++i) {
3748 if (isConstantScalar(accessChain.indexChain[i]))
3749 indexes.push_back(getConstantScalar(accessChain.indexChain[i]));
3757 id = createCompositeExtract(accessChain.base, swizzleBase, indexes);
3761 if (spvVersion >= Spv_1_4 && isValidInitializer(accessChain.base)) {
3765 lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base),
3766 "indexable", accessChain.base);
3769 lValue = createVariable(NoPrecision, StorageClassFunction, getTypeId(accessChain.base),
3772 createStore(accessChain.base, lValue);
3775 accessChain.base = lValue;
3776 accessChain.isRValue = false;
3782 id = accessChain.base; // no precision, it was set when this was defined
3788 if (getStorageClass(accessChain.base) == StorageClassPhysicalStorageBufferEXT) {
3804 if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult)
3810 if (accessChain.swizzle.size() > 0) {
3812 if (accessChain.swizzle.size() > 1)
3813 swizzledType = makeVectorType(swizzledType, (int)accessChain.swizzle.size());
3814 id = createRvalueSwizzle(precision, swizzledType, id, accessChain.swizzle);
3818 if (accessChain.component != NoResult)
3819 id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision);
3827 assert(accessChain.isRValue == false);
3835 assert(accessChain.swizzle.size() == 0);
3836 assert(accessChain.component == NoResult);
3845 if (accessChain.base == NoResult)
3847 Id type = getTypeId(accessChain.base);
3850 if (! accessChain.isRValue)
3854 for (auto it = accessChain.indexChain.cbegin(); it != accessChain.indexChain.cend(); ++it) {
3862 if (accessChain.swizzle.size() == 1)
3864 else if (accessChain.swizzle.size() > 1)
3865 type = makeVectorType(getContainedTypeId(type), (int)accessChain.swizzle.size());
3868 if (accessChain.component)
3931 // Turn the described access chain in 'accessChain' into an instruction(s)
3938 assert(accessChain.isRValue == false);
3941 if (accessChain.instr != NoResult)
3942 return accessChain.instr;
3952 if (accessChain.component != NoResult) {
3954 accessChain.indexChain.push_back(accessChain.component);
3955 accessChain.component = NoResult;
3961 if (accessChain.indexChain.size() == 0)
3962 return accessChain.base;
3965 StorageClass storageClass = (StorageClass)module.getStorageClass(getTypeId(accessChain.base));
3966 accessChain.instr = createAccessChain(storageClass, accessChain.base, accessChain.indexChain);
3968 return accessChain.instr;
3979 if (accessChain.component != NoResult && accessChain.swizzle.size() > 1) {
3982 for (int c = 0; c < (int)accessChain.swizzle.size(); ++c)
3983 components.push_back(makeUintConstant(accessChain.swizzle[c]));
3984 Id mapType = makeVectorType(makeUintType(32), (int)accessChain.swizzle.size());
3988 accessChain.component = createVectorExtractDynamic(map, makeUintType(32), accessChain.component);
3989 accessChain.swizzle.clear();
3999 if (getNumTypeComponents(accessChain.preSwizzleBaseType) > (int)accessChain.swizzle.size())
4003 for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) {
4004 if (i != accessChain.swizzle[i])
4009 accessChain.swizzle.clear();
4010 if (accessChain.component == NoResult)
4011 accessChain.preSwizzleBaseType = NoType;
4023 if (accessChain.swizzle.size() == 0 && accessChain.component == NoResult)
4028 if (accessChain.swizzle.size() > 1)
4032 if (accessChain.swizzle.size() == 1) {
4033 assert(accessChain.component == NoResult);
4035 accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle.front()));
4036 accessChain.swizzle.clear();
4037 accessChain.preSwizzleBaseType = NoType;
4038 } else if (dynamic && accessChain.component != NoResult) {
4039 assert(accessChain.swizzle.size() == 0);
4041 accessChain.indexChain.push_back(accessChain.component);
4042 accessChain.preSwizzleBaseType = NoType;
4043 accessChain.component = NoResult;