static int TrySparseImageCopyPixels(const IceTImage image, IceTSizeType start, IceTSizeType end) { IceTVoid *full_sparse_buffer; IceTSparseImage full_sparse; IceTVoid *compress_sub_buffer; IceTSparseImage compress_sub; IceTVoid *sparse_copy_buffer; IceTSparseImage sparse_copy; IceTSizeType width = icetImageGetWidth(image); IceTSizeType height = icetImageGetHeight(image); IceTSizeType sub_size = end - start; int result; printf("Trying sparse image copy from %d to %d\n", start, end); full_sparse_buffer = malloc(icetSparseImageBufferSize(width, height)); full_sparse = icetSparseImageAssignBuffer(full_sparse_buffer,width,height); compress_sub_buffer = malloc(icetSparseImageBufferSize(sub_size, 1)); compress_sub = icetSparseImageAssignBuffer(compress_sub_buffer, sub_size, 1); sparse_copy_buffer = malloc(icetSparseImageBufferSize(sub_size, 1)); sparse_copy = icetSparseImageAssignBuffer(sparse_copy_buffer, sub_size, 1); icetCompressSubImage(image, start, sub_size, compress_sub); icetCompressImage(image, full_sparse); icetSparseImageCopyPixels(full_sparse, start, sub_size, sparse_copy); result = CompareSparseImages(compress_sub, sparse_copy); free(full_sparse_buffer); free(compress_sub_buffer); free(sparse_copy_buffer); return result; }
static void rtsi_handleDataFunc(void *inSparseImageBuffer, IceTInt src) { if (inSparseImageBuffer == NULL) { /* Superfluous call from send to self. */ if (!rtsi_first) { icetRaiseError("Unexpected callback order" " in icetRenderTransferSparseImages.", ICET_SANITY_CHECK_FAIL); } } else { IceTSparseImage inSparseImage = icetSparseImageUnpackageFromReceive(inSparseImageBuffer); if (rtsi_first) { IceTSizeType num_pixels = icetSparseImageGetNumPixels(inSparseImage); icetSparseImageCopyPixels(inSparseImage, 0, num_pixels, rtsi_workingImage); } else { IceTInt rank; const IceTInt *process_orders; IceTSparseImage old_workingImage; icetGetIntegerv(ICET_RANK, &rank); process_orders = icetUnsafeStateGetInteger(ICET_PROCESS_ORDERS); if (process_orders[src] < process_orders[rank]) { icetCompressedCompressedComposite(inSparseImage, rtsi_workingImage, rtsi_availableImage); } else { icetCompressedCompressedComposite(rtsi_workingImage, inSparseImage, rtsi_availableImage); } old_workingImage = rtsi_workingImage; rtsi_workingImage = rtsi_availableImage; rtsi_availableImage = old_workingImage; } } rtsi_first = ICET_FALSE; }