summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/gen6_mfc.c4
-rwxr-xr-xsrc/gen6_mfd.c2
-rw-r--r--src/gen75_mfc.c13
-rw-r--r--src/gen75_mfd.c2
-rw-r--r--src/gen75_vpp_vebox.c2
-rwxr-xr-xsrc/gen7_mfd.c2
-rwxr-xr-xsrc/i965_drv_video.c2
-rw-r--r--src/i965_encoder.c6
-rw-r--r--src/i965_media.c4
-rwxr-xr-xsrc/i965_post_processing.c2
-rw-r--r--src/intel_batchbuffer.c21
-rw-r--r--src/intel_batchbuffer.h2
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);