i965/fs: Implement fs_inst::force_sechalf support on Broadwell.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 18 Apr 2014 00:58:45 +0000 (17:58 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Fri, 18 Apr 2014 18:57:33 +0000 (11:57 -0700)
Back when I originally wrote this code, force_sechalf was only used for
Gen4 code, so I didn't bother hooking it up.  However, it's used more
generally these days.  In particular, we use it for computing
gl_SamplePosition.

Fixes Piglit's spec/ARB_sample_shading/builtin-gl-sample-position tests.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=77222
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Eric Anholt <eric@anholt.net>
src/mesa/drivers/dri/i965/gen8_fs_generator.cpp
src/mesa/drivers/dri/i965/gen8_generator.cpp
src/mesa/drivers/dri/i965/gen8_generator.h

index ef95eb0275e08a77672d2bb6adb32e4c2b09a329..7fb81c730cc21c351bc053089eb56ca21328293c 100644 (file)
@@ -927,10 +927,12 @@ gen8_fs_generator::generate_code(exec_list *instructions)
       else
          default_state.exec_size = BRW_EXECUTE_8;
 
-      /* fs_inst::force_sechalf is only used for original Gen4 code, so we
-       * don't handle it.  Add qtr_control to default_state if that changes.
-       */
-      assert(!ir->force_sechalf);
+      if (ir->force_uncompressed || dispatch_width == 8)
+         default_state.qtr_control = GEN6_COMPRESSION_1Q;
+      else if (ir->force_sechalf)
+         default_state.qtr_control = GEN6_COMPRESSION_2Q;
+      else
+         default_state.qtr_control = GEN6_COMPRESSION_1H;
 
       switch (ir->opcode) {
       case BRW_OPCODE_MOV:
index b082008703634e881d5f30d0413a42bfe3d83bbf..dd434a755446ec9c059b07cea199f1ab1ea079bd 100644 (file)
@@ -87,6 +87,7 @@ gen8_generator::next_inst(unsigned opcode)
    gen8_set_exec_size(inst, default_state.exec_size);
    gen8_set_access_mode(inst, default_state.access_mode);
    gen8_set_mask_control(inst, default_state.mask_control);
+   gen8_set_qtr_control(inst, default_state.qtr_control);
    gen8_set_cond_modifier(inst, default_state.conditional_mod);
    gen8_set_pred_control(inst, default_state.predicate);
    gen8_set_pred_inv(inst, default_state.predicate_inverse);
index 1f4b7f8823e3cf48ddfd146106b05cf390ee912e..b144809668dfa2ad50de4b8890ea9de4f2010b51 100644 (file)
@@ -186,6 +186,7 @@ protected:
       unsigned exec_size;
       unsigned access_mode;
       unsigned mask_control;
+      unsigned qtr_control;
       unsigned flag_subreg_nr;
       unsigned conditional_mod;
       unsigned predicate;