From: Nicolai Hähnle Date: Sat, 26 Aug 2017 22:42:53 +0000 (+0200) Subject: tgsi/build: always generate two-dimensional constant file accesses X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a852ae36207130c7cb9d5f89a671ceaff2b4375e;p=mesa.git tgsi/build: always generate two-dimensional constant file accesses Reviewed-by: Timothy Arceri --- diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c b/src/gallium/auxiliary/tgsi/tgsi_build.c index 144a0177689..0c4ec8d1cf9 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_build.c +++ b/src/gallium/auxiliary/tgsi/tgsi_build.c @@ -163,6 +163,16 @@ tgsi_default_declaration_range( void ) return dr; } +static struct tgsi_declaration_dimension +tgsi_default_declaration_dimension() +{ + struct tgsi_declaration_dimension dim; + + dim.Index2D = 0; + + return dim; +} + static struct tgsi_declaration_range tgsi_build_declaration_range( unsigned first, @@ -381,6 +391,7 @@ tgsi_default_full_declaration( void ) full_declaration.Declaration = tgsi_default_declaration(); full_declaration.Range = tgsi_default_declaration_range(); + full_declaration.Dim = tgsi_default_declaration_dimension(); full_declaration.Semantic = tgsi_default_declaration_semantic(); full_declaration.Interp = tgsi_default_declaration_interp(); full_declaration.Image = tgsi_default_declaration_image(); diff --git a/src/gallium/auxiliary/tgsi/tgsi_transform.h b/src/gallium/auxiliary/tgsi/tgsi_transform.h index 7ea82066fcf..e4da0f5debc 100644 --- a/src/gallium/auxiliary/tgsi/tgsi_transform.h +++ b/src/gallium/auxiliary/tgsi/tgsi_transform.h @@ -124,6 +124,8 @@ tgsi_transform_const_decl(struct tgsi_transform_context *ctx, decl.Declaration.File = TGSI_FILE_CONSTANT; decl.Range.First = firstIdx; decl.Range.Last = lastIdx; + decl.Declaration.Dimension = 1; + /* Dim.Index2D is already 0 */ ctx->emit_declaration(ctx, &decl); } @@ -230,6 +232,18 @@ tgsi_transform_dst_reg(struct tgsi_full_dst_register *reg, reg->Register.WriteMask = writemask; } +static inline void +tgsi_transform_src_reg_xyzw(struct tgsi_full_src_register *reg, + unsigned file, unsigned index) +{ + reg->Register.File = file; + reg->Register.Index = index; + if (file == TGSI_FILE_CONSTANT) { + reg->Register.Dimension = 1; + reg->Dimension.Index = 0; + } +} + static inline void tgsi_transform_src_reg(struct tgsi_full_src_register *reg, unsigned file, unsigned index, @@ -238,7 +252,11 @@ tgsi_transform_src_reg(struct tgsi_full_src_register *reg, { reg->Register.File = file; reg->Register.Index = index; - reg->Register.SwizzleX = swizzleX; + if (file == TGSI_FILE_CONSTANT) { + reg->Register.Dimension = 1; + reg->Dimension.Index = 0; + } + reg->Register.SwizzleX = swizzleX; reg->Register.SwizzleY = swizzleY; reg->Register.SwizzleZ = swizzleZ; reg->Register.SwizzleW = swizzleW; @@ -265,8 +283,7 @@ tgsi_transform_op1_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 1; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); ctx->emit_instruction(ctx, &inst); } @@ -293,10 +310,8 @@ tgsi_transform_op2_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 2; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; - inst.Src[1].Register.File = src1_file; - inst.Src[1].Register.Index = src1_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); + tgsi_transform_src_reg_xyzw(&inst.Src[1], src1_file, src1_index); inst.Src[1].Register.Negate = src1_negate; ctx->emit_instruction(ctx, &inst); @@ -325,12 +340,9 @@ tgsi_transform_op3_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 3; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; - inst.Src[1].Register.File = src1_file; - inst.Src[1].Register.Index = src1_index; - inst.Src[2].Register.File = src2_file; - inst.Src[2].Register.Index = src2_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); + tgsi_transform_src_reg_xyzw(&inst.Src[1], src1_file, src1_index); + tgsi_transform_src_reg_xyzw(&inst.Src[2], src2_file, src2_index); ctx->emit_instruction(ctx, &inst); } @@ -356,8 +368,7 @@ tgsi_transform_op1_swz_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 1; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); switch (dst_writemask) { case TGSI_WRITEMASK_X: inst.Src[0].Register.SwizzleX = src0_swizzle; @@ -402,10 +413,8 @@ tgsi_transform_op2_swz_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 2; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; - inst.Src[1].Register.File = src1_file; - inst.Src[1].Register.Index = src1_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); + tgsi_transform_src_reg_xyzw(&inst.Src[1], src1_file, src1_index); inst.Src[1].Register.Negate = src1_negate; switch (dst_writemask) { case TGSI_WRITEMASK_X: @@ -458,13 +467,10 @@ tgsi_transform_op3_swz_inst(struct tgsi_transform_context *ctx, inst.Dst[0].Register.Index = dst_index; inst.Dst[0].Register.WriteMask = dst_writemask; inst.Instruction.NumSrcRegs = 3; - inst.Src[0].Register.File = src0_file; - inst.Src[0].Register.Index = src0_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src0_file, src0_index); inst.Src[0].Register.Negate = src0_negate; - inst.Src[1].Register.File = src1_file; - inst.Src[1].Register.Index = src1_index; - inst.Src[2].Register.File = src2_file; - inst.Src[2].Register.Index = src2_index; + tgsi_transform_src_reg_xyzw(&inst.Src[1], src1_file, src1_index); + tgsi_transform_src_reg_xyzw(&inst.Src[2], src2_file, src2_index); switch (dst_writemask) { case TGSI_WRITEMASK_X: inst.Src[0].Register.SwizzleX = src0_swizzle; @@ -507,8 +513,7 @@ tgsi_transform_kill_inst(struct tgsi_transform_context *ctx, inst.Instruction.Opcode = TGSI_OPCODE_KILL_IF; inst.Instruction.NumDstRegs = 0; inst.Instruction.NumSrcRegs = 1; - inst.Src[0].Register.File = src_file; - inst.Src[0].Register.Index = src_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src_file, src_index); inst.Src[0].Register.SwizzleX = inst.Src[0].Register.SwizzleY = inst.Src[0].Register.SwizzleZ = @@ -540,10 +545,8 @@ tgsi_transform_tex_inst(struct tgsi_transform_context *ctx, inst.Instruction.NumSrcRegs = 2; inst.Instruction.Texture = TRUE; inst.Texture.Texture = tex_target; - inst.Src[0].Register.File = src_file; - inst.Src[0].Register.Index = src_index; - inst.Src[1].Register.File = TGSI_FILE_SAMPLER; - inst.Src[1].Register.Index = sampler_index; + tgsi_transform_src_reg_xyzw(&inst.Src[0], src_file, src_index); + tgsi_transform_src_reg_xyzw(&inst.Src[1], TGSI_FILE_SAMPLER, sampler_index); ctx->emit_instruction(ctx, &inst); }