[Mesa-dev] [PATCH 6/6] nvc0: Add support for NV_fill_rectangle for the GM200+

Ilia Mirkin imirkin at alum.mit.edu
Thu Mar 23 16:20:42 UTC 2017


On Thu, Mar 23, 2017 at 11:27 AM, Lyude <lyude at redhat.com> wrote:
> This enables support for the GL_NV_fill_rectangle extension on the
> GM200+ for OpenGL 4.3.

For desktop GL. Also please add a note in docs/17.1.0/relnotes.html.

>
> Signed-off-by: Lyude <lyude at redhat.com>
> ---
>  src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h   | 3 +++
>  src/gallium/drivers/nouveau/nvc0/nvc0_screen.c   | 3 ++-
>  src/gallium/drivers/nouveau/nvc0/nvc0_state.c    | 4 ++++
>  src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h | 2 +-
>  4 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h
> index 1be5952..accde94 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_3d.xml.h
> @@ -772,6 +772,9 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
>  #define NVC0_3D_VTX_ATTR_MASK_UNK0DD0_ALT__ESIZE               0x00000004
>  #define NVC0_3D_VTX_ATTR_MASK_UNK0DD0_ALT__LEN                 0x00000004
>
> +#define NVC0_3D_FILL_RECTANGLE                                 0x0000113c
> +#define NVC0_3D_FILL_RECTANGLE_ENABLE                          0x00000002
> +
>  #define NVC0_3D_UNK1140                                        0x00001140
>
>  #define NVC0_3D_UNK1144                                        0x00001144
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index 945101b..f0e4e12 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -256,6 +256,8 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>        return nouveau_screen(pscreen)->vram_domain & NOUVEAU_BO_VRAM ? 1 : 0;
>     case PIPE_CAP_TGSI_FS_FBFETCH:
>        return class_3d >= NVE4_3D_CLASS; /* needs testing on fermi */
> +   case PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE:
> +      return (class_3d >= GM200_3D_CLASS);

Unnecessary parens.

>
>     /* unsupported caps */
>     case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
> @@ -285,7 +287,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_NATIVE_FENCE_FD:
>     case PIPE_CAP_GLSL_OPTIMIZE_CONSERVATIVELY:
>     case PIPE_CAP_INT64_DIVMOD:
> -   case PIPE_CAP_POLYGON_MODE_FILL_RECTANGLE:
>        return 0;
>
>     case PIPE_CAP_VENDOR_ID:
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> index 32233a5..803843b 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_state.c
> @@ -261,6 +261,10 @@ nvc0_rasterizer_state_create(struct pipe_context *pipe,
>      SB_IMMED_3D(so, POINT_SPRITE_ENABLE, cso->point_quad_rasterization);
>      SB_IMMED_3D(so, POINT_SMOOTH_ENABLE, cso->point_smooth);
>
> +    SB_IMMED_3D(so, FILL_RECTANGLE,
> +                cso->fill_front == PIPE_POLYGON_MODE_FILL_RECTANGLE ?
> +                NVC0_3D_FILL_RECTANGLE_ENABLE : 0);
> +

Well *that* was easy :)

>      SB_BEGIN_3D(so, MACRO_POLYGON_MODE_FRONT, 1);
>      SB_DATA    (so, nvgl_polygon_mode(cso->fill_front));
>      SB_BEGIN_3D(so, MACRO_POLYGON_MODE_BACK, 1);
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h b/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h
> index 054b1e7..3006ed6 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_stateobj.h
> @@ -23,7 +23,7 @@ struct nvc0_blend_stateobj {
>  struct nvc0_rasterizer_stateobj {
>     struct pipe_rasterizer_state pipe;
>     int size;
> -   uint32_t state[42];
> +   uint32_t state[43];
>  };
>
>  struct nvc0_zsa_stateobj {
> --
> 2.9.3
>


More information about the mesa-dev mailing list