static int blk_discard(int fd, __u32 cluster, __u64 start, __u64 len) { __u64 max_discard_len = S2B(B2S(UINT_MAX) / cluster * cluster); while (len > 0) { __u64 range[2]; int ret; range[0] = start; range[1] = MIN(len, max_discard_len); if (start % S2B(cluster) && len > range[1]) range[1] -= start % S2B(cluster); ploop_log(1, "Call BLKDISCARD start=%" PRIu64 " length=%" PRIu64, (uint64_t)range[0], (uint64_t)range[1]); ret = ioctl_device(fd, BLKDISCARD, range); if (ret) return ret; start += range[1]; len -= range[1]; } return 0; }
static void convertByteIndirectLoop(const char* dataIn,unsigned int strideIn,void* dataOut,GLsizei count,GLenum indices_type,const GLvoid* indices,unsigned int strideOut,int attribSize) { for(int i = 0 ;i < count ;i++) { unsigned short index = indices_type == GL_UNSIGNED_BYTE? ((GLubyte *)indices)[i]: ((GLushort *)indices)[i]; const GLbyte* bytes_data = (GLbyte *)(dataIn + index*strideIn); GLshort* short_data = reinterpret_cast<GLshort*>(static_cast<unsigned char*>(dataOut) + index*strideOut); for(int j=0;j<attribSize;j++) { short_data[j] = B2S(bytes_data[j]); } } }
static void convertByteDirectLoop(const char* dataIn,unsigned int strideIn,void* dataOut,unsigned int nBytes,unsigned int strideOut,int attribSize) { for(unsigned int i = 0; i < nBytes;i+=strideOut) { const GLbyte* byte_data = (const GLbyte *)dataIn; //filling attrib for(int j=0;j<attribSize;j++) { reinterpret_cast<GLshort*>(&static_cast<unsigned char*>(dataOut)[i])[j] = B2S(byte_data[j]); } dataIn += strideIn; } }