[Mesa-dev] [PATCH 2/2] st/nine: Fix vertex declarations for non-standard (usage/index)

Ilia Mirkin imirkin at alum.mit.edu
Mon Dec 1 09:57:55 PST 2014


On Thu, Nov 27, 2014 at 5:13 AM, Axel Davy <axel.davy at ens.fr> wrote:
> Nine code to match vertex declaration to vs inputs was limiting
> the number of possible combinations.
>
> Some sm3 games have issues with that, because arbitrary (usage/index)
> can be used.
>
> This patch does the following changes to fix the problem:
> . Change the numbers given to (usage/index) combinations to uint16
> . Do not put limits on the indices when it doesn't make sense
> . change the conversion rule (usage/index) -> number to fit all combinations
> . Instead of having a table usage_map mapping a (usage/index) number to
> an input index, usage_map maps input indices to their (usage/index)
>
> Cc: "10.4" <mesa-stable at lists.freedesktop.org>
> Tested-by: Yaroslav Andrusyak <pontostroy at gmail.com>
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> ---
>  src/gallium/state_trackers/nine/nine_defines.h     | 40 ++++++-----
>  src/gallium/state_trackers/nine/nine_ff.c          | 49 +++++++------
>  src/gallium/state_trackers/nine/nine_shader.h      |  2 +-
>  src/gallium/state_trackers/nine/nine_state.c       | 16 +++--
>  .../state_trackers/nine/vertexdeclaration9.c       | 84 +++++++---------------
>  .../state_trackers/nine/vertexdeclaration9.h       |  4 +-
>  src/gallium/state_trackers/nine/vertexshader9.h    |  2 +-
>  7 files changed, 89 insertions(+), 108 deletions(-)
>
> diff --git a/src/gallium/state_trackers/nine/nine_defines.h b/src/gallium/state_trackers/nine/nine_defines.h
> index aa3b257..06529da 100644
> --- a/src/gallium/state_trackers/nine/nine_defines.h
> +++ b/src/gallium/state_trackers/nine/nine_defines.h
> @@ -30,25 +30,27 @@
>  #define NINE_RESOURCE_FLAG_DUMMY    (PIPE_RESOURCE_FLAG_ST_PRIV << 2)
>
>  /* vertexdeclaration9.c */
> -unsigned nine_d3d9_to_nine_declusage(unsigned usage, unsigned index);
> -
> -#define NINE_DECLUSAGE_POSITION(i)     ( 0 + (i))
> -#define NINE_DECLUSAGE_BLENDWEIGHT(i)  ( 5 + (i))
> -#define NINE_DECLUSAGE_BLENDINDICES(i) ( 9 + (i))
> -#define NINE_DECLUSAGE_NORMAL(i)       (13 + (i))
> -#define NINE_DECLUSAGE_PSIZE            15
> -#define NINE_DECLUSAGE_TEXCOORD(i)     (16 + (i))
> -#define NINE_DECLUSAGE_TANGENT(i)      (32 + (i))
> -#define NINE_DECLUSAGE_BINORMAL(i)     (34 + (i))
> -#define NINE_DECLUSAGE_TESSFACTOR       36
> -#define NINE_DECLUSAGE_POSITIONT        37
> -#define NINE_DECLUSAGE_COLOR(i)        (38 + (i))
> -#define NINE_DECLUSAGE_DEPTH            43
> -#define NINE_DECLUSAGE_FOG              44
> -#define NINE_DECLUSAGE_SAMPLE           45
> -#define NINE_DECLUSAGE_NONE             46
> -#define NINE_DECLUSAGE_LAST             NINE_DECLUSAGE_NONE
> -#define NINE_DECLUSAGE_COUNT           (NINE_DECLUSAGE_LAST + 1)
> +uint16_t nine_d3d9_to_nine_declusage(unsigned usage, unsigned index);
> +
> +#define NINE_DECLUSAGE_POSITION         0
> +#define NINE_DECLUSAGE_BLENDWEIGHT      1
> +#define NINE_DECLUSAGE_BLENDINDICES     2
> +#define NINE_DECLUSAGE_NORMAL           3
> +#define NINE_DECLUSAGE_TEXCOORD         4
> +#define NINE_DECLUSAGE_TANGENT          5
> +#define NINE_DECLUSAGE_BINORMAL         6
> +#define NINE_DECLUSAGE_COLOR            7
> +#define NINE_DECLUSAGE_POSITIONT        8
> +
> +#define NINE_DECLUSAGE_PSIZE            9
> +#define NINE_DECLUSAGE_TESSFACTOR       10
> +#define NINE_DECLUSAGE_DEPTH            11
> +#define NINE_DECLUSAGE_FOG              12
> +#define NINE_DECLUSAGE_SAMPLE           13
> +#define NINE_DECLUSAGE_NONE             14
> +#define NINE_DECLUSAGE_BASE             (NINE_DECLUSAGE_NONE + 1)

I'd call it NINE_DECLUSAGE_COUNT (as it was called before). BASE can
have many different meanings -- the numerical base (like base 2) as
you're using, or the start, or probably other things. Count is
unambiguous.

I won't pretend to having looked at this whole patch with a high level
of attention, but the concept seems fine in principle. Series is
Acked-by: Ilia Mirkin <imirkin at alum.mit.edu>


More information about the mesa-dev mailing list