Reland Fixed compiler warning C4267 'conversion from 'size_t' to 'type', possible loss of data'
Additional warnings found with more testing and added C4267 warning disable only for angle_libpng

BUG=angleproject:1120

Change-Id: Ic403dcff5a8018056fa51a8c408e64207f3362eb
Reviewed-on: https://chromium-review.googlesource.com/293028
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libANGLE/renderer/d3d/VertexDataManager.cpp b/src/libANGLE/renderer/d3d/VertexDataManager.cpp
index 00adfc1..4fd4351 100644
--- a/src/libANGLE/renderer/d3d/VertexDataManager.cpp
+++ b/src/libANGLE/renderer/d3d/VertexDataManager.cpp
@@ -35,8 +35,10 @@
         size = static_cast<unsigned int>(std::numeric_limits<int>::max());
     }
 
-    GLsizei stride = ComputeVertexAttributeStride(attrib);
-    return (size - attrib.offset % stride + (stride - ComputeVertexAttributeTypeSize(attrib))) / stride;
+    GLsizei stride = static_cast<GLsizei>(ComputeVertexAttributeStride(attrib));
+    return (size - attrib.offset % stride +
+            (stride - static_cast<GLsizei>(ComputeVertexAttributeTypeSize(attrib)))) /
+           stride;
 }
 
 static int StreamingBufferElementCount(const gl::VertexAttribute &attrib, int vertexDrawCount, int instanceDrawCount)
@@ -152,7 +154,8 @@
             // Record the attribute now
             translated->active = true;
             translated->attribute = &vertexAttributes[attribIndex];
-            translated->currentValueType = state.getVertexAttribCurrentValue(attribIndex).Type;
+            translated->currentValueType =
+                state.getVertexAttribCurrentValue(static_cast<unsigned int>(attribIndex)).Type;
             translated->divisor = vertexAttributes[attribIndex].divisor;
 
             if (vertexAttributes[attribIndex].enabled)
@@ -160,8 +163,9 @@
                 mActiveEnabledAttributes.push_back(translated);
 
                 // Also invalidate static buffers that don't contain matching attributes
-                invalidateMatchingStaticData(vertexAttributes[attribIndex],
-                                             state.getVertexAttribCurrentValue(attribIndex));
+                invalidateMatchingStaticData(
+                    vertexAttributes[attribIndex],
+                    state.getVertexAttribCurrentValue(static_cast<unsigned int>(attribIndex)));
             }
             else
             {
@@ -199,9 +203,9 @@
             mCurrentValueCache[attribIndex].buffer = new StreamingVertexBufferInterface(mFactory, CONSTANT_VERTEX_BUFFER_SIZE);
         }
 
-        gl::Error error = storeCurrentValue(state.getVertexAttribCurrentValue(attribIndex),
-                                            &(*translatedAttribs)[attribIndex],
-                                            &mCurrentValueCache[attribIndex]);
+        gl::Error error = storeCurrentValue(
+            state.getVertexAttribCurrentValue(static_cast<unsigned int>(attribIndex)),
+            &(*translatedAttribs)[attribIndex], &mCurrentValueCache[attribIndex]);
         if (error.isError())
         {
             hintUnmapAllResources(vertexAttributes);
@@ -220,7 +224,7 @@
         {
             BufferD3D *bufferD3D = GetImplAs<BufferD3D>(buffer);
             size_t typeSize = ComputeVertexAttributeTypeSize(*activeAttrib->attribute);
-            bufferD3D->promoteStaticUsage(count * typeSize);
+            bufferD3D->promoteStaticUsage(count * static_cast<int>(typeSize));
         }
     }
 
@@ -263,7 +267,8 @@
         {
             if (staticBuffer->getBufferSize() == 0)
             {
-                int totalCount = ElementsInBuffer(attrib, bufferImpl->getSize());
+                int totalCount =
+                    ElementsInBuffer(attrib, static_cast<unsigned int>(bufferImpl->getSize()));
                 gl::Error error = staticBuffer->reserveVertexSpace(attrib, totalCount, 0);
                 if (error.isError())
                 {
@@ -274,7 +279,9 @@
         else
         {
             int totalCount = StreamingBufferElementCount(attrib, count, instances);
-            ASSERT(!bufferImpl || ElementsInBuffer(attrib, bufferImpl->getSize()) >= totalCount);
+            ASSERT(!bufferImpl ||
+                   ElementsInBuffer(attrib, static_cast<unsigned int>(bufferImpl->getSize())) >=
+                       totalCount);
 
             gl::Error error = mStreamingBuffer->reserveVertexSpace(attrib, totalCount, instances);
             if (error.isError())
@@ -312,7 +319,7 @@
     {
         translated->storage = storage;
         translated->serial = storage->getSerial();
-        translated->stride = ComputeVertexAttributeStride(attrib);
+        translated->stride  = static_cast<unsigned int>(ComputeVertexAttributeStride(attrib));
         translated->offset = static_cast<unsigned int>(attrib.offset + translated->stride * firstVertexIndex);
 
         return gl::Error(GL_NO_ERROR);
@@ -349,8 +356,10 @@
         if (!staticBuffer->lookupAttribute(attrib, &streamOffset))
         {
             // Convert the entire buffer
-            int totalCount = ElementsInBuffer(attrib, storage->getSize());
-            int startIndex = attrib.offset / ComputeVertexAttributeStride(attrib);
+            int totalCount =
+                ElementsInBuffer(attrib, static_cast<unsigned int>(storage->getSize()));
+            int startIndex = static_cast<int>(attrib.offset) /
+                             static_cast<int>(ComputeVertexAttributeStride(attrib));
 
             error = staticBuffer->storeVertexAttributes(attrib,
                                                         translated->currentValueType,
@@ -365,7 +374,10 @@
             }
         }
 
-        unsigned int firstElementOffset = (attrib.offset / ComputeVertexAttributeStride(attrib)) * outputElementSize;
+        unsigned int firstElementOffset =
+            (static_cast<unsigned int>(attrib.offset) /
+             static_cast<unsigned int>(ComputeVertexAttributeStride(attrib))) *
+            outputElementSize;
         unsigned int startOffset = (instances == 0 || attrib.divisor == 0) ? firstVertexIndex * outputElementSize : 0;
         if (streamOffset + firstElementOffset + startOffset < streamOffset)
         {
@@ -436,7 +448,7 @@
     translated->divisor = 0;
 
     translated->stride = 0;
-    translated->offset = cachedState->offset;
+    translated->offset = static_cast<unsigned int>(cachedState->offset);
 
     return gl::Error(GL_NO_ERROR);
 }