From 6404095fbab74a6194081374bd56786d07c5d561 Mon Sep 17 00:00:00 2001 From: Roy Spliet Date: Tue, 22 May 2012 15:14:26 +0200 Subject: [PATCH] nv30: Fix generic passing to fragment program in NV34. --- src/gallium/drivers/nv30/nv30_fragprog.c | 2 +- src/gallium/drivers/nv30/nv30_state.h | 2 +- src/gallium/drivers/nv30/nvfx_fragprog.c | 10 +++++++--- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/gallium/drivers/nv30/nv30_fragprog.c b/src/gallium/drivers/nv30/nv30_fragprog.c index 865c8283add..cfaafd5ded5 100644 --- a/src/gallium/drivers/nv30/nv30_fragprog.c +++ b/src/gallium/drivers/nv30/nv30_fragprog.c @@ -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); diff --git a/src/gallium/drivers/nv30/nv30_state.h b/src/gallium/drivers/nv30/nv30_state.h index a219bf20951..964676a90e1 100644 --- a/src/gallium/drivers/nv30/nv30_state.h +++ b/src/gallium/drivers/nv30/nv30_state.h @@ -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; }; diff --git a/src/gallium/drivers/nv30/nvfx_fragprog.c b/src/gallium/drivers/nv30/nvfx_fragprog.c index 320efbb6925..bfec4b3569b 100644 --- a/src/gallium/drivers/nv30/nvfx_fragprog.c +++ b/src/gallium/drivers/nv30/nvfx_fragprog.c @@ -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); -- 2.30.2