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

Samuel Pitoiset samuel.pitoiset at gmail.com
Tue May 10 08:55:12 UTC 2016



On 05/08/2016 10:44 PM, Tobias Klausmann wrote:
> This enables ARB_cull_distance.
>
> Signed-off-by: Tobias Klausmann <tobias.johannes.klausmann at mni.thm.de>
> ---
>  docs/GL3.txt                                    | 2 +-
>  docs/relnotes/11.3.0.html                       | 1 +
>  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 +-
>  5 files changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/docs/GL3.txt b/docs/GL3.txt
> index e2dabea..07a90191 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 (nvc0, 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/docs/relnotes/11.3.0.html b/docs/relnotes/11.3.0.html
> index 4977afe..42577eb 100644
> --- a/docs/relnotes/11.3.0.html
> +++ b/docs/relnotes/11.3.0.html
> @@ -46,6 +46,7 @@ Note: some of the new features are only available with certain drivers.
>  <ul>
>  <li>OpenGL 4.2 on radeonsi</li>
>  <li>GL_ARB_compute_shader on radeonsi, softpipe</li>
> +<li>GL_ARB_cull_distance on nvc0, softpipe</li>
>  <li>GL_ARB_framebuffer_no_attachments on nvc0, r600, radeonsi, softpipe</li>
>  <li>GL_ARB_internalformat_query2 on all drivers</li>
>  <li>GL_ARB_query_buffer_object on i965/hsw+</li>
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_program.c b/src/gallium/drivers/nouveau/nvc0/nvc0_program.c
> index ca6349c..a9395c4 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 */

Btw, this field seems to be unused.

>        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 da9eddc..6843a5d 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -227,6 +227,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_INVALIDATE_BUFFER:
>     case PIPE_CAP_STRING_MARKER:
>     case PIPE_CAP_FRAMEBUFFER_NO_ATTACHMENT:
> +   case PIPE_CAP_CULL_DISTANCE:
>        return 1;
>     case PIPE_CAP_SEAMLESS_CUBE_MAP_PER_TEXTURE:
>        return (class_3d >= NVE4_3D_CLASS) ? 1 : 0;
> @@ -261,7 +262,6 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_PCI_DEVICE:
>     case PIPE_CAP_PCI_FUNCTION:
>     case PIPE_CAP_ROBUST_BUFFER_ACCESS_BEHAVIOR:
> -   case PIPE_CAP_CULL_DISTANCE:
>        return 0;
>
>     case PIPE_CAP_VENDOR_ID:
>


More information about the mesa-dev mailing list