i965: Use sample barycentric coordinates with per sample shading
authorAnuj Phogat <anuj.phogat@gmail.com>
Mon, 6 Jan 2014 21:59:18 +0000 (13:59 -0800)
committerAnuj Phogat <anuj.phogat@gmail.com>
Tue, 21 Jan 2014 22:42:27 +0000 (14:42 -0800)
commita92e5f7cf63d496ad7830b5cea4bbab287c25b8e
tree9506d79aea368bac7b5e601379193df257ab80b0
parent3313cc269bd428ca96a132d86da5fddc0f27386a
i965: Use sample barycentric coordinates with per sample shading

Current implementation of arb_sample_shading doesn't set 'Barycentric
Interpolation Mode' correctly. We use pixel barycentric coordinates
for per sample shading. Instead we should select perspective sample
or non-perspective sample barycentric coordinates.

It also enables using sample barycentric coordinates in case of a
fragment shader variable declared with 'sample' qualifier.
e.g. sample in vec4 pos;

A piglit test to verify the implementation has been posted on piglit
mailing list for review.

V2: Do not interpolate all the 'in' variables at sample position
    if fragment shader uses 'sample' qualifier with one of them.
    For example we have a fragment shader:
    #version 330
    #extension ARB_gpu_shader5: require
    sample in vec4 a;
    in vec4 b;
    main()
    {
      ...
    }

    Only 'a' should be sampled at sample location, not 'b'.

Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Anuj Phogat <anuj.phogat@gmail.com>
Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
src/mesa/drivers/dri/i965/brw_fs.cpp
src/mesa/drivers/dri/i965/brw_fs.h
src/mesa/drivers/dri/i965/brw_wm.c
src/mesa/drivers/dri/i965/brw_wm.h