Exemplo n.º 1
0
// Constrói o Moral Graph
Graph* buildBNMoralGraph (int nxr, int* xr, BayesNet* bayesnet) {
	
	Graph* subgraph;
	Graph* moral;

	// Variáveis auxiliares
	Vertex* vertex;
	VertexNode* current;
	VertexLinkedList* children;

	int* varmap;	// Mapea as variáveis da rede antiga para a subrede

	int i,j;

	// Aloca o espaço para o mapa de variáveis
	varmap = malloc(bnsize(bayesnet)*sizeof(int));

	// Inicializa o mapa de variáveis
	for (i=0;i<bnsize(bayesnet);i++) varmap[i] = 0;

	// 1. Constroi o subgrafo - mantendo os ids dos nós
	// Inicializa o subgraph
	subgraph = newGraph(DIRECTED_GRAPH);

	// Percore o vetor de variáveis requireds e cria os vértices da subrede
	for (i=0;i<nxr;i++) {
		// Atualiza o mapa de variáveis indicando que o nó/variável é requirida
		varmap[xr[i]] = 1;
		// inclui o nó na rede
		vertex = buildVertex(xr[i],bayesnet->variables[xr[i]]->name);
		addVertex(&subgraph,&vertex);
	}

	for (i=0;i<nxr;i++) {

		// Estabelece as ligações
		vertex = getVertex(&bayesnet->graph,xr[i]);
		current = getVertexChildren(vertex)->first;
		while (current!=NULL) {
			if (varmap[current->vertex->id]==1) addArcByIds(&subgraph,xr[i],current->vertex->id);
			current = current->next;
		}
	}

	// 2. Gera o Moral Graph para o subgraph
	moral = buildMoralGraph(subgraph);

	// Desloca os espaços da memória;
	// Mapa de variáveis
	free(varmap);
	varmap = NULL;

	// Destroy o subgraph
	destroyGraph(&subgraph);
	subgraph = NULL;

	return moral;
}
Exemplo n.º 2
0
/**
    \fn openGlVertex
    \brief constructor
*/
openGlVertex::openGlVertex(  ADM_coreVideoFilter *in,CONFcouple *setup) : ADM_coreVideoFilterQtGl(in,setup)
{
UNUSED_ARG(setup);
        widget->makeCurrent();
        fboY->bind();
        printf("Compiling shader \n");
        // vertex shader 
       
        // frag shader
        glProgramY = new QGLShaderProgram(context);
        ADM_assert(glProgramY);
#if 1
        if ( !glProgramY->addShaderFromSourceCode(QGLShader::Vertex, myVertex))
        {
                ADM_error("[GL Render] Vertex log: %s\n", glProgramY->log().toUtf8().constData());
                ADM_assert(0);
        }

#endif
        if ( !glProgramY->addShaderFromSourceCode(QGLShader::Fragment, myShaderY))
        {
                ADM_error("[GL Render] Fragment log: %s\n", glProgramY->log().toUtf8().constData());
                ADM_assert(0);
        }
        if ( !glProgramY->link())
        {
            ADM_error("[GL Render] Link log: %s\n", glProgramY->log().toUtf8().constData());
            ADM_assert(0);
        }

        if ( !glProgramY->bind())
        {
                ADM_error("[GL Render] Binding FAILED\n");
                ADM_assert(0);
        }
        glList=glGenLists(1);
        buildVertex();
        fboY->release();
        widget->doneCurrent();

}
Exemplo n.º 3
0
    void buildStream(const STREAMOUT_COMPILE_STATE& state, const STREAMOUT_STREAM& streamState, Value* pSoCtx, BasicBlock* returnBB, Function* soFunc)
    {
        // get list of active SO buffers
        std::unordered_set<uint32_t> activeSOBuffers;
        for (uint32_t d = 0; d < streamState.numDecls; ++d)
        {
            const STREAMOUT_DECL& decl = streamState.decl[d];
            activeSOBuffers.insert(decl.bufferIndex);
        }

        // always increment numPrimStorageNeeded
        Value *numPrimStorageNeeded = LOAD(pSoCtx, { 0, SWR_STREAMOUT_CONTEXT_numPrimStorageNeeded });
        numPrimStorageNeeded = ADD(numPrimStorageNeeded, C(1));
        STORE(numPrimStorageNeeded, pSoCtx, { 0, SWR_STREAMOUT_CONTEXT_numPrimStorageNeeded });

        // check OOB on active SO buffers.  If any buffer is out of bound, don't write
        // the primitive to any buffer
        Value* oobMask = C(false);
        for (uint32_t buffer : activeSOBuffers)
        {
            oobMask = OR(oobMask, oob(state, pSoCtx, buffer));
        }

        BasicBlock* validBB = BasicBlock::Create(JM()->mContext, "valid", soFunc);

        // early out if OOB
        COND_BR(oobMask, returnBB, validBB);

        IRB()->SetInsertPoint(validBB);

        Value* numPrimsWritten = LOAD(pSoCtx, { 0, SWR_STREAMOUT_CONTEXT_numPrimsWritten });
        numPrimsWritten = ADD(numPrimsWritten, C(1));
        STORE(numPrimsWritten, pSoCtx, { 0, SWR_STREAMOUT_CONTEXT_numPrimsWritten });

        // compute start pointer for each output buffer
        Value* pOutBuffer[4];
        Value* pOutBufferStartVertex[4];
        Value* outBufferPitch[4];
        for (uint32_t b: activeSOBuffers)
        {
            Value* pBuf = getSOBuffer(pSoCtx, b);
            Value* pData = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_pBuffer });
            Value* streamOffset = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_streamOffset });
            pOutBuffer[b] = GEP(pData, streamOffset);
            pOutBufferStartVertex[b] = pOutBuffer[b];

            outBufferPitch[b] = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_pitch });
        }

        // loop over the vertices of the prim
        Value* pStreamData = LOAD(pSoCtx, { 0, SWR_STREAMOUT_CONTEXT_pPrimData });
        for (uint32_t v = 0; v < state.numVertsPerPrim; ++v)
        {
            buildVertex(streamState, pStreamData, pOutBuffer);

            // increment stream and output buffer pointers
            // stream verts are always 32*4 dwords apart
            pStreamData = GEP(pStreamData, C(KNOB_NUM_ATTRIBUTES * 4));

            // output buffers offset using pitch in buffer state
            for (uint32_t b : activeSOBuffers)
            {
                pOutBufferStartVertex[b] = GEP(pOutBufferStartVertex[b], outBufferPitch[b]);
                pOutBuffer[b] = pOutBufferStartVertex[b];
            }
        }

        // update each active buffer's streamOffset
        for (uint32_t b : activeSOBuffers)
        {
            Value* pBuf = getSOBuffer(pSoCtx, b);
            Value* streamOffset = LOAD(pBuf, { 0, SWR_STREAMOUT_BUFFER_streamOffset });
            streamOffset = ADD(streamOffset, MUL(C(state.numVertsPerPrim), outBufferPitch[b]));
            STORE(streamOffset, pBuf, { 0, SWR_STREAMOUT_BUFFER_streamOffset });
        }
    }