Commit a1506213 by Geoff Lang Committed by Commit Bot

Remove initialization of ImageD3D objects now that lazy init covers them

Inintialize all D3D11 texture allocations with dummy values in debug. BUG=angleproject:2107 BUG=angleproject:1635 Change-Id: Ibcc6cc30480b32430563143f35f38dda16fdb83c Reviewed-on: https://chromium-review.googlesource.com/678477 Commit-Queue: Geoff Lang <geofflang@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarCorentin Wallez <cwallez@chromium.org>
parent 09cd4777
...@@ -267,11 +267,6 @@ angle::WorkerThreadPool *RendererD3D::getWorkerThreadPool() ...@@ -267,11 +267,6 @@ angle::WorkerThreadPool *RendererD3D::getWorkerThreadPool()
return &mWorkerThreadPool; return &mWorkerThreadPool;
} }
bool RendererD3D::isRobustResourceInitEnabled() const
{
return mDisplay->isRobustResourceInitEnabled();
}
Serial RendererD3D::generateSerial() Serial RendererD3D::generateSerial()
{ {
return mSerialFactory.generate(); return mSerialFactory.generate();
......
...@@ -311,8 +311,6 @@ class RendererD3D : public BufferFactoryD3D ...@@ -311,8 +311,6 @@ class RendererD3D : public BufferFactoryD3D
angle::WorkerThreadPool *getWorkerThreadPool(); angle::WorkerThreadPool *getWorkerThreadPool();
bool isRobustResourceInitEnabled() const;
size_t getBoundFramebufferTextures(const gl::ContextState &data, size_t getBoundFramebufferTextures(const gl::ContextState &data,
FramebufferTextureArray *outTextureArray); FramebufferTextureArray *outTextureArray);
......
...@@ -153,11 +153,6 @@ GLint TextureD3D::getBaseLevelDepth() const ...@@ -153,11 +153,6 @@ GLint TextureD3D::getBaseLevelDepth() const
return (baseImage ? baseImage->getDepth() : 0); return (baseImage ? baseImage->getDepth() : 0);
} }
bool TextureD3D::shouldForceReleaseImagesOnSetImage(const uint8_t *pixels) const
{
return mRenderer->isRobustResourceInitEnabled() && pixels == nullptr;
}
// Note: "base level image" is loosely defined to be any image from the base level, // Note: "base level image" is loosely defined to be any image from the base level,
// where in the base of 2D array textures and cube maps there are several. Don't use // where in the base of 2D array textures and cube maps there are several. Don't use
// the base level image for anything except querying texture format and size. // the base level image for anything except querying texture format and size.
...@@ -849,8 +844,7 @@ gl::Error TextureD3D_2D::setImage(const gl::Context *context, ...@@ -849,8 +844,7 @@ gl::Error TextureD3D_2D::setImage(const gl::Context *context,
bool fastUnpacked = false; bool fastUnpacked = false;
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, size, ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
gl::ImageIndex index = gl::ImageIndex::Make2D(level); gl::ImageIndex index = gl::ImageIndex::Make2D(level);
...@@ -921,8 +915,7 @@ gl::Error TextureD3D_2D::setCompressedImage(const gl::Context *context, ...@@ -921,8 +915,7 @@ gl::Error TextureD3D_2D::setCompressedImage(const gl::Context *context,
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
// compressed formats don't have separate sized internal formats-- we can just use the compressed format directly // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
ANGLE_TRY(redefineImage(context, level, internalFormat, size, ANGLE_TRY(redefineImage(context, level, internalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
return setCompressedImageImpl(context, gl::ImageIndex::Make2D(level), unpack, pixels, 0); return setCompressedImageImpl(context, gl::ImageIndex::Make2D(level), unpack, pixels, 0);
} }
...@@ -958,7 +951,7 @@ gl::Error TextureD3D_2D::copyImage(const gl::Context *context, ...@@ -958,7 +951,7 @@ gl::Error TextureD3D_2D::copyImage(const gl::Context *context,
gl::GetInternalFormatInfo(internalFormat, GL_UNSIGNED_BYTE); gl::GetInternalFormatInfo(internalFormat, GL_UNSIGNED_BYTE);
gl::Extents sourceExtents(origSourceArea.width, origSourceArea.height, 1); gl::Extents sourceExtents(origSourceArea.width, origSourceArea.height, 1);
ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, sourceExtents, ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, sourceExtents,
mRenderer->isRobustResourceInitEnabled())); false));
gl::Extents fbSize = source->getReadColorbuffer()->getSize(); gl::Extents fbSize = source->getReadColorbuffer()->getSize();
...@@ -973,7 +966,7 @@ gl::Error TextureD3D_2D::copyImage(const gl::Context *context, ...@@ -973,7 +966,7 @@ gl::Error TextureD3D_2D::copyImage(const gl::Context *context,
// TODO(fjhenigman): When robust resource is fully implemented look into making it a // TODO(fjhenigman): When robust resource is fully implemented look into making it a
// prerequisite for WebGL and deleting this code. // prerequisite for WebGL and deleting this code.
if (outside && if (outside &&
(context->getExtensions().webglCompatibility || mRenderer->isRobustResourceInitEnabled())) (context->getExtensions().webglCompatibility || context->isRobustResourceInitEnabled()))
{ {
angle::MemoryBuffer *zero; angle::MemoryBuffer *zero;
ANGLE_TRY(context->getZeroFilledBuffer( ANGLE_TRY(context->getZeroFilledBuffer(
...@@ -1645,8 +1638,7 @@ gl::Error TextureD3D_Cube::setImage(const gl::Context *context, ...@@ -1645,8 +1638,7 @@ gl::Error TextureD3D_Cube::setImage(const gl::Context *context,
gl::ImageIndex index = gl::ImageIndex::MakeCube(target, static_cast<GLint>(level)); gl::ImageIndex index = gl::ImageIndex::MakeCube(target, static_cast<GLint>(level));
ANGLE_TRY(redefineImage(context, index.layerIndex, static_cast<GLint>(level), ANGLE_TRY(redefineImage(context, index.layerIndex, static_cast<GLint>(level),
internalFormatInfo.sizedInternalFormat, size, internalFormatInfo.sizedInternalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
return setImageImpl(context, index, type, unpack, pixels, 0); return setImageImpl(context, index, type, unpack, pixels, 0);
} }
...@@ -1681,7 +1673,7 @@ gl::Error TextureD3D_Cube::setCompressedImage(const gl::Context *context, ...@@ -1681,7 +1673,7 @@ gl::Error TextureD3D_Cube::setCompressedImage(const gl::Context *context,
size_t faceIndex = gl::CubeMapTextureTargetToLayerIndex(target); size_t faceIndex = gl::CubeMapTextureTargetToLayerIndex(target);
ANGLE_TRY(redefineImage(context, static_cast<int>(faceIndex), static_cast<GLint>(level), ANGLE_TRY(redefineImage(context, static_cast<int>(faceIndex), static_cast<GLint>(level),
internalFormat, size, shouldForceReleaseImagesOnSetImage(pixels))); internalFormat, size, false));
gl::ImageIndex index = gl::ImageIndex::MakeCube(target, static_cast<GLint>(level)); gl::ImageIndex index = gl::ImageIndex::MakeCube(target, static_cast<GLint>(level));
return setCompressedImageImpl(context, index, unpack, pixels, 0); return setCompressedImageImpl(context, index, unpack, pixels, 0);
...@@ -1719,8 +1711,7 @@ gl::Error TextureD3D_Cube::copyImage(const gl::Context *context, ...@@ -1719,8 +1711,7 @@ gl::Error TextureD3D_Cube::copyImage(const gl::Context *context,
gl::Extents size(origSourceArea.width, origSourceArea.height, 1); gl::Extents size(origSourceArea.width, origSourceArea.height, 1);
ANGLE_TRY(redefineImage(context, static_cast<int>(faceIndex), level, ANGLE_TRY(redefineImage(context, static_cast<int>(faceIndex), level,
internalFormatInfo.sizedInternalFormat, size, internalFormatInfo.sizedInternalFormat, size, false));
mRenderer->isRobustResourceInitEnabled()));
gl::Extents fbSize = source->getReadColorbuffer()->getSize(); gl::Extents fbSize = source->getReadColorbuffer()->getSize();
...@@ -1735,7 +1726,7 @@ gl::Error TextureD3D_Cube::copyImage(const gl::Context *context, ...@@ -1735,7 +1726,7 @@ gl::Error TextureD3D_Cube::copyImage(const gl::Context *context,
// TODO(fjhenigman): When robust resource is fully implemented look into making it a // TODO(fjhenigman): When robust resource is fully implemented look into making it a
// prerequisite for WebGL and deleting this code. // prerequisite for WebGL and deleting this code.
if (outside && context->getExtensions().webglCompatibility && if (outside && context->getExtensions().webglCompatibility &&
!mRenderer->isRobustResourceInitEnabled()) !context->isRobustResourceInitEnabled())
{ {
angle::MemoryBuffer *zero; angle::MemoryBuffer *zero;
ANGLE_TRY(context->getZeroFilledBuffer( ANGLE_TRY(context->getZeroFilledBuffer(
...@@ -2388,8 +2379,7 @@ gl::Error TextureD3D_3D::setImage(const gl::Context *context, ...@@ -2388,8 +2379,7 @@ gl::Error TextureD3D_3D::setImage(const gl::Context *context,
const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type); const gl::InternalFormat &internalFormatInfo = gl::GetInternalFormatInfo(internalFormat, type);
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, size, ANGLE_TRY(redefineImage(context, level, internalFormatInfo.sizedInternalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
bool fastUnpacked = false; bool fastUnpacked = false;
...@@ -2465,8 +2455,7 @@ gl::Error TextureD3D_3D::setCompressedImage(const gl::Context *context, ...@@ -2465,8 +2455,7 @@ gl::Error TextureD3D_3D::setCompressedImage(const gl::Context *context,
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
// compressed formats don't have separate sized internal formats-- we can just use the compressed format directly // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
ANGLE_TRY(redefineImage(context, level, internalFormat, size, ANGLE_TRY(redefineImage(context, level, internalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
gl::ImageIndex index = gl::ImageIndex::Make3D(level); gl::ImageIndex index = gl::ImageIndex::Make3D(level);
return setCompressedImageImpl(context, index, unpack, pixels, 0); return setCompressedImageImpl(context, index, unpack, pixels, 0);
...@@ -2935,8 +2924,7 @@ gl::Error TextureD3D_2DArray::setImage(const gl::Context *context, ...@@ -2935,8 +2924,7 @@ gl::Error TextureD3D_2DArray::setImage(const gl::Context *context,
const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat, type); const gl::InternalFormat &formatInfo = gl::GetInternalFormatInfo(internalFormat, type);
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
ANGLE_TRY(redefineImage(context, level, formatInfo.sizedInternalFormat, size, ANGLE_TRY(redefineImage(context, level, formatInfo.sizedInternalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
GLsizei inputDepthPitch = 0; GLsizei inputDepthPitch = 0;
ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, size.width, size.height, unpack.alignment, ANGLE_TRY_RESULT(formatInfo.computeDepthPitch(type, size.width, size.height, unpack.alignment,
...@@ -2999,8 +2987,7 @@ gl::Error TextureD3D_2DArray::setCompressedImage(const gl::Context *context, ...@@ -2999,8 +2987,7 @@ gl::Error TextureD3D_2DArray::setCompressedImage(const gl::Context *context,
GLint level = static_cast<GLint>(imageLevel); GLint level = static_cast<GLint>(imageLevel);
// compressed formats don't have separate sized internal formats-- we can just use the compressed format directly // compressed formats don't have separate sized internal formats-- we can just use the compressed format directly
ANGLE_TRY(redefineImage(context, level, internalFormat, size, ANGLE_TRY(redefineImage(context, level, internalFormat, size, false));
shouldForceReleaseImagesOnSetImage(pixels)));
const gl::InternalFormat &formatInfo = gl::GetSizedInternalFormatInfo(internalFormat); const gl::InternalFormat &formatInfo = gl::GetSizedInternalFormatInfo(internalFormat);
GLsizei inputDepthPitch = 0; GLsizei inputDepthPitch = 0;
......
...@@ -173,8 +173,6 @@ class TextureD3D : public TextureImpl ...@@ -173,8 +173,6 @@ class TextureD3D : public TextureImpl
GLint getBaseLevelDepth() const; GLint getBaseLevelDepth() const;
bool shouldForceReleaseImagesOnSetImage(const uint8_t *pixels) const;
RendererD3D *mRenderer; RendererD3D *mRenderer;
bool mDirtyImages; bool mDirtyImages;
......
...@@ -137,8 +137,7 @@ bool Image11::isDirty() const ...@@ -137,8 +137,7 @@ bool Image11::isDirty() const
// recovered from TextureStorage AND the texture doesn't require init data (i.e. a blank new // recovered from TextureStorage AND the texture doesn't require init data (i.e. a blank new
// texture will suffice) AND robust resource initialization is not enabled then isDirty should // texture will suffice) AND robust resource initialization is not enabled then isDirty should
// still return false. // still return false.
if (mDirty && !mStagingTexture.valid() && !mRecoverFromStorage && if (mDirty && !mStagingTexture.valid() && !mRecoverFromStorage)
!mRenderer->isRobustResourceInitEnabled())
{ {
const Renderer11DeviceCaps &deviceCaps = mRenderer->getRenderer11DeviceCaps(); const Renderer11DeviceCaps &deviceCaps = mRenderer->getRenderer11DeviceCaps();
const auto &formatInfo = d3d11::Format::Get(mInternalFormat, deviceCaps); const auto &formatInfo = d3d11::Format::Get(mInternalFormat, deviceCaps);
...@@ -255,8 +254,7 @@ bool Image11::redefine(GLenum target, ...@@ -255,8 +254,7 @@ bool Image11::redefine(GLenum target,
mRenderable = (formatInfo.rtvFormat != DXGI_FORMAT_UNKNOWN); mRenderable = (formatInfo.rtvFormat != DXGI_FORMAT_UNKNOWN);
releaseStagingTexture(); releaseStagingTexture();
mDirty = (formatInfo.dataInitializerFunction != nullptr) || mDirty = (formatInfo.dataInitializerFunction != nullptr);
mRenderer->isRobustResourceInitEnabled();
return true; return true;
} }
......
...@@ -845,6 +845,8 @@ egl::Error Renderer11::initializeD3DDevice() ...@@ -845,6 +845,8 @@ egl::Error Renderer11::initializeD3DDevice()
mRenderer11DeviceCaps.featureLevel = mDevice->GetFeatureLevel(); mRenderer11DeviceCaps.featureLevel = mDevice->GetFeatureLevel();
} }
mResourceManager11.setAllocationsInitialized(mCreateDebugDevice);
d3d11::SetDebugName(mDeviceContext, "DeviceContext"); d3d11::SetDebugName(mDeviceContext, "DeviceContext");
return egl::NoError(); return egl::NoError();
......
...@@ -17,6 +17,12 @@ namespace rx ...@@ -17,6 +17,12 @@ namespace rx
namespace namespace
{ {
constexpr uint8_t kDebugInitTextureDataValue = 0x48;
constexpr FLOAT kDebugColorInitClearValue[4] = {0.3f, 0.5f, 0.7f, 0.5f};
constexpr FLOAT kDebugDepthInitValue = 0.2f;
constexpr UINT8 kDebugStencilInitValue = 3;
size_t ComputeMippedMemoryUsage(unsigned int width, size_t ComputeMippedMemoryUsage(unsigned int width,
unsigned int height, unsigned int height,
unsigned int depth, unsigned int depth,
...@@ -283,7 +289,8 @@ gl::Error ClearResource(Renderer11 *renderer, ...@@ -283,7 +289,8 @@ gl::Error ClearResource(Renderer11 *renderer,
d3d11::DepthStencilView dsv; d3d11::DepthStencilView dsv;
ANGLE_TRY(renderer->allocateResource(dsvDesc, texture, &dsv)); ANGLE_TRY(renderer->allocateResource(dsvDesc, texture, &dsv));
context->ClearDepthStencilView(dsv.get(), clearFlags, 1.0f, 0); context->ClearDepthStencilView(dsv.get(), clearFlags, kDebugDepthInitValue,
kDebugStencilInitValue);
} }
} }
else else
...@@ -292,8 +299,7 @@ gl::Error ClearResource(Renderer11 *renderer, ...@@ -292,8 +299,7 @@ gl::Error ClearResource(Renderer11 *renderer,
d3d11::RenderTargetView rtv; d3d11::RenderTargetView rtv;
ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv)); ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv));
const FLOAT zero[4] = {0.0f, 0.0f, 0.0f, 0.0f}; context->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
context->ClearRenderTargetView(rtv.get(), zero);
} }
return gl::NoError(); return gl::NoError();
...@@ -312,8 +318,7 @@ gl::Error ClearResource(Renderer11 *renderer, ...@@ -312,8 +318,7 @@ gl::Error ClearResource(Renderer11 *renderer,
d3d11::RenderTargetView rtv; d3d11::RenderTargetView rtv;
ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv)); ANGLE_TRY(renderer->allocateResourceNoDesc(texture, &rtv));
const FLOAT zero[4] = {0.0f, 0.0f, 0.0f, 0.0f}; context->ClearRenderTargetView(rtv.get(), kDebugColorInitClearValue);
context->ClearRenderTargetView(rtv.get(), zero);
return gl::NoError(); return gl::NoError();
} }
...@@ -328,7 +333,9 @@ static_assert(kResourceTypeNames[NumResourceTypes - 1] != nullptr, ...@@ -328,7 +333,9 @@ static_assert(kResourceTypeNames[NumResourceTypes - 1] != nullptr,
// ResourceManager11 Implementation. // ResourceManager11 Implementation.
ResourceManager11::ResourceManager11() ResourceManager11::ResourceManager11()
: mAllocatedResourceCounts({{}}), mAllocatedResourceDeviceMemory({{}}) : mInitializeAllocations(false),
mAllocatedResourceCounts({{}}),
mAllocatedResourceDeviceMemory({{}})
{ {
} }
...@@ -355,7 +362,7 @@ gl::Error ResourceManager11::allocate(Renderer11 *renderer, ...@@ -355,7 +362,7 @@ gl::Error ResourceManager11::allocate(Renderer11 *renderer,
T *resource = nullptr; T *resource = nullptr;
GetInitDataFromD3D11<T> *shadowInitData = initData; GetInitDataFromD3D11<T> *shadowInitData = initData;
if (!shadowInitData && renderer->isRobustResourceInitEnabled()) if (!shadowInitData && mInitializeAllocations)
{ {
shadowInitData = createInitDataIfNeeded<T>(desc); shadowInitData = createInitDataIfNeeded<T>(desc);
} }
...@@ -373,7 +380,7 @@ gl::Error ResourceManager11::allocate(Renderer11 *renderer, ...@@ -373,7 +380,7 @@ gl::Error ResourceManager11::allocate(Renderer11 *renderer,
<< gl::FmtHR(hr); << gl::FmtHR(hr);
} }
if (!shadowInitData && renderer->isRobustResourceInitEnabled()) if (!shadowInitData && mInitializeAllocations)
{ {
ANGLE_TRY(ClearResource(renderer, desc, resource)); ANGLE_TRY(ClearResource(renderer, desc, resource));
} }
...@@ -420,7 +427,7 @@ const D3D11_SUBRESOURCE_DATA *ResourceManager11::createInitDataIfNeeded<ID3D11Te ...@@ -420,7 +427,7 @@ const D3D11_SUBRESOURCE_DATA *ResourceManager11::createInitDataIfNeeded<ID3D11Te
if (mZeroMemory.size() < requiredSize) if (mZeroMemory.size() < requiredSize)
{ {
mZeroMemory.resize(requiredSize); mZeroMemory.resize(requiredSize);
mZeroMemory.fill(0); mZeroMemory.fill(kDebugInitTextureDataValue);
} }
const auto &formatSizeInfo = d3d11::GetDXGIFormatSizeInfo(desc->Format); const auto &formatSizeInfo = d3d11::GetDXGIFormatSizeInfo(desc->Format);
...@@ -466,7 +473,7 @@ const D3D11_SUBRESOURCE_DATA *ResourceManager11::createInitDataIfNeeded<ID3D11Te ...@@ -466,7 +473,7 @@ const D3D11_SUBRESOURCE_DATA *ResourceManager11::createInitDataIfNeeded<ID3D11Te
if (mZeroMemory.size() < requiredSize) if (mZeroMemory.size() < requiredSize)
{ {
mZeroMemory.resize(requiredSize); mZeroMemory.resize(requiredSize);
mZeroMemory.fill(0); mZeroMemory.fill(kDebugInitTextureDataValue);
} }
const auto &formatSizeInfo = d3d11::GetDXGIFormatSizeInfo(desc->Format); const auto &formatSizeInfo = d3d11::GetDXGIFormatSizeInfo(desc->Format);
...@@ -500,6 +507,11 @@ GetInitDataFromD3D11<T> *ResourceManager11::createInitDataIfNeeded(const GetDesc ...@@ -500,6 +507,11 @@ GetInitDataFromD3D11<T> *ResourceManager11::createInitDataIfNeeded(const GetDesc
return nullptr; return nullptr;
} }
void ResourceManager11::setAllocationsInitialized(bool initialize)
{
mInitializeAllocations = initialize;
}
#define ANGLE_INSTANTIATE_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \ #define ANGLE_INSTANTIATE_OP(NAME, RESTYPE, D3D11TYPE, DESCTYPE, INITDATATYPE) \
\ \
template \ template \
......
...@@ -317,6 +317,8 @@ class ResourceManager11 final : angle::NonCopyable ...@@ -317,6 +317,8 @@ class ResourceManager11 final : angle::NonCopyable
void onReleaseGeneric(ResourceType resourceType, ID3D11DeviceChild *resource); void onReleaseGeneric(ResourceType resourceType, ID3D11DeviceChild *resource);
void setAllocationsInitialized(bool initialize);
private: private:
void incrResource(ResourceType resourceType, size_t memorySize); void incrResource(ResourceType resourceType, size_t memorySize);
void decrResource(ResourceType resourceType, size_t memorySize); void decrResource(ResourceType resourceType, size_t memorySize);
...@@ -324,6 +326,8 @@ class ResourceManager11 final : angle::NonCopyable ...@@ -324,6 +326,8 @@ class ResourceManager11 final : angle::NonCopyable
template <typename T> template <typename T>
GetInitDataFromD3D11<T> *createInitDataIfNeeded(const GetDescFromD3D11<T> *desc); GetInitDataFromD3D11<T> *createInitDataIfNeeded(const GetDescFromD3D11<T> *desc);
bool mInitializeAllocations;
std::array<size_t, NumResourceTypes> mAllocatedResourceCounts; std::array<size_t, NumResourceTypes> mAllocatedResourceCounts;
std::array<size_t, NumResourceTypes> mAllocatedResourceDeviceMemory; std::array<size_t, NumResourceTypes> mAllocatedResourceDeviceMemory;
angle::MemoryBuffer mZeroMemory; angle::MemoryBuffer mZeroMemory;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment