Only use map-write instead of map-write-discard.
In D3D11, map-discard is reserved for DYNAMIC usage buffer,
which are resources that live on the GPU. Staging buffers
don't have the notion of map-discard, and using them with
discard gives a D3D11 error.
This patch fixes crashes in dEQP buffer.map.write.invalidate.
BUG=angle:587
Change-Id: Ie225e72d4e226c69e73826c9fb67bbb940bbc466
Reviewed-on: https://chromium-review.googlesource.com/190072
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d11/BufferStorage11.cpp b/src/libGLESv2/renderer/d3d11/BufferStorage11.cpp
index 2429696..86b8e30 100644
--- a/src/libGLESv2/renderer/d3d11/BufferStorage11.cpp
+++ b/src/libGLESv2/renderer/d3d11/BufferStorage11.cpp
@@ -22,18 +22,19 @@
{
bool readBit = ((access & GL_MAP_READ_BIT) != 0);
bool writeBit = ((access & GL_MAP_WRITE_BIT) != 0);
- bool discardBit = ((access & (GL_MAP_INVALIDATE_BUFFER_BIT)) != 0);
- ASSERT(!readBit || !discardBit);
ASSERT(readBit || writeBit);
+ // Note : we ignore the discard bit, because in D3D11, staging buffers
+ // don't accept the map-discard flag (discard only works for DYNAMIC usage)
+
if (readBit && !writeBit)
{
return D3D11_MAP_READ;
}
else if (writeBit && !readBit)
{
- return (discardBit ? D3D11_MAP_WRITE_DISCARD : D3D11_MAP_WRITE);
+ return D3D11_MAP_WRITE;
}
else if (writeBit && readBit)
{