On Sat, Jan 2, 2016 at 11:37 PM, Ilia Mirkin <imir...@alum.mit.edu> wrote: > Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu> > --- > src/gallium/auxiliary/tgsi/tgsi_build.c | 62 +++++++++-------- > src/gallium/auxiliary/tgsi/tgsi_dump.c | 10 +-- > src/gallium/auxiliary/tgsi/tgsi_parse.c | 4 +- > src/gallium/auxiliary/tgsi/tgsi_parse.h | 2 +- > src/gallium/auxiliary/tgsi/tgsi_strings.c | 4 +- > src/gallium/auxiliary/tgsi/tgsi_text.c | 10 +-- > src/gallium/auxiliary/tgsi/tgsi_ureg.c | 77 > ++++++++++++++++++++++ > src/gallium/auxiliary/tgsi/tgsi_ureg.h | 7 ++ > src/gallium/drivers/ilo/shader/toy_tgsi.c | 8 +-- > .../drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp | 12 +++- > src/gallium/drivers/svga/svga_tgsi_vgpu10.c | 2 + > src/gallium/include/pipe/p_shader_tokens.h | 7 +-
missing src/gallium/docs/source/tgsi.rst ? BR, -R > 12 files changed, 153 insertions(+), 52 deletions(-) > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_build.c > b/src/gallium/auxiliary/tgsi/tgsi_build.c > index fdb7feb..bb9d0cb 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_build.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_build.c > @@ -259,36 +259,39 @@ tgsi_build_declaration_semantic( > return ds; > } > > -static struct tgsi_declaration_resource > -tgsi_default_declaration_resource(void) > +static struct tgsi_declaration_image > +tgsi_default_declaration_image(void) > { > - struct tgsi_declaration_resource dr; > + struct tgsi_declaration_image di; > > - dr.Resource = TGSI_TEXTURE_BUFFER; > - dr.Raw = 0; > - dr.Writable = 0; > - dr.Padding = 0; > + di.Resource = TGSI_TEXTURE_BUFFER; > + di.Raw = 0; > + di.Writable = 0; > + di.Format = 0; > + di.Padding = 0; > > - return dr; > + return di; > } > > -static struct tgsi_declaration_resource > -tgsi_build_declaration_resource(unsigned texture, > - unsigned raw, > - unsigned writable, > - struct tgsi_declaration *declaration, > - struct tgsi_header *header) > +static struct tgsi_declaration_image > +tgsi_build_declaration_image(unsigned texture, > + unsigned format, > + unsigned raw, > + unsigned writable, > + struct tgsi_declaration *declaration, > + struct tgsi_header *header) > { > - struct tgsi_declaration_resource dr; > + struct tgsi_declaration_image di; > > - dr = tgsi_default_declaration_resource(); > - dr.Resource = texture; > - dr.Raw = raw; > - dr.Writable = writable; > + di = tgsi_default_declaration_image(); > + di.Resource = texture; > + di.Format = format; > + di.Raw = raw; > + di.Writable = writable; > > declaration_grow(declaration, header); > > - return dr; > + return di; > } > > static struct tgsi_declaration_sampler_view > @@ -364,7 +367,7 @@ tgsi_default_full_declaration( void ) > full_declaration.Range = tgsi_default_declaration_range(); > full_declaration.Semantic = tgsi_default_declaration_semantic(); > full_declaration.Interp = tgsi_default_declaration_interp(); > - full_declaration.Resource = tgsi_default_declaration_resource(); > + full_declaration.Image = tgsi_default_declaration_image(); > full_declaration.SamplerView = tgsi_default_declaration_sampler_view(); > full_declaration.Array = tgsi_default_declaration_array(); > > @@ -454,20 +457,21 @@ tgsi_build_full_declaration( > header ); > } > > - if (full_decl->Declaration.File == TGSI_FILE_RESOURCE) { > - struct tgsi_declaration_resource *dr; > + if (full_decl->Declaration.File == TGSI_FILE_IMAGE) { > + struct tgsi_declaration_image *di; > > if (maxsize <= size) { > return 0; > } > - dr = (struct tgsi_declaration_resource *)&tokens[size]; > + di = (struct tgsi_declaration_image *)&tokens[size]; > size++; > > - *dr = tgsi_build_declaration_resource(full_decl->Resource.Resource, > - full_decl->Resource.Raw, > - full_decl->Resource.Writable, > - declaration, > - header); > + *di = tgsi_build_declaration_image(full_decl->Image.Resource, > + full_decl->Image.Format, > + full_decl->Image.Raw, > + full_decl->Image.Writable, > + declaration, > + header); > } > > if (full_decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { > diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c > b/src/gallium/auxiliary/tgsi/tgsi_dump.c > index e29ffb3..dad3839 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_dump.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c > @@ -348,12 +348,14 @@ iter_declaration( > } > } > > - if (decl->Declaration.File == TGSI_FILE_RESOURCE) { > + if (decl->Declaration.File == TGSI_FILE_IMAGE) { > TXT(", "); > - ENM(decl->Resource.Resource, tgsi_texture_names); > - if (decl->Resource.Writable) > + ENM(decl->Image.Resource, tgsi_texture_names); > + TXT(", "); > + UID(decl->Image.Format); > + if (decl->Image.Writable) > TXT(", WR"); > - if (decl->Resource.Raw) > + if (decl->Image.Raw) > TXT(", RAW"); > } > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.c > b/src/gallium/auxiliary/tgsi/tgsi_parse.c > index 0729b5d..9a52bbb 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_parse.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_parse.c > @@ -121,8 +121,8 @@ tgsi_parse_token( > next_token( ctx, &decl->Semantic ); > } > > - if (decl->Declaration.File == TGSI_FILE_RESOURCE) { > - next_token(ctx, &decl->Resource); > + if (decl->Declaration.File == TGSI_FILE_IMAGE) { > + next_token(ctx, &decl->Image); > } > > if (decl->Declaration.File == TGSI_FILE_SAMPLER_VIEW) { > diff --git a/src/gallium/auxiliary/tgsi/tgsi_parse.h > b/src/gallium/auxiliary/tgsi/tgsi_parse.h > index 35e1c7c..5ed1a83 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_parse.h > +++ b/src/gallium/auxiliary/tgsi/tgsi_parse.h > @@ -64,7 +64,7 @@ struct tgsi_full_declaration > struct tgsi_declaration_dimension Dim; > struct tgsi_declaration_interp Interp; > struct tgsi_declaration_semantic Semantic; > - struct tgsi_declaration_resource Resource; > + struct tgsi_declaration_image Image; > struct tgsi_declaration_sampler_view SamplerView; > struct tgsi_declaration_array Array; > }; > diff --git a/src/gallium/auxiliary/tgsi/tgsi_strings.c > b/src/gallium/auxiliary/tgsi/tgsi_strings.c > index fd926b3..ae30399 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_strings.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_strings.c > @@ -54,8 +54,8 @@ static const char *tgsi_file_names[] = > "IMM", > "PRED", > "SV", > - "RES", > - "SVIEW" > + "IMAGE", > + "SVIEW", > }; > > const char *tgsi_semantic_names[TGSI_SEMANTIC_COUNT] = > diff --git a/src/gallium/auxiliary/tgsi/tgsi_text.c > b/src/gallium/auxiliary/tgsi/tgsi_text.c > index 4a82c9b..a45ab90 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_text.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_text.c > @@ -1251,10 +1251,10 @@ static boolean parse_declaration( struct > translate_ctx *ctx ) > > cur++; > eat_opt_white( &cur ); > - if (file == TGSI_FILE_RESOURCE) { > + if (file == TGSI_FILE_IMAGE) { > for (i = 0; i < TGSI_TEXTURE_COUNT; i++) { > if (str_match_nocase_whole(&cur, tgsi_texture_names[i])) { > - decl.Resource.Resource = i; > + decl.Image.Resource = i; > break; > } > } > @@ -1263,16 +1263,18 @@ static boolean parse_declaration( struct > translate_ctx *ctx ) > return FALSE; > } > > + /* XXX format */ > + > cur2 = cur; > eat_opt_white(&cur2); > while (*cur2 == ',') { > cur2++; > eat_opt_white(&cur2); > if (str_match_nocase_whole(&cur2, "RAW")) { > - decl.Resource.Raw = 1; > + decl.Image.Raw = 1; > > } else if (str_match_nocase_whole(&cur2, "WR")) { > - decl.Resource.Writable = 1; > + decl.Image.Writable = 1; > > } else { > break; > diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c > b/src/gallium/auxiliary/tgsi/tgsi_ureg.c > index 4aaf8df..ee23df9 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c > @@ -50,6 +50,7 @@ union tgsi_any_token { > struct tgsi_declaration_range decl_range; > struct tgsi_declaration_dimension decl_dim; > struct tgsi_declaration_interp decl_interp; > + struct tgsi_declaration_image decl_image; > struct tgsi_declaration_semantic decl_semantic; > struct tgsi_declaration_sampler_view decl_sampler_view; > struct tgsi_declaration_array array; > @@ -155,6 +156,15 @@ struct ureg_program > } sampler_view[PIPE_MAX_SHADER_SAMPLER_VIEWS]; > unsigned nr_sampler_views; > > + struct { > + unsigned index; > + unsigned target; > + unsigned format; > + boolean wr; > + boolean raw; > + } image[PIPE_MAX_SHADER_IMAGES]; > + unsigned nr_images; > + > struct util_bitmask *free_temps; > struct util_bitmask *local_temps; > struct util_bitmask *decl_temps; > @@ -648,6 +658,37 @@ ureg_DECL_sampler_view(struct ureg_program *ureg, > return reg; > } > > +/* Allocate a new image. > + */ > +struct ureg_src > +ureg_DECL_image(struct ureg_program *ureg, > + unsigned index, > + unsigned target, > + unsigned format, > + boolean wr, > + boolean raw) > +{ > + struct ureg_src reg = ureg_src_register(TGSI_FILE_IMAGE, index); > + unsigned i; > + > + for (i = 0; i < ureg->nr_images; i++) > + if (ureg->image[i].index == index) > + return reg; > + > + if (i < PIPE_MAX_SHADER_IMAGES) { > + ureg->image[i].index = index; > + ureg->image[i].target = target; > + ureg->image[i].wr = wr; > + ureg->image[i].raw = raw; > + ureg->image[i].format = format; > + ureg->nr_images++; > + return reg; > + } > + > + assert(0); > + return reg; > +} > + > static int > match_or_expand_immediate64( const unsigned *v, > int type, > @@ -1478,6 +1519,33 @@ emit_decl_sampler_view(struct ureg_program *ureg, > } > > static void > +emit_decl_image(struct ureg_program *ureg, > + unsigned index, > + unsigned target, > + unsigned format, > + boolean wr, > + boolean raw) > +{ > + union tgsi_any_token *out = get_tokens(ureg, DOMAIN_DECL, 3); > + > + out[0].value = 0; > + out[0].decl.Type = TGSI_TOKEN_TYPE_DECLARATION; > + out[0].decl.NrTokens = 3; > + out[0].decl.File = TGSI_FILE_IMAGE; > + out[0].decl.UsageMask = 0xf; > + > + out[1].value = 0; > + out[1].decl_range.First = index; > + out[1].decl_range.Last = index; > + > + out[2].value = 0; > + out[2].decl_image.Resource = target; > + out[2].decl_image.Writable = wr; > + out[2].decl_image.Raw = raw; > + out[2].decl_image.Format = format; > +} > + > +static void > emit_immediate( struct ureg_program *ureg, > const unsigned *v, > unsigned type ) > @@ -1636,6 +1704,15 @@ static void emit_decls( struct ureg_program *ureg ) > ureg->sampler_view[i].return_type_w); > } > > + for (i = 0; i < ureg->nr_images; i++) { > + emit_decl_image(ureg, > + ureg->image[i].index, > + ureg->image[i].target, > + ureg->image[i].format, > + ureg->image[i].wr, > + ureg->image[i].raw); > + } > + > if (ureg->const_decls.nr_constant_ranges) { > for (i = 0; i < ureg->const_decls.nr_constant_ranges; i++) { > emit_decl_range(ureg, > diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h > b/src/gallium/auxiliary/tgsi/tgsi_ureg.h > index 0aae550..bba2afb 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h > +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h > @@ -327,6 +327,13 @@ ureg_DECL_sampler_view(struct ureg_program *, > unsigned return_type_z, > unsigned return_type_w ); > > +struct ureg_src > +ureg_DECL_image(struct ureg_program *ureg, > + unsigned index, > + unsigned target, > + unsigned format, > + boolean wr, > + boolean raw); > > static inline struct ureg_src > ureg_imm4f( struct ureg_program *ureg, > diff --git a/src/gallium/drivers/ilo/shader/toy_tgsi.c > b/src/gallium/drivers/ilo/shader/toy_tgsi.c > index d38585f..9a7140b 100644 > --- a/src/gallium/drivers/ilo/shader/toy_tgsi.c > +++ b/src/gallium/drivers/ilo/shader/toy_tgsi.c > @@ -1593,7 +1593,7 @@ ra_get_type(struct toy_tgsi *tgsi, const struct > tgsi_full_instruction *tgsi_inst > tgsi_inst->Src[operand].Register.File; > switch (file) { > case TGSI_FILE_SAMPLER: > - case TGSI_FILE_RESOURCE: > + case TGSI_FILE_IMAGE: > case TGSI_FILE_SAMPLER_VIEW: > type = TOY_TYPE_D; > break; > @@ -1834,7 +1834,7 @@ ra_get_src_indirect(struct toy_tgsi *tgsi, > src = tsrc_null(); > break; > case TGSI_FILE_SAMPLER: > - case TGSI_FILE_RESOURCE: > + case TGSI_FILE_IMAGE: > case TGSI_FILE_SAMPLER_VIEW: > is_resource = true; > /* fall through */ > @@ -1918,7 +1918,7 @@ ra_get_src(struct toy_tgsi *tgsi, > need_vrf = true; > break; > case TGSI_FILE_SAMPLER: > - case TGSI_FILE_RESOURCE: > + case TGSI_FILE_IMAGE: > case TGSI_FILE_SAMPLER_VIEW: > assert(!s->Register.Dimension); > src = tsrc_imm_d(s->Register.Index); > @@ -2256,7 +2256,7 @@ parse_declaration(struct toy_tgsi *tgsi, > case TGSI_FILE_SAMPLER: > case TGSI_FILE_PREDICATE: > case TGSI_FILE_ADDRESS: > - case TGSI_FILE_RESOURCE: > + case TGSI_FILE_IMAGE: > case TGSI_FILE_SAMPLER_VIEW: > /* nothing to do */ > break; > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp > index beb67fe..87c5dc1 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_from_tgsi.cpp > @@ -348,7 +348,7 @@ static nv50_ir::DataFile translateFile(uint file) > case TGSI_FILE_PREDICATE: return nv50_ir::FILE_PREDICATE; > case TGSI_FILE_IMMEDIATE: return nv50_ir::FILE_IMMEDIATE; > case TGSI_FILE_SYSTEM_VALUE: return nv50_ir::FILE_SYSTEM_VALUE; > - case TGSI_FILE_RESOURCE: return nv50_ir::FILE_MEMORY_GLOBAL; > + //case TGSI_FILE_RESOURCE: return nv50_ir::FILE_MEMORY_GLOBAL; > case TGSI_FILE_SAMPLER: > case TGSI_FILE_NULL: > default: > @@ -864,7 +864,7 @@ bool Source::scanSource() > clipVertexOutput = -1; > > textureViews.resize(scan.file_max[TGSI_FILE_SAMPLER_VIEW] + 1); > - resources.resize(scan.file_max[TGSI_FILE_RESOURCE] + 1); > + //resources.resize(scan.file_max[TGSI_FILE_RESOURCE] + 1); > > info->immd.bufSize = 0; > > @@ -1152,6 +1152,7 @@ bool Source::scanDeclaration(const struct > tgsi_full_declaration *decl) > } > } > break; > +/* > case TGSI_FILE_RESOURCE: > for (i = first; i <= last; ++i) { > resources[i].target = decl->Resource.Resource; > @@ -1159,6 +1160,7 @@ bool Source::scanDeclaration(const struct > tgsi_full_declaration *decl) > resources[i].slot = i; > } > break; > +*/ > case TGSI_FILE_SAMPLER_VIEW: > for (i = first; i <= last; ++i) > textureViews[i].target = decl->SamplerView.Resource; > @@ -1224,11 +1226,13 @@ bool Source::scanInstruction(const struct > tgsi_full_instruction *inst) > if (src.isIndirect(0)) > mainTempsInLMem = true; > } else > +/* > if (src.getFile() == TGSI_FILE_RESOURCE) { > if (src.getIndex(0) == TGSI_RESOURCE_GLOBAL) > info->io.globalAccess |= (insn.getOpcode() == TGSI_OPCODE_LOAD) ? > 0x1 : 0x2; > } else > +*/ > if (src.getFile() == TGSI_FILE_OUTPUT) { > if (src.isIndirect(0)) { > // We don't know which one is accessed, just mark everything for > @@ -1279,9 +1283,11 @@ Instruction::getTexture(const tgsi::Source *code, int > s) const > unsigned int r; > > switch (getSrc(s).getFile()) { > +/* > case TGSI_FILE_RESOURCE: > r = getSrc(s).getIndex(0); > return translateTexture(code->resources.at(r).target); > +*/ > case TGSI_FILE_SAMPLER_VIEW: > r = getSrc(s).getIndex(0); > return translateTexture(code->textureViews.at(r).target); > @@ -1689,7 +1695,7 @@ Converter::acquireDst(int d, int c) > const int idx = dst.getIndex(0); > const int idx2d = dst.is2D() ? dst.getIndex(1) : 0; > > - if (dst.isMasked(c) || f == TGSI_FILE_RESOURCE) > + if (dst.isMasked(c)/* || f == TGSI_FILE_RESOURCE*/) > return NULL; > > if (dst.isIndirect(0) || > diff --git a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c > b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c > index c979f4a..a44dbd3 100644 > --- a/src/gallium/drivers/svga/svga_tgsi_vgpu10.c > +++ b/src/gallium/drivers/svga/svga_tgsi_vgpu10.c > @@ -2298,11 +2298,13 @@ emit_vgpu10_declaration(struct > svga_shader_emitter_v10 *emit, > emit->num_samplers = MAX2(emit->num_samplers, decl->Range.Last + 1); > return TRUE; > > +#if 0 > case TGSI_FILE_RESOURCE: > /*opcode0.opcodeType = VGPU10_OPCODE_DCL_RESOURCE;*/ > /* XXX more, VGPU10_RETURN_TYPE_FLOAT */ > assert(!"TGSI_FILE_RESOURCE not handled yet"); > return FALSE; > +#endif > > case TGSI_FILE_ADDRESS: > emit->num_address_regs = MAX2(emit->num_address_regs, > diff --git a/src/gallium/include/pipe/p_shader_tokens.h > b/src/gallium/include/pipe/p_shader_tokens.h > index e8f4ad2..d182962 100644 > --- a/src/gallium/include/pipe/p_shader_tokens.h > +++ b/src/gallium/include/pipe/p_shader_tokens.h > @@ -76,7 +76,7 @@ enum tgsi_file_type { > TGSI_FILE_IMMEDIATE =7, > TGSI_FILE_PREDICATE =8, > TGSI_FILE_SYSTEM_VALUE =9, > - TGSI_FILE_RESOURCE =10, > + TGSI_FILE_IMAGE =10, > TGSI_FILE_SAMPLER_VIEW =11, > TGSI_FILE_COUNT /**< how many TGSI_FILE_ types */ > }; > @@ -197,11 +197,12 @@ struct tgsi_declaration_semantic > unsigned Padding : 8; > }; > > -struct tgsi_declaration_resource { > +struct tgsi_declaration_image { > unsigned Resource : 8; /**< one of TGSI_TEXTURE_ */ > unsigned Raw : 1; > unsigned Writable : 1; > - unsigned Padding : 22; > + unsigned Format : 10; /**< one of PIPE_FORMAT_ */ > + unsigned Padding : 12; > }; > > enum tgsi_return_type { > -- > 2.4.10 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev