i965: Drop render_target_start from binding table struct.
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>
This commit is contained in:
@@ -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.nr_params = 0;
|
||||||
wm_prog_data->base.param = NULL;
|
wm_prog_data->base.param = NULL;
|
||||||
|
|
||||||
/* BLORP always just uses the first two binding table entries */
|
/* BLORP always uses the first two binding table entries:
|
||||||
wm_prog_data->binding_table.render_target_start = BLORP_RENDERBUFFER_BT_INDEX;
|
* - 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;
|
wm_prog_data->base.binding_table.texture_start = BLORP_TEXTURE_BT_INDEX;
|
||||||
|
|
||||||
nir = brw_preprocess_nir(compiler, nir);
|
nir = brw_preprocess_nir(compiler, nir);
|
||||||
|
@@ -681,7 +681,6 @@ struct brw_wm_prog_data {
|
|||||||
/** @{
|
/** @{
|
||||||
* surface indices the WM-specific surfaces
|
* surface indices the WM-specific surfaces
|
||||||
*/
|
*/
|
||||||
uint32_t render_target_start;
|
|
||||||
uint32_t render_target_read_start;
|
uint32_t render_target_read_start;
|
||||||
/** @} */
|
/** @} */
|
||||||
} binding_table;
|
} binding_table;
|
||||||
|
@@ -287,8 +287,6 @@ fs_generator::fire_fb_write(fs_inst *inst,
|
|||||||
* messages set "Render Target Index" to 0. Using a different binding
|
* messages set "Render Target Index" to 0. Using a different binding
|
||||||
* table index would make it impossible to use headerless messages.
|
* 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;
|
const uint32_t surf_index = inst->target;
|
||||||
|
|
||||||
bool last_render_target = inst->eot ||
|
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);
|
assert(inst->size_written % REG_SIZE == 0);
|
||||||
struct brw_wm_prog_data *prog_data = brw_wm_prog_data(this->prog_data);
|
struct brw_wm_prog_data *prog_data = brw_wm_prog_data(this->prog_data);
|
||||||
const unsigned surf_index =
|
/* We assume that render targets start at binding table index 0. */
|
||||||
prog_data->binding_table.render_target_start + inst->target;
|
const unsigned surf_index = inst->target;
|
||||||
|
|
||||||
gen9_fb_READ(p, dst, payload, surf_index,
|
gen9_fb_READ(p, dst, payload, surf_index,
|
||||||
inst->header_size, inst->size_written / REG_SIZE,
|
inst->header_size, inst->size_written / REG_SIZE,
|
||||||
|
@@ -46,13 +46,11 @@ assign_fs_binding_table_offsets(const struct gen_device_info *devinfo,
|
|||||||
const struct brw_wm_prog_key *key,
|
const struct brw_wm_prog_key *key,
|
||||||
struct brw_wm_prog_data *prog_data)
|
struct brw_wm_prog_data *prog_data)
|
||||||
{
|
{
|
||||||
uint32_t next_binding_table_offset = 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,
|
||||||
/* If there are no color regions, we still perform an FB write to a null
|
* which will be surface 0.
|
||||||
* renderbuffer, which we place at surface index 0.
|
|
||||||
*/
|
*/
|
||||||
prog_data->binding_table.render_target_start = next_binding_table_offset;
|
uint32_t next_binding_table_offset = MAX2(key->nr_color_regions, 1);
|
||||||
next_binding_table_offset += MAX2(key->nr_color_regions, 1);
|
|
||||||
|
|
||||||
next_binding_table_offset =
|
next_binding_table_offset =
|
||||||
brw_assign_common_binding_table_offsets(devinfo, prog, &prog_data->base,
|
brw_assign_common_binding_table_offsets(devinfo, prog, &prog_data->base,
|
||||||
|
Reference in New Issue
Block a user