i965/vec4: Delete the old vec4_vp code
authorJason Ekstrand <jason.ekstrand@intel.com>
Mon, 21 Sep 2015 18:07:32 +0000 (11:07 -0700)
committerJason Ekstrand <jason.ekstrand@intel.com>
Fri, 2 Oct 2015 21:19:36 +0000 (14:19 -0700)
Reviewed-by: Matt Turner <mattst88@gmail.com>
src/mesa/drivers/dri/i965/Makefile.sources
src/mesa/drivers/dri/i965/brw_vec4.h
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.cpp
src/mesa/drivers/dri/i965/brw_vec4_gs_visitor.h
src/mesa/drivers/dri/i965/brw_vec4_vp.cpp [deleted file]
src/mesa/drivers/dri/i965/brw_vs.h
src/mesa/drivers/dri/i965/test_vec4_copy_propagation.cpp
src/mesa/drivers/dri/i965/test_vec4_register_coalesce.cpp

index cc3ecaf7a8b2021f9c1d6e80dde3c5b4da421e80..540e3df2f8923dd35d08aa9df2d944c18ba0a0a0 100644 (file)
@@ -133,7 +133,6 @@ i965_FILES = \
        brw_vec4_surface_builder.cpp \
        brw_vec4_surface_builder.h \
        brw_vec4_visitor.cpp \
-       brw_vec4_vp.cpp \
        brw_vec4_vs_visitor.cpp \
        brw_vs.c \
        brw_vs.h \
index 87cdd053eb91e5ecea503666dfe79ab90fabc59e..341897e9f079ed48bfe35832b65875ada1a5b9f6 100644 (file)
@@ -383,7 +383,6 @@ protected:
    virtual void assign_binding_table_offsets();
    virtual void setup_payload() = 0;
    virtual void emit_prolog() = 0;
-   virtual void emit_program_code() = 0;
    virtual void emit_thread_end() = 0;
    virtual void emit_urb_write_header(int mrf) = 0;
    virtual vec4_instruction *emit_urb_write_opcode(bool complete) = 0;
index 45c7683284c0e4f7e78fb2526e74f22eaeb0edd1..f57041c2af11a7416b180880f75ac17570245cb4 100644 (file)
@@ -207,15 +207,6 @@ vec4_gs_visitor::emit_prolog()
    this->current_annotation = NULL;
 }
 
-
-void
-vec4_gs_visitor::emit_program_code()
-{
-   /* We don't support NV_geometry_program4. */
-   unreachable("Unreached");
-}
-
-
 void
 vec4_gs_visitor::emit_thread_end()
 {
index d6ff777b41e15467677532f1db8bdb7691cb5b8b..05453b5d21e3b1bf021896913291bc4ba1a58210 100644 (file)
@@ -83,7 +83,6 @@ protected:
                                               const glsl_type *type);
    virtual void setup_payload();
    virtual void emit_prolog();
-   virtual void emit_program_code();
    virtual void emit_thread_end();
    virtual void emit_urb_write_header(int mrf);
    virtual vec4_instruction *emit_urb_write_opcode(bool complete);
