Lines Matching refs:media_state

165 struct media_state {
173 struct media_state media_state;
175 static int free_object(struct media_state *s)
189 static int alloc_object(struct media_state *s)
212 free_object(&media_state);
299 static void media_state_pointers(struct media_state *media_state)
305 OUT_RELOC(media_state->vfe_state.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, 0);
311 static Status setup_media_surface(struct media_state *media_state,
324 if (media_state->binding_table.surface_states[surface_num].bo)
325 drm_intel_bo_unreference(media_state->binding_table.surface_states[surface_num].bo);
326 media_state->binding_table.surface_states[surface_num].bo =
329 if (!media_state->binding_table.surface_states[surface_num].bo)
333 media_state->binding_table.surface_states[surface_num].bo,
336 drm_intel_bo_emit_reloc(media_state->binding_table.surface_states[surface_num].bo,
345 static Status setup_surfaces(struct media_state *media_state,
350 ret = setup_media_surface(media_state, 0, dst_bo, 0, w, h, TRUE);
353 ret = setup_media_surface(media_state, 1, dst_bo, w*h, w/2, h/2, TRUE);
356 ret = setup_media_surface(media_state, 2, dst_bo, w*h + w*h/4, w/2, h/2, TRUE);
360 ret = setup_media_surface(media_state, 4, past_bo, 0, w, h, FALSE);
363 ret = setup_media_surface(media_state, 5, past_bo, w*h, w/2, h/2, FALSE);
366 ret = setup_media_surface(media_state, 6, past_bo, w*h + w*h/4, w/2, h/2, FALSE);
371 ret = setup_media_surface(media_state, 7, future_bo, 0, w, h, FALSE);
374 ret = setup_media_surface(media_state, 8, future_bo, w*h, w/2, h/2, FALSE);
377 ret = setup_media_surface(media_state, 9, future_bo, w*h + w*h/4, w/2, h/2, FALSE);
387 static Status setup_blocks(struct media_state *media_state, unsigned int block_size)
402 ss.ss1.base_addr = media_state->indirect_data.bo->offset;
410 if (media_state->binding_table.surface_states[3].bo)
411 drm_intel_bo_unreference(media_state->binding_table.surface_states[3].bo);
413 media_state->binding_table.surface_states[3].bo =
416 if (!media_state->binding_table.surface_states[3].bo)
419 drm_intel_bo_subdata(media_state->binding_table.surface_states[3].bo, 0,
422 drm_intel_bo_emit_reloc(media_state->binding_table.surface_states[3].bo,
424 media_state->indirect_data.bo, 0,
444 static void pipeline_select(struct media_state *media_state)
448 if (media_state->is_g4x)
462 if (media_state.is_965_q) {
467 OUT_RELOC(media_state.indirect_data.bo, I915_GEM_DOMAIN_INSTRUCTION, 0, offset);
472 OUT_RELOC(media_state.indirect_data.bo, //g1.8
487 if (media_state.is_965_q)
494 static Status binding_tables(struct media_state *media_state)
499 if (media_state->binding_table.bo)
500 drm_intel_bo_unreference(media_state->binding_table.bo);
501 media_state->binding_table.bo =
504 if (!media_state->binding_table.bo)
508 binding_table[i] = media_state->binding_table.surface_states[i].bo->offset;
509 drm_intel_bo_subdata(media_state->binding_table.bo, 0, sizeof(binding_table),
513 drm_intel_bo_emit_reloc(media_state->binding_table.bo,
515 media_state->binding_table.surface_states[i].bo, 0,
520 static int media_kernels(struct media_state *media_state)
525 if (media_state->is_g4x) {
534 media_state->vfe_state.interface.kernels[i].bo =
537 if (!media_state->vfe_state.interface.kernels[i].bo)
542 dri_bo *bo = media_state->vfe_state.interface.kernels[i].bo;
547 free_object(media_state);
551 static void setup_interface(struct media_state *media_state,
559 media_state->vfe_state.interface.kernels[i].bo->offset >> 6;
567 desc.desc3.binding_table_pointer = media_state->binding_table.bo->offset >> 5;
569 drm_intel_bo_subdata(media_state->vfe_state.interface.bo, i*sizeof(desc),
573 media_state->vfe_state.interface.bo,
576 media_state->vfe_state.interface.kernels[i].bo,
581 media_state->vfe_state.interface.bo,
584 media_state->binding_table.bo,
589 static Status interface_descriptor(struct media_state *media_state)
591 if (media_state->vfe_state.interface.bo)
592 drm_intel_bo_unreference(media_state->vfe_state.interface.bo);
593 media_state->vfe_state.interface.bo = drm_intel_bo_alloc(xvmc_driver->bufmgr,
596 if (!media_state->vfe_state.interface.bo)
599 setup_interface(media_state, INTRA_INTERFACE);
600 setup_interface(media_state, NULL_INTERFACE);
601 setup_interface(media_state, FORWARD_INTERFACE);
602 setup_interface(media_state, FIELD_FORWARD_INTERFACE);
603 setup_interface(media_state, BACKWARD_INTERFACE);
604 setup_interface(media_state, FIELD_BACKWARD_INTERFACE);
605 setup_interface(media_state, F_B_INTERFACE);
606 setup_interface(media_state, FIELD_F_B_INTERFACE);
607 setup_interface(media_state, DUAL_PRIME_INTERFACE);
611 static Status vfe_state(struct media_state *media_state)
624 media_state->vfe_state.interface.bo->offset >> 4;
626 if (media_state->vfe_state.bo)
627 drm_intel_bo_unreference(media_state->vfe_state.bo);
628 media_state->vfe_state.bo = drm_intel_bo_alloc(xvmc_driver->bufmgr,
630 if (!media_state->vfe_state.bo)
633 drm_intel_bo_subdata(media_state->vfe_state.bo, 0, sizeof(state), &state);
635 drm_intel_bo_emit_reloc(media_state->vfe_state.bo,
637 media_state->vfe_state.interface.bo, 0,
673 if (media_state.indirect_data.bo) {
675 drm_intel_gem_bo_unmap_gtt(media_state.indirect_data.bo);
677 drm_intel_bo_unmap(media_state.indirect_data.bo);
679 drm_intel_bo_unreference(media_state.indirect_data.bo);
681 media_state.indirect_data.bo = drm_intel_bo_alloc(xvmc_driver->bufmgr,
683 if (!media_state.indirect_data.bo)
685 setup_surfaces(&media_state,
690 setup_blocks(&media_state, 128*6*num_macroblocks);
691 binding_tables(&media_state);
692 interface_descriptor(&media_state);
693 vfe_state(&media_state);
696 drm_intel_gem_bo_map_gtt(media_state.indirect_data.bo);
698 drm_intel_bo_map(media_state.indirect_data.bo, 1);
700 block_ptr = media_state.indirect_data.bo->virtual;
747 pipeline_select(&media_state);
749 media_state_pointers(&media_state);
823 media_state.is_g4x = i965_ctx->is_g4x;
824 media_state.is_965_q = i965_ctx->is_965_q;
826 if (alloc_object(&media_state))
828 if (media_kernels(&media_state))