Ejemplo n.º 1
0
bool GPUMemory::allocate(BaseObject& bo)
{
    GPUMemory::BaseObjectInfo* boInfo = _find(&bo);    
    BaseObject::State state = bo.getState();
    if ( boInfo )
    {
        if ( state == BaseObject::ReAlloc )
        {
            //  reallocate
            _dealloc(&bo, boInfo);
            _alloc(&bo);
        }
        else if ( state == BaseObject::NotSync )
        {
            _update(&bo, boInfo);
        }
        else // { ( state == BaseObject::Sync ) -> already synchronized } ||
            //  { ( state == BaseObject::Blit ) -> updated data is already and exclusively in memory  }
        {
            return false;
        }
    }
    else
    {
        if ( state != BaseObject::ReAlloc )
            panic("GPUMemory", "allocate", "Should not happen."
                                           "GPUMemory internal info not found for an allocated BaseObject");
        _alloc(&bo);
    }
    return true;
}
Ejemplo n.º 2
0
void GPUMemory::dump() const
{
    cout << "------ GPUMemory allocated objects ------\n\n";
    map<BaseObject*,BaseObjectInfo>::const_iterator it = maps.begin();
    for ( ; it != maps.end(); it++ )
    {
        BaseObject* bo = it->first;
        BaseObjectInfo boi = it->second;

        cout << "State: ";
        
        BaseObject::State state = bo->getState();
        switch(state)
        {
            case BaseObject::ReAlloc: cout << "ReAlloc"; break;
            case BaseObject::NotSync: cout << "NotSync"; break;
            case BaseObject::Sync: cout << "Sync"; break;
            case BaseObject::Blit: cout << "Blit"; break;
            default:
                panic("GPUMemory","dump","Unknown state");
        }
        
        cout << endl;
        
        //cout << "ID_STRING: " << bo->toString().c_str() << " :\n";
        cout << "   md's: ";
        
        for (u32bit i = 0; i < boi.md.size(); i++ )
        {
            
            cout << boi.md[i] << endl;
            
            driver->dumpMD(boi.md[i]);
            
            if ( i < boi.md.size() - 1 )
                cout << ", ";
        }
        cout << "\n   size's: ";
        for (u32bit i = 0; i < boi.size.size(); i++ )
        {
            cout << boi.size[i];
            if ( i < boi.size.size() - 1 )
                cout << ", ";
        }
        cout << "\n   Number of portions: " << bo->getNumberOfPortions() << endl << endl;
        
    }
    
    //driver->dumpMemoryAllocation();
    
    cout << "\n-----------------------------------------" << endl;
}
Ejemplo n.º 3
0
bool GPUMemory::deallocate(BaseObject& bo)
{
    BaseObjectInfo* boInfo = _find(&bo);
    BaseObject::State state = bo.getState();

    if ( boInfo )
        _dealloc(&bo, boInfo);
    else
    {
        panic("GPUMemory", "deallocate", "Trying to deallocate a not allocated object");
        return false;
    }
            
    return true;
}