void RDGpio::inputTimerData() { unsigned input_mask; unsigned output_mask; unsigned mask; if((input_mask=inputMask())!=gpio_input_mask) { for(int i=0;i<inputs();i++) { mask=1<<i; if((gpio_input_mask&mask)!=(input_mask&mask)) { if((input_mask&mask)==0) { emit inputChanged(i,false); } else { emit inputChanged(i,true); } } } gpio_input_mask=input_mask; } if((output_mask=outputMask())!=gpio_output_mask) { for(int i=0;i<outputs();i++) { mask=1<<i; if((gpio_output_mask&mask)!=(output_mask&mask)) { if((output_mask&mask)==0) { emit outputChanged(i,false); } else { emit outputChanged(i,true); } } } gpio_output_mask=output_mask; } }
void t2int(){ stepper++; if(stepper==RED_SCALE) mask+=0b0001; if(stepper==GREEN_SCALE) mask+=0b0010; if(stepper==BLUE_SCALE) mask+=0b0100; outputMask(mask); if(stepper==MIX_PERIOD) mask=0x00; }
void RDGpio::revertData(int id) { if((outputMask()&(1<<id))==0) { gpoSet(id); } else { gpoReset(id); } }
void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands) { // Process the opcode out << (OpcodeString(opCode) + 2); // leave out the "Op" if (opCode == OpLoopMerge || opCode == OpSelectionMerge) nextNestedControl = stream[word]; else if (opCode == OpBranchConditional || opCode == OpSwitch) { if (nextNestedControl) { nestedControl.push(nextNestedControl); nextNestedControl = 0; } } else if (opCode == OpExtInstImport) { idDescriptor[resultId] = (const char*)(&stream[word]); } else { if (resultId != 0 && idDescriptor[resultId].size() == 0) { switch (opCode) { case OpTypeInt: idDescriptor[resultId] = "int"; break; case OpTypeFloat: idDescriptor[resultId] = "float"; break; case OpTypeBool: idDescriptor[resultId] = "bool"; break; case OpTypeStruct: idDescriptor[resultId] = "struct"; break; case OpTypePointer: idDescriptor[resultId] = "ptr"; break; case OpTypeVector: if (idDescriptor[stream[word]].size() > 0) idDescriptor[resultId].append(idDescriptor[stream[word]].begin(), idDescriptor[stream[word]].begin() + 1); idDescriptor[resultId].append("vec"); switch (stream[word + 1]) { case 2: idDescriptor[resultId].append("2"); break; case 3: idDescriptor[resultId].append("3"); break; case 4: idDescriptor[resultId].append("4"); break; case 8: idDescriptor[resultId].append("8"); break; case 16: idDescriptor[resultId].append("16"); break; case 32: idDescriptor[resultId].append("32"); break; default: break; } break; default: break; } } } // Process the operands. Note, a new context-dependent set could be // swapped in mid-traversal. // Handle images specially, so can put out helpful strings. if (opCode == OpTypeImage) { out << " "; disassembleIds(1); out << " " << DimensionString((Dim)stream[word++]); out << (stream[word++] != 0 ? " depth" : ""); out << (stream[word++] != 0 ? " array" : ""); out << (stream[word++] != 0 ? " multi-sampled" : ""); switch (stream[word++]) { case 0: out << " runtime"; break; case 1: out << " sampled"; break; case 2: out << " nonsampled"; break; } out << " format:" << ImageFormatString((ImageFormat)stream[word++]); if (numOperands == 8) { out << " " << AccessQualifierString(stream[word++]); } return; } // Handle all the parameterized operands for (int op = 0; op < InstructionDesc[opCode].operands.getNum() && numOperands > 0; ++op) { out << " "; OperandClass operandClass = InstructionDesc[opCode].operands.getClass(op); switch (operandClass) { case OperandId: case OperandScope: case OperandMemorySemantics: disassembleIds(1); --numOperands; // Get names for printing "(XXX)" for readability, *after* this id if (opCode == OpName) idDescriptor[stream[word - 1]] = (const char*)(&stream[word]); break; case OperandVariableIds: disassembleIds(numOperands); return; case OperandImageOperands: outputMask(OperandImageOperands, stream[word++]); --numOperands; disassembleIds(numOperands); return; case OperandOptionalLiteral: case OperandVariableLiterals: if ((opCode == OpDecorate && stream[word - 1] == DecorationBuiltIn) || (opCode == OpMemberDecorate && stream[word - 1] == DecorationBuiltIn)) { out << BuiltInString(stream[word++]); --numOperands; ++op; } disassembleImmediates(numOperands); return; case OperandVariableIdLiteral: while (numOperands > 0) { out << std::endl; outputResultId(0); outputTypeId(0); outputIndent(); out << " Type "; disassembleIds(1); out << ", member "; disassembleImmediates(1); numOperands -= 2; } return; case OperandVariableLiteralId: while (numOperands > 0) { out << std::endl; outputResultId(0); outputTypeId(0); outputIndent(); out << " case "; disassembleImmediates(1); out << ": "; disassembleIds(1); numOperands -= 2; } return; case OperandLiteralNumber: disassembleImmediates(1); --numOperands; if (opCode == OpExtInst) { ExtInstSet extInstSet = GLSL450Inst; const char* name = idDescriptor[stream[word - 2]].c_str(); if (0 == memcmp("OpenCL", name, 6)) { extInstSet = OpenCLExtInst; #ifdef AMD_EXTENSIONS } else if (strcmp(spv::E_SPV_AMD_shader_ballot, name) == 0 || strcmp(spv::E_SPV_AMD_shader_trinary_minmax, name) == 0 || strcmp(spv::E_SPV_AMD_shader_explicit_vertex_parameter, name) == 0 || strcmp(spv::E_SPV_AMD_gcn_shader, name) == 0) { extInstSet = GLSLextAMDInst; #endif #ifdef NV_EXTENSIONS }else if (strcmp(spv::E_SPV_NV_sample_mask_override_coverage, name) == 0 || strcmp(spv::E_SPV_NV_geometry_shader_passthrough, name) == 0 || strcmp(spv::E_SPV_NV_viewport_array2, name) == 0 || strcmp(spv::E_SPV_NVX_multiview_per_view_attributes, name) == 0) { extInstSet = GLSLextNVInst; #endif } unsigned entrypoint = stream[word - 1]; if (extInstSet == GLSL450Inst) { if (entrypoint < GLSLstd450Count) { out << "(" << GlslStd450DebugNames[entrypoint] << ")"; } #ifdef AMD_EXTENSIONS } else if (extInstSet == GLSLextAMDInst) { out << "(" << GLSLextAMDGetDebugNames(name, entrypoint) << ")"; #endif #ifdef NV_EXTENSIONS } else if (extInstSet == GLSLextNVInst) { out << "(" << GLSLextNVGetDebugNames(name, entrypoint) << ")"; #endif } } break; case OperandOptionalLiteralString: case OperandLiteralString: numOperands -= disassembleString(); break; default: assert(operandClass >= OperandSource && operandClass < OperandOpcode); if (OperandClassParams[operandClass].bitmask) outputMask(operandClass, stream[word++]); else out << OperandClassParams[operandClass].getName(stream[word++]); --numOperands; break; } } return; }