Subversion Repositories Kolibri OS

Rev

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
{