glBindBuffer(GL_PIXEL_PACK_BUFFER, 0);
check_error();
- glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
+ glMemoryBarrier(GL_TEXTURE_UPDATE_BARRIER_BIT | GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
check_error();
fence = RefCountedGLsync(GL_SYNC_GPU_COMMANDS_COMPLETE, /*flags=*/0);
check_error();
unsigned char *surface_p = nullptr;
vaMapBuffer(va_dpy, surf->surface_image.buf, (void **)&surface_p);
- unsigned char *y_ptr = (unsigned char *)surface_p;
+ unsigned char *y_ptr = (unsigned char *)surface_p + surf->surface_image.offsets[0];
memcpy_with_pitch(y_ptr, surf->y_ptr, frame_width, surf->surface_image.pitches[0], frame_height);
- unsigned char *cbcr_ptr = (unsigned char *)surface_p + frame_width * frame_height;
+ unsigned char *cbcr_ptr = (unsigned char *)surface_p + surf->surface_image.offsets[1];
memcpy_with_pitch(cbcr_ptr, surf->cbcr_ptr, (frame_width / 2) * sizeof(uint16_t), surf->surface_image.pitches[1], frame_height / 2);
va_status = vaUnmapBuffer(va_dpy, surf->surface_image.buf);