diff options
author | Jason Ekstrand <[email protected]> | 2016-10-21 17:15:49 -0700 |
---|---|---|
committer | Jason Ekstrand <[email protected]> | 2016-11-16 10:11:29 -0800 |
commit | 0aea29cc1ce0c97e1cffb6aaff78c7dd754b8191 (patch) | |
tree | 17225501666d1e4eb7637bf9ccc9bf41a891a772 /src/intel/blorp | |
parent | f7f768d19506dc9e480531ce41d03dba9b4fc792 (diff) |
intel/blorp: Add capability to use pre-baked binding tables
When a pre-baked binding table is requested, no binding table is created,
instead the binding table offset (relative to surface state base address)
provided by the user is used verbatim.
Signed-off-by: Jason Ekstrand <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
Diffstat (limited to 'src/intel/blorp')
-rw-r--r-- | src/intel/blorp/blorp_genX_exec.h | 44 | ||||
-rw-r--r-- | src/intel/blorp/blorp_priv.h | 3 |
2 files changed, 27 insertions, 20 deletions
diff --git a/src/intel/blorp/blorp_genX_exec.h b/src/intel/blorp/blorp_genX_exec.h index d278c1f58b4..66906fabbcc 100644 --- a/src/intel/blorp/blorp_genX_exec.h +++ b/src/intel/blorp/blorp_genX_exec.h @@ -1108,28 +1108,32 @@ blorp_emit_surface_states(struct blorp_batch *batch, uint32_t bind_offset, surface_offsets[2]; void *surface_maps[2]; - unsigned num_surfaces = 1 + params->src.enabled; - blorp_alloc_binding_table(batch, num_surfaces, - isl_dev->ss.size, isl_dev->ss.align, - &bind_offset, surface_offsets, surface_maps); - - if (params->dst.enabled) { - blorp_emit_surface_state(batch, ¶ms->dst, - surface_maps[BLORP_RENDERBUFFER_BT_INDEX], - surface_offsets[BLORP_RENDERBUFFER_BT_INDEX], - true); + if (params->use_pre_baked_binding_table) { + bind_offset = params->pre_baked_binding_table_offset; } else { - assert(params->depth.enabled || params->stencil.enabled); - const struct brw_blorp_surface_info *surface = - params->depth.enabled ? ¶ms->depth : ¶ms->stencil; - blorp_emit_null_surface_state(batch, surface, - surface_maps[BLORP_RENDERBUFFER_BT_INDEX]); - } + unsigned num_surfaces = 1 + params->src.enabled; + blorp_alloc_binding_table(batch, num_surfaces, + isl_dev->ss.size, isl_dev->ss.align, + &bind_offset, surface_offsets, surface_maps); + + if (params->dst.enabled) { + blorp_emit_surface_state(batch, ¶ms->dst, + surface_maps[BLORP_RENDERBUFFER_BT_INDEX], + surface_offsets[BLORP_RENDERBUFFER_BT_INDEX], + true); + } else { + assert(params->depth.enabled || params->stencil.enabled); + const struct brw_blorp_surface_info *surface = + params->depth.enabled ? ¶ms->depth : ¶ms->stencil; + blorp_emit_null_surface_state(batch, surface, + surface_maps[BLORP_RENDERBUFFER_BT_INDEX]); + } - if (params->src.enabled) { - blorp_emit_surface_state(batch, ¶ms->src, - surface_maps[BLORP_TEXTURE_BT_INDEX], - surface_offsets[BLORP_TEXTURE_BT_INDEX], false); + if (params->src.enabled) { + blorp_emit_surface_state(batch, ¶ms->src, + surface_maps[BLORP_TEXTURE_BT_INDEX], + surface_offsets[BLORP_TEXTURE_BT_INDEX], false); + } } #if GEN_GEN >= 7 diff --git a/src/intel/blorp/blorp_priv.h b/src/intel/blorp/blorp_priv.h index b69babc0bab..3d64fff3f2e 100644 --- a/src/intel/blorp/blorp_priv.h +++ b/src/intel/blorp/blorp_priv.h @@ -197,6 +197,9 @@ struct blorp_params struct brw_vs_prog_data *vs_prog_data; uint32_t wm_prog_kernel; struct brw_wm_prog_data *wm_prog_data; + + bool use_pre_baked_binding_table; + uint32_t pre_baked_binding_table_offset; }; void blorp_params_init(struct blorp_params *params); |