i965: Drop render_target_start from binding table struct.
authorKenneth Graunke <kenneth@whitecape.org>
Wed, 3 Jan 2018 07:59:06 +0000 (23:59 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Mon, 22 Jan 2018 18:03:52 +0000 (10:03 -0800)
We have to start render targets at binding table index 0 in order to use
headerless FB write messages, and in fact already assume this in a bunch
of places in the code.  Let's finish that off, and not bother storing 0
in a struct to pretend to add it in a few places.

Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
src/intel/blorp/blorp.c
src/intel/compiler/brw_compiler.h
src/intel/compiler/brw_fs_generator.cpp
src/mesa/drivers/dri/i965/brw_wm.c

index e8a2c6135f54b25933675889d9e17162914f913e..52675ec4ac5c93b464fc8395c24ac9b2d1f798fa 100644 (file)
@@ -176,8 +176,10 @@ blorp_compile_fs(struct blorp_context *blorp, void *mem_ctx,
    wm_prog_data->base.nr_params = 0;
    wm_prog_data->base.param = NULL;
 
-   /* BLORP always just uses the first two binding table entries */
-   wm_prog_data->binding_table.render_target_start = BLORP_RENDERBUFFER_BT_INDEX;
+   /* BLORP always uses the first two binding table entries:
+    * - Surface 0 is the render target (which always start from 0)
+    * - Surface 1 is the source texture
+    */
    wm_prog_data->base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX;
 
    nir = brw_preprocess_nir(compiler, nir);
index 0060c381c0d4a12cab32d81aca13114abd029726..b1086bbcee50d417520ce822267e643d8e1d5ffb 100644 (file)
@@ -681,7 +681,6 @@ struct brw_wm_prog_data {
       /** @{
        * surface indices the WM-specific surfaces
        */
-      uint32_t render_target_start;
       uint32_t render_target_read_start;
       /** @} */
    } binding_table;
index 91bf0643084226205cb044024736824ba8deb08f..cd5be054f69ec506c102921902234e5508d014aa 100644 (file)
@@ -287,8 +287,6 @@ fs_generator::fire_fb_write(fs_inst *inst,
     * messages set "Render Target Index" to 0.  Using a different binding
     * table index would make it impossible to use headerless messages.
     */
-   assert(prog_data->binding_table.render_target_start == 0);
-
    const uint32_t surf_index = inst->target;
 
    bool last_render_target = inst->eot ||
@@ -427,8 +425,8 @@ fs_generator::generate_fb_read(fs_inst *inst, struct brw_reg dst,
 {
    assert(inst->size_written % REG_SIZE == 0);
    struct brw_wm_prog_data *prog_data = brw_wm_prog_data(this->prog_data);
-   const unsigned surf_index =
-      prog_data->binding_table.render_target_start + inst->target;
+   /* We assume that render targets start at binding table index 0. */
+   const unsigned surf_index = inst->target;
 
    gen9_fb_READ(p, dst, payload, surf_index,
                 inst->header_size, inst->size_written / REG_SIZE,
index 942fb04a8043cd6ca402f0f5c2306765205ee34c..0072bdd0fb4fff6d54c6e6c16f9a95f84f22cbac 100644 (file)
@@ -46,13 +46,11 @@ assign_fs_binding_table_offsets(const struct gen_device_info *devinfo,
                                 const struct brw_wm_prog_key *key,
                                 struct brw_wm_prog_data *prog_data)
 {
-   uint32_t next_binding_table_offset = 0;
-
-   /* If there are no color regions, we still perform an FB write to a null
-    * renderbuffer, which we place at surface index 0.
+   /* Render targets implicitly start at surface index 0.  Even if there are
+    * no color regions, we still perform an FB write to a null render target,
+    * which will be surface 0.
     */
-   prog_data->binding_table.render_target_start = next_binding_table_offset;
-   next_binding_table_offset += MAX2(key->nr_color_regions, 1);
+   uint32_t next_binding_table_offset = MAX2(key->nr_color_regions, 1);
 
    next_binding_table_offset =
       brw_assign_common_binding_table_offsets(devinfo, prog, &prog_data->base,