nv30: Fix generic passing to fragment program in NV34.
authorRoy Spliet <r.spliet@student.tudelft.nl>
Tue, 22 May 2012 13:14:26 +0000 (15:14 +0200)
committerChristoph Bumiller <e0425955@student.tuwien.ac.at>
Fri, 25 May 2012 20:42:54 +0000 (22:42 +0200)
src/gallium/drivers/nv30/nv30_fragprog.c
src/gallium/drivers/nv30/nv30_state.h
src/gallium/drivers/nv30/nvfx_fragprog.c

index 865c8283addfe5d153799a8af718b0e41515609e..cfaafd5ded5dbaf249fd0e4a667d4e2048815f89 100644 (file)
@@ -117,7 +117,7 @@ nv30_fragprog_validate(struct nv30_context *nv30)
          BEGIN_NV04(push, NV30_3D(FP_REG_CONTROL), 1);
          PUSH_DATA (push, 0x00010004);
          BEGIN_NV04(push, NV30_3D(TEX_UNITS_ENABLE), 1);
-         PUSH_DATA (push, fp->samplers);
+         PUSH_DATA (push, fp->texcoords);
       } else {
          BEGIN_NV04(push, SUBC_3D(0x0b40), 1);
          PUSH_DATA (push, 0x00000000);
index a219bf2095169aa9492a18def250419fa5691c99..964676a90e1f49bbabb76a01659a12118cf29f51 100644 (file)
@@ -123,7 +123,7 @@ struct nv30_fragprog {
    uint32_t fp_control;
    uint32_t point_sprite_control;
    uint32_t coord_conventions;
-   uint32_t samplers;
+   uint32_t texcoords;
    uint32_t rt_enable;
 };
 
index 320efbb6925c94d1ba8247434a155c158cd77732..bfec4b3569bf7ee8c87f740634b94dbbec8c8035 100644 (file)
@@ -217,7 +217,6 @@ nvfx_fp_emit(struct nvfx_fpc *fpc, struct nvfx_insn insn)
    if(insn.unit >= 0)
    {
       hw[0] |= (insn.unit << NVFX_FP_OP_TEX_UNIT_SHIFT);
-      fp->samplers |= (1 << insn.unit);
    }
 
    emit_dst(fpc, insn.dst);
@@ -933,6 +932,7 @@ nvfx_fragprog_parse_decl_input(struct nv30_context *nvfx, struct nvfx_fpc *fpc,
          return TRUE;
 
       fpc->fp->texcoord[fdec->Semantic.Index] = fdec->Semantic.Index;
+      fpc->fp->texcoords |= (1 << fdec->Semantic.Index);
       fpc->fp->vp_or |= (0x00004000 << fdec->Semantic.Index);
       hw = NVFX_FP_OP_INPUT_SRC_TC(fdec->Semantic.Index);
       break;
@@ -959,8 +959,12 @@ nvfx_fragprog_assign_generic(struct nv30_context *nvfx, struct nvfx_fpc *fpc,
          for (hw = 0; hw < num_texcoords; hw++) {
             if (fpc->fp->texcoord[hw] == 0xffff) {
                fpc->fp->texcoord[hw] = fdec->Semantic.Index;
-               if (hw <= 7) fpc->fp->vp_or |= (0x00004000 << hw);
-               else         fpc->fp->vp_or |= (0x00001000 << (hw - 8));
+               if (hw <= 7) {
+                  fpc->fp->texcoords |= (0x1 << hw);
+                  fpc->fp->vp_or |= (0x00004000 << hw);
+               } else {
+                  fpc->fp->vp_or |= (0x00001000 << (hw - 8));
+               }
                if (fdec->Semantic.Index == 9)
                   fpc->fp->point_sprite_control |= (0x00000100 << hw);
                hw = NVFX_FP_OP_INPUT_SRC_TC(hw);