summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp')
-rw-r--r--src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp149
1 files changed, 49 insertions, 100 deletions
diff --git a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
index 098cefcd53..611bd0f18b 100644
--- a/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
+++ b/src/3rdparty/angle/src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp
@@ -19,92 +19,88 @@
namespace rx
{
-VertexBuffer11::VertexBuffer11(Renderer11 *const renderer) : mRenderer(renderer)
+VertexBuffer11::VertexBuffer11(Renderer11 *const renderer)
+ : mRenderer(renderer),
+ mBuffer(),
+ mBufferSize(0),
+ mDynamicUsage(false),
+ mMappedResourceData(nullptr)
{
- mBuffer = NULL;
- mBufferSize = 0;
- mDynamicUsage = false;
- mMappedResourceData = NULL;
}
VertexBuffer11::~VertexBuffer11()
{
- ASSERT(mMappedResourceData == NULL);
- SafeRelease(mBuffer);
+ ASSERT(mMappedResourceData == nullptr);
}
gl::Error VertexBuffer11::initialize(unsigned int size, bool dynamicUsage)
{
- SafeRelease(mBuffer);
-
+ mBuffer.reset();
updateSerial();
if (size > 0)
{
- ID3D11Device* dxDevice = mRenderer->getDevice();
-
D3D11_BUFFER_DESC bufferDesc;
- bufferDesc.ByteWidth = size;
- bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
- bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
- bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
- bufferDesc.MiscFlags = 0;
+ bufferDesc.ByteWidth = size;
+ bufferDesc.Usage = D3D11_USAGE_DYNAMIC;
+ bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER;
+ bufferDesc.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
+ bufferDesc.MiscFlags = 0;
bufferDesc.StructureByteStride = 0;
- HRESULT result = dxDevice->CreateBuffer(&bufferDesc, NULL, &mBuffer);
- if (FAILED(result))
- {
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to allocate internal vertex buffer of size, %lu.", size);
- }
+ ANGLE_TRY(mRenderer->allocateResource(bufferDesc, &mBuffer));
if (dynamicUsage)
{
- d3d11::SetDebugName(mBuffer, "VertexBuffer11 (dynamic)");
+ mBuffer.setDebugName("VertexBuffer11 (dynamic)");
}
else
{
- d3d11::SetDebugName(mBuffer, "VertexBuffer11 (static)");
+ mBuffer.setDebugName("VertexBuffer11 (static)");
}
}
- mBufferSize = size;
+ mBufferSize = size;
mDynamicUsage = dynamicUsage;
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
gl::Error VertexBuffer11::mapResource()
{
- if (mMappedResourceData == NULL)
+ if (mMappedResourceData == nullptr)
{
ID3D11DeviceContext *dxContext = mRenderer->getDeviceContext();
D3D11_MAPPED_SUBRESOURCE mappedResource;
- HRESULT result = dxContext->Map(mBuffer, 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mappedResource);
+ HRESULT result =
+ dxContext->Map(mBuffer.get(), 0, D3D11_MAP_WRITE_NO_OVERWRITE, 0, &mappedResource);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal vertex buffer, HRESULT: 0x%08x.", result);
+ return gl::OutOfMemory()
+ << "Failed to map internal vertex buffer, " << gl::FmtHR(result);
}
- mMappedResourceData = reinterpret_cast<uint8_t*>(mappedResource.pData);
+ mMappedResourceData = reinterpret_cast<uint8_t *>(mappedResource.pData);
}
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
void VertexBuffer11::hintUnmapResource()
{
- if (mMappedResourceData != NULL)
+ if (mMappedResourceData != nullptr)
{
ID3D11DeviceContext *dxContext = mRenderer->getDeviceContext();
- dxContext->Unmap(mBuffer, 0);
+ dxContext->Unmap(mBuffer.get(), 0);
- mMappedResourceData = NULL;
+ mMappedResourceData = nullptr;
}
}
gl::Error VertexBuffer11::storeVertexAttributes(const gl::VertexAttribute &attrib,
+ const gl::VertexBinding &binding,
GLenum currentValueType,
GLint start,
GLsizei count,
@@ -112,81 +108,33 @@ gl::Error VertexBuffer11::storeVertexAttributes(const gl::VertexAttribute &attri
unsigned int offset,
const uint8_t *sourceData)
{
- if (!mBuffer)
+ if (!mBuffer.valid())
{
- return gl::Error(GL_OUT_OF_MEMORY, "Internal vertex buffer is not initialized.");
+ return gl::OutOfMemory() << "Internal vertex buffer is not initialized.";
}
- int inputStride = static_cast<int>(ComputeVertexAttributeStride(attrib));
+ int inputStride = static_cast<int>(ComputeVertexAttributeStride(attrib, binding));
// This will map the resource if it isn't already mapped.
- gl::Error error = mapResource();
- if (error.isError())
- {
- return error;
- }
+ ANGLE_TRY(mapResource());
uint8_t *output = mMappedResourceData + offset;
const uint8_t *input = sourceData;
- if (instances == 0 || attrib.divisor == 0)
+ if (instances == 0 || binding.getDivisor() == 0)
{
input += inputStride * start;
}
gl::VertexFormatType vertexFormatType = gl::GetVertexFormatType(attrib, currentValueType);
- const D3D_FEATURE_LEVEL featureLevel = mRenderer->getRenderer11DeviceCaps().featureLevel;
- const d3d11::VertexFormat &vertexFormatInfo = d3d11::GetVertexFormatInfo(vertexFormatType, featureLevel);
- ASSERT(vertexFormatInfo.copyFunction != NULL);
+ const D3D_FEATURE_LEVEL featureLevel = mRenderer->getRenderer11DeviceCaps().featureLevel;
+ const d3d11::VertexFormat &vertexFormatInfo =
+ d3d11::GetVertexFormatInfo(vertexFormatType, featureLevel);
+ ASSERT(vertexFormatInfo.copyFunction != nullptr);
vertexFormatInfo.copyFunction(input, inputStride, count, output);
- return gl::Error(GL_NO_ERROR);
-}
-
-gl::Error VertexBuffer11::getSpaceRequired(const gl::VertexAttribute &attrib, GLsizei count,
- GLsizei instances, unsigned int *outSpaceRequired) const
-{
- unsigned int elementCount = 0;
- if (attrib.enabled)
- {
- if (instances == 0 || attrib.divisor == 0)
- {
- elementCount = count;
- }
- else
- {
- // Round up to divisor, if possible
- elementCount = UnsignedCeilDivide(static_cast<unsigned int>(instances), attrib.divisor);
- }
-
- gl::VertexFormatType formatType = gl::GetVertexFormatType(attrib);
- const D3D_FEATURE_LEVEL featureLevel = mRenderer->getRenderer11DeviceCaps().featureLevel;
- const d3d11::VertexFormat &vertexFormatInfo = d3d11::GetVertexFormatInfo(formatType, featureLevel);
- const d3d11::DXGIFormat &dxgiFormatInfo = d3d11::GetDXGIFormatInfo(vertexFormatInfo.nativeFormat);
- unsigned int elementSize = dxgiFormatInfo.pixelBytes;
- if (elementSize <= std::numeric_limits<unsigned int>::max() / elementCount)
- {
- if (outSpaceRequired)
- {
- *outSpaceRequired = elementSize * elementCount;
- }
- return gl::Error(GL_NO_ERROR);
- }
- else
- {
- return gl::Error(GL_OUT_OF_MEMORY, "New vertex buffer size would result in an overflow.");
- }
- }
- else
- {
- const unsigned int elementSize = 4;
- if (outSpaceRequired)
- {
- *outSpaceRequired = elementSize * 4;
- }
- return gl::Error(GL_NO_ERROR);
- }
+ return gl::NoError();
}
unsigned int VertexBuffer11::getBufferSize() const
@@ -202,34 +150,35 @@ gl::Error VertexBuffer11::setBufferSize(unsigned int size)
}
else
{
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
}
gl::Error VertexBuffer11::discard()
{
- if (!mBuffer)
+ if (!mBuffer.valid())
{
- return gl::Error(GL_OUT_OF_MEMORY, "Internal vertex buffer is not initialized.");
+ return gl::OutOfMemory() << "Internal vertex buffer is not initialized.";
}
ID3D11DeviceContext *dxContext = mRenderer->getDeviceContext();
D3D11_MAPPED_SUBRESOURCE mappedResource;
- HRESULT result = dxContext->Map(mBuffer, 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
+ HRESULT result = dxContext->Map(mBuffer.get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedResource);
if (FAILED(result))
{
- return gl::Error(GL_OUT_OF_MEMORY, "Failed to map internal buffer for discarding, HRESULT: 0x%08x", result);
+ return gl::OutOfMemory() << "Failed to map internal buffer for discarding, "
+ << gl::FmtHR(result);
}
- dxContext->Unmap(mBuffer, 0);
+ dxContext->Unmap(mBuffer.get(), 0);
- return gl::Error(GL_NO_ERROR);
+ return gl::NoError();
}
-ID3D11Buffer *VertexBuffer11::getBuffer() const
+const d3d11::Buffer &VertexBuffer11::getBuffer() const
{
return mBuffer;
}
-}
+} // namespace rx