Fixed applied index buffer offset not being cached.

TRAC #22371

Signed-off-by: Nicolas Capens
Signed-off-by: Daniel Koch
Author: Geoff Lang

git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1679 736b8ea6-26fd-11df-bfd4-992fa37f6226
diff --git a/src/libGLESv2/renderer/Renderer11.cpp b/src/libGLESv2/renderer/Renderer11.cpp
index 5ed0c58..18a5c1e 100644
--- a/src/libGLESv2/renderer/Renderer11.cpp
+++ b/src/libGLESv2/renderer/Renderer11.cpp
@@ -722,12 +722,13 @@
 
     if (err == GL_NO_ERROR)
     {
-        if (indexInfo->serial != mAppliedIBSerial)
+        if (indexInfo->serial != mAppliedIBSerial || indexInfo->startOffset != mAppliedIBOffset)
         {
             IndexBuffer11* indexBuffer = IndexBuffer11::makeIndexBuffer11(indexInfo->indexBuffer);
 
             mDeviceContext->IASetIndexBuffer(indexBuffer->getBuffer(), indexBuffer->getIndexFormat(), indexInfo->startOffset);
             mAppliedIBSerial = indexInfo->serial;
+            mAppliedIBOffset = indexInfo->startOffset;
         }
     }
 
@@ -790,6 +791,7 @@
     }
 
     unsigned int *data = reinterpret_cast<unsigned int*>(mappedMemory);
+    unsigned int indexBufferOffset = static_cast<unsigned int>(offset);
 
     switch (type)
     {
@@ -830,12 +832,13 @@
         return error(GL_OUT_OF_MEMORY);
     }
 
-    if (mAppliedIBSerial != mLineLoopIB->getSerial())
+    if (mAppliedIBSerial != mLineLoopIB->getSerial() || mAppliedIBOffset != indexBufferOffset)
     {
         IndexBuffer11 *indexBuffer = IndexBuffer11::makeIndexBuffer11(mLineLoopIB->getIndexBuffer());
 
-        mDeviceContext->IASetIndexBuffer(indexBuffer->getBuffer(), indexBuffer->getIndexFormat(), offset);
+        mDeviceContext->IASetIndexBuffer(indexBuffer->getBuffer(), indexBuffer->getIndexFormat(), indexBufferOffset);
         mAppliedIBSerial = mLineLoopIB->getSerial();
+        mAppliedIBOffset = indexBufferOffset;
     }
 
     mDeviceContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_LINELIST);
@@ -1086,6 +1089,8 @@
     mForceSetViewport = true;
 
     mAppliedIBSerial = 0;
+    mAppliedIBOffset = 0;
+
     mAppliedProgramBinarySerial = 0;
 }