[Mesa-dev] [PATCH] glsl/geom-stipple-lines: Pass pattern as int to GS.

Fabian Bieler fabianbieler at fastmail.fm
Wed Feb 5 11:54:29 PST 2014


Please disregard this mail.

Sorry about the noise.

On 2014-02-05 20:50, Fabian Bieler wrote:
> Pass pattern as bitmask in a unsigned int instead of as array of floats to the
> geometry shader.
> 
> Signed-off-by: Fabian Bieler <fabianbieler at fastmail.fm>
> ---
>   src/glsl/geom-stipple-lines.c | 21 ++++-----------------
>   1 file changed, 4 insertions(+), 17 deletions(-)
> 
> diff --git a/src/glsl/geom-stipple-lines.c b/src/glsl/geom-stipple-lines.c
> index e56d1f3..e5f8879 100644
> --- a/src/glsl/geom-stipple-lines.c
> +++ b/src/glsl/geom-stipple-lines.c
> @@ -41,24 +41,11 @@ CheckError(int line)
>    /**
>    * Set stipple factor and pattern for geometry shader.
> - *
> - * We convert the 16-bit stipple pattern into an array of 16 float values
> - * then pass the array as a uniform variable.
> - *
> - * Note: With GLSL 1.30 or later the stipple pattern could be implemented
> - * as an ordinary integer since GLSL 1.30 has true integer types and bit
> - * shifts and bit masks.
> - *
>    */
>   static void
>   SetStippleUniform(GLint factor, GLushort pattern)
>   {
> -   GLfloat p[16];
> -   int i;
> -   for (i = 0; i < 16; i++) {
> -      p[i] = (pattern & (1 << i)) ? 1.0f : 0.0f;
> -   }
> -   glUniform1fv(uStipplePattern, 16, p);
> +   glUniform1ui(uStipplePattern, pattern);
>      glUniform1f(uStippleFactor, factor);
>   }
>   @@ -270,7 +257,7 @@ Init(void)
>   {
>      static const char *fragShaderText =
>         "#version 150 \n"
> -      "uniform float StipplePattern[16]; \n"
> +      "uniform uint StipplePattern; \n"
>         "in vec4 g2f_Color; \n"
>         "in float stippleCoord; \n"
>         "out vec4 FragColor; \n"
> @@ -279,8 +266,8 @@ Init(void)
>         "   // check the stipple pattern and discard if value is zero \n"
>         "   // TODO: we should really undo the perspective interpolation here \n"
>         "   // so that it's linear. \n"
> -      "   float stip = StipplePattern[int(fract(stippleCoord) * 16.0)]; \n"
> -      "   if (stip == 0.0) \n"
> +      "   uint stip = (StipplePattern >> uint(fract(stippleCoord) * 16.0)) & 1u; \n"
> +      "   if (stip == 0u) \n"
>         "      discard; \n"
>         "   FragColor = g2f_Color; \n"
>         "} \n";
> 


More information about the mesa-dev mailing list