On Die, 2013-03-26 at 17:37 +0100, Christian König wrote: 
> Am 26.03.2013 15:56, schrieb Michel Dänzer:
> > On Die, 2013-03-26 at 14:51 +0100, Christian König wrote:
> >> From: Christian König <christian.koe...@amd.com>
> >>
> >> Signed-off-by: Christian König <christian.koe...@amd.com>
> >> [...]
> >> diff --git a/src/gallium/drivers/radeonsi/radeonsi_shader.h 
> >> b/src/gallium/drivers/radeonsi/radeonsi_shader.h
> >> index 9dae742..e09f297 100644
> >> --- a/src/gallium/drivers/radeonsi/radeonsi_shader.h
> >> +++ b/src/gallium/drivers/radeonsi/radeonsi_shader.h
> >> @@ -111,13 +111,18 @@ struct si_shader {
> >>    unsigned                nr_cbufs;
> >>   };
> >>   
> >> -struct si_shader_key {
> >> -  unsigned                export_16bpc:8;
> >> -  unsigned                nr_cbufs:4;
> >> -  unsigned                color_two_side:1;
> >> -  unsigned                alpha_func:3;
> >> -  unsigned                flatshade:1;
> >> -  float                   alpha_ref;
> >> +union si_shader_key {
> >> +  struct {
> >> +          unsigned        export_16bpc:8;
> >> +          unsigned        nr_cbufs:4;
> >> +          unsigned        color_two_side:1;
> >> +          unsigned        alpha_func:3;
> >> +          unsigned        flatshade:1;
> >> +          float           alpha_ref;
> >> +  } ps;
> >> +  struct {
> >> +          unsigned        instance_divisors[PIPE_MAX_ATTRIBS];
> >> +  } vs;
> >>   };
> > This grows the shader key from 8 to 128 bytes. I don't suppose the
> > instance divisors could be encoded in a more compact way? E.g. loading
> > the divisor values from constants and only tracking which elements use a
> > divisor in a bitmask in the key.
> 
> Considered that also, and I have two problems with that approach:
> 1. While immediates are converted to shifts & muls, dividing even by a 
> constant in the shader isn't cheap.

Is that really significant? How much work would it be to come up with a
worst case test and measure the difference?


> How about storing only a byte for the instance_divisor? That limit's the 
> divisor to a modulo of 256, but I don't think that would be so extremly bad.

I have no idea what the impact of that would be. What happens if an app
tries to use a divisor >= 256?

> That would reduce the key to 32 bytes instead.

Still seems kind of big.


-- 
Earthling Michel Dänzer           |                   http://www.amd.com
Libre software enthusiast         |          Debian, X and DRI developer
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to