📄 i915_xvmc.c
字号:
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 + -