i965/fs: Pass current execution size to brw_IF() and brw_DO().
authorFrancisco Jerez <currojerez@riseup.net>
Thu, 19 May 2016 02:36:03 +0000 (19:36 -0700)
committerFrancisco Jerez <currojerez@riseup.net>
Sat, 28 May 2016 06:22:10 +0000 (23:22 -0700)
This gets IF and DO instructions working in SIMD32 programs.  brw_IF()
and brw_DO() should probably behave in the same way as other generator
functions that emit control flow instructions and just figure out the
right execution size by themselves from the current execution controls
specified through the brw_codegen argument.  Changing that will
require updating lots of Gen4-5 clipper code though, so for the moment
just pass the current value redundantly from the FS generator.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/mesa/drivers/dri/i965/brw_fs_generator.cpp

index 85b24bea107d5f6f0f10f2fab673fb567839a787..333480a0f550804dbccfa71d2a1799a7e7595376 100644 (file)
@@ -1774,7 +1774,7 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
            assert(devinfo->gen == 6);
            gen6_IF(p, inst->conditional_mod, src[0], src[1]);
         } else {
-           brw_IF(p, dispatch_width == 16 ? BRW_EXECUTE_16 : BRW_EXECUTE_8);
+           brw_IF(p, brw_inst_exec_size(devinfo, p->current));
         }
         break;
 
@@ -1786,7 +1786,7 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width)
         break;
 
       case BRW_OPCODE_DO:
-        brw_DO(p, dispatch_width == 16 ? BRW_EXECUTE_16 : BRW_EXECUTE_8);
+        brw_DO(p, brw_inst_exec_size(devinfo, p->current));
         break;
 
       case BRW_OPCODE_BREAK: