This patch delete idrt_size and use (idrt.max_entries * idrt.entry_size) instead.
idrt.bo is always set even if the interface descriptor remapping table is a part of
the dynamic state buffer, hence we can use the corresponding settings no matter this
table is a part of the dynamic state buffer or not.
Signed-off-by: Xiang, Haihao <haihao.xiang@intel.com>
Reviewed-by: Zhao Yakui <yakui.zhao@intel.com>
struct vpp_gpe_context *vpp_gpe_ctx)
{
struct gen8_interface_descriptor_data *desc;
- dri_bo *bo = vpp_gpe_ctx->gpe_ctx.dynamic_state.bo;
+ dri_bo *bo = vpp_gpe_ctx->gpe_ctx.idrt.bo;
int i;
dri_bo_map(bo, 1);
assert(bo->virtual);
desc = (struct gen8_interface_descriptor_data *)(bo->virtual
- + vpp_gpe_ctx->gpe_ctx.idrt_offset);
+ + vpp_gpe_ctx->gpe_ctx.idrt.offset);
/*Setup the descritor table*/
for (i = 0; i < vpp_gpe_ctx->sub_shader_sum; i++){
gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH;
gpe_ctx->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
- gpe_ctx->idrt.entry_size = sizeof(struct gen6_interface_descriptor_data);
+ gpe_ctx->idrt.entry_size = ALIGN(sizeof(struct gen6_interface_descriptor_data), 64);
} else if (IS_GEN8(i965->intel.device_info) ||
IS_GEN9(i965->intel.device_info)) {
(SURFACE_STATE_PADDED_SIZE_GEN8 + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
gpe_ctx->curbe.length = CURBE_TOTAL_DATA_LENGTH;
- gpe_ctx->idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
-
+ gpe_ctx->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ gpe_ctx->idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
}
return vpp_gpe_ctx;
dri_bo *bo;
unsigned char *desc_ptr;
- bo = mfc_context->gpe_context.dynamic_state.bo;
+ bo = mfc_context->gpe_context.idrt.bo;
dri_bo_map(bo, 1);
assert(bo->virtual);
- desc_ptr = (unsigned char *)bo->virtual + mfc_context->gpe_context.idrt_offset;
+ desc_ptr = (unsigned char *)bo->virtual + mfc_context->gpe_context.idrt.offset;
desc = (struct gen8_interface_descriptor_data *)desc_ptr;
assert(mfc_context);
mfc_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
- mfc_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
+ mfc_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ mfc_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
mfc_context->gpe_context.curbe.length = 32 * 4;
mfc_context->gpe_context.sampler_size = 0;
dri_bo *bo;
unsigned char *desc_ptr;
- bo = vme_context->gpe_context.dynamic_state.bo;
+ bo = vme_context->gpe_context.idrt.bo;
dri_bo_map(bo, 1);
assert(bo->virtual);
- desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset;
+ desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt.offset;
desc = (struct gen8_interface_descriptor_data *)desc_ptr;
vme_context->vme_kernel_sum = i965_kernel_num;
vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
- vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
+ vme_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
+
vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH;
vme_context->gpe_context.sampler_size = 0;
scaling_kernel.bin = pp_10bit_scaling_gen9;
scaling_kernel.size = sizeof(pp_10bit_scaling_gen9);
gen8_gpe_load_kernels(ctx, gpe_context, &scaling_kernel, 1);
- gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ gpe_context->idrt.max_entries = 1;
gpe_context->sampler_size = ALIGN(sizeof(struct gen8_sampler_state), 64);
gpe_context->curbe.length = ALIGN(sizeof(struct scaling_input_parameter), 64);
dri_bo *bo;
unsigned char *desc_ptr;
- bo = vme_context->gpe_context.dynamic_state.bo;
+ bo = vme_context->gpe_context.idrt.bo;
dri_bo_map(bo, 1);
assert(bo->virtual);
- desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt_offset;
+ desc_ptr = (unsigned char *)bo->virtual + vme_context->gpe_context.idrt.offset;
desc = (struct gen8_interface_descriptor_data *)desc_ptr;
vme_context->vme_kernel_sum = i965_kernel_num;
vme_context->gpe_context.surface_state_binding_table.length = (SURFACE_STATE_PADDED_SIZE + sizeof(unsigned int)) * MAX_MEDIA_SURFACES_GEN6;
- vme_context->gpe_context.idrt_size = sizeof(struct gen8_interface_descriptor_data) * MAX_INTERFACE_DESC_GEN6;
+ vme_context->gpe_context.idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64);
+ vme_context->gpe_context.idrt.max_entries = MAX_INTERFACE_DESC_GEN6;
vme_context->gpe_context.curbe.length = CURBE_TOTAL_DATA_LENGTH;
vme_context->gpe_context.sampler_size = 0;
gpe_context->idrt.entry_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64); // 8 dws, 1 register
gpe_context->idrt.max_entries = NUM_KERNELS_PER_GPE_CONTEXT;
- gpe_context->idrt_size = ALIGN(sizeof(struct gen8_interface_descriptor_data), 64) *
- NUM_KERNELS_PER_GPE_CONTEXT;
gpe_context->surface_state_binding_table.max_entries = MAX_VP9_ENCODER_SURFACES;
gpe_context->surface_state_binding_table.binding_table_offset = 0;
OUT_BATCH(batch, CMD_MEDIA_INTERFACE_LOAD | (4 - 2));
OUT_BATCH(batch, 0);
- OUT_BATCH(batch, gpe_context->idrt_size);
- OUT_BATCH(batch, gpe_context->idrt_offset);
+ OUT_BATCH(batch, gpe_context->idrt.max_entries * gpe_context->idrt.entry_size);
+ OUT_BATCH(batch, gpe_context->idrt.offset);
ADVANCE_BATCH(batch);
}
assert(bo);
gpe_context->surface_state_binding_table.bo = bo;
- bo_size = gpe_context->idrt_size + gpe_context->curbe.length + gpe_context->sampler_size + 192;
+ bo_size = gpe_context->idrt.max_entries * gpe_context->idrt.entry_size + gpe_context->curbe.length + gpe_context->sampler_size + 192;
dri_bo_unreference(gpe_context->dynamic_state.bo);
bo = dri_bo_alloc(i965->intel.bufmgr,
"surface state & binding table",
/* Interface descriptor offset */
start_offset = ALIGN(end_offset, 64);
- gpe_context->idrt_offset = start_offset;
- end_offset = start_offset + gpe_context->idrt_size;
+ dri_bo_unreference(gpe_context->idrt.bo);
+ gpe_context->idrt.bo = bo;
+ dri_bo_reference(gpe_context->idrt.bo);
+ gpe_context->idrt.offset = start_offset;
+ end_offset = start_offset + gpe_context->idrt.entry_size * gpe_context->idrt.max_entries;
/* Sampler state offset */
start_offset = ALIGN(end_offset, 64);
dri_bo_unreference(gpe_context->curbe.bo);
gpe_context->curbe.bo = NULL;
+
+ dri_bo_unreference(gpe_context->idrt.bo);
+ gpe_context->idrt.bo = NULL;
}
dri_bo_reference(gpe_context->curbe.bo);
gpe_context->curbe.offset = ds->curbe_offset;
- gpe_context->idrt_offset = ds->idrt_offset;
+ /* idrt buffer is a part of the dynamic buffer */
+ dri_bo_unreference(gpe_context->idrt.bo);
+ gpe_context->idrt.bo = ds->bo;
+ dri_bo_reference(gpe_context->idrt.bo);
+ gpe_context->idrt.offset = ds->idrt_offset;
+
gpe_context->sampler_offset = ds->sampler_offset;
return;
dri_bo *bo;
unsigned char *desc_ptr;
- bo = gpe_context->dynamic_state.bo;
+ bo = gpe_context->idrt.bo;
dri_bo_map(bo, 1);
assert(bo->virtual);
- desc_ptr = (unsigned char *)bo->virtual + gpe_context->idrt_offset;
+ desc_ptr = (unsigned char *)bo->virtual + gpe_context->idrt.offset;
desc = (struct gen8_interface_descriptor_data *)desc_ptr;
for (i = 0; i < gpe_context->num_kernels; i++) {
dri_bo *bo;
unsigned int max_entries;
unsigned int entry_size; /* in bytes */
+ unsigned int offset;
} idrt;
struct {
unsigned int sampler_offset;
int sampler_entries;
int sampler_size;
- unsigned int idrt_offset;
- int idrt_size;
};
struct gpe_mi_flush_dw_parameter