summaryrefslogtreecommitdiffstats
path: root/src/intel/blorp
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2016-10-21 17:15:49 -0700
committerJason Ekstrand <[email protected]>2016-11-16 10:11:29 -0800
commit0aea29cc1ce0c97e1cffb6aaff78c7dd754b8191 (patch)
tree17225501666d1e4eb7637bf9ccc9bf41a891a772 /src/intel/blorp
parentf7f768d19506dc9e480531ce41d03dba9b4fc792 (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.h44
-rw-r--r--src/intel/blorp/blorp_priv.h3
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, &params->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 ? &params->depth : &params->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, &params->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 ? &params->depth : &params->stencil;
+ blorp_emit_null_surface_state(batch, surface,
+ surface_maps[BLORP_RENDERBUFFER_BT_INDEX]);
+ }
- if (params->src.enabled) {
- blorp_emit_surface_state(batch, &params->src,
- surface_maps[BLORP_TEXTURE_BT_INDEX],
- surface_offsets[BLORP_TEXTURE_BT_INDEX], false);
+ if (params->src.enabled) {
+ blorp_emit_surface_state(batch, &params->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);