Hash :
5b8b1087
Author :
Date :
2015-02-13T11:17:34
D3D: Re-init static buffer after invalidate. This allows the Buffer class to always know if it's intended to use static data vs dynamic. In some cases we would end up with NULL pointers and not know if we started with static or dynamic usage. BUG=angle:912 Change-Id: I79ca62674543e0cf4b2ba9b31b6d8918723b31ce Reviewed-on: https://chromium-review.googlesource.com/249460 Tested-by: Jamie Madill <jmadill@chromium.org> Reviewed-by: Geoff Lang <geofflang@chromium.org> Reviewed-by: Brandon Jones <bajones@chromium.org>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
//
// Copyright 2014 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
// BufferD3D.cpp Defines common functionality between the Buffer9 and Buffer11 classes.
#include "libANGLE/renderer/d3d/BufferD3D.h"
#include "libANGLE/renderer/d3d/VertexBuffer.h"
#include "libANGLE/renderer/d3d/IndexBuffer.h"
namespace rx
{
unsigned int BufferD3D::mNextSerial = 1;
BufferD3D::BufferD3D()
: BufferImpl(),
mStaticVertexBuffer(NULL),
mStaticIndexBuffer(NULL)
{
updateSerial();
}
BufferD3D::~BufferD3D()
{
SafeDelete(mStaticVertexBuffer);
SafeDelete(mStaticIndexBuffer);
}
void BufferD3D::updateSerial()
{
mSerial = mNextSerial++;
}
void BufferD3D::initializeStaticData()
{
if (!mStaticVertexBuffer)
{
mStaticVertexBuffer = new StaticVertexBufferInterface(getRenderer());
}
if (!mStaticIndexBuffer)
{
mStaticIndexBuffer = new StaticIndexBufferInterface(getRenderer());
}
}
void BufferD3D::invalidateStaticData()
{
if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
{
SafeDelete(mStaticVertexBuffer);
SafeDelete(mStaticIndexBuffer);
// Re-init static data to track that we're in a static buffer
initializeStaticData();
}
mUnmodifiedDataUse = 0;
}
// Creates static buffers if sufficient used data has been left unmodified
void BufferD3D::promoteStaticUsage(int dataSize)
{
if (!mStaticVertexBuffer && !mStaticIndexBuffer)
{
mUnmodifiedDataUse += dataSize;
if (mUnmodifiedDataUse > 3 * getSize())
{
initializeStaticData();
}
}
}
}