[Mesa-dev] [PATCH 1/4] gallium: add an interface for EXT_depth_bounds_test

Roland Scheidegger sroland at vmware.com
Thu Aug 13 14:19:08 PDT 2015


I guess the question is if those depth bounds floats should be in the
dsa state or set separately. That would mostly depend on if you expect
frequent changes to the values or not, at least that's the pattern
usually followed. Either way though looks ok to me.

Reviewed-by: Roland Scheidegger <sroland at vmware.com>

Am 13.08.2015 um 22:32 schrieb Marek Olšák:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>  src/gallium/docs/source/screen.rst               | 3 +++
>  src/gallium/drivers/freedreno/freedreno_screen.c | 1 +
>  src/gallium/drivers/i915/i915_screen.c           | 1 +
>  src/gallium/drivers/ilo/ilo_screen.c             | 1 +
>  src/gallium/drivers/llvmpipe/lp_screen.c         | 1 +
>  src/gallium/drivers/nouveau/nv30/nv30_screen.c   | 1 +
>  src/gallium/drivers/nouveau/nv50/nv50_screen.c   | 1 +
>  src/gallium/drivers/nouveau/nvc0/nvc0_screen.c   | 1 +
>  src/gallium/drivers/r300/r300_screen.c           | 1 +
>  src/gallium/drivers/r600/r600_pipe.c             | 1 +
>  src/gallium/drivers/radeonsi/si_pipe.c           | 1 +
>  src/gallium/drivers/softpipe/sp_screen.c         | 1 +
>  src/gallium/drivers/svga/svga_screen.c           | 1 +
>  src/gallium/drivers/vc4/vc4_screen.c             | 1 +
>  src/gallium/include/pipe/p_defines.h             | 1 +
>  src/gallium/include/pipe/p_state.h               | 3 +++
>  16 files changed, 20 insertions(+)
> 
> diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
> index c0b5eb3..2c0da01 100644
> --- a/src/gallium/docs/source/screen.rst
> +++ b/src/gallium/docs/source/screen.rst
> @@ -264,6 +264,9 @@ The integer capabilities:
>  * ``PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR``: Whether the linear minification and
>    magnification filters are supported with half-precision floating-point
>    textures.
> +* ``PIPE_CAP_DEPTH_BOUNDS_TEST``: Whether bounds_test, bounds_min, and
> +  bounds_max states of pipe_depth_stencil_alpha_state behave according
> +  to the GL_EXT_depth_bounds_test specification.
>  
>  
>  .. _pipe_capf:
> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
> index 295ce7e..b55f5b3 100644
> --- a/src/gallium/drivers/freedreno/freedreno_screen.c
> +++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> @@ -232,6 +232,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>  	case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>  	case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>  	case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +	case PIPE_CAP_DEPTH_BOUNDS_TEST:
>  		return 0;
>  
>  	case PIPE_CAP_MAX_VIEWPORTS:
> diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c
> index 7608ca5..19a94a8 100644
> --- a/src/gallium/drivers/i915/i915_screen.c
> +++ b/src/gallium/drivers/i915/i915_screen.c
> @@ -246,6 +246,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>     case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>     case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>  
>     case PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS:
> diff --git a/src/gallium/drivers/ilo/ilo_screen.c b/src/gallium/drivers/ilo/ilo_screen.c
> index 9f150bb..ab4d137 100644
> --- a/src/gallium/drivers/ilo/ilo_screen.c
> +++ b/src/gallium/drivers/ilo/ilo_screen.c
> @@ -468,6 +468,7 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
>     case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
> index 539bb44..14eeab0 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -295,6 +295,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
>     case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>     }
>     /* should only get here on unhandled cases */
> diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> index 73bcd5b..efa766d 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> @@ -166,6 +166,7 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>     case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>     case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> index 1e19877..2479cbd 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -213,6 +213,7 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
>     case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index 0c25ec4..54b469b 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -199,6 +199,7 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_VERTEXID_NOBASE:
>     case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
>     case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
> diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
> index 74aae37..4ca0b26 100644
> --- a/src/gallium/drivers/r300/r300_screen.c
> +++ b/src/gallium/drivers/r300/r300_screen.c
> @@ -194,6 +194,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>          case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>          case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>          case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +        case PIPE_CAP_DEPTH_BOUNDS_TEST:
>              return 0;
>  
>          /* SWTCL-only features. */
> diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
> index a0fe1d3..6ffe561 100644
> --- a/src/gallium/drivers/r600/r600_pipe.c
> +++ b/src/gallium/drivers/r600/r600_pipe.c
> @@ -339,6 +339,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>  	case PIPE_CAP_SAMPLER_VIEW_TARGET:
>  	case PIPE_CAP_VERTEXID_NOBASE:
>  	case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> +	case PIPE_CAP_DEPTH_BOUNDS_TEST:
>  		return 0;
>  
>  	/* Stream output. */
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index 83b304b..cd22862 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -324,6 +324,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>  	case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
>  	case PIPE_CAP_SAMPLER_VIEW_TARGET:
>  	case PIPE_CAP_VERTEXID_NOBASE:
> +	case PIPE_CAP_DEPTH_BOUNDS_TEST:
>  		return 0;
>  
>  	case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
> index 49a21d9..0bfd9c3 100644
> --- a/src/gallium/drivers/softpipe/sp_screen.c
> +++ b/src/gallium/drivers/softpipe/sp_screen.c
> @@ -245,6 +245,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_RESOURCE_FROM_USER_MEMORY:
>     case PIPE_CAP_DEVICE_RESET_STATUS_QUERY:
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>     }
>     /* should only get here on unhandled cases */
> diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
> index 7b70272..66c3dea 100644
> --- a/src/gallium/drivers/svga/svga_screen.c
> +++ b/src/gallium/drivers/svga/svga_screen.c
> @@ -312,6 +312,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>     case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>     case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +   case PIPE_CAP_DEPTH_BOUNDS_TEST:
>        return 0;
>     }
>  
> diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
> index 72f0826..2dee1d4 100644
> --- a/src/gallium/drivers/vc4/vc4_screen.c
> +++ b/src/gallium/drivers/vc4/vc4_screen.c
> @@ -179,6 +179,7 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>  	case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
>  	case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
>  	case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
> +	case PIPE_CAP_DEPTH_BOUNDS_TEST:
>                  return 0;
>  
>                  /* Stream output. */
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index 83a3e2b..2ba56ea 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -609,6 +609,7 @@ enum pipe_cap
>     PIPE_CAP_MAX_SHADER_PATCH_VARYINGS,
>     PIPE_CAP_TEXTURE_FLOAT_LINEAR,
>     PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR,
> +   PIPE_CAP_DEPTH_BOUNDS_TEST,
>  };
>  
>  #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
> diff --git a/src/gallium/include/pipe/p_state.h b/src/gallium/include/pipe/p_state.h
> index a233610..1e493f4 100644
> --- a/src/gallium/include/pipe/p_state.h
> +++ b/src/gallium/include/pipe/p_state.h
> @@ -223,6 +223,9 @@ struct pipe_depth_state
>     unsigned enabled:1;         /**< depth test enabled? */
>     unsigned writemask:1;       /**< allow depth buffer writes? */
>     unsigned func:3;            /**< depth test func (PIPE_FUNC_x) */
> +   unsigned bounds_test:1;     /**< depth bounds test enabled? */
> +   float bounds_min;           /**< minimum depth bound */
> +   float bounds_max;           /**< maximum depth bound */
>  };
>  
>  
> 



More information about the mesa-dev mailing list