我的开源项目工作进展(6、7)

一、 本周主要工作与解决的问题

    1.最近一直在看PRM,看得还是不是有理解,然后因为换了个电脑,又得重装linux,这次改成Unbuntu,然后就配置各种工具、函数了。

static void
i965_fill_vertex_buffer(
    VADriverContextP ctx,
    float tex_coords[4], /* [(u1,v1);(u2,v2)] */(surface 的左上角和右上角)
    float vid_coords[4]  /* [(x1,y1);(x2,y2)] */(enclosing region的左上角和右下角)
)
{
    struct i965_driver_data * const i965 = i965_driver_data(ctx);
    float vb[12];


    enum { X1, Y1, X2, Y2 };


    static const unsigned int g_rotation_indices[][6] = {
        [VA_ROTATION_NONE] = { X2, Y2, X1, Y2, X1, Y1 },(右下角-》左下角-》左上角)
        [VA_ROTATION_90]   = { X2, Y1, X2, Y2, X1, Y2 },(顺时针旋转90度,此时(x2,Y1)变为右下角,)
        [VA_ROTATION_180]  = { X1, Y1, X2, Y1, X2, Y2 },
        [VA_ROTATION_270]  = { X1, Y2, X1, Y1, X2, Y1 },
    };


    const unsigned int * const rotation_indices =
        g_rotation_indices[i965->rotation_attrib->value];
    vb[0]  = tex_coords[rotation_indices[0]]; /* bottom-right corner */
    vb[1]  = tex_coords[rotation_indices[1]];
    vb[2]  = vid_coords[X2];
    vb[3]  = vid_coords[Y2];


    vb[4]  = tex_coords[rotation_indices[2]]; /* bottom-left corner */
    vb[5]  = tex_coords[rotation_indices[3]];
    vb[6]  = vid_coords[X1];
    vb[7]  = vid_coords[Y2];


    vb[8]  = tex_coords[rotation_indices[4]]; /* top-left corner */
    vb[9]  = tex_coords[rotation_indices[5]];
    vb[10] = vid_coords[X1];
    vb[11] = vid_coords[Y1];


    dri_bo_subdata(i965->render_state.vb.vertex_buffer, 0, sizeof(vb), vb);
}

原本想在这个函数的基础上来改,但还是出了点儿问题。。

二、之前给的老师的一个答复

关于GPU编程: 你可以选择用OpenCL, 下面是Intel平台上的一个OpenCL的一个开源实现 
http://wiki.freedesktop.org/www/Software/Beignet/
不过基于以下考虑目前libva-intel-driver并没有调用OpenCL.
1. 会造成libva-intel-driver 依赖于OpenCL
2. libva 与 OpenCL之间的接口没有定义好,不能共享GPU内存,做不到零拷贝,效率可能会比较低。
所以在libva-intel-driver里用的都是比较底层的方法

给你的PRM是关于Intel GPU的编程接口,比较底层,OpenCL, libva 还有3D驱动都是基于该文档实现的。

前面说过,你可以基于一个3D pipeline来做这个事情,如果前面状态都设置正确,在PS thread里可以得到
每一个pixel的正确位置。把原始图像当成一个贴图,通过设置正确的贴图坐标就可以实现旋转。

也可以用media pipeline来做,每个media thread 都是通过一个MEDIA_OBJECT命令发起的,MEDIA_OBJECT命令
是基于块的。可以把块的左上角坐标当成参数传给每个thread, 通过这个方法就能处理整个surface了。


随写:本周因为华为来学校招人了,唉。报错了岗位,应该报软件开发工程师的,选了算法工程师,有一个问题答不上来,一个答得不好,其它的都还可以,终面也发挥不错。不过,最后估计可能还是要跪了。。。。技术面表现太差了。





你可能感兴趣的:(工作报告)