Commit c2c106d4 by Jamie Madill Committed by Commit Bot

D3D11: Clean up buffer calls a bit.

BUG=None Change-Id: I3b697c3b721b5be4888d039a5cefd160ab5b23f8 Reviewed-on: https://chromium-review.googlesource.com/367877Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org> Commit-Queue: Jamie Madill <jmadill@chromium.org>
parent f69682be
...@@ -550,7 +550,7 @@ gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getConstantBufferRange(GLintptr offs ...@@ -550,7 +550,7 @@ gl::ErrorOrResult<ID3D11Buffer *> Buffer11::getConstantBufferRange(GLintptr offs
BufferStorage *bufferStorage = nullptr; BufferStorage *bufferStorage = nullptr;
if (offset == 0) if (offset == 0 || mRenderer->getRenderer11DeviceCaps().supportsConstantBufferOffsets)
{ {
ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_UNIFORM), bufferStorage); ANGLE_TRY_RESULT(getBufferStorage(BUFFER_USAGE_UNIFORM), bufferStorage);
} }
......
...@@ -1377,61 +1377,48 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data, ...@@ -1377,61 +1377,48 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
GLintptr uniformBufferOffset = uniformBuffer.getOffset(); GLintptr uniformBufferOffset = uniformBuffer.getOffset();
GLsizeiptr uniformBufferSize = uniformBuffer.getSize(); GLsizeiptr uniformBufferSize = uniformBuffer.getSize();
if (uniformBuffer.get() != nullptr) if (uniformBuffer.get() == nullptr)
{ {
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get()); continue;
ID3D11Buffer *constantBuffer; }
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get());
ID3D11Buffer *constantBuffer = nullptr;
ANGLE_TRY_RESULT(
bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize),
constantBuffer);
if (!constantBuffer)
{
return gl::Error(GL_OUT_OF_MEMORY, "Error retrieving constant buffer");
}
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets) if (mCurrentConstantBufferVS[uniformBufferIndex] != bufferStorage->getSerial() ||
mCurrentConstantBufferVSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferVSSize[uniformBufferIndex] != uniformBufferSize)
{
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{ {
auto bufferOrError = bufferStorage->getBuffer(BUFFER_USAGE_UNIFORM); UINT firstConstant = 0, numConstants = 0;
if (bufferOrError.isError()) CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize,
{ &firstConstant, &numConstants);
return bufferOrError.getError(); mDeviceContext1->VSSetConstantBuffers1(
} getReservedVertexUniformBuffers() +
constantBuffer = bufferOrError.getResult(); static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer, &firstConstant, &numConstants);
} }
else else
{ {
auto bufferOrError = mDeviceContext->VSSetConstantBuffers(
bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize); getReservedVertexUniformBuffers() +
if (bufferOrError.isError()) static_cast<unsigned int>(uniformBufferIndex),
{ 1, &constantBuffer);
return bufferOrError.getError();
}
constantBuffer = bufferOrError.getResult();
} }
if (!constantBuffer) mCurrentConstantBufferVS[uniformBufferIndex] = bufferStorage->getSerial();
{ mCurrentConstantBufferVSOffset[uniformBufferIndex] = uniformBufferOffset;
return gl::Error(GL_OUT_OF_MEMORY); mCurrentConstantBufferVSSize[uniformBufferIndex] = uniformBufferSize;
}
if (mCurrentConstantBufferVS[uniformBufferIndex] != bufferStorage->getSerial() ||
mCurrentConstantBufferVSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferVSSize[uniformBufferIndex] != uniformBufferSize)
{
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{
UINT firstConstant = 0, numConstants = 0;
CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize, &firstConstant, &numConstants);
mDeviceContext1->VSSetConstantBuffers1(
getReservedVertexUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer, &firstConstant, &numConstants);
}
else
{
mDeviceContext->VSSetConstantBuffers(
getReservedVertexUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer);
}
mCurrentConstantBufferVS[uniformBufferIndex] = bufferStorage->getSerial();
mCurrentConstantBufferVSOffset[uniformBufferIndex] = uniformBufferOffset;
mCurrentConstantBufferVSSize[uniformBufferIndex] = uniformBufferSize;
}
} }
} }
...@@ -1449,65 +1436,52 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data, ...@@ -1449,65 +1436,52 @@ gl::Error Renderer11::setUniformBuffers(const gl::ContextState &data,
GLintptr uniformBufferOffset = uniformBuffer.getOffset(); GLintptr uniformBufferOffset = uniformBuffer.getOffset();
GLsizeiptr uniformBufferSize = uniformBuffer.getSize(); GLsizeiptr uniformBufferSize = uniformBuffer.getSize();
if (uniformBuffer.get() != nullptr) if (uniformBuffer.get() == nullptr)
{
continue;
}
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get());
ID3D11Buffer *constantBuffer = nullptr;
ANGLE_TRY_RESULT(
bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize),
constantBuffer);
if (!constantBuffer)
{ {
Buffer11 *bufferStorage = GetImplAs<Buffer11>(uniformBuffer.get()); return gl::Error(GL_OUT_OF_MEMORY, "Error retrieving constant buffer");
ID3D11Buffer *constantBuffer; }
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets) if (mCurrentConstantBufferPS[uniformBufferIndex] != bufferStorage->getSerial() ||
mCurrentConstantBufferPSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferPSSize[uniformBufferIndex] != uniformBufferSize)
{
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{ {
auto bufferOrError = bufferStorage->getBuffer(BUFFER_USAGE_UNIFORM); UINT firstConstant = 0, numConstants = 0;
if (bufferOrError.isError()) CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize,
{ &firstConstant, &numConstants);
return bufferOrError.getError(); mDeviceContext1->PSSetConstantBuffers1(
} getReservedFragmentUniformBuffers() +
constantBuffer = bufferOrError.getResult(); static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer, &firstConstant, &numConstants);
} }
else else
{ {
auto bufferOrError = mDeviceContext->PSSetConstantBuffers(
bufferStorage->getConstantBufferRange(uniformBufferOffset, uniformBufferSize); getReservedFragmentUniformBuffers() +
if (bufferOrError.isError()) static_cast<unsigned int>(uniformBufferIndex),
{ 1, &constantBuffer);
return bufferOrError.getError();
}
constantBuffer = bufferOrError.getResult();
} }
if (!constantBuffer) mCurrentConstantBufferPS[uniformBufferIndex] = bufferStorage->getSerial();
{ mCurrentConstantBufferPSOffset[uniformBufferIndex] = uniformBufferOffset;
return gl::Error(GL_OUT_OF_MEMORY); mCurrentConstantBufferPSSize[uniformBufferIndex] = uniformBufferSize;
}
if (mCurrentConstantBufferPS[uniformBufferIndex] != bufferStorage->getSerial() ||
mCurrentConstantBufferPSOffset[uniformBufferIndex] != uniformBufferOffset ||
mCurrentConstantBufferPSSize[uniformBufferIndex] != uniformBufferSize)
{
if (mRenderer11DeviceCaps.supportsConstantBufferOffsets && uniformBufferSize != 0)
{
UINT firstConstant = 0, numConstants = 0;
CalculateConstantBufferParams(uniformBufferOffset, uniformBufferSize, &firstConstant, &numConstants);
mDeviceContext1->PSSetConstantBuffers1(
getReservedFragmentUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer, &firstConstant, &numConstants);
}
else
{
mDeviceContext->PSSetConstantBuffers(
getReservedFragmentUniformBuffers() +
static_cast<unsigned int>(uniformBufferIndex),
1, &constantBuffer);
}
mCurrentConstantBufferPS[uniformBufferIndex] = bufferStorage->getSerial();
mCurrentConstantBufferPSOffset[uniformBufferIndex] = uniformBufferOffset;
mCurrentConstantBufferPSSize[uniformBufferIndex] = uniformBufferSize;
}
} }
} }
return gl::Error(GL_NO_ERROR); return gl::NoError();
} }
gl::Error Renderer11::updateState(const gl::ContextState &data, GLenum drawMode) gl::Error Renderer11::updateState(const gl::ContextState &data, GLenum drawMode)
......
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