[Mesa-dev] [PATCH 12/21] i965/fs: Clean up remaining uses of dispatch_width in the generator.

Francisco Jerez currojerez at riseup.net
Wed May 25 01:02:29 UTC 2016


Jason Ekstrand <jason at jlekstrand.net> writes:

> Does this mean we can delete the field from brw_fs_generator?
>
Almost, there is still one use left in fire_fb_write() (for the dual
source blend last-rt hack) which we will be able to get rid of
eventually, but it cannot simply be replaced with inst->exec_size
because it's really the shader dispatch width what it needs right now.

> On Tue, May 24, 2016 at 12:18 AM, Francisco Jerez <currojerez at riseup.net>
> wrote:
>
>> Most of these are bugs because the intended execution size of an
>> instruction and the dispatch width of the shader aren't necessarily
>> the same (especially in SIMD32 programs).
>> ---
>>  src/mesa/drivers/dri/i965/brw_eu.h             |  1 -
>>  src/mesa/drivers/dri/i965/brw_eu_emit.c        |  3 +--
>>  src/mesa/drivers/dri/i965/brw_fs_generator.cpp | 13 +++++++------
>>  3 files changed, 8 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/brw_eu.h
>> b/src/mesa/drivers/dri/i965/brw_eu.h
>> index 91e3401..b057f17 100644
>> --- a/src/mesa/drivers/dri/i965/brw_eu.h
>> +++ b/src/mesa/drivers/dri/i965/brw_eu.h
>> @@ -281,7 +281,6 @@ void brw_svb_write(struct brw_codegen *p,
>>                     bool   send_commit_msg);
>>
>>  void brw_fb_WRITE(struct brw_codegen *p,
>> -                 int dispatch_width,
>>                    struct brw_reg payload,
>>                    struct brw_reg implied_header,
>>                    unsigned msg_control,
>> diff --git a/src/mesa/drivers/dri/i965/brw_eu_emit.c
>> b/src/mesa/drivers/dri/i965/brw_eu_emit.c
>> index 10cbbe8..ff8e207 100644
>> --- a/src/mesa/drivers/dri/i965/brw_eu_emit.c
>> +++ b/src/mesa/drivers/dri/i965/brw_eu_emit.c
>> @@ -2342,7 +2342,6 @@ void brw_oword_block_read(struct brw_codegen *p,
>>
>>
>>  void brw_fb_WRITE(struct brw_codegen *p,
>> -                 int dispatch_width,
>>                    struct brw_reg payload,
>>                    struct brw_reg implied_header,
>>                    unsigned msg_control,
>> @@ -2358,7 +2357,7 @@ void brw_fb_WRITE(struct brw_codegen *p,
>>     unsigned msg_type;
>>     struct brw_reg dest, src0;
>>
>> -   if (dispatch_width == 16)
>> +   if (brw_inst_exec_size(devinfo, p->current) >= BRW_EXECUTE_16)
>>        dest = retype(vec16(brw_null_reg()), BRW_REGISTER_TYPE_UW);
>>     else
>>        dest = retype(vec8(brw_null_reg()), BRW_REGISTER_TYPE_UW);
>> diff --git a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> index 71ac730..9751926 100644
>> --- a/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> +++ b/src/mesa/drivers/dri/i965/brw_fs_generator.cpp
>> @@ -229,7 +229,6 @@ fs_generator::fire_fb_write(fs_inst *inst,
>>
>>
>>     brw_fb_WRITE(p,
>> -                dispatch_width,
>>                  payload,
>>                  implied_header,
>>                  msg_control,
>> @@ -547,7 +546,7 @@ fs_generator::generate_linterp(fs_inst *inst,
>>      * See also: emit_interpolation_setup_gen4().
>>      */
>>     struct brw_reg delta_x = src[0];
>> -   struct brw_reg delta_y = offset(src[0], dispatch_width / 8);
>> +   struct brw_reg delta_y = offset(src[0], inst->exec_size / 8);
>>     struct brw_reg interp = src[1];
>>
>>     if (devinfo->has_pln &&
>> @@ -1206,10 +1205,11 @@
>> fs_generator::generate_varying_pull_constant_load_gen4(fs_inst *inst,
>>     uint32_t surf_index = index.ud;
>>
>>     uint32_t simd_mode, rlen, msg_type;
>> -   if (dispatch_width == 16) {
>> +   if (inst->exec_size == 16) {
>>        simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
>>        rlen = 8;
>>     } else {
>> +      assert(inst->exec_size == 8);
>>        simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8;
>>        rlen = 4;
>>     }
>> @@ -1267,11 +1267,12 @@
>> fs_generator::generate_varying_pull_constant_load_gen7(fs_inst *inst,
>>     assert(index.type == BRW_REGISTER_TYPE_UD);
>>
>>     uint32_t simd_mode, rlen, mlen;
>> -   if (dispatch_width == 16) {
>> +   if (inst->exec_size == 16) {
>>        mlen = 2;
>>        rlen = 8;
>>        simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD16;
>>     } else {
>> +      assert(inst->exec_size == 8);
>>        mlen = 1;
>>        rlen = 4;
>>        simd_mode = BRW_SAMPLER_SIMD_MODE_SIMD8;
>> @@ -1407,9 +1408,9 @@ fs_generator::generate_set_sample_id(fs_inst *inst,
>>            src0.type == BRW_REGISTER_TYPE_UD);
>>
>>     struct brw_reg reg = stride(src1, 1, 4, 0);
>> -   if (devinfo->gen >= 8 || dispatch_width == 8) {
>> +   if (devinfo->gen >= 8 || inst->exec_size == 8) {
>>        brw_ADD(p, dst, src0, reg);
>> -   } else if (dispatch_width == 16) {
>> +   } else if (inst->exec_size == 16) {
>>        brw_push_insn_state(p);
>>        brw_set_default_exec_size(p, BRW_EXECUTE_8);
>>        brw_set_default_compression_control(p, BRW_COMPRESSION_NONE);
>> --
>> 2.7.3
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
>>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 212 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160524/9cdceb12/attachment.sig>


More information about the mesa-dev mailing list