i915g: Fix a bug in facing.
authorStéphane Marchesin <marcheu@chromium.org>
Tue, 28 Jun 2011 01:27:50 +0000 (18:27 -0700)
committerStéphane Marchesin <marcheu@chromium.org>
Tue, 28 Jun 2011 01:29:50 +0000 (18:29 -0700)
However doesn't work because of limitations in the draw module.

src/gallium/drivers/i915/TODO
src/gallium/drivers/i915/i915_fpc_translate.c
src/gallium/drivers/i915/i915_state_derived.c

index e4404d21aefe1aa7b073ed7735918b97462a8601..992168e9a8d60c9b8ff7dced0b9bf2983910624a 100644 (file)
@@ -36,8 +36,7 @@ Random list of problems with i915g:
   * PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR
   * PIPE_CAP_MAX_VERTEX_TEXTURE_UNITS
 
-- Finish front/back face. This would need EMIT_1F_FACE or adding a couple of
-  instructions in the shader.
+- Finish front/back face. We need to add face support to lp_build_system_values_array and use it in draw_llvm.c.
 
 Other bugs can be found here:
 https://bugs.freedesktop.org/buglist.cgi?bug_status=NEW&bug_status=ASSIGNED&bug_status=REOPENED&component=Drivers/Gallium/i915g
index f39b020537701bf5e83013ef2871d3e57ff2549c..5018456f14ff2d79a90bdd8933b1db47fc63b588 100644 (file)
@@ -215,9 +215,7 @@ src_vector(struct i915_fp_compile *p,
       case TGSI_SEMANTIC_FACE:
          {
             /* for back/front faces */
-            /* XXX also emit something from 0,1 to -1,1 */
             int real_tex_unit = get_mapping(fs, I915_SEMANTIC_FACE);
-            printf("semantic face fpc at %d\n",real_tex_unit);
             src = i915_emit_decl(p, REG_TYPE_T, T_TEX0 + real_tex_unit, D0_CHANNEL_X);
             break;
          }
@@ -246,7 +244,6 @@ src_vector(struct i915_fp_compile *p,
                 source->Register.SwizzleZ,
                 source->Register.SwizzleW);
 
-
    /* There's both negate-all-components and per-component negation.
     * Try to handle both here.
     */
index dd4fd185266077d4b3c04e8396556206ee5da039..e01f16e715ce9035bed822439b6b8f5cf051b0c6 100644 (file)
@@ -157,11 +157,15 @@ static void calculate_vertex_layout(struct i915_context *i915)
 
    /* front/back face */
    if (face) {
-      uint slot = find_mapping(fs, I915_SEMANTIC_FACE);         
+      uint slot = find_mapping(fs, I915_SEMANTIC_FACE);
       debug_printf("Front/back face is broken\n");
+      /* XXX Because of limitations in the draw module, currently src will be 0
+       * for SEMANTIC_FACE, so this aliases to POS. We need to fix in the draw
+       * module by adding an extra shader output.
+       */
       src = draw_find_shader_output(i915->draw, TGSI_SEMANTIC_FACE, 0);
-      /* really here it's EMIT_1F_FACE */
       draw_emit_vertex_attr(&vinfo, EMIT_1F, INTERP_CONSTANT, src);
+      vinfo.hwfmt[1] &= ~(TEXCOORDFMT_NOT_PRESENT << (slot * 4));
       vinfo.hwfmt[1] |= TEXCOORDFMT_1D << (slot * 4);
    }