Quoting Liviu Dudau (2019-01-15 17:47:44) > +int igt_fb_get_crc(struct igt_fb *fb, igt_crc_t *crc) > +{ > +#define FNV1a_OFFSET_BIAS 2166136261 > +#define FNV1a_PRIME 16777619 > + uint32_t hash; > + void *map; > + char *ptr, *line = NULL; > + int x, y, cpp = igt_drm_format_to_bpp(fb->drm_format) / 8; > + uint32_t stride = calc_plane_stride(fb, 0); > + > + if (fb->is_dumb) > + map = kmstest_dumb_map_buffer(fb->fd, fb->gem_handle, fb->size, > + PROT_READ); > + else > + map = gem_mmap__gtt(fb->fd, fb->gem_handle, fb->size, > + PROT_READ); > + ptr = map; > + > + /* > + * Framebuffers are often uncached, which can make byte-wise accesses > + * very slow. We copy each line of the FB into a local buffer to speed > + * up the hashing. > + */ > + line = malloc(stride); > + if (!line) { > + munmap(map, fb->size); > + return -ENOMEM; > + } > + > + hash = FNV1a_OFFSET_BIAS; > + > + for (y = 0; y < fb->height; y++, ptr += stride) { > + > + memcpy(line, ptr, stride); igt_memcpy_from_wc() for the reasons cited above. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx