Commit 20c0f656 by Alexis Hetu Committed by Alexis Hétu

Fixed a uniform buffer regression

The following cl had broken all fragment uniform buffers: https://swiftshader-review.googlesource.com/6950 Since the null pointer check was only made on the vertex uniform buffer, it was preventing the fragment uniform buffer from being set, which was causing a crash when this happened. There was a second issue with this cl, which was allowing 'uniformBuffers[-1].get()' to be called, which should not have been allowed. Also, it is safer to call VertexProcessor::setUniformBuffer and PixelProcessor::setUniformBuffer unconditionally in order to set the null pointers correctly when no buffers are set. Change-Id: I275b0bca6173ee3df4e0e369926ed0a94500e1ba Reviewed-on: https://swiftshader-review.googlesource.com/7216Tested-by: 's avatarAlexis Hétu <sugoi@google.com> Reviewed-by: 's avatarNicolas Capens <capn@google.com>
parent 2d04d666
...@@ -1178,14 +1178,13 @@ namespace es2 ...@@ -1178,14 +1178,13 @@ namespace es2
for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < MAX_UNIFORM_BUFFER_BINDINGS; bufferBindingIndex++) for(unsigned int bufferBindingIndex = 0; bufferBindingIndex < MAX_UNIFORM_BUFFER_BINDINGS; bufferBindingIndex++)
{ {
int index = vertexUniformBuffers[bufferBindingIndex]; int index = vertexUniformBuffers[bufferBindingIndex];
const gl::BindingPointer<Buffer> &buffer = uniformBuffers[index].get(); Buffer* vsBuffer = (index != -1) ? (Buffer*)uniformBuffers[index].get() : nullptr;
device->VertexProcessor::setUniformBuffer(bufferBindingIndex,
if(buffer) vsBuffer ? vsBuffer->getResource() : nullptr, (index != -1) ? uniformBuffers[index].getOffset() : 0);
{ index = fragmentUniformBuffers[bufferBindingIndex];
device->VertexProcessor::setUniformBuffer(bufferBindingIndex, (index != -1) ? buffer->getResource() : nullptr, (index != -1) ? uniformBuffers[index].getOffset() : 0); Buffer* psBuffer = (index != -1) ? (Buffer*)uniformBuffers[index].get() : nullptr;
index = fragmentUniformBuffers[bufferBindingIndex]; device->PixelProcessor::setUniformBuffer(bufferBindingIndex,
device->PixelProcessor::setUniformBuffer(bufferBindingIndex, (index != -1) ? buffer->getResource() : nullptr, (index != -1) ? uniformBuffers[index].getOffset() : 0); psBuffer ? psBuffer->getResource() : nullptr, (index != -1) ? uniformBuffers[index].getOffset() : 0);
}
} }
} }
......
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