diff --git a/src/mesa/drivers/dri/i965/brw_vec4_vp.cpp b/src/mesa/drivers/dri/i965/brw_vec4_vp.cpp
deleted file mode 100644 (file)
index d1a72d7..0000000
+++ /dev/null
@@ -1,649 +0,0 @@
-/*
- * Copyright © 2012 Intel Corporation
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- * IN THE SOFTWARE.
- */
-
-/** @file brw_vec4_vp.cpp
- *
- * A translator from Mesa IR to the i965 driver's Vec4 IR, used to implement
- * ARB_vertex_program and fixed-function vertex processing.
- */
-
-#include "brw_context.h"
-#include "brw_vec4.h"
-#include "brw_vs.h"
-extern "C" {
-#include "program/prog_parameter.h"
-#include "program/prog_print.h"
-}
-using namespace brw;
-
-void
-vec4_visitor::emit_vp_sop(enum brw_conditional_mod conditional_mod,
-                          dst_reg dst, src_reg src0, src_reg src1,
-                          src_reg one)
-{
-   vec4_instruction *inst;
-
-   inst = emit(CMP(dst_null_f(), src0, src1, conditional_mod));
-
-   inst = emit(BRW_OPCODE_SEL, dst, one, src_reg(0.0f));
-   inst->predicate = BRW_PREDICATE_NORMAL;
-}
-
-void
-vec4_vs_visitor::emit_program_code()
-{
-   this->need_all_constants_in_pull_buffer = false;
-
-   setup_vp_regs();
-
-   /* Keep a reg with 1.0 around, for reuse by emit_vs_sop so that it can just
-    * be:
-    *
-    * sel.f0 dst 1.0 0.0
-    *
-    * instead of
-    *
-    * mov    dst 0.0
-    * mov.f0 dst 1.0
-    */
-   src_reg one = src_reg(this, glsl_type::float_type);
-   emit(MOV(dst_reg(one), src_reg(1.0f)));
-
-   for (unsigned int insn = 0; insn < prog->NumInstructions; insn++) {
-      const struct prog_instruction *vpi = &prog->Instructions[insn];
-      base_ir = vpi;
-
-      dst_reg dst;
-      src_reg src[3];
-
-      /* We always emit into a temporary destination register to avoid
-       * aliasing issues.
-       */
-      dst = dst_reg(this, glsl_type::vec4_type);
-
-      for (int i = 0; i < 3; i++)
-         src[i] = get_vp_src_reg(vpi->SrcReg[i]);
-
-      switch (vpi->Opcode) {
-      case OPCODE_ABS:
-         src[0].abs = true;
-         src[0].negate = false;
-         emit(MOV(dst, src[0]));
-         break;
-
-      case OPCODE_ADD:
-         emit(ADD(dst, src[0], src[1]));
-         break;
-
-      case OPCODE_ARL:
-         if (devinfo->gen >= 6) {
-            dst.writemask = WRITEMASK_X;
-            dst_reg dst_f = dst;
-            dst_f.type = BRW_REGISTER_TYPE_F;
-
-            emit(RNDD(dst_f, src[0]));
-            emit(MOV(dst, src_reg(dst_f)));
-         } else {
-            emit(RNDD(dst, src[0]));
-         }
-         break;
-
-      case OPCODE_DP3:
-         emit(DP3(dst, src[0], src[1]));
-         break;
-      case OPCODE_DP4:
-         emit(DP4(dst, src[0], src[1]));
-         break;
-      case OPCODE_DPH:
-         emit(DPH(dst, src[0], src[1]));
-         break;
-
-      case OPCODE_DST: {
-         dst_reg t = dst;
-         if (vpi->DstReg.WriteMask & WRITEMASK_X) {
-            t.writemask = WRITEMASK_X;
-            emit(MOV(t, src_reg(1.0f)));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_Y) {
-            t.writemask = WRITEMASK_Y;
-            emit(MUL(t, src[0], src[1]));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_Z) {
-            t.writemask = WRITEMASK_Z;
-            emit(MOV(t, src[0]));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_W) {
-            t.writemask = WRITEMASK_W;
-            emit(MOV(t, src[1]));
-         }
-         break;
-      }
-
-      case OPCODE_EXP: {
-         dst_reg result = dst;
-         if (vpi->DstReg.WriteMask & WRITEMASK_X) {
-            /* tmp_d = floor(src[0].x) */
-            src_reg tmp_d = src_reg(this, glsl_type::ivec4_type);
-            assert(tmp_d.type == BRW_REGISTER_TYPE_D);
-            emit(RNDD(dst_reg(tmp_d), swizzle(src[0], BRW_SWIZZLE_XXXX)));
-
-            /* result[0] = 2.0 ^ tmp */
-            /* Adjust exponent for floating point: exp += 127 */
-            dst_reg tmp_d_x(GRF, tmp_d.reg, glsl_type::int_type, WRITEMASK_X);
-            emit(ADD(tmp_d_x, tmp_d, src_reg(127)));
-
-            /* Install exponent and sign.  Excess drops off the edge: */
-            dst_reg res_d_x(GRF, result.reg, glsl_type::int_type, WRITEMASK_X);
-            emit(BRW_OPCODE_SHL, res_d_x, tmp_d, src_reg(23));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_Y) {
-            result.writemask = WRITEMASK_Y;
-            emit(FRC(result, src[0]));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_Z) {
-            result.writemask = WRITEMASK_Z;
-            emit_math(SHADER_OPCODE_EXP2, result, src[0]);
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_W) {
-            result.writemask = WRITEMASK_W;
-            emit(MOV(result, src_reg(1.0f)));
-         }
-         break;
-      }
-
-      case OPCODE_EX2:
-         emit_math(SHADER_OPCODE_EXP2, dst, src[0]);
-         break;
-
-      case OPCODE_FLR:
-         emit(RNDD(dst, src[0]));
-         break;
-
-      case OPCODE_FRC:
-         emit(FRC(dst, src[0]));
-         break;
-
-      case OPCODE_LG2:
-         emit_math(SHADER_OPCODE_LOG2, dst, src[0]);
-         break;
-
-      case OPCODE_LIT: {
-         dst_reg result = dst;
-         /* From the ARB_vertex_program spec:
-          *
-          *      tmp = VectorLoad(op0);
-          *      if (tmp.x < 0) tmp.x = 0;
-          *      if (tmp.y < 0) tmp.y = 0;
-          *      if (tmp.w < -(128.0-epsilon)) tmp.w = -(128.0-epsilon);
-          *      else if (tmp.w > 128-epsilon) tmp.w = 128-epsilon;
-          *      result.x = 1.0;
-          *      result.y = tmp.x;
-          *      result.z = (tmp.x > 0) ? RoughApproxPower(tmp.y, tmp.w) : 0.0;
-          *      result.w = 1.0;
-          *
-          * Note that we don't do the clamping to +/- 128.  We didn't in
-          * brw_vs_emit.c either.
-          */
-         if (vpi->DstReg.WriteMask & WRITEMASK_XW) {
-            result.writemask = WRITEMASK_XW;
-            emit(MOV(result, src_reg(1.0f)));
-         }
-         if (vpi->DstReg.WriteMask & WRITEMASK_YZ) {
-            result.writemask = WRITEMASK_YZ;
-            emit(MOV(result, src_reg(0.0f)));
-
-            src_reg tmp_x = swizzle(src[0], BRW_SWIZZLE_XXXX);
-
-            emit(CMP(dst_null_d(), tmp_x, src_reg(0.0f), BRW_CONDITIONAL_G));
-            emit(IF(BRW_PREDICATE_NORMAL));
-
-            if (vpi->DstReg.WriteMask & WRITEMASK_Y) {
-               result.writemask = WRITEMASK_Y;
-               emit(MOV(result, tmp_x));
-            }
-
-            if (vpi->DstReg.WriteMask & WRITEMASK_Z) {
-               /* if (tmp.y < 0) tmp.y = 0; */
-               src_reg tmp_y = swizzle(src[0], BRW_SWIZZLE_YYYY);
-               result.writemask = WRITEMASK_Z;
-               emit_minmax(BRW_CONDITIONAL_GE, result, tmp_y, src_reg(0.0f));
-
-               src_reg clamped_y(result);
-               clamped_y.swizzle = BRW_SWIZZLE_ZZZZ;
-
-               src_reg tmp_w = swizzle(src[0], BRW_SWIZZLE_WWWW);
-
-               emit_math(SHADER_OPCODE_POW, result, clamped_y, tmp_w);
-            }
-            emit(BRW_OPCODE_ENDIF);
-         }
-         break;
-      }
-
-      case OPCODE_LOG: {
-         dst_reg result = dst;
-         result.type = BRW_REGISTER_TYPE_UD;
-         src_reg result_src = src_reg(result);
-
-         src_reg arg0_ud = swizzle(src[0], BRW_SWIZZLE_XXXX);
-         arg0_ud.type = BRW_REGISTER_TYPE_UD;
-
-         /* Perform mant = frexpf(fabsf(x), &exp), adjust exp and mnt
-          * according to spec:
-          *
-          * These almost look likey they could be joined up, but not really
-          * practical:
-          *
-          * result[0].f = (x.i & ((1<<31)-1) >> 23) - 127
-          * result[1].i = (x.i & ((1<<23)-1)        + (127<<23)
-          */
-         if (vpi->DstReg.WriteMask & WRITEMASK_XZ) {
-            result.writemask = WRITEMASK_X;
-            emit(AND(result, arg0_ud, src_reg((1u << 31) - 1)));
-            emit(BRW_OPCODE_SHR, result, result_src, src_reg(23u));
-            src_reg result_d(result_src);
-            result_d.type = BRW_REGISTER_TYPE_D; /* does it matter? */
-            result.type = BRW_REGISTER_TYPE_F;
-            emit(ADD(result, result_d, src_reg(-127)));
-         }
-
-         if (vpi->DstReg.WriteMask & WRITEMASK_YZ) {
-            result.writemask = WRITEMASK_Y;
-            result.type = BRW_REGISTER_TYPE_UD;
-            emit(AND(result, arg0_ud, src_reg((1u << 23) - 1)));
-            emit(OR(result, result_src, src_reg(127u << 23)));
-         }
-
-         if (vpi->DstReg.WriteMask & WRITEMASK_Z) {
-            /* result[2] = result[0] + LOG2(result[1]); */
-
-            /* Why bother?  The above is just a hint how to do this with a
-             * taylor series.  Maybe we *should* use a taylor series as by
-             * the time all the above has been done it's almost certainly
-             * quicker than calling the mathbox, even with low precision.
-             *
-             * Options are:
-             *    - result[0] + mathbox.LOG2(result[1])
-             *    - mathbox.LOG2(arg0.x)
-             *    - result[0] + inline_taylor_approx(result[1])
-             */
-            result.type = BRW_REGISTER_TYPE_F;
-            result.writemask = WRITEMASK_Z;
-            src_reg result_x(result), result_y(result), result_z(result);
-            result_x.swizzle = BRW_SWIZZLE_XXXX;
-            result_y.swizzle = BRW_SWIZZLE_YYYY;
-            result_z.swizzle = BRW_SWIZZLE_ZZZZ;
-            emit_math(SHADER_OPCODE_LOG2, result, result_y);
-            emit(ADD(result, result_z, result_x));
-         }
-
-         if (vpi->DstReg.WriteMask & WRITEMASK_W) {
-            result.type = BRW_REGISTER_TYPE_F;
-            result.writemask = WRITEMASK_W;
-            emit(MOV(result, src_reg(1.0f)));
-         }
-         break;
-      }
-
-      case OPCODE_MAD: {
-         src_reg temp = src_reg(this, glsl_type::vec4_type);
-         emit(MUL(dst_reg(temp), src[0], src[1]));
-         emit(ADD(dst, temp, src[2]));
-         break;
-      }
-
-      case OPCODE_MAX:
-         emit_minmax(BRW_CONDITIONAL_GE, dst, src[0], src[1]);
-         break;
-
-      case OPCODE_MIN:
-         emit_minmax(BRW_CONDITIONAL_L, dst, src[0], src[1]);
-         break;
-
-      case OPCODE_MOV:
-         emit(MOV(dst, src[0]));
-         break;
-
-      case OPCODE_MUL:
-         emit(MUL(dst, src[0], src[1]));
-         break;
-
-      case OPCODE_POW:
-         emit_math(SHADER_OPCODE_POW, dst, src[0], src[1]);
-         break;
-
-      case OPCODE_RCP:
-         emit_math(SHADER_OPCODE_RCP, dst, src[0]);
-         break;
-
-      case OPCODE_RSQ:
-         emit_math(SHADER_OPCODE_RSQ, dst, src[0]);
-         break;
-
-      case OPCODE_SGE:
-         emit_vp_sop(BRW_CONDITIONAL_GE, dst, src[0], src[1], one);
-         break;
-
-      case OPCODE_SLT:
-         emit_vp_sop(BRW_CONDITIONAL_L, dst, src[0], src[1], one);
-         break;
-
-      case OPCODE_SUB: {
-         src_reg neg_src1 = src[1];
-         neg_src1.negate = !src[1].negate;
-         emit(ADD(dst, src[0], neg_src1));
-         break;
-      }
-
-      case OPCODE_SWZ:
-         /* Note that SWZ's extended swizzles are handled in the general
-          * get_src_reg() code.
-          */
-         emit(MOV(dst, src[0]));
-         break;
-
-      case OPCODE_XPD: {
-         src_reg t1 = src_reg(this, glsl_type::vec4_type);
-         src_reg t2 = src_reg(this, glsl_type::vec4_type);
-
-         emit(MUL(dst_reg(t1),
-                  swizzle(src[0], BRW_SWIZZLE_YZXW),
-                  swizzle(src[1], BRW_SWIZZLE_ZXYW)));
-         emit(MUL(dst_reg(t2),
-                  swizzle(src[0], BRW_SWIZZLE_ZXYW),
-                  swizzle(src[1], BRW_SWIZZLE_YZXW)));
-         t2.negate = true;
-         emit(ADD(dst, t1, t2));
-         break;
-      }
-
-      case OPCODE_END:
-         break;
-
-      default:
-         assert(!"Unsupported opcode in vertex program");
-      }
-
-      /* Copy the temporary back into the actual destination register. */
-      if (_mesa_num_inst_dst_regs(vpi->Opcode) != 0) {
-         emit(MOV(get_vp_dst_reg(vpi->DstReg), src_reg(dst)));
-      }
-   }
-
-   /* If we used relative addressing, we need to upload all constants as
-    * pull constants.  Do that now.
-    */
-   if (this->need_all_constants_in_pull_buffer) {
-      const struct gl_program_parameter_list *params = vp->Base.Parameters;
-      unsigned i;
-      for (i = 0; i < params->NumParameters * 4; i++) {
-         stage_prog_data->pull_param[i] =
-            &params->ParameterValues[i / 4][i % 4];
-      }
-      stage_prog_data->nr_pull_params = i;
-   }
-}
-
-void
-vec4_vs_visitor::setup_vp_regs()
-{
-   /* PROGRAM_TEMPORARY */
-   int num_temp = prog->NumTemporaries;
-   vp_temp_regs = rzalloc_array(mem_ctx, src_reg, num_temp);
-   for (int i = 0; i < num_temp; i++)
-      vp_temp_regs[i] = src_reg(this, glsl_type::vec4_type);
-
-   /* PROGRAM_STATE_VAR etc. */
-   struct gl_program_parameter_list *plist = vp->Base.Parameters;
-   for (unsigned p = 0; p < plist->NumParameters; p++) {
-      unsigned components = plist->Parameters[p].Size;
-
-      /* Parameters should be either vec4 uniforms or single component
-       * constants; matrices and other larger types should have been broken
-       * down earlier.
-       */
-      assert(components <= 4);
-
-      this->uniform_size[this->uniforms] = 1; /* 1 vec4 */
-      this->uniform_vector_size[this->uniforms] = components;
-      for (unsigned i = 0; i < 4; i++) {
-         stage_prog_data->param[this->uniforms * 4 + i] = i >= components
-            ? 0 : &plist->ParameterValues[p][i];
-      }
-      this->uniforms++; /* counted in vec4 units */
-   }
-
-   /* PROGRAM_OUTPUT */
-   for (int slot = 0; slot < prog_data->vue_map.num_slots; slot++) {
-      int varying = prog_data->vue_map.slot_to_varying[slot];
-      if (varying == VARYING_SLOT_PSIZ)
-         output_reg[varying] = dst_reg(this, glsl_type::float_type);
-      else
-         output_reg[varying] = dst_reg(this, glsl_type::vec4_type);
-      assert(output_reg[varying].type == BRW_REGISTER_TYPE_F);
-   }
-
-   /* PROGRAM_ADDRESS */
-   this->vp_addr_reg = src_reg(this, glsl_type::int_type);
-   assert(this->vp_addr_reg.type == BRW_REGISTER_TYPE_D);
-}
-
-dst_reg
-vec4_vs_visitor::get_vp_dst_reg(const prog_dst_register &dst)
-{
-   dst_reg result;
-
-   assert(!dst.RelAddr);
-
-   switch (dst.File) {
-   case PROGRAM_TEMPORARY:
-      result = dst_reg(vp_temp_regs[dst.Index]);
-      break;
-
-   case PROGRAM_OUTPUT:
-      result = output_reg[dst.Index];
-      break;
-
-   case PROGRAM_ADDRESS: {
-      assert(dst.Index == 0);
-      result = dst_reg(this->vp_addr_reg);
-      break;
-   }
-
-   case PROGRAM_UNDEFINED:
-      return dst_null_f();
-
-   default:
-      unreachable("vec4_vp: bad destination register file");
-   }
-
-   result.writemask = dst.WriteMask;
-   return result;
-}
-
-src_reg
-vec4_vs_visitor::get_vp_src_reg(const prog_src_register &src)
-{
-   struct gl_program_parameter_list *plist = vp->Base.Parameters;
-
-   src_reg result;
-
-   assert(!src.Abs);
-
-   switch (src.File) {
-   case PROGRAM_UNDEFINED:
-      return src_reg(brw_null_reg());
-
-   case PROGRAM_TEMPORARY:
-      result = vp_temp_regs[src.Index];
-      break;
-
-   case PROGRAM_INPUT:
-      result = src_reg(ATTR, src.Index, glsl_type::vec4_type);
-      result.type = BRW_REGISTER_TYPE_F;
-      break;
-
-   case PROGRAM_ADDRESS: {
-      assert(src.Index == 0);
-      result = this->vp_addr_reg;
-      break;
-   }
-
-   case PROGRAM_STATE_VAR:
-   case PROGRAM_CONSTANT:
-      /* From the ARB_vertex_program specification:
-       * "Relative addressing can only be used for accessing program
-       *  parameter arrays."
-       */
-      if (src.RelAddr) {
-         /* Since we have no idea what the base of the array is, we need to
-          * upload ALL constants as push constants.
-          */
-         this->need_all_constants_in_pull_buffer = true;
-
-         /* Add the small constant index to the address register */
-         src_reg reladdr = src_reg(this, glsl_type::int_type);
-
-         dst_reg dst_reladdr = dst_reg(reladdr);
-         dst_reladdr.writemask = WRITEMASK_X;
-         emit(ADD(dst_reladdr, this->vp_addr_reg, src_reg(src.Index)));
-
-         if (devinfo->gen < 6)
-            emit(MUL(dst_reladdr, reladdr, src_reg(16)));
-
-      #if 0
-         assert(src.Index < this->uniforms);
-         result = src_reg(dst_reg(UNIFORM, 0));
-         result.type = BRW_REGISTER_TYPE_F;
-         result.reladdr = new(mem_ctx) src_reg();
-         memcpy(result.reladdr, &reladdr, sizeof(src_reg));
-      #endif
-
-         result = src_reg(this, glsl_type::vec4_type);
-         src_reg surf_index = src_reg(unsigned(prog_data->base.binding_table.pull_constants_start));
-
-         emit_pull_constant_load_reg(dst_reg(result),
-                                     surf_index,
-                                     reladdr,
-                                     NULL, NULL /* before_block/inst */);
-         break;
-      }
-
-      /* We actually want to look at the type in the Parameters list for this,
-       * because this lets us upload constant builtin uniforms as actual
-       * constants.
-       */
-      switch (plist->Parameters[src.Index].Type) {
-      case PROGRAM_CONSTANT:
-         result = src_reg(this, glsl_type::vec4_type);
-         for (int i = 0; i < 4; i++) {
-            dst_reg t = dst_reg(result);
-            t.writemask = 1 << i;
-            emit(MOV(t, src_reg(plist->ParameterValues[src.Index][i].f)));
-         }
-         break;
-
-      case PROGRAM_STATE_VAR:
-         assert(src.Index < this->uniforms);
-         result = src_reg(dst_reg(UNIFORM, src.Index));
-         result.type = BRW_REGISTER_TYPE_F;
-         break;
-
-      default:
-         assert(!"Bad uniform in src register file");
-         return src_reg(this, glsl_type::vec4_type);
-      }
-      break;
-
-   default:
-      assert(!"Bad src register file");
-      return src_reg(this, glsl_type::vec4_type);
-   }
-
-   if (src.Swizzle != SWIZZLE_NOOP || src.Negate) {
-      unsigned short zeros_mask = 0;
-      unsigned short ones_mask = 0;
-      unsigned short src_mask = 0;
-      unsigned short src_swiz[4];
-
-      for (int i = 0; i < 4; i++) {
-         src_swiz[i] = 0; /* initialize for safety */
-
-         /* The ZERO, ONE, and Negate options are only used for OPCODE_SWZ,
-          * but it's simplest to handle it here.
-          */
-         int s = GET_SWZ(src.Swizzle, i);
-         switch (s) {
-         case SWIZZLE_X:
-         case SWIZZLE_Y:
-         case SWIZZLE_Z:
-         case SWIZZLE_W:
-            src_mask |= 1 << i;
-            src_swiz[i] = s;
-            break;
-         case SWIZZLE_ZERO:
-            zeros_mask |= 1 << i;
-            break;
-         case SWIZZLE_ONE:
-            ones_mask |= 1 << i;
-            break;
-         }
-      }
-
-      result.swizzle =
-         BRW_SWIZZLE4(src_swiz[0], src_swiz[1], src_swiz[2], src_swiz[3]);
-
-      /* The hardware doesn't natively handle the SWZ instruction's zero/one
-       * swizzles or per-component negation, so we need to use a temporary.
-       */
-      if (zeros_mask || ones_mask || src.Negate) {
-         src_reg temp_src(this, glsl_type::vec4_type);
-         dst_reg temp(temp_src);
-
-         if (src_mask) {
-            temp.writemask = src_mask;
-            emit(MOV(temp, result));
-         }
-
-         if (zeros_mask) {
-            temp.writemask = zeros_mask;
-            emit(MOV(temp, src_reg(0.0f)));
-         }
-
-         if (ones_mask) {
-            temp.writemask = ones_mask;
-            emit(MOV(temp, src_reg(1.0f)));
-         }
-
-         if (src.Negate) {
-            temp.writemask = src.Negate;
-            src_reg neg(temp_src);
-            neg.negate = true;
-            emit(MOV(temp, neg));
-         }
-         result = temp_src;
-      }
-   }
-
-   return result;
-}
index 08483f048db3beb22f92e1b98e1e932bd71438b0..8e16cd2279c655cf2ad5def7c310b6b6683c2801 100644 (file)
@@ -99,7 +99,6 @@ protected:
                                               const glsl_type *type);
    virtual void setup_payload();
    virtual void emit_prolog();
-   virtual void emit_program_code();
    virtual void emit_thread_end();
    virtual void emit_urb_write_header(int mrf);
    virtual void emit_urb_slot(dst_reg reg, int varying);
index fbd9fa8f19b6c9619aa8abe5eec1e44b23497428..188f19232f911722e63a1234b6575a868fcf7507 100644 (file)
@@ -69,11 +69,6 @@ protected:
       unreachable("Not reached");
    }
 
-   virtual void emit_program_code()
-   {
-      unreachable("Not reached");
-   }
-
    virtual void emit_thread_end()
    {
       unreachable("Not reached");
index a3055fcc8516421d992403db05eb3507d11a3bd9..b2eafe8df8ec9d7c588ca35105776da810fc97a2 100644 (file)
@@ -72,11 +72,6 @@ protected:
       unreachable("Not reached");
    }
 
-   virtual void emit_program_code()
-   {
-      unreachable("Not reached");
-   }
-
    virtual void emit_thread_end()
    {
       unreachable("Not reached");