[Mesa-dev] [PATCH 11/12] nvc0: Implement cull_distance as a special form of clip distance

Ilia Mirkin imirkin at alum.mit.edu
Mon Apr 4 02:32:17 UTC 2016


On Sun, Apr 3, 2016 at 10:15 PM, Dave Airlie <airlied at gmail.com> wrote:
> From: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
>
> This enables ARB_cull_distance.

This isn't enough - something needs to lower the CULLDIST into
CLIPDIST (or some combined thing). Ideally they'd both just come in as
CLIPDIST and the property would let us know where the split is.

>
> Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
> ---
>  docs/GL3.txt                                    | 2 +-
>  src/gallium/drivers/nouveau/nvc0/nvc0_program.c | 2 ++
>  src/gallium/drivers/nouveau/nvc0/nvc0_program.h | 1 +
>  src/gallium/drivers/nouveau/nvc0/nvc0_screen.c  | 2 +-
>  4 files changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/docs/GL3.txt b/docs/GL3.txt
> index 5b6dc89..f28c8a9 100644
> --- a/docs/GL3.txt
> +++ b/docs/GL3.txt
> @@ -211,7 +211,7 @@ GL 4.5, GLSL 4.50:
>    GL_ARB_ES3_1_compatibility                            not started
>    GL_ARB_clip_control                                   DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
>    GL_ARB_conditional_render_inverted                    DONE (i965, nv50, nvc0, r600, radeonsi, llvmpipe, softpipe)
> -  GL_ARB_cull_distance                                  in progress (Tobias)
> +  GL_ARB_cull_distance                                  DONE (softpipe)

Presumably this would be nvc0, not softpipe?

>    GL_ARB_derivative_control                             DONE (i965, nv50, nvc0, r600, radeonsi)
>    GL_ARB_direct_state_access                            DONE (all drivers)
>    GL_ARB_get_texture_sub_image                          DONE (all drivers)
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> index db02fa2..5ca6faa 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> @@ -49,6 +49,7 @@ nvc0_shader_input_address(unsigned sn, unsigned si)
>     case TGSI_SEMANTIC_COLOR:        return 0x280 + si * 0x10;
>     case TGSI_SEMANTIC_BCOLOR:       return 0x2a0 + si * 0x10;
>     case TGSI_SEMANTIC_CLIPDIST:     return 0x2c0 + si * 0x10;
> +   case TGSI_SEMANTIC_CULLDIST:     return 0x2c0 + si * 0x10;
>     case TGSI_SEMANTIC_CLIPVERTEX:   return 0x270;
>     case TGSI_SEMANTIC_PCOORD:       return 0x2e0;
>     case TGSI_SEMANTIC_TESSCOORD:    return 0x2f0;
> @@ -78,6 +79,7 @@ nvc0_shader_output_address(unsigned sn, unsigned si)
>     case TGSI_SEMANTIC_COLOR:         return 0x280 + si * 0x10;
>     case TGSI_SEMANTIC_BCOLOR:        return 0x2a0 + si * 0x10;
>     case TGSI_SEMANTIC_CLIPDIST:      return 0x2c0 + si * 0x10;
> +   case TGSI_SEMANTIC_CULLDIST:      return 0x2c0 + si * 0x10;
>     case TGSI_SEMANTIC_CLIPVERTEX:    return 0x270;
>     case TGSI_SEMANTIC_TEXCOORD:      return 0x300 + si * 0x10;
>     case TGSI_SEMANTIC_EDGEFLAG:      return ~0;
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
> index 8b8d221..d5c0d06 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_program.h
> @@ -39,6 +39,7 @@ struct nvc0_program {
>     struct {
>        uint32_t clip_mode; /* clip/cull selection */
>        uint8_t clip_enable; /* mask of defined clip planes */
> +      uint8_t cull_enable; /* mask of defined cull planes */
>        uint8_t num_ucps; /* also set to max if ClipDistance is used */
>        uint8_t edgeflag; /* attribute index of edgeflag input */
>        bool need_vertex_id;
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index 21cb75d..f74c588 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -203,6 +203,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
>     case PIPE_CAP_TGSI_FS_FACE_IS_INTEGER_SYSVAL:
>     case PIPE_CAP_QUERY_BUFFER_OBJECT:
> +   case PIPE_CAP_CULL_DISTANCE:
>        return 1;
>     case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
>        return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
> @@ -238,7 +239,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_PCI_BUS:
>     case PIPE_CAP_PCI_DEVICE:
>     case PIPE_CAP_PCI_FUNCTION:
> -   case PIPE_CAP_CULL_DISTANCE:
>        return 0;
>
>     case PIPE_CAP_VENDOR_ID:
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list