Commit df0e48fe by Jamie Madill Committed by Commit Bot

Buffer11: Don't use ErrorOrResult.

This pattern isn't available when using angle::Result instead of gl::Error. Refactor the Buffer11 class to use gl::Error instead. This unblocks further return value refactoring for perf. Bug: angleproject:2738 Change-Id: I739044ae318c6b1fc40756a4f1fcadf609276c1a Reviewed-on: https://chromium-review.googlesource.com/1142952Reviewed-by: 's avatarYuly Novikov <ynovikov@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent 0359b697
...@@ -115,11 +115,12 @@ class Buffer11::BufferStorage : angle::NonCopyable ...@@ -115,11 +115,12 @@ class Buffer11::BufferStorage : angle::NonCopyable
virtual bool isGPUAccessible() const = 0; virtual bool isGPUAccessible() const = 0;
virtual gl::ErrorOrResult<CopyResult> copyFromStorage(const gl::Context *context, virtual gl::Error copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) = 0; size_t destOffset,
CopyResult *resultOut) = 0;
virtual gl::Error resize(const gl::Context *context, size_t size, bool preserveData) = 0; virtual gl::Error resize(const gl::Context *context, size_t size, bool preserveData) = 0;
virtual gl::Error map(size_t offset, virtual gl::Error map(size_t offset,
...@@ -152,11 +153,12 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage ...@@ -152,11 +153,12 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
bool isGPUAccessible() const override { return true; } bool isGPUAccessible() const override { return true; }
const d3d11::Buffer &getBuffer() const { return mBuffer; } const d3d11::Buffer &getBuffer() const { return mBuffer; }
gl::ErrorOrResult<CopyResult> copyFromStorage(const gl::Context *context, gl::Error copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) override; size_t destOffset,
CopyResult *resultOut) override;
gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override; gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override;
gl::Error map(size_t offset, gl::Error map(size_t offset,
...@@ -165,7 +167,7 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage ...@@ -165,7 +167,7 @@ class Buffer11::NativeStorage : public Buffer11::BufferStorage
uint8_t **mapPointerOut) override; uint8_t **mapPointerOut) override;
void unmap() override; void unmap() override;
gl::ErrorOrResult<const d3d11::ShaderResourceView *> getSRVForFormat(DXGI_FORMAT srvFormat); gl::Error getSRVForFormat(DXGI_FORMAT srvFormat, const d3d11::ShaderResourceView **srvOut);
private: private:
static void FillBufferDesc(D3D11_BUFFER_DESC *bufferDesc, static void FillBufferDesc(D3D11_BUFFER_DESC *bufferDesc,
...@@ -192,15 +194,17 @@ class Buffer11::EmulatedIndexedStorage : public Buffer11::BufferStorage ...@@ -192,15 +194,17 @@ class Buffer11::EmulatedIndexedStorage : public Buffer11::BufferStorage
bool isGPUAccessible() const override { return false; } bool isGPUAccessible() const override { return false; }
gl::ErrorOrResult<const d3d11::Buffer *> getBuffer(SourceIndexData *indexInfo, gl::Error getBuffer(SourceIndexData *indexInfo,
const TranslatedAttribute &attribute, const TranslatedAttribute &attribute,
GLint startVertex); GLint startVertex,
const d3d11::Buffer **bufferOut);
gl::ErrorOrResult<CopyResult> copyFromStorage(const gl::Context *context, gl::Error copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) override; size_t destOffset,
CopyResult *resultOut) override;
gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override; gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override;
...@@ -228,11 +232,12 @@ class Buffer11::PackStorage : public Buffer11::BufferStorage ...@@ -228,11 +232,12 @@ class Buffer11::PackStorage : public Buffer11::BufferStorage
bool isGPUAccessible() const override { return false; } bool isGPUAccessible() const override { return false; }
gl::ErrorOrResult<CopyResult> copyFromStorage(const gl::Context *context, gl::Error copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) override; size_t destOffset,
CopyResult *resultOut) override;
gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override; gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override;
gl::Error map(size_t offset, gl::Error map(size_t offset,
...@@ -268,11 +273,12 @@ class Buffer11::SystemMemoryStorage : public Buffer11::BufferStorage ...@@ -268,11 +273,12 @@ class Buffer11::SystemMemoryStorage : public Buffer11::BufferStorage
bool isGPUAccessible() const override { return false; } bool isGPUAccessible() const override { return false; }
gl::ErrorOrResult<CopyResult> copyFromStorage(const gl::Context *context, gl::Error copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) override; size_t destOffset,
CopyResult *resultOut) override;
gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override; gl::Error resize(const gl::Context *context, size_t size, bool preserveData) override;
gl::Error map(size_t offset, gl::Error map(size_t offset,
...@@ -330,7 +336,7 @@ gl::Error Buffer11::setData(const gl::Context *context, ...@@ -330,7 +336,7 @@ gl::Error Buffer11::setData(const gl::Context *context,
gl::Error Buffer11::getData(const gl::Context *context, const uint8_t **outData) gl::Error Buffer11::getData(const gl::Context *context, const uint8_t **outData)
{ {
SystemMemoryStorage *systemMemoryStorage = nullptr; SystemMemoryStorage *systemMemoryStorage = nullptr;
ANGLE_TRY_RESULT(getSystemMemoryStorage(context), systemMemoryStorage); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_SYSTEM_MEMORY, &systemMemoryStorage));
ASSERT(systemMemoryStorage->getSize() >= mSize); ASSERT(systemMemoryStorage->getSize() >= mSize);
...@@ -338,14 +344,6 @@ gl::Error Buffer11::getData(const gl::Context *context, const uint8_t **outData) ...@@ -338,14 +344,6 @@ gl::Error Buffer11::getData(const gl::Context *context, const uint8_t **outData)
return gl::NoError(); return gl::NoError();
} }
gl::ErrorOrResult<Buffer11::SystemMemoryStorage *> Buffer11::getSystemMemoryStorage(
const gl::Context *context)
{
BufferStorage *storage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_SYSTEM_MEMORY), storage);
return GetAs<SystemMemoryStorage>(storage);
}
gl::Error Buffer11::setSubData(const gl::Context *context, gl::Error Buffer11::setSubData(const gl::Context *context,
gl::BufferBinding target, gl::BufferBinding target,
const void *data, const void *data,
...@@ -370,20 +368,20 @@ gl::Error Buffer11::setSubData(const gl::Context *context, ...@@ -370,20 +368,20 @@ gl::Error Buffer11::setSubData(const gl::Context *context,
size <= static_cast<UINT>(mRenderer->getNativeCaps().maxUniformBlockSize) && size <= static_cast<UINT>(mRenderer->getNativeCaps().maxUniformBlockSize) &&
!mRenderer->getWorkarounds().useSystemMemoryForConstantBuffers) !mRenderer->getWorkarounds().useSystemMemoryForConstantBuffers)
{ {
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_UNIFORM), writeBuffer); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_UNIFORM, &writeBuffer));
} }
else else
{ {
ANGLE_TRY_RESULT(getSystemMemoryStorage(context), writeBuffer); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_SYSTEM_MEMORY, &writeBuffer));
} }
} }
else if (supportsDirectBinding()) else if (supportsDirectBinding())
{ {
ANGLE_TRY_RESULT(getStagingStorage(context), writeBuffer); ANGLE_TRY(getStagingStorage(context, &writeBuffer));
} }
else else
{ {
ANGLE_TRY_RESULT(getSystemMemoryStorage(context), writeBuffer); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_SYSTEM_MEMORY, &writeBuffer));
} }
ASSERT(writeBuffer); ASSERT(writeBuffer);
...@@ -416,19 +414,19 @@ gl::Error Buffer11::copySubData(const gl::Context *context, ...@@ -416,19 +414,19 @@ gl::Error Buffer11::copySubData(const gl::Context *context,
ASSERT(sourceBuffer != nullptr); ASSERT(sourceBuffer != nullptr);
BufferStorage *copyDest = nullptr; BufferStorage *copyDest = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(context), copyDest); ANGLE_TRY(getLatestBufferStorage(context, &copyDest));
if (!copyDest) if (!copyDest)
{ {
ANGLE_TRY_RESULT(getStagingStorage(context), copyDest); ANGLE_TRY(getStagingStorage(context, &copyDest));
} }
BufferStorage *copySource = nullptr; BufferStorage *copySource = nullptr;
ANGLE_TRY_RESULT(sourceBuffer->getLatestBufferStorage(context), copySource); ANGLE_TRY(sourceBuffer->getLatestBufferStorage(context, &copySource));
if (!copySource) if (!copySource)
{ {
ANGLE_TRY_RESULT(sourceBuffer->getStagingStorage(context), copySource); ANGLE_TRY(sourceBuffer->getStagingStorage(context, &copySource));
} }
ASSERT(copySource && copyDest); ASSERT(copySource && copyDest);
...@@ -436,11 +434,11 @@ gl::Error Buffer11::copySubData(const gl::Context *context, ...@@ -436,11 +434,11 @@ gl::Error Buffer11::copySubData(const gl::Context *context,
// A staging buffer is needed if there is no cpu-cpu or gpu-gpu copy path avaiable. // A staging buffer is needed if there is no cpu-cpu or gpu-gpu copy path avaiable.
if (!copyDest->isGPUAccessible() && !copySource->isCPUAccessible(GL_MAP_READ_BIT)) if (!copyDest->isGPUAccessible() && !copySource->isCPUAccessible(GL_MAP_READ_BIT))
{ {
ANGLE_TRY_RESULT(sourceBuffer->getStagingStorage(context), copySource); ANGLE_TRY(sourceBuffer->getStagingStorage(context, &copySource));
} }
else if (!copySource->isGPUAccessible() && !copyDest->isCPUAccessible(GL_MAP_WRITE_BIT)) else if (!copySource->isGPUAccessible() && !copyDest->isCPUAccessible(GL_MAP_WRITE_BIT))
{ {
ANGLE_TRY_RESULT(getStagingStorage(context), copyDest); ANGLE_TRY(getStagingStorage(context, &copyDest));
} }
// D3D11 does not allow overlapped copies until 11.1, and only if the // D3D11 does not allow overlapped copies until 11.1, and only if the
...@@ -450,18 +448,18 @@ gl::Error Buffer11::copySubData(const gl::Context *context, ...@@ -450,18 +448,18 @@ gl::Error Buffer11::copySubData(const gl::Context *context,
{ {
if (copySource->getUsage() == BUFFER_USAGE_STAGING) if (copySource->getUsage() == BUFFER_USAGE_STAGING)
{ {
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), ANGLE_TRY(
copySource); getBufferStorage(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK, &copySource));
} }
else else
{ {
ANGLE_TRY_RESULT(getStagingStorage(context), copySource); ANGLE_TRY(getStagingStorage(context, &copySource));
} }
} }
CopyResult copyResult = CopyResult::NOT_RECREATED; CopyResult copyResult = CopyResult::NOT_RECREATED;
ANGLE_TRY_RESULT(copyDest->copyFromStorage(context, copySource, sourceOffset, size, destOffset), ANGLE_TRY(copyDest->copyFromStorage(context, copySource, sourceOffset, size, destOffset,
copyResult); &copyResult));
onStorageUpdate(copyDest); onStorageUpdate(copyDest);
mSize = std::max<size_t>(mSize, destOffset + size); mSize = std::max<size_t>(mSize, destOffset + size);
...@@ -487,7 +485,7 @@ gl::Error Buffer11::mapRange(const gl::Context *context, ...@@ -487,7 +485,7 @@ gl::Error Buffer11::mapRange(const gl::Context *context,
ASSERT(!mMappedStorage); ASSERT(!mMappedStorage);
BufferStorage *latestStorage = nullptr; BufferStorage *latestStorage = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(context), latestStorage); ANGLE_TRY(getLatestBufferStorage(context, &latestStorage));
if (latestStorage && (latestStorage->getUsage() == BUFFER_USAGE_PIXEL_PACK || if (latestStorage && (latestStorage->getUsage() == BUFFER_USAGE_PIXEL_PACK ||
latestStorage->getUsage() == BUFFER_USAGE_STAGING)) latestStorage->getUsage() == BUFFER_USAGE_STAGING))
...@@ -499,7 +497,7 @@ gl::Error Buffer11::mapRange(const gl::Context *context, ...@@ -499,7 +497,7 @@ gl::Error Buffer11::mapRange(const gl::Context *context,
{ {
// Fall back to using the staging buffer if the latest storage does not exist or is not // Fall back to using the staging buffer if the latest storage does not exist or is not
// CPU-accessible. // CPU-accessible.
ANGLE_TRY_RESULT(getStagingStorage(context), mMappedStorage); ANGLE_TRY(getStagingStorage(context, &mMappedStorage));
} }
ANGLE_TRY_ALLOCATION(mMappedStorage); ANGLE_TRY_ALLOCATION(mMappedStorage);
...@@ -534,8 +532,8 @@ gl::Error Buffer11::unmap(const gl::Context *context, GLboolean *result) ...@@ -534,8 +532,8 @@ gl::Error Buffer11::unmap(const gl::Context *context, GLboolean *result)
gl::Error Buffer11::markTransformFeedbackUsage(const gl::Context *context) gl::Error Buffer11::markTransformFeedbackUsage(const gl::Context *context)
{ {
BufferStorage *transformFeedbackStorage = nullptr; BufferStorage *transformFeedbackStorage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK,
transformFeedbackStorage); &transformFeedbackStorage));
if (transformFeedbackStorage) if (transformFeedbackStorage)
{ {
...@@ -576,7 +574,7 @@ gl::Error Buffer11::checkForDeallocation(const gl::Context *context, BufferUsage ...@@ -576,7 +574,7 @@ gl::Error Buffer11::checkForDeallocation(const gl::Context *context, BufferUsage
if (storage != nullptr && mIdleness[usage] > mDeallocThresholds[usage]) if (storage != nullptr && mIdleness[usage] > mDeallocThresholds[usage])
{ {
BufferStorage *latestStorage = nullptr; BufferStorage *latestStorage = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(context), latestStorage); ANGLE_TRY(getLatestBufferStorage(context, &latestStorage));
if (latestStorage != storage) if (latestStorage != storage)
{ {
SafeDelete(storage); SafeDelete(storage);
...@@ -619,31 +617,31 @@ gl::Error Buffer11::garbageCollection(const gl::Context *context, BufferUsage cu ...@@ -619,31 +617,31 @@ gl::Error Buffer11::garbageCollection(const gl::Context *context, BufferUsage cu
return gl::NoError(); return gl::NoError();
} }
gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getBuffer(const gl::Context *context, BufferUsage usage) gl::Error Buffer11::getBuffer(const gl::Context *context,
BufferUsage usage,
ID3D11Buffer **bufferOut)
{ {
BufferStorage *storage = nullptr; NativeStorage *storage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, usage), storage); ANGLE_TRY(getBufferStorage(context, usage, &storage));
return GetAs<NativeStorage>(storage)->getBuffer().get(); *bufferOut = storage->getBuffer().get();
return gl::NoError();
} }
gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getEmulatedIndexedBuffer( gl::Error Buffer11::getEmulatedIndexedBuffer(const gl::Context *context,
const gl::Context *context,
SourceIndexData *indexInfo, SourceIndexData *indexInfo,
const TranslatedAttribute &attribute, const TranslatedAttribute &attribute,
GLint startVertex) GLint startVertex,
ID3D11Buffer **bufferOut)
{ {
ASSERT(indexInfo); ASSERT(indexInfo);
BufferStorage *untypedStorage = nullptr; EmulatedIndexedStorage *emulatedStorage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_EMULATED_INDEXED_VERTEX), ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_EMULATED_INDEXED_VERTEX, &emulatedStorage));
untypedStorage);
EmulatedIndexedStorage *emulatedStorage = GetAs<EmulatedIndexedStorage>(untypedStorage);
const d3d11::Buffer *nativeStorage = nullptr;
ANGLE_TRY_RESULT(emulatedStorage->getBuffer(indexInfo, attribute, startVertex), nativeStorage);
return nativeStorage->get(); const d3d11::Buffer *nativeBuffer = nullptr;
ANGLE_TRY(emulatedStorage->getBuffer(indexInfo, attribute, startVertex, &nativeBuffer));
*bufferOut = nativeBuffer->get();
return gl::NoError();
} }
gl::Error Buffer11::getConstantBufferRange(const gl::Context *context, gl::Error Buffer11::getConstantBufferRange(const gl::Context *context,
...@@ -653,32 +651,31 @@ gl::Error Buffer11::getConstantBufferRange(const gl::Context *context, ...@@ -653,32 +651,31 @@ gl::Error Buffer11::getConstantBufferRange(const gl::Context *context,
UINT *firstConstantOut, UINT *firstConstantOut,
UINT *numConstantsOut) UINT *numConstantsOut)
{ {
BufferStorage *bufferStorage = nullptr; NativeStorage *bufferStorage = nullptr;
if (offset == 0 || mRenderer->getRenderer11DeviceCaps().supportsConstantBufferOffsets) if (offset == 0 || mRenderer->getRenderer11DeviceCaps().supportsConstantBufferOffsets)
{ {
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_UNIFORM), bufferStorage); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_UNIFORM, &bufferStorage));
CalculateConstantBufferParams(offset, size, firstConstantOut, numConstantsOut); CalculateConstantBufferParams(offset, size, firstConstantOut, numConstantsOut);
} }
else else
{ {
ANGLE_TRY_RESULT(getConstantBufferRangeStorage(context, offset, size), bufferStorage); ANGLE_TRY(getConstantBufferRangeStorage(context, offset, size, &bufferStorage));
*firstConstantOut = 0; *firstConstantOut = 0;
*numConstantsOut = 0; *numConstantsOut = 0;
} }
*bufferOut = &GetAs<NativeStorage>(bufferStorage)->getBuffer(); *bufferOut = &bufferStorage->getBuffer();
return gl::NoError(); return gl::NoError();
} }
gl::ErrorOrResult<const d3d11::ShaderResourceView *> Buffer11::getSRV(const gl::Context *context, gl::Error Buffer11::getSRV(const gl::Context *context,
DXGI_FORMAT srvFormat) DXGI_FORMAT srvFormat,
const d3d11::ShaderResourceView **srvOut)
{ {
BufferStorage *storage = nullptr; NativeStorage *nativeStorage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_PIXEL_UNPACK), storage); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_PIXEL_UNPACK, &nativeStorage));
NativeStorage *nativeStorage = GetAs<NativeStorage>(storage); return nativeStorage->getSRVForFormat(srvFormat, srvOut);
return nativeStorage->getSRVForFormat(srvFormat);
} }
gl::Error Buffer11::packPixels(const gl::Context *context, gl::Error Buffer11::packPixels(const gl::Context *context,
...@@ -686,7 +683,7 @@ gl::Error Buffer11::packPixels(const gl::Context *context, ...@@ -686,7 +683,7 @@ gl::Error Buffer11::packPixels(const gl::Context *context,
const PackPixelsParams &params) const PackPixelsParams &params)
{ {
PackStorage *packStorage = nullptr; PackStorage *packStorage = nullptr;
ANGLE_TRY_RESULT(getPackStorage(context), packStorage); ANGLE_TRY(getBufferStorage(context, BUFFER_USAGE_PIXEL_PACK, &packStorage));
ASSERT(packStorage); ASSERT(packStorage);
ANGLE_TRY(packStorage->packPixels(context, readAttachment, params)); ANGLE_TRY(packStorage->packPixels(context, readAttachment, params));
...@@ -708,8 +705,10 @@ size_t Buffer11::getTotalCPUBufferMemoryBytes() const ...@@ -708,8 +705,10 @@ size_t Buffer11::getTotalCPUBufferMemoryBytes() const
return allocationSize; return allocationSize;
} }
gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getBufferStorage(const gl::Context *context, template <typename StorageOutT>
BufferUsage usage) gl::Error Buffer11::getBufferStorage(const gl::Context *context,
BufferUsage usage,
StorageOutT **storageOut)
{ {
ASSERT(0 <= usage && usage < BUFFER_USAGE_COUNT); ASSERT(0 <= usage && usage < BUFFER_USAGE_COUNT);
BufferStorage *&newStorage = mBufferStorages[usage]; BufferStorage *&newStorage = mBufferStorages[usage];
...@@ -732,7 +731,8 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getBufferStorage(const gl ...@@ -732,7 +731,8 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getBufferStorage(const gl
ANGLE_TRY(updateBufferStorage(context, newStorage, 0, mSize)); ANGLE_TRY(updateBufferStorage(context, newStorage, 0, mSize));
ANGLE_TRY(garbageCollection(context, usage)); ANGLE_TRY(garbageCollection(context, usage));
return newStorage; *storageOut = GetAs<StorageOutT>(newStorage);
return gl::NoError();
} }
Buffer11::BufferStorage *Buffer11::allocateStorage(BufferUsage usage) Buffer11::BufferStorage *Buffer11::allocateStorage(BufferUsage usage)
...@@ -754,10 +754,10 @@ Buffer11::BufferStorage *Buffer11::allocateStorage(BufferUsage usage) ...@@ -754,10 +754,10 @@ Buffer11::BufferStorage *Buffer11::allocateStorage(BufferUsage usage)
} }
} }
gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getConstantBufferRangeStorage( gl::Error Buffer11::getConstantBufferRangeStorage(const gl::Context *context,
const gl::Context *context,
GLintptr offset, GLintptr offset,
GLsizeiptr size) GLsizeiptr size,
Buffer11::NativeStorage **storageOut)
{ {
BufferStorage *newStorage; BufferStorage *newStorage;
...@@ -812,7 +812,8 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getConstantBufferRangeSto ...@@ -812,7 +812,8 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getConstantBufferRangeSto
ANGLE_TRY(updateBufferStorage(context, newStorage, offset, size)); ANGLE_TRY(updateBufferStorage(context, newStorage, offset, size));
ANGLE_TRY(garbageCollection(context, BUFFER_USAGE_UNIFORM)); ANGLE_TRY(garbageCollection(context, BUFFER_USAGE_UNIFORM));
return newStorage; *storageOut = GetAs<NativeStorage>(newStorage);
return gl::NoError();
} }
gl::Error Buffer11::updateBufferStorage(const gl::Context *context, gl::Error Buffer11::updateBufferStorage(const gl::Context *context,
...@@ -821,7 +822,7 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context, ...@@ -821,7 +822,7 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context,
size_t storageSize) size_t storageSize)
{ {
BufferStorage *latestBuffer = nullptr; BufferStorage *latestBuffer = nullptr;
ANGLE_TRY_RESULT(getLatestBufferStorage(context), latestBuffer); ANGLE_TRY(getLatestBufferStorage(context, &latestBuffer));
ASSERT(storage); ASSERT(storage);
...@@ -845,20 +846,19 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context, ...@@ -845,20 +846,19 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context,
!storage->isCPUAccessible(GL_MAP_WRITE_BIT))) !storage->isCPUAccessible(GL_MAP_WRITE_BIT)))
{ {
NativeStorage *stagingBuffer = nullptr; NativeStorage *stagingBuffer = nullptr;
ANGLE_TRY_RESULT(getStagingStorage(context), stagingBuffer); ANGLE_TRY(getStagingStorage(context, &stagingBuffer));
CopyResult copyResult = CopyResult::NOT_RECREATED; CopyResult copyResult = CopyResult::NOT_RECREATED;
ANGLE_TRY_RESULT( ANGLE_TRY(stagingBuffer->copyFromStorage(context, latestBuffer, 0, latestBuffer->getSize(),
stagingBuffer->copyFromStorage(context, latestBuffer, 0, latestBuffer->getSize(), 0), 0, &copyResult));
copyResult);
onCopyStorage(stagingBuffer, latestBuffer); onCopyStorage(stagingBuffer, latestBuffer);
latestBuffer = stagingBuffer; latestBuffer = stagingBuffer;
} }
CopyResult copyResult = CopyResult::NOT_RECREATED; CopyResult copyResult = CopyResult::NOT_RECREATED;
ANGLE_TRY_RESULT(storage->copyFromStorage(context, latestBuffer, sourceOffset, storageSize, 0), ANGLE_TRY(
copyResult); storage->copyFromStorage(context, latestBuffer, sourceOffset, storageSize, 0, &copyResult));
// If the D3D buffer has been recreated, we should update our serial. // If the D3D buffer has been recreated, we should update our serial.
if (copyResult == CopyResult::RECREATED) if (copyResult == CopyResult::RECREATED)
{ {
...@@ -868,8 +868,8 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context, ...@@ -868,8 +868,8 @@ gl::Error Buffer11::updateBufferStorage(const gl::Context *context,
return gl::NoError(); return gl::NoError();
} }
gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getLatestBufferStorage( gl::Error Buffer11::getLatestBufferStorage(const gl::Context *context,
const gl::Context *context) const Buffer11::BufferStorage **storageOut) const
{ {
// resize buffer // resize buffer
if (mLatestBufferStorage && mLatestBufferStorage->getSize() < mSize) if (mLatestBufferStorage && mLatestBufferStorage->getSize() < mSize)
...@@ -877,21 +877,14 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getLatestBufferStorage( ...@@ -877,21 +877,14 @@ gl::ErrorOrResult<Buffer11::BufferStorage *> Buffer11::getLatestBufferStorage(
ANGLE_TRY(mLatestBufferStorage->resize(context, mSize, true)); ANGLE_TRY(mLatestBufferStorage->resize(context, mSize, true));
} }
return mLatestBufferStorage; *storageOut = mLatestBufferStorage;
} return gl::NoError();
gl::ErrorOrResult<Buffer11::NativeStorage *> Buffer11::getStagingStorage(const gl::Context *context)
{
BufferStorage *stagingStorage = nullptr;
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_STAGING), stagingStorage);
return GetAs<NativeStorage>(stagingStorage);
} }
gl::ErrorOrResult<Buffer11::PackStorage *> Buffer11::getPackStorage(const gl::Context *context) template <typename StorageOutT>
gl::Error Buffer11::getStagingStorage(const gl::Context *context, StorageOutT **storageOut)
{ {
BufferStorage *packStorage = nullptr; return getBufferStorage(context, BUFFER_USAGE_STAGING, storageOut);
ANGLE_TRY_RESULT(getBufferStorage(context, BUFFER_USAGE_PIXEL_PACK), packStorage);
return GetAs<PackStorage>(packStorage);
} }
size_t Buffer11::getSize() const size_t Buffer11::getSize() const
...@@ -987,20 +980,25 @@ bool Buffer11::NativeStorage::isCPUAccessible(GLbitfield access) const ...@@ -987,20 +980,25 @@ bool Buffer11::NativeStorage::isCPUAccessible(GLbitfield access) const
} }
// Returns true if it recreates the direct buffer // Returns true if it recreates the direct buffer
gl::ErrorOrResult<CopyResult> Buffer11::NativeStorage::copyFromStorage(const gl::Context *context, gl::Error Buffer11::NativeStorage::copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) size_t destOffset,
CopyResult *resultOut)
{ {
size_t requiredSize = destOffset + size; size_t requiredSize = destOffset + size;
bool createBuffer = !mBuffer.valid() || mBufferSize < requiredSize;
// (Re)initialize D3D buffer if needed // (Re)initialize D3D buffer if needed
bool preserveData = (destOffset > 0); bool preserveData = (destOffset > 0);
if (createBuffer) if (!mBuffer.valid() || mBufferSize < requiredSize)
{ {
ANGLE_TRY(resize(context, requiredSize, preserveData)); ANGLE_TRY(resize(context, requiredSize, preserveData));
*resultOut = CopyResult::RECREATED;
}
else
{
*resultOut = CopyResult::NOT_RECREATED;
} }
size_t clampedSize = size; size_t clampedSize = size;
...@@ -1042,7 +1040,7 @@ gl::ErrorOrResult<CopyResult> Buffer11::NativeStorage::copyFromStorage(const gl: ...@@ -1042,7 +1040,7 @@ gl::ErrorOrResult<CopyResult> Buffer11::NativeStorage::copyFromStorage(const gl:
sourceBuffer->get(), 0, &srcBox); sourceBuffer->get(), 0, &srcBox);
} }
return createBuffer ? CopyResult::RECREATED : CopyResult::NOT_RECREATED; return gl::NoError();
} }
gl::Error Buffer11::NativeStorage::resize(const gl::Context *context, gl::Error Buffer11::NativeStorage::resize(const gl::Context *context,
...@@ -1185,14 +1183,15 @@ void Buffer11::NativeStorage::unmap() ...@@ -1185,14 +1183,15 @@ void Buffer11::NativeStorage::unmap()
context->Unmap(mBuffer.get(), 0); context->Unmap(mBuffer.get(), 0);
} }
gl::ErrorOrResult<const d3d11::ShaderResourceView *> Buffer11::NativeStorage::getSRVForFormat( gl::Error Buffer11::NativeStorage::getSRVForFormat(DXGI_FORMAT srvFormat,
DXGI_FORMAT srvFormat) const d3d11::ShaderResourceView **srvOut)
{ {
auto bufferSRVIt = mBufferResourceViews.find(srvFormat); auto bufferSRVIt = mBufferResourceViews.find(srvFormat);
if (bufferSRVIt != mBufferResourceViews.end()) if (bufferSRVIt != mBufferResourceViews.end())
{ {
return &bufferSRVIt->second; *srvOut = &bufferSRVIt->second;
return gl::NoError();
} }
const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(srvFormat); const d3d11::DXGIFormatSize &dxgiFormatInfo = d3d11::GetDXGIFormatSizeInfo(srvFormat);
...@@ -1206,7 +1205,8 @@ gl::ErrorOrResult<const d3d11::ShaderResourceView *> Buffer11::NativeStorage::ge ...@@ -1206,7 +1205,8 @@ gl::ErrorOrResult<const d3d11::ShaderResourceView *> Buffer11::NativeStorage::ge
ANGLE_TRY(mRenderer->allocateResource(bufferSRVDesc, mBuffer.get(), ANGLE_TRY(mRenderer->allocateResource(bufferSRVDesc, mBuffer.get(),
&mBufferResourceViews[srvFormat])); &mBufferResourceViews[srvFormat]));
return &mBufferResourceViews[srvFormat]; *srvOut = &mBufferResourceViews[srvFormat];
return gl::NoError();
} }
void Buffer11::NativeStorage::clearSRVs() void Buffer11::NativeStorage::clearSRVs()
...@@ -1225,10 +1225,10 @@ Buffer11::EmulatedIndexedStorage::~EmulatedIndexedStorage() ...@@ -1225,10 +1225,10 @@ Buffer11::EmulatedIndexedStorage::~EmulatedIndexedStorage()
{ {
} }
gl::ErrorOrResult<const d3d11::Buffer *> Buffer11::EmulatedIndexedStorage::getBuffer( gl::Error Buffer11::EmulatedIndexedStorage::getBuffer(SourceIndexData *indexInfo,
SourceIndexData *indexInfo,
const TranslatedAttribute &attribute, const TranslatedAttribute &attribute,
GLint startVertex) GLint startVertex,
const d3d11::Buffer **bufferOut)
{ {
// If a change in the indices applied from the last draw call is detected, then the emulated // If a change in the indices applied from the last draw call is detected, then the emulated
// indexed buffer needs to be invalidated. After invalidation, the change detected flag should // indexed buffer needs to be invalidated. After invalidation, the change detected flag should
...@@ -1331,15 +1331,16 @@ gl::ErrorOrResult<const d3d11::Buffer *> Buffer11::EmulatedIndexedStorage::getBu ...@@ -1331,15 +1331,16 @@ gl::ErrorOrResult<const d3d11::Buffer *> Buffer11::EmulatedIndexedStorage::getBu
mBuffer.setDebugName("Buffer11::EmulatedIndexedStorage"); mBuffer.setDebugName("Buffer11::EmulatedIndexedStorage");
} }
return &mBuffer; *bufferOut = &mBuffer;
return gl::NoError();
} }
gl::ErrorOrResult<CopyResult> Buffer11::EmulatedIndexedStorage::copyFromStorage( gl::Error Buffer11::EmulatedIndexedStorage::copyFromStorage(const gl::Context *context,
const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) size_t destOffset,
CopyResult *resultOut)
{ {
ASSERT(source->isCPUAccessible(GL_MAP_READ_BIT)); ASSERT(source->isCPUAccessible(GL_MAP_READ_BIT));
uint8_t *sourceData = nullptr; uint8_t *sourceData = nullptr;
...@@ -1347,7 +1348,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::EmulatedIndexedStorage::copyFromStorage( ...@@ -1347,7 +1348,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::EmulatedIndexedStorage::copyFromStorage(
ASSERT(destOffset + size <= mMemoryBuffer.size()); ASSERT(destOffset + size <= mMemoryBuffer.size());
memcpy(mMemoryBuffer.data() + destOffset, sourceData, size); memcpy(mMemoryBuffer.data() + destOffset, sourceData, size);
source->unmap(); source->unmap();
return CopyResult::RECREATED; *resultOut = CopyResult::RECREATED;
return gl::NoError();
} }
gl::Error Buffer11::EmulatedIndexedStorage::resize(const gl::Context *context, gl::Error Buffer11::EmulatedIndexedStorage::resize(const gl::Context *context,
...@@ -1392,11 +1394,12 @@ Buffer11::PackStorage::~PackStorage() ...@@ -1392,11 +1394,12 @@ Buffer11::PackStorage::~PackStorage()
{ {
} }
gl::ErrorOrResult<CopyResult> Buffer11::PackStorage::copyFromStorage(const gl::Context *context, gl::Error Buffer11::PackStorage::copyFromStorage(const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) size_t destOffset,
CopyResult *resultOut)
{ {
ANGLE_TRY(flushQueuedPackCommand()); ANGLE_TRY(flushQueuedPackCommand());
...@@ -1407,7 +1410,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::PackStorage::copyFromStorage(const gl::C ...@@ -1407,7 +1410,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::PackStorage::copyFromStorage(const gl::C
ASSERT(destOffset + size <= mMemoryBuffer.size()); ASSERT(destOffset + size <= mMemoryBuffer.size());
memcpy(mMemoryBuffer.data() + destOffset, sourceData, size); memcpy(mMemoryBuffer.data() + destOffset, sourceData, size);
source->unmap(); source->unmap();
return CopyResult::NOT_RECREATED; *resultOut = CopyResult::NOT_RECREATED;
return gl::NoError();
} }
gl::Error Buffer11::PackStorage::resize(const gl::Context *context, size_t size, bool preserveData) gl::Error Buffer11::PackStorage::resize(const gl::Context *context, size_t size, bool preserveData)
...@@ -1519,12 +1523,12 @@ Buffer11::SystemMemoryStorage::SystemMemoryStorage(Renderer11 *renderer) ...@@ -1519,12 +1523,12 @@ Buffer11::SystemMemoryStorage::SystemMemoryStorage(Renderer11 *renderer)
{ {
} }
gl::ErrorOrResult<CopyResult> Buffer11::SystemMemoryStorage::copyFromStorage( gl::Error Buffer11::SystemMemoryStorage::copyFromStorage(const gl::Context *context,
const gl::Context *context,
BufferStorage *source, BufferStorage *source,
size_t sourceOffset, size_t sourceOffset,
size_t size, size_t size,
size_t destOffset) size_t destOffset,
CopyResult *resultOut)
{ {
ASSERT(source->isCPUAccessible(GL_MAP_READ_BIT)); ASSERT(source->isCPUAccessible(GL_MAP_READ_BIT));
uint8_t *sourceData = nullptr; uint8_t *sourceData = nullptr;
...@@ -1532,7 +1536,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::SystemMemoryStorage::copyFromStorage( ...@@ -1532,7 +1536,8 @@ gl::ErrorOrResult<CopyResult> Buffer11::SystemMemoryStorage::copyFromStorage(
ASSERT(destOffset + size <= mSystemCopy.size()); ASSERT(destOffset + size <= mSystemCopy.size());
memcpy(mSystemCopy.data() + destOffset, sourceData, size); memcpy(mSystemCopy.data() + destOffset, sourceData, size);
source->unmap(); source->unmap();
return CopyResult::RECREATED; *resultOut = CopyResult::RECREATED;
return gl::NoError();
} }
gl::Error Buffer11::SystemMemoryStorage::resize(const gl::Context *context, gl::Error Buffer11::SystemMemoryStorage::resize(const gl::Context *context,
......
...@@ -53,19 +53,21 @@ class Buffer11 : public BufferD3D ...@@ -53,19 +53,21 @@ class Buffer11 : public BufferD3D
Buffer11(const gl::BufferState &state, Renderer11 *renderer); Buffer11(const gl::BufferState &state, Renderer11 *renderer);
~Buffer11() override; ~Buffer11() override;
gl::ErrorOrResult<ID3D11Buffer *> getBuffer(const gl::Context *context, BufferUsage usage); gl::Error getBuffer(const gl::Context *context, BufferUsage usage, ID3D11Buffer **bufferOut);
gl::ErrorOrResult<ID3D11Buffer *> getEmulatedIndexedBuffer(const gl::Context *context, gl::Error getEmulatedIndexedBuffer(const gl::Context *context,
SourceIndexData *indexInfo, SourceIndexData *indexInfo,
const TranslatedAttribute &attribute, const TranslatedAttribute &attribute,
GLint startVertex); GLint startVertex,
ID3D11Buffer **bufferOut);
gl::Error getConstantBufferRange(const gl::Context *context, gl::Error getConstantBufferRange(const gl::Context *context,
GLintptr offset, GLintptr offset,
GLsizeiptr size, GLsizeiptr size,
const d3d11::Buffer **bufferOut, const d3d11::Buffer **bufferOut,
UINT *firstConstantOut, UINT *firstConstantOut,
UINT *numConstantsOut); UINT *numConstantsOut);
gl::ErrorOrResult<const d3d11::ShaderResourceView *> getSRV(const gl::Context *context, gl::Error getSRV(const gl::Context *context,
DXGI_FORMAT srvFormat); DXGI_FORMAT srvFormat,
const d3d11::ShaderResourceView **srvOut);
bool isMapped() const { return mMappedStorage != nullptr; } bool isMapped() const { return mMappedStorage != nullptr; }
gl::Error packPixels(const gl::Context *context, gl::Error packPixels(const gl::Context *context,
const gl::FramebufferAttachment &readAttachment, const gl::FramebufferAttachment &readAttachment,
...@@ -121,21 +123,26 @@ class Buffer11 : public BufferD3D ...@@ -121,21 +123,26 @@ class Buffer11 : public BufferD3D
void markBufferUsage(BufferUsage usage); void markBufferUsage(BufferUsage usage);
gl::Error garbageCollection(const gl::Context *context, BufferUsage currentUsage); gl::Error garbageCollection(const gl::Context *context, BufferUsage currentUsage);
gl::ErrorOrResult<NativeStorage *> getStagingStorage(const gl::Context *context);
gl::ErrorOrResult<PackStorage *> getPackStorage(const gl::Context *context);
gl::ErrorOrResult<SystemMemoryStorage *> getSystemMemoryStorage(const gl::Context *context);
gl::Error updateBufferStorage(const gl::Context *context, gl::Error updateBufferStorage(const gl::Context *context,
BufferStorage *storage, BufferStorage *storage,
size_t sourceOffset, size_t sourceOffset,
size_t storageSize); size_t storageSize);
gl::ErrorOrResult<BufferStorage *> getBufferStorage(const gl::Context *context,
BufferUsage usage);
gl::ErrorOrResult<BufferStorage *> getLatestBufferStorage(const gl::Context *context) const;
gl::ErrorOrResult<BufferStorage *> getConstantBufferRangeStorage(const gl::Context *context, template <typename StorageOutT>
gl::Error getBufferStorage(const gl::Context *context,
BufferUsage usage,
StorageOutT **storageOut);
template <typename StorageOutT>
gl::Error getStagingStorage(const gl::Context *context, StorageOutT **storageOut);
gl::Error getLatestBufferStorage(const gl::Context *context, BufferStorage **storageOut) const;
gl::Error getConstantBufferRangeStorage(const gl::Context *context,
GLintptr offset, GLintptr offset,
GLsizeiptr size); GLsizeiptr size,
NativeStorage **storageOut);
BufferStorage *allocateStorage(BufferUsage usage); BufferStorage *allocateStorage(BufferUsage usage);
void updateDeallocThreshold(BufferUsage usage); void updateDeallocThreshold(BufferUsage usage);
......
...@@ -173,7 +173,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::Context *context, ...@@ -173,7 +173,7 @@ gl::Error PixelTransfer11::copyBufferToTexture(const gl::Context *context,
ASSERT(srvFormat != DXGI_FORMAT_UNKNOWN); ASSERT(srvFormat != DXGI_FORMAT_UNKNOWN);
Buffer11 *bufferStorage11 = GetAs<Buffer11>(sourceBuffer.getImplementation()); Buffer11 *bufferStorage11 = GetAs<Buffer11>(sourceBuffer.getImplementation());
const d3d11::ShaderResourceView *bufferSRV = nullptr; const d3d11::ShaderResourceView *bufferSRV = nullptr;
ANGLE_TRY_RESULT(bufferStorage11->getSRV(context, srvFormat), bufferSRV); ANGLE_TRY(bufferStorage11->getSRV(context, srvFormat, &bufferSRV));
ASSERT(bufferSRV != nullptr); ASSERT(bufferSRV != nullptr);
const d3d11::RenderTargetView &textureRTV = const d3d11::RenderTargetView &textureRTV =
......
...@@ -1639,7 +1639,7 @@ gl::Error Renderer11::drawArraysIndirect(const gl::Context *context, ...@@ -1639,7 +1639,7 @@ gl::Error Renderer11::drawArraysIndirect(const gl::Context *context,
uintptr_t offset = reinterpret_cast<uintptr_t>(params.indirect()); uintptr_t offset = reinterpret_cast<uintptr_t>(params.indirect());
ID3D11Buffer *buffer = nullptr; ID3D11Buffer *buffer = nullptr;
ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDIRECT), buffer); ANGLE_TRY(storage->getBuffer(context, BUFFER_USAGE_INDIRECT, &buffer));
mDeviceContext->DrawInstancedIndirect(buffer, static_cast<unsigned int>(offset)); mDeviceContext->DrawInstancedIndirect(buffer, static_cast<unsigned int>(offset));
return gl::NoError(); return gl::NoError();
} }
...@@ -1661,7 +1661,7 @@ gl::Error Renderer11::drawElementsIndirect(const gl::Context *context, ...@@ -1661,7 +1661,7 @@ gl::Error Renderer11::drawElementsIndirect(const gl::Context *context,
uintptr_t offset = reinterpret_cast<uintptr_t>(params.indirect()); uintptr_t offset = reinterpret_cast<uintptr_t>(params.indirect());
ID3D11Buffer *buffer = nullptr; ID3D11Buffer *buffer = nullptr;
ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDIRECT), buffer); ANGLE_TRY(storage->getBuffer(context, BUFFER_USAGE_INDIRECT, &buffer));
mDeviceContext->DrawIndexedInstancedIndirect(buffer, static_cast<unsigned int>(offset)); mDeviceContext->DrawIndexedInstancedIndirect(buffer, static_cast<unsigned int>(offset));
return gl::NoError(); return gl::NoError();
} }
......
...@@ -2743,18 +2743,16 @@ gl::Error StateManager11::applyVertexBuffers(const gl::Context *context, ...@@ -2743,18 +2743,16 @@ gl::Error StateManager11::applyVertexBuffers(const gl::Context *context,
indexInfo.srcIndexData.srcIndices = bufferData + offset; indexInfo.srcIndexData.srcIndices = bufferData + offset;
} }
ANGLE_TRY_RESULT( ANGLE_TRY(bufferStorage->getEmulatedIndexedBuffer(
bufferStorage->getEmulatedIndexedBuffer(context, &indexInfo.srcIndexData, context, &indexInfo.srcIndexData, attrib, drawCallParams.firstVertex(),
attrib, drawCallParams.firstVertex()), &buffer));
buffer);
mVertexArray11->updateCachedIndexInfo(indexInfo); mVertexArray11->updateCachedIndexInfo(indexInfo);
} }
else else
{ {
ANGLE_TRY_RESULT( ANGLE_TRY(bufferStorage->getBuffer(
bufferStorage->getBuffer(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK, &buffer));
buffer);
} }
vertexStride = attrib.stride; vertexStride = attrib.stride;
...@@ -2865,7 +2863,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context, ...@@ -2865,7 +2863,7 @@ gl::Error StateManager11::applyIndexBuffer(const gl::Context *context,
if (indexInfo.storage) if (indexInfo.storage)
{ {
Buffer11 *storage = GetAs<Buffer11>(indexInfo.storage); Buffer11 *storage = GetAs<Buffer11>(indexInfo.storage);
ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_INDEX), buffer); ANGLE_TRY(storage->getBuffer(context, BUFFER_USAGE_INDEX, &buffer));
} }
else else
{ {
......
...@@ -109,8 +109,8 @@ gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getS ...@@ -109,8 +109,8 @@ gl::ErrorOrResult<const std::vector<ID3D11Buffer *> *> TransformFeedback11::getS
if (binding.get() != nullptr) if (binding.get() != nullptr)
{ {
Buffer11 *storage = GetImplAs<Buffer11>(binding.get()); Buffer11 *storage = GetImplAs<Buffer11>(binding.get());
ANGLE_TRY_RESULT(storage->getBuffer(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK), ANGLE_TRY(storage->getBuffer(context, BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK,
mBuffers[bindingIdx]); &mBuffers[bindingIdx]));
} }
} }
......
...@@ -111,10 +111,10 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest ...@@ -111,10 +111,10 @@ class D3D11EmulatedIndexedBufferTest : public ANGLETest
void emulateAndCompare(rx::SourceIndexData *srcData) void emulateAndCompare(rx::SourceIndexData *srcData)
{ {
auto bufferOrError = ID3D11Buffer *emulatedBuffer = nullptr;
mSourceBuffer->getEmulatedIndexedBuffer(mContext, srcData, mTranslatedAttribute, 0); gl::Error error = mSourceBuffer->getEmulatedIndexedBuffer(
ASSERT_FALSE(bufferOrError.isError()); mContext, srcData, mTranslatedAttribute, 0, &emulatedBuffer);
ID3D11Buffer *emulatedBuffer = bufferOrError.getResult(); ASSERT_FALSE(error.isError());
ASSERT_TRUE(emulatedBuffer != nullptr); ASSERT_TRUE(emulatedBuffer != nullptr);
compareContents(emulatedBuffer); compareContents(emulatedBuffer);
} }
......
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