Rev 5602 | Rev 6137 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5602 | Rev 6115 | ||
---|---|---|---|
Line 198... | Line 198... | ||
198 | drm_ioctl(px->fd, DRM_IOCTL_GEM_CLOSE, &close); |
198 | drm_ioctl(px->fd, DRM_IOCTL_GEM_CLOSE, &close); |
199 | err_0: |
199 | err_0: |
200 | return NULL; |
200 | return NULL; |
201 | }; |
201 | }; |
Line 202... | Line -... | ||
202 | - | ||
203 | 202 | ||
204 | static int px_create_bitmap(struct render *px, struct bitmap *bitmap, |
203 | static int px_create_bitmap(struct render *px, struct bitmap *bitmap, |
205 | size_t size, EGLint format) |
204 | size_t size, EGLint format) |
206 | { |
205 | { |
207 | struct drm_gem_close close; |
206 | struct drm_gem_close close; |
Line 525... | Line 524... | ||
525 | err_0: |
524 | err_0: |
526 | free(bitmap); |
525 | free(bitmap); |
527 | return NULL; |
526 | return NULL; |
528 | }; |
527 | }; |
Line -... | Line 528... | ||
- | 528 | ||
- | 529 | static planar_t* hw_create_planar(EGLint name, EGLint format, uint32_t width, uint32_t height, |
|
- | 530 | uint32_t offset0, uint32_t pitch0, |
|
- | 531 | uint32_t offset1, uint32_t pitch1, |
|
- | 532 | uint32_t offset2, uint32_t pitch2) |
|
- | 533 | { |
|
- | 534 | struct drm_gem_close close; |
|
- | 535 | planar_t *planar; |
|
- | 536 | EGLImageKHR img; |
|
- | 537 | int num_planes; |
|
- | 538 | int i; |
|
- | 539 | ||
- | 540 | EGLint attribs[] = { |
|
- | 541 | EGL_WIDTH, width, |
|
- | 542 | EGL_HEIGHT,height, |
|
- | 543 | EGL_DRM_BUFFER_FORMAT_MESA, format, |
|
- | 544 | EGL_DMA_BUF_PLANE0_OFFSET_EXT, offset0, |
|
- | 545 | EGL_DMA_BUF_PLANE0_PITCH_EXT, pitch0, |
|
- | 546 | EGL_DMA_BUF_PLANE1_OFFSET_EXT, offset1, |
|
- | 547 | EGL_DMA_BUF_PLANE1_PITCH_EXT, pitch1, |
|
- | 548 | EGL_DMA_BUF_PLANE2_OFFSET_EXT, offset2, |
|
- | 549 | EGL_DMA_BUF_PLANE2_PITCH_EXT, pitch2, |
|
- | 550 | EGL_NONE, EGL_NONE |
|
- | 551 | }; |
|
- | 552 | ||
- | 553 | switch (format) |
|
- | 554 | { |
|
- | 555 | case EGL_TEXTURE_Y_UV_WL: |
|
- | 556 | num_planes = 2; |
|
- | 557 | break; |
|
- | 558 | case EGL_TEXTURE_Y_U_V_WL: |
|
- | 559 | num_planes = 3; |
|
- | 560 | break; |
|
- | 561 | case EGL_TEXTURE_Y_XUXV_WL: |
|
- | 562 | num_planes = 2; |
|
- | 563 | break; |
|
- | 564 | default: |
|
- | 565 | num_planes = 0; |
|
- | 566 | } |
|
- | 567 | ||
- | 568 | if(num_planes == 0) |
|
- | 569 | return NULL; |
|
- | 570 | ||
- | 571 | planar = calloc(1, sizeof(struct planar)); |
|
- | 572 | if(planar == NULL) |
|
- | 573 | return NULL; |
|
- | 574 | ||
- | 575 | img = eglCreatePlanarImage(px->dpy, px->context, (EGLClientBuffer)name, attribs); |
|
- | 576 | if(img == NULL) |
|
- | 577 | goto err_0; |
|
- | 578 | ||
- | 579 | planar->width = width; |
|
- | 580 | planar->height = height; |
|
- | 581 | planar->name = name; |
|
- | 582 | planar->planar_image = img; |
|
- | 583 | ||
- | 584 | planar->offset[0] = offset0; |
|
- | 585 | planar->offset[1] = offset1; |
|
- | 586 | planar->offset[2] = offset2; |
|
- | 587 | ||
- | 588 | planar->pitch[0] = pitch0; |
|
- | 589 | planar->pitch[1] = pitch1; |
|
- | 590 | planar->pitch[2] = pitch2; |
|
- | 591 | ||
- | 592 | glGenTextures(num_planes, &planar->tex[0]); |
|
- | 593 | ||
- | 594 | for(i = 0; i < num_planes; i++) |
|
- | 595 | { |
|
- | 596 | EGLint attr[3]; |
|
- | 597 | attr[0] = EGL_WAYLAND_PLANE_WL; |
|
- | 598 | attr[1] = i; |
|
- | 599 | attr[2] = EGL_NONE; |
|
- | 600 | ||
- | 601 | planar->image[i] = eglCreateImageKHR(px->dpy, px->context, |
|
- | 602 | EGL_WAYLAND_BUFFER_WL,(EGLClientBuffer)name, attr); |
|
- | 603 | ||
- | 604 | glBindTexture(GL_TEXTURE_2D, planar->tex[i]); |
|
- | 605 | ||
- | 606 | glEGLImageTargetTexture2DOES(GL_TEXTURE_2D, planar->image[i]); |
|
- | 607 | ||
- | 608 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); |
|
- | 609 | glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); |
|
- | 610 | }; |
|
- | 611 | ||
- | 612 | return planar; |
|
- | 613 | ||
- | 614 | err_0: |
|
- | 615 | free(planar); |
|
- | 616 | ||
- | 617 | return NULL; |
|
- | 618 | } |
|
- | 619 | ||
529 | 620 | ||
530 | static int hw_destroy_bitmap(bitmap_t * bitmap) |
621 | static int hw_destroy_bitmap(bitmap_t * bitmap) |
531 | { |
622 | { |
Line 532... | Line 623... | ||
532 | struct drm_gem_close close; |
623 | struct drm_gem_close close; |
Line 709... | Line 800... | ||
709 | hw_lock_bitmap, |
800 | hw_lock_bitmap, |
710 | hw_resize_bitmap, |
801 | hw_resize_bitmap, |
711 | hw_blit, |
802 | hw_blit, |
712 | hw_create_client, |
803 | hw_create_client, |
713 | hw_resize_client, |
804 | hw_resize_client, |
714 | hw_fini |
805 | hw_fini, |
- | 806 | hw_create_planar |
|
715 | }; |
807 | }; |
Line 716... | Line 808... | ||
716 | 808 | ||
717 | struct pix_driver *DrvInit(uint32_t service) |
809 | struct pix_driver *DrvInit(uint32_t service) |
718 | { |
810 | { |