⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 i915_xvmc.c

📁 显驱动 Intel英特尔G45G43G41G35G33G31G965Q963Q965GM965系列显卡最新X.Org驱动2.4.0版For Linux
💻 C
📖 第 1 页 / 共 5 页
字号:
               pI915XvMC->corrdata.size,               (drmAddress *)&pI915XvMC->corrdata.map) != 0) {        return -1;    }    return 0;}static void i915_xvmc_unmap_buffers(i915XvMCContext *pI915XvMC){    if (pI915XvMC->sis.map) {        drmUnmap(pI915XvMC->sis.map, pI915XvMC->sis.size);        pI915XvMC->sis.map = NULL;    }    if (pI915XvMC->ssb.map) {        drmUnmap(pI915XvMC->ssb.map, pI915XvMC->ssb.size);        pI915XvMC->ssb.map = NULL;    }    if (pI915XvMC->msb.map) {        drmUnmap(pI915XvMC->msb.map, pI915XvMC->msb.size);        pI915XvMC->msb.map = NULL;    }    if (pI915XvMC->psp.map) {        drmUnmap(pI915XvMC->psp.map, pI915XvMC->psp.size);        pI915XvMC->psp.map = NULL;    }    if (pI915XvMC->psc.map) {        drmUnmap(pI915XvMC->psc.map, pI915XvMC->psc.size);        pI915XvMC->psc.map = NULL;    }    if (pI915XvMC->corrdata.map) {        drmUnmap(pI915XvMC->corrdata.map, pI915XvMC->corrdata.size);        pI915XvMC->corrdata.map = NULL;    }}#if 0/* * Video post processing */static void i915_yuv2rgb_map_state_buffer(XvMCSurface *target_surface){    struct i915_3dstate_map_state *map_state;    struct texture_map *tm;    i915XvMCSurface *privTarget = NULL;    i915XvMCContext *pI915XvMC = NULL;    unsigned int w = target_surface->width, h = target_surface->height;    privTarget = (i915XvMCSurface *)target_surface->privData;    pI915XvMC = (i915XvMCContext *)privTarget->privContext;    /* 3DSATE_MAP_STATE */    map_state = (struct i915_3dstate_map_state *)pI915XvMC->msb.map;    memset(map_state, 0, sizeof(*map_state));    map_state->dw0.type = CMD_3D;    map_state->dw0.opcode = OPC_3DSTATE_MAP_STATE;    map_state->dw0.retain = 0;    map_state->dw0.length = 9;    map_state->dw1.map_mask = MAP_MAP0 | MAP_MAP1 | MAP_MAP2;    /* texture map 0: V Plane */    tm = (struct texture_map *)(++map_state);    memset(tm, 0, sizeof(*tm));    tm->tm0.v_ls_offset = 0;    tm->tm0.v_ls = 0;    tm->tm0.base_address = VOFFSET(privTarget);    tm->tm1.tile_walk = TILEWALK_XMAJOR;    tm->tm1.tiled_surface = 0;    tm->tm1.utilize_fence_regs = 1;    tm->tm1.texel_fmt = 0;    tm->tm1.surface_fmt = 1;    tm->tm1.width = (w >> 1) - 1;    tm->tm1.height = (h >> 1) - 1;    tm->tm2.depth = 0;    tm->tm2.max_lod = 0;    tm->tm2.cube_face = 0;    tm->tm2.pitch = (privTarget->uvStride >> 2) - 1;    /* in DWords - 1 */    /* texture map 1: Y Plane */    ++tm;    memset(tm, 0, sizeof(*tm));    tm->tm0.v_ls_offset = 0;    tm->tm0.v_ls = 0;    tm->tm0.base_address = YOFFSET(privTarget);    tm->tm1.tile_walk = TILEWALK_XMAJOR;    tm->tm1.tiled_surface = 0;    tm->tm1.utilize_fence_regs = 1;    tm->tm1.texel_fmt = 0;    tm->tm1.surface_fmt = 1;    tm->tm1.width = w - 1;    tm->tm1.height = h - 1;    tm->tm2.depth = 0;    tm->tm2.max_lod = 0;    tm->tm2.cube_face = 0;    tm->tm2.pitch = (privTarget->yStride >> 2) - 1;     /* in DWords - 1 */    /* texture map 2: U Plane */    ++tm;    memset(tm, 0, sizeof(*tm));    tm->tm0.v_ls_offset = 0;    tm->tm0.v_ls = 0;    tm->tm0.base_address = UOFFSET(privTarget);    tm->tm1.tile_walk = TILEWALK_XMAJOR;    tm->tm1.tiled_surface = 0;    tm->tm1.utilize_fence_regs = 1;    tm->tm1.texel_fmt = 0;    tm->tm1.surface_fmt = 1;    tm->tm1.width = (w >> 1) - 1;    tm->tm1.height = (h >> 1) - 1;    tm->tm2.depth = 0;    tm->tm2.max_lod = 0;    tm->tm2.cube_face = 0;    tm->tm2.pitch = (privTarget->uvStride >> 2) - 1;    /* in DWords - 1 */}#endif#if 0static void i915_yuv2rgb_sampler_state_buffer(XvMCSurface *surface){    struct i915_3dstate_sampler_state *sampler_state;    struct texture_sampler *ts;    i915XvMCSurface *privSurface = (i915XvMCSurface *)surface->privData;    i915XvMCContext *pI915XvMC = (i915XvMCContext *)privSurface->privContext;    /* 3DSATE_SAMPLER_STATE */    sampler_state = (struct i915_3dstate_sampler_state *)pI915XvMC->ssb.map;    memset(sampler_state, 0, sizeof(*sampler_state));    sampler_state->dw0.type = CMD_3D;    sampler_state->dw0.opcode = OPC_3DSTATE_SAMPLER_STATE;    sampler_state->dw0.length = 9;    sampler_state->dw1.sampler_masker = SAMPLER_SAMPLER0 | SAMPLER_SAMPLER1 | SAMPLER_SAMPLER2;    /* Sampler 0 */    ts = (struct texture_sampler *)(++sampler_state);    memset(ts, 0, sizeof(*ts));    ts->ts0.reverse_gamma = 0;    ts->ts0.planar2packet = 1;    ts->ts0.color_conversion = 1;    ts->ts0.chromakey_index = 0;    ts->ts0.base_level = 0;    ts->ts0.mip_filter = MIPFILTER_NONE;        /* NONE */    ts->ts0.mag_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.min_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.lod_bias = 0;    ts->ts0.shadow_enable = 0;    ts->ts0.max_anisotropy = ANISORATIO_2;    ts->ts0.shadow_function = PREFILTEROP_ALWAYS;    ts->ts1.min_lod = 0;        /* Maximum Mip Level */    ts->ts1.kill_pixel = 0;    ts->ts1.keyed_texture_filter = 0;    ts->ts1.chromakey_enable = 0;    ts->ts1.tcx_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcy_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcz_control = TEXCOORDMODE_CLAMP;    ts->ts1.normalized_coor = 0;    ts->ts1.map_index = 0;    ts->ts1.east_deinterlacer = 0;    ts->ts2.default_color = 0;    /* Sampler 1 */    ++ts;    memset(ts, 0, sizeof(*ts));    ts->ts0.reverse_gamma = 0;    ts->ts0.planar2packet = 1;    ts->ts0.color_conversion = 1;    ts->ts0.chromakey_index = 0;    ts->ts0.base_level = 0;    ts->ts0.mip_filter = MIPFILTER_NONE;        /* NONE */    ts->ts0.mag_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.min_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.lod_bias = 0;    ts->ts0.shadow_enable = 0;    ts->ts0.max_anisotropy = ANISORATIO_2;    ts->ts0.shadow_function = PREFILTEROP_ALWAYS;    ts->ts1.min_lod = 0;        /* Maximum Mip Level */    ts->ts1.kill_pixel = 0;    ts->ts1.keyed_texture_filter = 0;    ts->ts1.chromakey_enable = 0;    ts->ts1.tcx_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcy_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcz_control = TEXCOORDMODE_CLAMP;    ts->ts1.normalized_coor = 0;    ts->ts1.map_index = 1;    ts->ts1.east_deinterlacer = 0;    ts->ts2.default_color = 0;    /* Sampler 2 */    ++ts;    memset(ts, 0, sizeof(*ts));    ts->ts0.reverse_gamma = 0;    ts->ts0.planar2packet = 1;    ts->ts0.color_conversion = 1;    ts->ts0.chromakey_index = 0;    ts->ts0.base_level = 0;    ts->ts0.mip_filter = MIPFILTER_NONE;        /* NONE */    ts->ts0.mag_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.min_filter = MAPFILTER_LINEAR;      /* LINEAR */    ts->ts0.lod_bias = 0;    ts->ts0.shadow_enable = 0;    ts->ts0.max_anisotropy = ANISORATIO_2;    ts->ts0.shadow_function = PREFILTEROP_ALWAYS;    ts->ts1.min_lod = 0;        /* Maximum Mip Level */    ts->ts1.kill_pixel = 0;    ts->ts1.keyed_texture_filter = 0;    ts->ts1.chromakey_enable = 0;    ts->ts1.tcx_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcy_control = TEXCOORDMODE_CLAMP;    ts->ts1.tcz_control = TEXCOORDMODE_CLAMP;    ts->ts1.normalized_coor = 0;    ts->ts1.map_index = 2;    ts->ts1.east_deinterlacer = 0;    ts->ts2.default_color = 0;}#endif#if 0static void i915_yuv2rgb_static_indirect_state_buffer(XvMCSurface *surface,                                                      unsigned int dstaddr,                                                      int dstpitch){    struct i915_3dstate_buffer_info *buffer_info;    struct i915_3dstate_dest_buffer_variables *dest_buffer_variables;    i915XvMCSurface *privSurface = (i915XvMCSurface *)surface->privData;    i915XvMCContext *pI915XvMC = (i915XvMCContext *)privSurface->privContext;    /* 3DSTATE_BUFFER_INFO */    buffer_info = (struct i915_3dstate_buffer_info *)pI915XvMC->sis.map;    memset(buffer_info, 0, sizeof(*buffer_info));    buffer_info->dw0.type = CMD_3D;    buffer_info->dw0.opcode = OPC_3DSTATE_BUFFER_INFO;    buffer_info->dw0.length = 1;    buffer_info->dw1.aux_id = 0;    buffer_info->dw1.buffer_id = BUFFERID_COLOR_BACK;    buffer_info->dw1.fence_regs = 1;    buffer_info->dw1.tiled_surface = 0;   /* linear */    buffer_info->dw1.walk = TILEWALK_XMAJOR;    buffer_info->dw1.pitch = dstpitch;    buffer_info->dw2.base_address = dstaddr;    /* 3DSTATE_DEST_BUFFER_VARIABLES */    dest_buffer_variables = (struct i915_3dstate_dest_buffer_variables *)(++buffer_info);    memset(dest_buffer_variables, 0, sizeof(*dest_buffer_variables));    dest_buffer_variables->dw0.type = CMD_3D;    dest_buffer_variables->dw0.opcode = OPC_3DSTATE_DEST_BUFFER_VARIABLES;    dest_buffer_variables->dw0.length = 0;    dest_buffer_variables->dw1.dest_v_bias = 8; /* FIXME 0x1000 .5 ??? */    dest_buffer_variables->dw1.dest_h_bias = 8;    dest_buffer_variables->dw1.color_fmt = COLORBUFFER_A8R8G8B8;  /* FIXME */}#endif#if 0static void i915_yuv2rgb_pixel_shader_program_buffer(XvMCSurface *surface){    struct i915_3dstate_pixel_shader_program *pixel_shader_program;    i915XvMCSurface *privSurface = (i915XvMCSurface *)surface->privData;    i915XvMCContext *pI915XvMC = (i915XvMCContext *)privSurface->privContext;    unsigned int *inst;    unsigned int dest, src0, src1;    /* Shader 0 */    pixel_shader_program = (struct i915_3dstate_pixel_shader_program *)pI915XvMC->psp.map;    memset(pixel_shader_program, 0, sizeof(*pixel_shader_program));    pixel_shader_program->dw0.type = CMD_3D;    pixel_shader_program->dw0.opcode = OPC_3DSTATE_PIXEL_SHADER_PROGRAM;    pixel_shader_program->dw0.retain = 0;    pixel_shader_program->dw0.length = 23;    /* dcl      t0.xy */    inst = (unsigned int*)(++pixel_shader_program);    i915_inst_decl(inst, REG_TYPE_T, T_TEX0, D0_CHANNEL_XY);    /* dcl         t1.xy */    inst += 3;    i915_inst_decl(inst, REG_TYPE_T, T_TEX1, D0_CHANNEL_XY);    /* dcl_2D   s0 */    inst += 3;    i915_inst_decl(inst, REG_TYPE_S, 0, D0_SAMPLE_TYPE_2D);    /* dcl_2D   s1 */    inst += 3;    i915_inst_decl(inst, REG_TYPE_S, 1, D0_SAMPLE_TYPE_2D);    /* dcl_2D   s2 */    inst += 3;    i915_inst_decl(inst, REG_TYPE_S, 2, D0_SAMPLE_TYPE_2D);    /* texld    r0 t1 s0 */    inst += 3;    dest = UREG(REG_TYPE_R, 0);    src0 = UREG(REG_TYPE_T, 1); /* COORD */    src1 = UREG(REG_TYPE_S, 0); /* SAMPLER */    i915_inst_texld(inst, T0_TEXLD, dest, src0, src1);    /* texld    r0 t0 s1 */    inst += 3;    dest = UREG(REG_TYPE_R, 0);    src0 = UREG(REG_TYPE_T, 0); /* COORD */    src1 = UREG(REG_TYPE_S, 1); /* SAMPLER */    i915_inst_texld(inst, T0_TEXLD, dest, src0, src1);    /* texld    oC t1 s2 */    inst += 3;    dest = UREG(REG_TYPE_OC, 0);    src0 = UREG(REG_TYPE_T, 1); /* COORD */    src1 = UREG(REG_TYPE_S, 2); /* SAMPLER */    i915_inst_texld(inst, T0_TEXLD, dest, src0, src1);}#endif#if 0static void i915_yuv2rgb_proc(XvMCSurface *surface){    i915XvMCSurface *privSurface = (i915XvMCSurface *)surface->privData;    i915XvMCContext *pI915XvMC = (i915XvMCContext *)privSurface->privContext;    struct i915_3dstate_load_state_immediate_1 *load_state_immediate_1 = NULL;    struct s2_dword *s2 = NULL;    struct s3_dword *s3 = NULL;    struct s4_dword *s4 = NULL;    struct s5_dword *s5 = NULL;    struct s6_dword *s6 = NULL;    struct s7_dword *s7 = NULL;    struct i915_3dstate_scissor_rectangle scissor_rectangle;    struct i915_3dstate_load_indirect *load_indirect = NULL;    sis_state *sis = NULL;    ssb_state *ssb = NULL;    msb_state *msb = NULL;    psp_state *psp = NULL;    struct i915_3dprimitive *_3dprimitive = NULL;    struct vertex_data *vd = NULL;    unsigned int size;    void *base = NULL;    /* 3DSTATE_LOAD_STATE_IMMEDIATE_1 */    size = sizeof(*load_state_immediate_1) + sizeof(*s2) + sizeof(*s3) +        sizeof(*s4) + sizeof(*s5) + sizeof(*s6) + sizeof(*s7);    base = calloc(1, size);    load_state_immediate_1 = (struct i915_3dstate_load_state_immediate_1 *)base;    load_state_immediate_1->dw0.type = CMD_3D;    load_state_immediate_1->dw0.opcode = OPC_3DSTATE_LOAD_STATE_IMMEDIATE_1;    load_state_immediate_1->dw0.load_s2 = 1;    load_state_immediate_1->dw0.load_s3 = 1;    load_state_immediate_1->dw0.load_s4 = 1;    load_state_immediate_1->dw0.load_s5 = 1;    load_state_immediate_1->dw0.load_s6 = 1;    load_state_immediate_1->dw0.load_s7 = 1;    load_state_immediate_1->dw0.length = 5;    s2 = (struct s2_dword *)(++load_state_immediate_1);    s2->set0_texcoord_fmt = TEXCOORDFMT_2FP;    s2->set1_texcoord_fmt = TEXCOORDFMT_2FP;    s2->set2_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s2->set3_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s2->set4_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s2->set5_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s2->set6_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s2->set7_texcoord_fmt = TEXCOORDFMT_NOT_PRESENT;    s3 = (struct s3_dword *)(++s2);    s4 = (struct s4_dword *)(++s3);    s4->position_mask = VERTEXHAS_XY;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -