Hi Keith, Will this patch only affect VS input declaration? it breaks r300 gallium texture function, but both VS and PS seem OK.
Cooper On Sun, Sep 13, 2009 at 5:46 AM, Keith Whitwell < [email protected]> wrote: > Module: Mesa > Branch: master > Commit: 6d8dbd3d1ec888300fb0e9ac3cf61808ba8ecc2b > URL: > http://cgit.freedesktop.org/mesa/mesa/commit/?id=6d8dbd3d1ec888300fb0e9ac3cf61808ba8ecc2b > > Author: Keith Whitwell <[email protected]> > Date: Sat Sep 12 14:12:35 2009 -0700 > > tgsi/ureg: VS inputs don't have any semantic tags, just an index > > Fix ureg_DECL_vs_input to reflect this and fix up all callers. > > --- > > src/gallium/auxiliary/tgsi/tgsi_ureg.c | 72 > +++++++++++----------- > src/gallium/auxiliary/tgsi/tgsi_ureg.h | 3 +- > src/gallium/auxiliary/util/u_simple_shaders.c | 4 +- > src/gallium/state_trackers/xorg/xorg_exa_tgsi.c | 15 ++--- > 4 files changed, 44 insertions(+), 50 deletions(-) > > diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.c > b/src/gallium/auxiliary/tgsi/tgsi_ureg.c > index e24a0ad..55a4e5b 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.c > +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.c > @@ -87,8 +87,10 @@ struct ureg_program > unsigned semantic_name; > unsigned semantic_index; > unsigned interp; > - } input[UREG_MAX_INPUT]; > - unsigned nr_inputs; > + } fs_input[UREG_MAX_INPUT]; > + unsigned nr_fs_inputs; > + > + unsigned vs_inputs[UREG_MAX_INPUT/32]; > > struct { > unsigned semantic_name; > @@ -232,25 +234,25 @@ ureg_src_register( unsigned file, > > > > -static struct ureg_src > -ureg_DECL_input( struct ureg_program *ureg, > - unsigned name, > - unsigned index, > - unsigned interp_mode ) > +struct ureg_src > +ureg_DECL_fs_input( struct ureg_program *ureg, > + unsigned name, > + unsigned index, > + unsigned interp_mode ) > { > unsigned i; > > - for (i = 0; i < ureg->nr_inputs; i++) { > - if (ureg->input[i].semantic_name == name && > - ureg->input[i].semantic_index == index) > + for (i = 0; i < ureg->nr_fs_inputs; i++) { > + if (ureg->fs_input[i].semantic_name == name && > + ureg->fs_input[i].semantic_index == index) > goto out; > } > > - if (ureg->nr_inputs < UREG_MAX_INPUT) { > - ureg->input[i].semantic_name = name; > - ureg->input[i].semantic_index = index; > - ureg->input[i].interp = interp_mode; > - ureg->nr_inputs++; > + if (ureg->nr_fs_inputs < UREG_MAX_INPUT) { > + ureg->fs_input[i].semantic_name = name; > + ureg->fs_input[i].semantic_index = index; > + ureg->fs_input[i].interp = interp_mode; > + ureg->nr_fs_inputs++; > } > else { > set_bad( ureg ); > @@ -261,25 +263,14 @@ out: > } > > > - > -struct ureg_src > -ureg_DECL_fs_input( struct ureg_program *ureg, > - unsigned name, > - unsigned index, > - unsigned interp ) > -{ > - assert(ureg->processor == TGSI_PROCESSOR_FRAGMENT); > - return ureg_DECL_input( ureg, name, index, interp ); > -} > - > - > struct ureg_src > ureg_DECL_vs_input( struct ureg_program *ureg, > - unsigned name, > unsigned index ) > { > assert(ureg->processor == TGSI_PROCESSOR_VERTEX); > - return ureg_DECL_input( ureg, name, index, TGSI_INTERPOLATE_CONSTANT ); > + > + ureg->vs_inputs[index/32] |= 1 << (index % 32); > + return ureg_src_register( TGSI_FILE_INPUT, index ); > } > > > @@ -781,13 +772,22 @@ static void emit_decls( struct ureg_program *ureg ) > { > unsigned i; > > - for (i = 0; i < ureg->nr_inputs; i++) { > - emit_decl( ureg, > - TGSI_FILE_INPUT, > - i, > - ureg->input[i].semantic_name, > - ureg->input[i].semantic_index, > - ureg->input[i].interp ); > + if (ureg->processor == TGSI_PROCESSOR_VERTEX) { > + for (i = 0; i < UREG_MAX_INPUT; i++) { > + if (ureg->vs_inputs[i/32] & (1 << (i%32))) { > + emit_decl_range( ureg, TGSI_FILE_INPUT, i, 1 ); > + } > + } > + } > + else { > + for (i = 0; i < ureg->nr_fs_inputs; i++) { > + emit_decl( ureg, > + TGSI_FILE_INPUT, > + i, > + ureg->fs_input[i].semantic_name, > + ureg->fs_input[i].semantic_index, > + ureg->fs_input[i].interp ); > + } > } > > for (i = 0; i < ureg->nr_outputs; i++) { > diff --git a/src/gallium/auxiliary/tgsi/tgsi_ureg.h > b/src/gallium/auxiliary/tgsi/tgsi_ureg.h > index acbca59..3bc1b77 100644 > --- a/src/gallium/auxiliary/tgsi/tgsi_ureg.h > +++ b/src/gallium/auxiliary/tgsi/tgsi_ureg.h > @@ -116,8 +116,7 @@ ureg_DECL_fs_input( struct ureg_program *, > > struct ureg_src > ureg_DECL_vs_input( struct ureg_program *, > - unsigned semantic_name, > - unsigned semantic_index ); > + unsigned index ); > > struct ureg_dst > ureg_DECL_output( struct ureg_program *, > diff --git a/src/gallium/auxiliary/util/u_simple_shaders.c > b/src/gallium/auxiliary/util/u_simple_shaders.c > index e5fc9b0..0d706f9 100644 > --- a/src/gallium/auxiliary/util/u_simple_shaders.c > +++ b/src/gallium/auxiliary/util/u_simple_shaders.c > @@ -61,9 +61,7 @@ util_make_vertex_passthrough_shader(struct pipe_context > *pipe, > struct ureg_src src; > struct ureg_dst dst; > > - src = ureg_DECL_vs_input( ureg, > - semantic_names[i], > - semantic_indexes[i]); > + src = ureg_DECL_vs_input( ureg, i ); > > dst = ureg_DECL_output( ureg, > semantic_names[i], > diff --git a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c > b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c > index 694eded..978dc20 100644 > --- a/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c > +++ b/src/gallium/state_trackers/xorg/xorg_exa_tgsi.c > @@ -241,6 +241,7 @@ create_vs(struct pipe_context *pipe, > boolean is_fill = vs_traits & VS_FILL; > boolean is_composite = vs_traits & VS_COMPOSITE; > boolean has_mask = vs_traits & VS_MASK; > + unsigned input_slot = 0; > > ureg = ureg_create(TGSI_PROCESSOR_VERTEX); > if (ureg == NULL) > @@ -252,30 +253,26 @@ create_vs(struct pipe_context *pipe, > /* it has to be either a fill or a composite op */ > debug_assert(is_fill ^ is_composite); > > - src = ureg_DECL_vs_input(ureg, > - TGSI_SEMANTIC_POSITION, 0); > + src = ureg_DECL_vs_input(ureg, input_slot++); > dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 0); > src = vs_normalize_coords(ureg, src, > const0, const1); > ureg_MOV(ureg, dst, src); > > - > if (is_composite) { > - src = ureg_DECL_vs_input(ureg, > - TGSI_SEMANTIC_GENERIC, 1); > + src = ureg_DECL_vs_input(ureg, input_slot++); > dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_GENERIC, 1); > ureg_MOV(ureg, dst, src); > } > + > if (is_fill) { > - src = ureg_DECL_vs_input(ureg, > - TGSI_SEMANTIC_COLOR, 0); > + src = ureg_DECL_vs_input(ureg, input_slot++); > dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_COLOR, 0); > ureg_MOV(ureg, dst, src); > } > > if (has_mask) { > - src = ureg_DECL_vs_input(ureg, > - TGSI_SEMANTIC_GENERIC, 2); > + src = ureg_DECL_vs_input(ureg, input_slot++); > dst = ureg_DECL_output(ureg, TGSI_SEMANTIC_POSITION, 2); > ureg_MOV(ureg, dst, src); > } > > _______________________________________________ > mesa-commit mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/mesa-commit >
_______________________________________________ mesa-commit mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/mesa-commit
