Lines Matching defs:state

164 void computeRandomValueRangeForInfElements (GeneratorState& state, ValueRangeAccess valueRange)
167 de::Random& rnd = state.getRandom();
259 bool canAllocateVariable (const GeneratorState& state, const VariableType& type)
263 if (state.getExpressionFlags() & NO_VAR_ALLOCATION)
266 if (state.getVariableManager().getNumAllocatedScalars() + type.getScalarSize() > state.getShaderParameters().maxCombinedVariableScalars)
272 template <class T> float getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange) { return T::getWeight(state, valueRange); }
273 template <class T> Expression* create (GeneratorState& state, ConstValueRangeAccess valueRange) { return new T(state, valueRange); }
277 float (*getWeight) (const GeneratorState& state, ConstValueRangeAccess valueRange);
278 Expression* (*create) (GeneratorState& state, ConstValueRangeAccess valueRange);
329 const ExpressionSpec* chooseExpression (GeneratorState& state, const ExpressionSpec* specs, int numSpecs, ConstValueRangeAccess valueRange)
337 weights[ndx] = specs[ndx].getWeight(state, valueRange);
340 return &state.getRandom().chooseWeighted<const ExpressionSpec&>(specs, specs+numSpecs, weights);
349 Expression* Expression::createRandom (GeneratorState& state, ConstValueRangeAccess valueRange)
351 return chooseExpression(state, s_expressionSpecs, (int)DE_LENGTH_OF_ARRAY(s_expressionSpecs), valueRange)->create(state, valueRange);
354 Expression* Expression::createRandomLValue (GeneratorState& state, ConstValueRangeAccess valueRange)
356 return chooseExpression(state, s_lvalueSpecs, (int)DE_LENGTH_OF_ARRAY(s_lvalueSpecs), valueRange)->create(state, valueRange);
359 FloatLiteral::FloatLiteral (GeneratorState& state, ConstValueRangeAccess valueRange)
380 const float value = deFloatClamp(minVal + step*(float)state.getRandom().getInt(0, numSteps), minVal, maxVal);
399 float FloatLiteral::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
401 DE_UNREF(state);
423 void FloatLiteral::tokenize (GeneratorState& state, TokenStream& str) const
425 DE_UNREF(state);
429 IntLiteral::IntLiteral (GeneratorState& state, ConstValueRangeAccess valueRange)
447 int value = state.getRandom().getInt(minVal, maxVal);
454 float IntLiteral::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
456 DE_UNREF(state);
477 void IntLiteral::tokenize (GeneratorState& state, TokenStream& str) const
479 DE_UNREF(state);
483 BoolLiteral::BoolLiteral (GeneratorState& state, ConstValueRangeAccess valueRange)
495 bool value = state.getRandom().getInt(minVal, maxVal) == 1;
515 float BoolLiteral::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
517 DE_UNREF(state);
527 void BoolLiteral::tokenize (GeneratorState& state, TokenStream& str) const
529 DE_UNREF(state);
699 ConstructorOp::ConstructorOp (GeneratorState& state, ConstValueRangeAccess valueRange)
706 m_valueRange = ValueRange(computeRandomType(state, maxScalars));
707 computeRandomValueRange(state, m_valueRange.asAccess());
711 // int remainingDepth = state.getShaderParameters().maxExpressionDepth - state.getExpressionDepth();
721 bool scalarConversions = state.getProgramParameters().useScalarConversions;
739 VariableType::Type inType = state.getRandom().choose<VariableType::Type>(&inTypes[0], &inTypes[0] + numInTypes);
762 Expression* ConstructorOp::createNextChild (GeneratorState& state)
771 child = Expression::createRandom(state, inValueRange);
786 float ConstructorOp::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
794 if (state.getExpressionDepth() + getTypeConstructorDepth(valueRange.getType()) > state.getShaderParameters().maxExpressionDepth)
800 void ConstructorOp::tokenize (GeneratorState& state, TokenStream& str) const
812 (*i)->tokenize(state, str);
840 AssignOp::AssignOp (GeneratorState& state, ConstValueRangeAccess valueRange)
848 int maxScalars = state.getShaderParameters().maxCombinedVariableScalars - state.getVariableManager().getNumAllocatedScalars();
849 bool useRandomRange = !state.getVariableManager().hasEntry<IsWritableEntry>() || ((maxScalars > 0) && getWeightedBool(state.getRandom(), 0.1f));
854 m_valueRange = ValueRange(computeRandomType(state, maxScalars));
855 computeRandomValueRange(state, m_valueRange.asAccess());
861 const ValueEntry* entry = state.getRandom().choose<const ValueEntry*>(state.getVariableManager().getBegin<IsWritableEntry>(), state.getVariableManager().getEnd<IsWritableEntry>());
864 computeRandomValueRangeForInfElements(state, m_valueRange.asAccess());
866 DE_ASSERT(state.getVariableManager().hasEntry(IsWritableIntersectingEntry(m_valueRange.asAccess())));
870 IsWritableIntersectingEntry::Iterator first = state.getVariableManager().getBegin(IsWritableIntersectingEntry(m_valueRange.asAccess()));
871 IsWritableIntersectingEntry::Iterator end = state.getVariableManager().getEnd(IsWritableIntersectingEntry(m_valueRange.asAccess()));
873 bool possiblyCreateVar = canAllocateVariable(state, m_valueRange.getType()) &&
874 (first == end || getWeightedBool(state.getRandom(), 0.5f));
897 ConstValueRangeAccess selectedRange = state.getRandom().choose<const ValueEntry*>(first, end)->getValueRange();
910 float AssignOp::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
913 !canAllocateVariable(state, valueRange.getType()) &&
914 !state.getVariableManager().hasEntry(IsWritableIntersectingEntry(valueRange)))
917 if (!valueRange.getType().isVoid() && state.getExpressionDepth() + getTypeConstructorDepth(valueRange.getType()) + 1 >= state.getShaderParameters().maxExpressionDepth)
921 !state.getVariableManager().hasEntry<IsWritableEntry>() &&
922 state.getVariableManager().getNumAllocatedScalars() >= state.getShaderParameters().maxCombinedVariableScalars)
925 if (state.getExpressionDepth() == 0)
931 Expression* AssignOp::createNextChild (GeneratorState& state)
941 m_lvalueExpr = Expression::createRandomLValue(state, m_valueRange.asAccess());
947 m_rvalueExpr = Expression::createRandom(state, m_valueRange.asAccess());
954 void AssignOp::tokenize (GeneratorState& state, TokenStream& str) const
956 m_lvalueExpr->tokenize(state, str);
958 m_rvalueExpr->tokenize(state, str);
984 Variable* allocateNewVariable (GeneratorState& state, ConstValueRangeAccess valueRange)
986 Variable* variable = state.getVariableManager().allocate(valueRange.getType());
989 state.getVariableManager().setValue(variable, valueRange);
1004 bool uniformOk = state.getVariableManager().getNumAllocatedUniformScalars() + numScalars <= state.getShaderParameters().maxUniformScalars;
1006 (state.getVariableManager().getNumAllocatedShaderInVariables() + NUM_RESERVED_SHADER_INPUTS < state.getShaderParameters().maxInputVariables);
1013 state.getVariableManager().setStorage(variable, state.getRandom().chooseWeighted<Variable::Storage>(&storages[0], &storages[DE_LENGTH_OF_ARRAY(storages)], &weights[0]));
1107 VariableRead::VariableRead (GeneratorState& state, ConstValueRangeAccess valueRange)
1111 IsReadableEntry filter = IsReadableEntry(state.getExpressionFlags());
1112 int maxScalars = state.getShaderParameters().maxCombinedVariableScalars - state.getVariableManager().getNumAllocatedScalars();
1113 bool useRandomRange = !state.getVariableManager().hasEntry(filter) || ((maxScalars > 0) && getWeightedBool(state.getRandom(), 0.5f));
1119 ValueRange newVarRange(computeRandomType(state, maxScalars));
1120 computeRandomValueRange(state, newVarRange.asAccess());
1122 m_variable = allocateNewVariable(state, newVarRange.asAccess());
1127 m_variable = state.getRandom().choose<const ValueEntry*>(state.getVariableManager().getBegin(filter), state.getVariableManager().getEnd(filter))->getVariable();
1133 IsReadableIntersectingEntry::Iterator first = state.getVariableManager().getBegin(IsReadableIntersectingEntry(valueRange, state.getExpressionFlags()));
1134 IsReadableIntersectingEntry::Iterator end = state.getVariableManager().getEnd(IsReadableIntersectingEntry(valueRange, state.getExpressionFlags()));
1137 bool createVar = canAllocateVariable(state, valueRange.getType()) && (first == end || getWeightedBool(state.getRandom(), createOnReadWeight));
1141 m_variable = allocateNewVariable(state, valueRange);
1157 const ValueEntry* entry = state.getRandom().chooseWeighted<const ValueEntry*>(availableVars.begin(), availableVars.end(), weights.begin());
1163 state.getVariableManager().setValue(m_variable, intersection.asAccess());
1173 float VariableRead::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
1177 if (state.getVariableManager().hasEntry(IsReadableEntry(state.getExpressionFlags())) ||
1178 state.getVariableManager().getNumAllocatedScalars() < state.getShaderParameters().maxCombinedVariableScalars)
1184 if (!canAllocateVariable(state, valueRange.getType()) &&
1185 !state.getVariableManager().hasEntry(IsReadableIntersectingEntry(valueRange, state.getExpressionFlags())))
1191 VariableWrite::VariableWrite (GeneratorState& state, ConstValueRangeAccess valueRange)
1196 IsWritableSupersetEntry::Iterator first = state.getVariableManager().getBegin(IsWritableSupersetEntry(valueRange));
1197 IsWritableSupersetEntry::Iterator end = state.getVariableManager().getEnd(IsWritableSupersetEntry(valueRange));
1200 bool createVar = canAllocateVariable(state, valueRange.getType()) && (first == end || getWeightedBool(state.getRandom(), createOnAssignWeight));
1204 m_variable = state.getVariableManager().allocate(valueRange.getType());
1211 const ValueEntry* entry = state.getRandom().choose<const ValueEntry*>(first, end);
1218 const ValueEntry* parentEntry = state.getVariableManager().getParentValue(m_variable);
1222 state.getVariableManager().setValue(m_variable, parentEntry->getValueRange());
1230 state.getVariableManager().setValue(m_variable, infRange.asAccess());
1234 float VariableWrite::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
1236 if (!canAllocateVariable(state, valueRange.getType()) &&
1237 !state.getVariableManager().hasEntry(IsWritableSupersetEntry(valueRange)))
1248 ParenOp::ParenOp (GeneratorState& state, ConstValueRangeAccess valueRange)
1252 DE_UNREF(state);
1260 Expression* ParenOp::createNextChild (GeneratorState& state)
1264 m_child = Expression::createRandom(state, m_valueRange.asAccess());
1271 void ParenOp::tokenize (GeneratorState& state, TokenStream& str) const
1274 m_child->tokenize(state, str);
1283 float ParenOp::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
1286 return state.getExpressionDepth() + 2 <= state.getShaderParameters().maxExpressionDepth ? unusedValueWeight : 0.0f;
1289 int requiredDepth = 1 + getConservativeValueExprDepth(state, valueRange);
1290 return state.getExpressionDepth() + requiredDepth <= state.getShaderParameters().maxExpressionDepth ? 1.0f : 0.0f;
1296 SwizzleOp::SwizzleOp (GeneratorState& state, ConstValueRangeAccess valueRange)
1312 m_numInputElements = state.getRandom().getInt(deMax32(numOutputElements, 2), 4);
1323 int inElemNdx = state.getRandom().choose<int>(availableElements.begin(), availableElements.end());
1337 Expression* SwizzleOp::createNextChild (GeneratorState& state)
1358 state.pushPrecedence(swizzlePrecedence);
1359 m_child = Expression::createRandom(state, inValueRange.asAccess());
1360 state.popPrecedence();
1365 void SwizzleOp::tokenize (GeneratorState& state, TokenStream& str) const
1372 switch (state.getRandom().getInt(0, 2))
1384 m_child->tokenize(state, str);
1388 float SwizzleOp::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
1390 if (!state.getProgramParameters().useSwizzle)
1393 if (state.getPrecedence() < swizzlePrecedence)
1401 int availableLevels = state.getShaderParameters().maxExpressionDepth - state.getExpressionDepth();
1437 TexLookup::TexLookup (GeneratorState& state, ConstValueRangeAccess valueRange)
1449 if (state.getShaderParameters().useTexture2D)
1457 if (state.getShaderParameters().useTextureCube)
1463 m_type = state.getRandom().choose<Type>(typeCandidates.begin(), typeCandidates.end());
1485 int sampler2DCount = countSamplers(state.getVariableManager(), VariableType::TYPE_SAMPLER_2D);
1486 int samplerCubeCount = countSamplers(state.getVariableManager(), VariableType::TYPE_SAMPLER_CUBE);
1487 bool canAllocSampler = sampler2DCount + samplerCubeCount < state.getShaderParameters().maxSamplers;
1489 bool allocSampler = !hasSampler || (canAllocSampler && state.getRandom().getBool());
1493 Variable* sampler = state.getVariableManager().allocate(VariableType(samplerType, 1));
1494 state.getVariableManager().setStorage(sampler, Variable::STORAGE_UNIFORM); // Samplers are always uniforms.
1498 m_sampler = state.getRandom().choose<const ValueEntry*>(state.getVariableManager().getBegin(IsSamplerEntry(samplerType)),
1499 state.getVariableManager().getEnd(IsSamplerEntry(samplerType)))->getVariable();
1508 Expression* TexLookup::createNextChild (GeneratorState& state)
1519 m_lodBiasExpr = Expression::createRandom(state, lodRange.asAccess());
1528 int majorAxisNdx = state.getRandom().getInt(0, 2);
1536 bool neg = state.getRandom().getBool();
1547 m_coordExpr = Expression::createRandom(state, coordRange.asAccess());
1560 bool neg = state.getRandom().getBool();
1565 m_coordExpr = Expression::createRandom(state, coordRange.asAccess());
1575 void TexLookup::tokenize (GeneratorState& state, TokenStream& str) const
1577 bool isVertex = state.getShader().getType() == Shader::TYPE_VERTEX;
1579 if (state.getProgramParameters().version == VERSION_300)
1611 m_coordExpr->tokenize(state, str);
1616 m_lodBiasExpr->tokenize(state, str);
1622 float TexLookup::getWeight (const GeneratorState& state, ConstValueRangeAccess valueRange)
1624 if (state.getShaderParameters().texLookupBaseWeight <= 0.0f)
1627 int availableLevels = state.getShaderParameters().maxExpressionDepth - state.getExpressionDepth();
1633 if (state.getExpressionFlags() & (CONST_EXPR|NO_VAR_ALLOCATION))
1649 return state.getShaderParameters().texLookupBaseWeight;