diff options
-rw-r--r-- | src/gen6_mfc.c | 4 | ||||
-rwxr-xr-x | src/gen6_mfd.c | 2 | ||||
-rw-r--r-- | src/gen75_mfc.c | 13 | ||||
-rw-r--r-- | src/gen75_mfd.c | 2 | ||||
-rw-r--r-- | src/gen75_vpp_vebox.c | 2 | ||||
-rwxr-xr-x | src/gen7_mfd.c | 2 | ||||
-rwxr-xr-x | src/i965_drv_video.c | 2 | ||||
-rw-r--r-- | src/i965_encoder.c | 6 | ||||
-rw-r--r-- | src/i965_media.c | 4 | ||||
-rwxr-xr-x | src/i965_post_processing.c | 2 | ||||
-rw-r--r-- | src/intel_batchbuffer.c | 21 | ||||
-rw-r--r-- | src/intel_batchbuffer.h | 2 |
12 files changed, 40 insertions, 22 deletions
diff --git a/src/gen6_mfc.c b/src/gen6_mfc.c index 8d96f6c..22eec1e 100644 --- a/src/gen6_mfc.c +++ b/src/gen6_mfc.c @@ -614,7 +614,7 @@ static void gen6_mfc_init(VADriverContextP ctx, if (mfc_context->aux_batchbuffer) intel_batchbuffer_free(mfc_context->aux_batchbuffer); - mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD); + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, 0); mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); mfc_context->aux_batchbuffer_surface.pitch = 16; @@ -873,7 +873,7 @@ gen6_mfc_avc_software_batchbuffer(VADriverContextP ctx, struct intel_encoder_context *encoder_context) { struct i965_driver_data *i965 = i965_driver_data(ctx); - struct intel_batchbuffer *batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD); + struct intel_batchbuffer *batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, 0); dri_bo *batch_bo = batch->buffer; int i; diff --git a/src/gen6_mfd.c b/src/gen6_mfd.c index 0811226..6a39ff1 100755 --- a/src/gen6_mfd.c +++ b/src/gen6_mfd.c @@ -2044,7 +2044,7 @@ gen6_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) gen6_mfd_context->base.destroy = gen6_mfd_context_destroy; gen6_mfd_context->base.run = gen6_mfd_decode_picture; - gen6_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + gen6_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); for (i = 0; i < ARRAY_ELEMS(gen6_mfd_context->reference_surface); i++) { gen6_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; diff --git a/src/gen75_mfc.c b/src/gen75_mfc.c index 272a324..171e5c4 100644 --- a/src/gen75_mfc.c +++ b/src/gen75_mfc.c @@ -487,7 +487,7 @@ static void gen75_mfc_init(VADriverContextP ctx, if (mfc_context->aux_batchbuffer) intel_batchbuffer_free(mfc_context->aux_batchbuffer); - mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD); + mfc_context->aux_batchbuffer = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, 0); mfc_context->aux_batchbuffer_surface.bo = mfc_context->aux_batchbuffer->buffer; dri_bo_reference(mfc_context->aux_batchbuffer_surface.bo); mfc_context->aux_batchbuffer_surface.pitch = 16; @@ -1220,10 +1220,17 @@ gen75_mfc_avc_software_batchbuffer(VADriverContextP ctx, struct intel_encoder_context *encoder_context) { struct i965_driver_data *i965 = i965_driver_data(ctx); - struct intel_batchbuffer *batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD); - dri_bo *batch_bo = batch->buffer; + struct intel_batchbuffer *batch; + dri_bo *batch_bo; int i; + int buffer_size; + VAEncSequenceParameterBufferH264 *pSequenceParameter = (VAEncSequenceParameterBufferH264 *)encode_state->seq_param_ext->buffer; + int width_in_mbs = pSequenceParameter->picture_width_in_mbs; + int height_in_mbs = pSequenceParameter->picture_height_in_mbs; + buffer_size = width_in_mbs * height_in_mbs * 64; + batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_BSD, buffer_size); + batch_bo = batch->buffer; for (i = 0; i < encode_state->num_slice_params_ext; i++) { gen75_mfc_avc_pipeline_slice_programing(ctx, encode_state, encoder_context, i, batch); } diff --git a/src/gen75_mfd.c b/src/gen75_mfd.c index 4d63c83..a0aa960 100644 --- a/src/gen75_mfd.c +++ b/src/gen75_mfd.c @@ -3399,7 +3399,7 @@ gen75_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config gen7_mfd_context->base.destroy = gen75_mfd_context_destroy; gen7_mfd_context->base.run = gen75_mfd_decode_picture; - gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; diff --git a/src/gen75_vpp_vebox.c b/src/gen75_vpp_vebox.c index 692ccbb..a6b61fd 100644 --- a/src/gen75_vpp_vebox.c +++ b/src/gen75_vpp_vebox.c @@ -1235,7 +1235,7 @@ struct intel_vebox_context * gen75_vebox_context_init(VADriverContextP ctx) struct intel_driver_data *intel = intel_driver_data(ctx); struct intel_vebox_context *proc_context = calloc(1, sizeof(struct intel_vebox_context)); - proc_context->batch = intel_batchbuffer_new(intel, I915_EXEC_VEBOX); + proc_context->batch = intel_batchbuffer_new(intel, I915_EXEC_VEBOX, 0); memset(proc_context->frame_store, 0, sizeof(VEBFrameStore)*FRAME_STORE_SUM); proc_context->filters_mask = 0; diff --git a/src/gen7_mfd.c b/src/gen7_mfd.c index 1515e2a..e4dfbb2 100755 --- a/src/gen7_mfd.c +++ b/src/gen7_mfd.c @@ -2832,7 +2832,7 @@ gen7_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) gen7_mfd_context->base.destroy = gen7_mfd_context_destroy; gen7_mfd_context->base.run = gen7_mfd_decode_picture; - gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + gen7_mfd_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); for (i = 0; i < ARRAY_ELEMS(gen7_mfd_context->reference_surface); i++) { gen7_mfd_context->reference_surface[i].surface_id = VA_INVALID_ID; diff --git a/src/i965_drv_video.c b/src/i965_drv_video.c index 16f0343..37707e8 100755 --- a/src/i965_drv_video.c +++ b/src/i965_drv_video.c @@ -2122,7 +2122,7 @@ i965_Init(VADriverContextP ctx) else return VA_STATUS_ERROR_UNKNOWN; - i965->batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_RENDER); + i965->batch = intel_batchbuffer_new(&i965->intel, I915_EXEC_RENDER, 0); if (!i965_display_attributes_init(ctx)) return VA_STATUS_ERROR_UNKNOWN; diff --git a/src/i965_encoder.c b/src/i965_encoder.c index b37915b..d71a59c 100644 --- a/src/i965_encoder.c +++ b/src/i965_encoder.c @@ -161,7 +161,7 @@ gen6_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) encoder_context->base.destroy = intel_encoder_context_destroy; encoder_context->base.run = intel_encoder_end_picture; - encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); encoder_context->rate_control_mode = VA_RC_NONE; for (i = 0; i < obj_config->num_attribs; i++) { @@ -193,7 +193,7 @@ gen7_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) encoder_context->base.destroy = intel_encoder_context_destroy; encoder_context->base.run = intel_encoder_end_picture; - encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); encoder_context->input_yuv_surface = VA_INVALID_SURFACE; encoder_context->is_tmp_id = 0; encoder_context->rate_control_mode = VA_RC_NONE; @@ -227,7 +227,7 @@ gen75_enc_hw_context_init(VADriverContextP ctx, struct object_config *obj_config encoder_context->base.destroy = intel_encoder_context_destroy; encoder_context->base.run = intel_encoder_end_picture; - encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + encoder_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); encoder_context->input_yuv_surface = VA_INVALID_SURFACE; encoder_context->is_tmp_id = 0; encoder_context->rate_control_mode = VA_RC_NONE; diff --git a/src/i965_media.c b/src/i965_media.c index 2b940c7..d1764c0 100644 --- a/src/i965_media.c +++ b/src/i965_media.c @@ -328,7 +328,7 @@ g4x_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_config) media_context->base.destroy = i965_media_context_destroy; media_context->base.run = i965_media_decode_picture; - media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); switch (obj_config->profile) { case VAProfileMPEG2Simple: @@ -358,7 +358,7 @@ ironlake_dec_hw_context_init(VADriverContextP ctx, struct object_config *obj_con media_context->base.destroy = i965_media_context_destroy; media_context->base.run = i965_media_decode_picture; - media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + media_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); switch (obj_config->profile) { case VAProfileMPEG2Simple: diff --git a/src/i965_post_processing.c b/src/i965_post_processing.c index d6c99ad..7c77494 100755 --- a/src/i965_post_processing.c +++ b/src/i965_post_processing.c @@ -5128,7 +5128,7 @@ i965_proc_context_init(VADriverContextP ctx, struct object_config *obj_config) proc_context->base.destroy = i965_proc_context_destroy; proc_context->base.run = i965_proc_picture; - proc_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER); + proc_context->base.batch = intel_batchbuffer_new(intel, I915_EXEC_RENDER, 0); i965_post_processing_context_init(ctx, &proc_context->pp_context, proc_context->base.batch); return (struct hw_context *)proc_context; diff --git a/src/intel_batchbuffer.c b/src/intel_batchbuffer.c index 6ae1a35..94d968c 100644 --- a/src/intel_batchbuffer.c +++ b/src/intel_batchbuffer.c @@ -31,11 +31,13 @@ #include "intel_batchbuffer.h" +#define MAX_BATCH_SIZE 0x400000 + static void -intel_batchbuffer_reset(struct intel_batchbuffer *batch) +intel_batchbuffer_reset(struct intel_batchbuffer *batch, int buffer_size) { struct intel_driver_data *intel = batch->intel; - int batch_size = BATCH_SIZE; + int batch_size = buffer_size; assert(batch->flag == I915_EXEC_RENDER || batch->flag == I915_EXEC_BLT || @@ -64,7 +66,7 @@ intel_batchbuffer_space(struct intel_batchbuffer *batch) struct intel_batchbuffer * -intel_batchbuffer_new(struct intel_driver_data *intel, int flag) +intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int buffer_size) { struct intel_batchbuffer *batch = calloc(1, sizeof(*batch)); assert(flag == I915_EXEC_RENDER || @@ -72,10 +74,19 @@ intel_batchbuffer_new(struct intel_driver_data *intel, int flag) flag == I915_EXEC_BLT || flag == I915_EXEC_VEBOX); + if (!buffer_size || buffer_size < BATCH_SIZE) { + buffer_size = BATCH_SIZE; + } + + /* the buffer size can't exceed 4M */ + if (buffer_size > MAX_BATCH_SIZE) { + buffer_size = MAX_BATCH_SIZE; + } + batch->intel = intel; batch->flag = flag; batch->run = drm_intel_bo_mrb_exec; - intel_batchbuffer_reset(batch); + intel_batchbuffer_reset(batch, buffer_size); return batch; } @@ -110,7 +121,7 @@ intel_batchbuffer_flush(struct intel_batchbuffer *batch) dri_bo_unmap(batch->buffer); used = batch->ptr - batch->map; batch->run(batch->buffer, used, 0, 0, 0, batch->flag); - intel_batchbuffer_reset(batch); + intel_batchbuffer_reset(batch, batch->size); } void diff --git a/src/intel_batchbuffer.h b/src/intel_batchbuffer.h index 25d817b..825aded 100644 --- a/src/intel_batchbuffer.h +++ b/src/intel_batchbuffer.h @@ -26,7 +26,7 @@ struct intel_batchbuffer int DR4, unsigned int ring_flag); }; -struct intel_batchbuffer *intel_batchbuffer_new(struct intel_driver_data *intel, int flag); +struct intel_batchbuffer *intel_batchbuffer_new(struct intel_driver_data *intel, int flag, int buffer_size); void intel_batchbuffer_free(struct intel_batchbuffer *batch); void intel_batchbuffer_start_atomic(struct intel_batchbuffer *batch, unsigned int size); void intel_batchbuffer_start_atomic_bcs(struct intel_batchbuffer *batch, unsigned int size); |