You should note that SDL_SWSURFACE isn't really a flag at all, it is defined as 0. To test whether a surface is in hardware is > if( my_surface->flags & SDL_HWSURFACE ) If this fails, its in software.