Factor BinaryFactor( const Var &n, Real field ) { DAI_ASSERT( n.states() == 2 ); Real buf[2]; buf[0] = std::exp(-field); buf[1] = std::exp(field); return Factor(n, &buf[0]); }
Factor createFactorIsing( const Var &n, Real h ) { DAI_ASSERT( n.states() == 2 ); Real buf[2]; buf[0] = std::exp(-h); buf[1] = std::exp(h); return Factor(n, &buf[0]); }
void DepthOutHLSL::processVert( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) { ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] ); // Grab the output vert. Var *outPosition = (Var*)LangElement::find( "hpos" ); // Grab our output depth. Var *outDepth = connectComp->getElement( RT_TEXCOORD ); outDepth->setName( "depth" ); outDepth->setStructName( "OUT" ); outDepth->setType( "float" ); output = new GenOp( " @ = @.z / @.w;\r\n", outDepth, outPosition, outPosition ); }
Var* TerrainFeatHLSL::_getDetailIdStrengthParallax() { String name( String::ToString( "detailIdStrengthParallax%d", getProcessIndex() ) ); Var *detailInfo = (Var*)LangElement::find( name ); if ( !detailInfo ) { detailInfo = new Var; detailInfo->setType( "float3" ); detailInfo->setName( name ); detailInfo->uniform = true; detailInfo->constSortPos = cspPotentialPrimitive; } return detailInfo; }
static void readDouble(const File& file, const string& name, const array<size_t, dimension>& start, const array<size_t, dimension>& count, Type* values, PropertyType Type::*property, const Converter& converter) { size_t size = accumulate(count.begin(), count.end(), 1, [](size_t n, size_t m) { return n*m; }); vector<double> v(size); const Var var(file.var(name)); var.get(start, count, v.data()); size_t n = 0; for (auto it = v.begin(); it != v.end(); ++it, ++n) { values[n].*property = converter(*it); } }
void TerrainBaseMapFeatHLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) { // grab connector texcoord register Var *texCoord = getInTexCoord( "texCoord", "float3", true, componentList ); // create texture var Var *diffuseMap = new Var; diffuseMap->setType( "sampler2D" ); diffuseMap->setName( "baseTexMap" ); diffuseMap->uniform = true; diffuseMap->sampler = true; diffuseMap->constNum = Var::getTexUnitNum(); // used as texture unit num here MultiLine *meta = new MultiLine; Var *baseColor = new Var; baseColor->setType( "float4" ); baseColor->setName( "baseColor" ); if (mIsDirect3D11) { diffuseMap->setType("SamplerState"); Var *diffuseTex = new Var; diffuseTex->setType("Texture2D"); diffuseTex->setName("baseTexture"); diffuseTex->uniform = true; diffuseTex->texture = true; diffuseTex->constNum = diffuseMap->constNum; meta->addStatement(new GenOp(" @ = @.Sample( @, @.xy );\r\n", new DecOp(baseColor), diffuseTex, diffuseMap, texCoord)); } else { meta->addStatement(new GenOp(" @ = tex2D( @, @.xy );\r\n", new DecOp(baseColor), diffuseMap, texCoord)); } meta->addStatement(new GenOp(" @ = toLinear(@);\r\n", baseColor, baseColor)); ShaderFeature::OutputTarget target = ShaderFeature::DefaultTarget; if (fd.features.hasFeature(MFT_isDeferred)) { target= ShaderFeature::RenderTarget1; } meta->addStatement( new GenOp( " @;\r\n", assignColor( baseColor, Material::Mul,NULL,target ) ) ); output = meta; }
void Engine::blockCurrentSol() { if (outputs.size() == 0) NOT_SUPPORTED; Clause& c = *Reason_new(outputs.size()); bool root_failure = true; for (int i = 0; i < outputs.size(); i++) { Var *v = (Var*) outputs[i]; if (v->getType() == BOOL_VAR) { c[i] = ((BoolView*) outputs[i])->getValLit(); } else { c[i] = ((IntVar*) outputs[i])->getValLit(); } if (!sat.isRootLevel(var(c[i]))) root_failure = false; assert(sat.value(c[i]) == l_False); } if (root_failure) sat.btToLevel(0); sat.confl = &c; }
Var* TerrainFeatGLSL::_getInDetailCoord( Vector<ShaderComponent*> &componentList ) { String name( String::ToString( "outDetCoord%d", getProcessIndex() ) ); Var *inDet = (Var*)LangElement::find( name ); if ( !inDet ) { ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] ); inDet = connectComp->getElement( RT_TEXCOORD ); inDet->setName( name ); inDet->setType( "vec4" ); inDet->mapsToSampler = true; } return inDet; }
// class PathExpressionPrinter void PathExpressionPrinter::print(const Var &v) { simit_iassert(v.defined()) << "attempting to print undefined var"; std::string name; if (util::contains(names, v)) { name = names.at(v); } else { if (v.getName() != "") { name = nameGenerator.getName(v.getName()); } else { name = nameGenerator.getName("e"); } names[v] = name; } os << name; }
Var* TerrainFeatGLSL::_getNormalMapTex() { String name( String::ToString( "normalMap%d", getProcessIndex() ) ); Var *normalMap = (Var*)LangElement::find( name ); if ( !normalMap ) { normalMap = new Var; normalMap->setType( "sampler2D" ); normalMap->setName( name ); normalMap->uniform = true; normalMap->sampler = true; normalMap->constNum = Var::getTexUnitNum(); } return normalMap; }
void Var::append(Var var) { if(Type=="list") { if(var.getType()=="list") { for(int i=0;i<var.size();i++) List.append(var[i]); } else { List.append(var); } } else qDebug()<<"Var::append - type is not list; Name = "<<Name<<"Type = "<<Type; }
Var* GBufferConditionerGLSL::_unconditionInput( Var *conditionedInput, MultiLine *meta ) { Var *retVar = new Var; retVar->setType("vec4"); retVar->setName("_gbUnconditionedInput"); LangElement *outputDecl = new DecOp( retVar ); switch(mNormalStorageType) { case CartesianXYZ: meta->addStatement( new GenOp( " // g-buffer unconditioner: vec4(normal.xyz, depth)\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(@, @.a);\r\n", outputDecl, _posnegDecode(new GenOp("@.xyz", conditionedInput)), conditionedInput ) ); break; case CartesianXY: meta->addStatement( new GenOp( " // g-buffer unconditioner: vec4(normal.xy, depth Hi + z-sign, depth Lo)\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(@, @.a);\r\n", outputDecl, _posnegDecode(new GenOp("@.xyz", conditionedInput)), conditionedInput ) ); meta->addStatement( new GenOp( " @.z *= sqrt(1.0 - dot(@.xy, @.xy));\r\n", retVar, retVar, retVar ) ); break; case Spherical: meta->addStatement( new GenOp( " // g-buffer unconditioner: vec4(normal.theta, normal.phi, depth Hi, depth Lo)\r\n" ) ); meta->addStatement( new GenOp( " vec2 spGPUAngles = @;\r\n", _posnegDecode(new GenOp("@.xy", conditionedInput)) ) ); meta->addStatement( new GenOp( " vec2 sincosTheta;\r\n" ) ); meta->addStatement( new GenOp( " sincosTheta.x = sin(spGPUAngles.x * 3.14159265358979323846);\r\n" ) ); meta->addStatement( new GenOp( " sincosTheta.y = cos(spGPUAngles.x * 3.14159265358979323846);\r\n" ) ); meta->addStatement( new GenOp( " vec2 sincosPhi = vec2(sqrt(1.0 - spGPUAngles.y * spGPUAngles.y), spGPUAngles.y);\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(sincosTheta.y * sincosPhi.x, sincosTheta.x * sincosPhi.x, sincosPhi.y, @.a);\r\n", outputDecl, conditionedInput ) ); break; } // Recover depth from encoding if(mNormalStorageType != CartesianXYZ) { const U64 maxValPerChannel = 1 << mBitsPerChannel; meta->addStatement( new GenOp( " \r\n // Decode depth\r\n" ) ); meta->addStatement( new GenOp( avar( " @.w = dot( @.zw, vec2(1.0, 1.0/%llu.0));\r\n", maxValPerChannel - 1 ), retVar, conditionedInput ) ); } AssertFatal( retVar != NULL, avar( "Cannot uncondition input from buffer format: %s", GFXStringTextureFormat[getBufferFormat()] ) ); return retVar; }
void ParseHandler::setValue(const Var& value) { Var parent = _stack.top(); if ( parent.type() == typeid(Array::Ptr) ) { Array::Ptr arr = parent.extract<Array::Ptr>(); arr->add(value); } else if ( parent.type() == typeid(Object::Ptr) ) { poco_assert_dbg(!_key.empty()); Object::Ptr obj = parent.extract<Object::Ptr>(); obj->set(_key, value); _key.clear(); } }
static void writeVarLargeEncodingExpression(Var& var, FILE* fp) { const char* varname = var.name().c_str(); fprintf(fp, "\tstream->writeFully(&__size_%s,4);\n", varname); if (var.nullAllowed()) { fprintf(fp, "\tif (%s != NULL) ", varname); } else { fprintf(fp, "\t"); } if (var.writeExpression() != "") { fprintf(fp, "%s", var.writeExpression().c_str()); } else { fprintf(fp, "stream->writeFully(%s, __size_%s)", varname, varname); } fprintf(fp, ";\n"); }
std::vector<std::map<size_t, int> > AnyPositionCnfCompress::createCounts(size_t &gndFactor, VarSet &superVarSet) { // create zero entries for each position map<long, map<size_t, int> > countMap; foreach (const dai::BipartiteGraph::Neighbor &tmpVar, _cfg.nbF(gndFactor)) { Var liftedVar = _varRepr[_varColorVec[tmpVar]]; size_t pos = find(_cfg.factor(gndFactor).sigma().begin(), _cfg.factor(gndFactor).sigma().end(), tmpVar.iter) - _cfg.factor(gndFactor).sigma().begin(); countMap[liftedVar.label()][pos] = 0; } vector<map<size_t, int> > counts; size_t posCount; size_t negCount; for (vector<Var>::const_iterator iter = superVarSet.begin(); iter < superVarSet.end(); iter++) { posCount = 0; negCount = 0; foreach(const dai::BipartiteGraph::Neighbor tmpFac, _cfg.nbV(_cfg.findVar(*iter))) { if (_facRepr[_facColorVec[tmpFac]] == gndFactor) { size_t pos = find(_cfg.factor(tmpFac).sigma().begin(), _cfg.factor(tmpFac).sigma().end(), tmpFac.dual) - _cfg.factor(tmpFac).sigma().begin(); double res = log(_cfg.factor(tmpFac).states() - _zeroStates[tmpFac]) / log(2); size_t nrPosLiterals = size_t(res); bool sign = (pos < nrPosLiterals); if (sign) { posCount++; } else { negCount++; } } } map<size_t, int>::iterator posIter=countMap[iter->label()].begin(); if (posCount > 0) { posIter->second = posCount; } if (negCount > 0) { for (size_t j=0;j<posCount; j++, posIter++) {} posIter->second = negCount; } counts.push_back(countMap[iter->label()]); } return counts; }
void SpecularMapGLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) { // Get the texture coord. Var *texCoord = getInTexCoord( "out_texCoord", "vec2", true, componentList ); // create texture var Var *specularMap = new Var; specularMap->setType( "sampler2D" ); specularMap->setName( "specularMap" ); specularMap->uniform = true; specularMap->sampler = true; specularMap->constNum = Var::getTexUnitNum(); LangElement *texOp = new GenOp( "texture2D(@, @)", specularMap, texCoord ); Var *specularColor = new Var( "specularColor", "vec4" ); output = new GenOp( " @ = @;\r\n", new DecOp( specularColor ), texOp ); }
void Var::insert(Var var) { if(Type=="map") { Map.insert(var.getName(),var); } else qDebug()<<"Var::insert - type is not map; Name = "<<Name<<"Type = "<<Type; }
void Var::importFromJsonFile(QString filePath) { QFile* file = new QFile(filePath); if(!file->open(QIODevice::ReadOnly)) { qDebug()<<"Var::Var(QString filePath) - path is incorrect"<<filePath; } QString json = file->readAll(); QJsonDocument parser = QJsonDocument::fromJson(json.toUtf8()); Var var = fromQVariant(parser.toVariant()); setType(var.getType()); if(var.getType()=="list") List=var.List; if(var.getType()=="map") Map=var.Map; if(var.getType()=="string") String=var.String; }
void testEraseRanges(Var< IntSet > set, int nElems, int nTests) { for (int i = 1; i < (int)sqrt(nTests); i++) { int elem = (int)((double) nElems * (rand() / (double)RAND_MAX)); set.domain().insert(elem); } std::set<int> toErase; for (int i = 1; i <= nElems; i++) { toErase.insert(i); } for (int i = 1; i < (int)sqrt(nTests); i++) { /* int startPos = (int)((double) set.domain().possSize() * (rand() / (double)RAND_MAX)); int finishPos = min((int)((double) (set.domain().possSize() - startPos) * (rand() / (double)RAND_MAX)),10); CurSetFD<int>::PIterator b = set.domain().beginPoss(); while (startPos-- > 0) b++; CurSetFD<int>::PIterator start = b; while (finishPos-- > 0) b++; CurSetFD<int>::PIterator finish = b; */ int start = max(1,(int)((double) nElems * (rand() / (double)RAND_MAX))); int finish = min(start + min((int)((double) nElems * (rand() / (double)RAND_MAX)),(int)(nElems / sqrt(nTests))),nElems); std::set<int>::iterator b = toErase.find(start), e = toErase.find(finish); timer.resume(); Detail::setEraseRange(set.domain(), b, e); timer.pause(); } }
Var* GBufferConditionerGLSL::_conditionOutput( Var *unconditionedOutput, MultiLine *meta ) { Var *retVar = new Var; retVar->setType("vec4"); retVar->setName("_gbConditionedOutput"); LangElement *outputDecl = new DecOp( retVar ); switch(mNormalStorageType) { case CartesianXYZ: meta->addStatement( new GenOp( " // g-buffer conditioner: vec4(normal.xyz, depth)\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(@, @.a);\r\n", outputDecl, _posnegEncode(new GenOp("@.xyz", unconditionedOutput)), unconditionedOutput ) ); break; case CartesianXY: meta->addStatement( new GenOp( " // g-buffer conditioner: vec4(normal.xy, depth Hi + z-sign, depth Lo)\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(@, @.a);", outputDecl, _posnegEncode(new GenOp("vec3(@.xy, sign(@.z))", unconditionedOutput, unconditionedOutput)), unconditionedOutput ) ); break; case Spherical: meta->addStatement( new GenOp( " // g-buffer conditioner: vec4(normal.theta, normal.phi, depth Hi, depth Lo)\r\n" ) ); meta->addStatement( new GenOp( " @ = vec4(@, 0.0, @.a);\r\n", outputDecl, _posnegEncode(new GenOp("vec2(atan2(@.y, @.x) / 3.14159265358979323846f, @.z)", unconditionedOutput, unconditionedOutput, unconditionedOutput ) ), unconditionedOutput ) ); break; } // Encode depth into two channels if(mNormalStorageType != CartesianXYZ) { const U64 maxValPerChannel = 1 << mBitsPerChannel; const U64 extraVal = (maxValPerChannel * maxValPerChannel - 1) - (maxValPerChannel - 1) * 2; meta->addStatement( new GenOp( " \r\n // Encode depth into hi/lo\r\n" ) ); meta->addStatement( new GenOp( avar( " vec3 _tempDepth = fract(@.a * vec3(1.0, %llu.0, %llu.0));\r\n", maxValPerChannel - 1, extraVal ), unconditionedOutput ) ); meta->addStatement( new GenOp( avar( " @.zw = _tempDepth.xy - _tempDepth.yz * vec2(1.0/%llu.0, 1.0/%llu.0);\r\n\r\n", maxValPerChannel - 1, maxValPerChannel - 1 ), retVar ) ); } AssertFatal( retVar != NULL, avar( "Cannot condition output to buffer format: %s", GFXStringTextureFormat[getBufferFormat()] ) ); return retVar; }
Var Var::fromXML(QXmlStreamReader& xml) { while (xml.tokenType() != QXmlStreamReader::StartElement && !xml.atEnd() && !xml.hasError()) { xml.readNext(); } QString root = xml.name().toString(); setParam("map",root); while (!(xml.tokenType() == QXmlStreamReader::EndElement && xml.name() == root) && !xml.atEnd() && !xml.hasError()) { xml.readNext(); if (xml.tokenType() == QXmlStreamReader::StartElement) { Var el; el.fromXML(xml); if(getType()=="map") { if(!Map.contains(el.getName())) { Map.insert(el.getName(),el); } else { setType("list"); List<<Map.value(el.getName()); } } if(getType()=="list") { List<<el; } } if (xml.tokenType() == QXmlStreamReader::Characters) { QString text=xml.text().toString(); if(!text.startsWith('\n')) { setType("string"); String = text; } } } return *this; }
void ParallaxFeatGLSL::processPix( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) { AssertFatal( GFX->getPixelShaderVersion() >= 2.0, "ParallaxFeatGLSL::processPix - We don't support SM 1.x!" ); MultiLine *meta = new MultiLine; // Order matters... get this first! Var *texCoord = getInTexCoord( "texCoord", "vec2", true, componentList ); ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] ); // We need the negative tangent space view vector // as in parallax mapping we step towards the camera. Var *negViewTS = (Var*)LangElement::find( "negViewTS" ); if ( !negViewTS ) { Var *inNegViewTS = (Var*)LangElement::find( "outNegViewTS" ); if ( !inNegViewTS ) { inNegViewTS = connectComp->getElement( RT_TEXCOORD ); inNegViewTS->setName( "outNegViewTS" ); inNegViewTS->setStructName( "IN" ); inNegViewTS->setType( "vec3" ); } negViewTS = new Var( "negViewTS", "vec3" ); meta->addStatement( new GenOp( " @ = normalize( @ );\r\n", new DecOp( negViewTS ), inNegViewTS ) ); } // Get the rest of our inputs. Var *parallaxInfo = _getUniformVar( "parallaxInfo", "float", cspPotentialPrimitive ); Var *normalMap = getNormalMapTex(); // Call the library function to do the rest. meta->addStatement( new GenOp( " @.xy += parallaxOffset( @, @.xy, @, @ );\r\n", texCoord, normalMap, texCoord, negViewTS, parallaxInfo ) ); // TODO: Fix second UV maybe? output = meta; }
err_t Object::_getProperty(const InternedStringW& name, Var& dst) const { FOG_UNUSED(name); FOG_UNUSED(dst); if (name == FOG_S(id)) return dst.setString(_objectExtra->_id); return ERR_PROPERTY_NOT_FOUND; }
Var Interpreter::copied_or_constified( const Var &var ) { // need to make a copy ? if ( var.referenced_more_than_one_time() and not var.data->is_const() ) return constified( main_scope->copy( var, Expr(), 0 ) ); // else, add const flags Var res = var; res.data->flags |= PRef::CONST; res.flags |= Var::WEAK_CONST; return res; }
void Var::insert(QString name,Var var) { if(Type=="map") { var.setName(name); Map.insert(name,var); } else qDebug()<<"Var::insert - type is not map; Name = "<<Name<<"Type = "<<Type; }
void GBufferConditionerGLSL::processVert( Vector<ShaderComponent*> &componentList, const MaterialFeatureData &fd ) { // If we have a normal map then that feature will // take care of passing gbNormal to the pixel shader. if ( fd.features[MFT_NormalMap] ) return; MultiLine *meta = new MultiLine; output = meta; // grab incoming vert normal Var *inNormal = (Var*) LangElement::find( "normal" ); AssertFatal( inNormal, "Something went bad with ShaderGen. The normal should be already defined." ); // grab output for gbuffer normal ShaderConnector *connectComp = dynamic_cast<ShaderConnector *>( componentList[C_CONNECTOR] ); Var *outNormal = connectComp->getElement( RT_TEXCOORD ); outNormal->setName( "gbNormal" ); outNormal->setStructName( "OUT" ); outNormal->setType( "float3" ); if( !fd.features[MFT_ParticleNormal] ) { // Kick out the view-space normal // TODO: Total hack because Conditioner is directly derived // from ShaderFeature and not from ShaderFeatureGLSL. NamedFeatureGLSL dummy( String::EmptyString ); dummy.mInstancingFormat = mInstancingFormat; Var *worldViewOnly = dummy.getWorldView( componentList, fd.features[MFT_UseInstancing], meta ); meta->addStatement( new GenOp(" @ = tMul(@, float4( normalize(@), 0.0 ) ).xyz;\r\n", outNormal, worldViewOnly, inNormal ) ); } else { // Assume the particle normal generator has already put this in view space // and normalized it meta->addStatement( new GenOp( " @ = @;\r\n", outNormal, inNormal ) ); } }
Error Compiler::_hint(Var& var, uint32_t hint, uint32_t value) noexcept { if (var.getId() == kInvalidValue) return kErrorOk; HLHint* node = newHintNode(var, hint, value); if (node == nullptr) return setLastError(kErrorNoHeapMemory); addNode(node); return kErrorOk; }
void Compiler::rename(Var& var, const char* fmt, ...) noexcept { if (var.getId() == kInvalidValue) return; VarData* vd = getVdById(var.getId()); vd->_name = noName; if (fmt != nullptr && fmt[0] != '\0') { char buf[64]; va_list ap; va_start(ap, fmt); vsnprintf(buf, ASMJIT_ARRAY_SIZE(buf), fmt, ap); buf[ASMJIT_ARRAY_SIZE(buf) - 1] = '\0'; vd->_name = _stringAllocator.sdup(buf); va_end(ap); } }
HRESULT __stdcall CoCOMServer::ahkgetvar(/*in*/VARIANT name,/*[in,optional]*/ VARIANT getVar,/*out*/VARIANT *result) { USES_CONVERSION; if (result==NULL) return ERROR_INVALID_PARAMETER; //USES_CONVERSION; TCHAR buf[MAX_INTEGER_SIZE]; Var *var; ExprTokenType aToken ; var = g_script.FindVar(name.vt == VT_BSTR ? OLE2T(name.bstrVal) : Variant2T(name,buf)) ; var->TokenToContents(aToken) ; VariantInit(result); // CComVariant b ; VARIANT b ; TokenToVariant(aToken, b); return VariantCopy(result, &b) ; // return S_OK ; // return b.Detach(result); }
void Environment::addTensorIndex(const pe::PathExpression& pexpr, const Var& var) { iassert(pexpr.defined()) << "Attempting to add tensor " << util::quote(var) << " index with an undefined path expression"; iassert(var.defined()) << "attempting to add a tensor index to an undefined var"; string name = var.getName(); // Lazily create a new index if no index with the given pexpr exist. // TODO: Maybe rename indices as they get used by multiple tensors if (!hasTensorIndex(pexpr)) { TensorIndex ti(name+"_index", pexpr); content->tensorIndices.push_back(ti); size_t loc = content->tensorIndices.size() - 1; content->locationOfTensorIndex.insert({pexpr, loc}); } content->tensorIndexOfVar.insert({var, getTensorIndex(pexpr)}); }