Iago Toral <ito...@igalia.com> writes: > On Wed, 2016-09-07 at 18:48 -0700, Francisco Jerez wrote: > (...) >> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp >> b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp >> index 12ab7b3..a678351 100644 >> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp >> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp >> @@ -363,7 +363,7 @@ fs_generator::generate_fb_read(fs_inst *inst, >> struct brw_reg dst, >> prog_data->binding_table.render_target_start + inst->target; >> >> gen9_fb_READ(p, dst, payload, surf_index, >> - inst->header_size, inst->regs_written, >> + inst->header_size, inst->size_written / REG_SIZE, > > DIV_ROUND_UP? > >> prog_data->persample_dispatch); >> >> brw_mark_surface_used(&prog_data->base, surf_index); >> @@ -467,7 +467,7 @@ fs_generator::generate_urb_read(fs_inst *inst, >> brw_inst_set_urb_per_slot_offset(p->devinfo, send, true); >> >> brw_inst_set_mlen(p->devinfo, send, inst->mlen); >> - brw_inst_set_rlen(p->devinfo, send, inst->regs_written); >> + brw_inst_set_rlen(p->devinfo, send, inst->size_written / >> REG_SIZE); > > DIV_ROUND_UP? > >> brw_inst_set_header_present(p->devinfo, send, true); >> brw_inst_set_urb_global_offset(p->devinfo, send, inst->offset); >> } >> @@ -895,7 +895,7 @@ fs_generator::generate_tex(fs_inst *inst, struct >> brw_reg dst, struct brw_reg src >> surface + base_binding_table_index, >> sampler % 16, >> msg_type, >> - inst->regs_written, >> + inst->size_written / REG_SIZE, > > DIV_ROUND_UP? > >> inst->mlen, >> inst->header_size != 0, >> simd_mode, >> @@ -932,7 +932,7 @@ fs_generator::generate_tex(fs_inst *inst, struct >> brw_reg dst, struct brw_reg src >> 0 /* surface */, >> 0 /* sampler */, >> msg_type, >> - inst->regs_written, >> + inst->size_written / REG_SIZE, > > DIV_ROUND_UP? > >> inst->mlen /* mlen */, >> inst->header_size != 0 /* header */, >> simd_mode, >> @@ -1263,7 +1263,7 @@ >> fs_generator::generate_varying_pull_constant_load_gen4(fs_inst *inst, >> */ >> msg_type = BRW_SAMPLER_MESSAGE_SIMD16_LD; >> assert(inst->mlen == 3); >> - assert(inst->regs_written == 8); >> + assert(inst->size_written == 8 * REG_SIZE); >> rlen = 8; >> simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16; >> } >> @@ -1408,7 +1408,7 @@ >> fs_generator::generate_pixel_interpolator_query(fs_inst *inst, >> msg_type, >> msg_data, >> inst->mlen, >> - inst->regs_written); >> + inst->size_written / REG_SIZE); > > DIV_ROUND_UP?
In all cases above you have the requirement that the amount of data written is an exact multiple of REG_SIZE, because SEND messages can only represent return payload sizes as an integer in GRF units, so if fs_inst::size_written ends up not being a multiple of REG_SIZE in any of these cases something has gone seriously wrong along the way. Would you like me to sprinkle in some assertions to verify that?
signature.asc
Description: PGP signature
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev