It could be that your minIndex/maxindex values do have to be correct by strict D3D standards, but these ATI cards/drivers are the only ones to actually be so strict... E.g. it could be that other drivers are simply tolerating incorrect values when they shouldn't.
I found when drawing indexed primitives the minVertexIndex parameter cannot be left at zero with ATI cards for some reason. NVIDIA and INTEL seem to work fine however. When I left this at zero, the ATI cards were missing polygons all over the place.
So your call " ->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0, m_VertexBuffer.m_NumVertices, index0, numIndices/3); "
must change to a variation like
" ->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, m_MinIndexNumber, m_VertexBuffer.m_NumVertices, index0, numIndices/3); "
- MinIndex should be that minimum value in the specified range of your index buffer
- MinIndex+NumVertices should be one past the maximum value in that range of your index buffer, or...
- NumVertices should be the number of unique values in that range of your index buffer... It's been a while since I did DX9
However, most drivers just treat these values as a hint, or simply ignore them, so it doesn't matter if you pass in wrong values.