![]() |
OGRE-Next 3.0.0
Object-Oriented Graphics Rendering Engine
|
Metal doesn't support "DISCARD" like D3D9/D3D11 (and OpenGL but often it's broken) where we requested to map a write-only buffer and the API would discard the previous contents (thus allowing us to avoid a stall until the GPU is done with the region) More...
#include <OgreMetalDiscardBufferManager.h>
Inheritance diagram for Ogre::MetalDiscardBufferManager:Classes | |
| struct | UnsafeBlock |
Public Types | |
| typedef vector< UnsafeBlock >::type | UnsafeBlockVec |
Public Member Functions | |
| MetalDiscardBufferManager (MetalDevice *device, VaoManager *vaoManager) | |
| ~MetalDiscardBufferManager () | |
| void | _getBlock (MetalDiscardBuffer *discardBuffer) |
| For internal use. | |
| void | _notifyDeviceStalled () |
| MetalDiscardBuffer * | createDiscardBuffer (size_t bufferSize, uint16 alignment) |
| Creates a buffer that supports discarding to hold the required size. | |
| void | destroyDiscardBuffer (MetalDiscardBuffer *discardBuffer) |
| Destroys an existing MetalDiscardBuffer, releasing its memory. | |
| MetalDevice * | getDevice () const |
| VaoManager * | getVaoManager () const |
Metal doesn't support "DISCARD" like D3D9/D3D11 (and OpenGL but often it's broken) where we requested to map a write-only buffer and the API would discard the previous contents (thus allowing us to avoid a stall until the GPU is done with the region)
We need Discard for the v1 interfaces. So we need to emulate it. This class does exactly this.
| typedef vector<UnsafeBlock>::type Ogre::MetalDiscardBufferManager::UnsafeBlockVec |
| Ogre::MetalDiscardBufferManager::MetalDiscardBufferManager | ( | MetalDevice * | device, |
| VaoManager * | vaoManager ) |
| Ogre::MetalDiscardBufferManager::~MetalDiscardBufferManager | ( | ) |
| void Ogre::MetalDiscardBufferManager::_getBlock | ( | MetalDiscardBuffer * | discardBuffer | ) |
For internal use.
Retrieves a fresh new block. The old block will be returned to a pool until it's safe to reuse again. Used by the DiscardBuffer when map( DISCARD ) is called.
| discardBuffer | Buffer to assign a new region. |
| void Ogre::MetalDiscardBufferManager::_notifyDeviceStalled | ( | ) |
| MetalDiscardBuffer * Ogre::MetalDiscardBufferManager::createDiscardBuffer | ( | size_t | bufferSize, |
| uint16 | alignment ) |
Creates a buffer that supports discarding to hold the required size.
| bufferSize | Requested size in bytes. |
| alignment | Alignment requirements. |
| void Ogre::MetalDiscardBufferManager::destroyDiscardBuffer | ( | MetalDiscardBuffer * | discardBuffer | ) |
Destroys an existing MetalDiscardBuffer, releasing its memory.
| discardBuffer | MetalDiscardBuffer to destroy |
|
inline |
|
inline |