[Mesa-dev] [PATCH 3/4] expose ARB_robust_buffer_access_behavior

Nicolai Hähnle nhaehnle at gmail.com
Mon Apr 4 21:01:37 UTC 2016


Capitalize the commit title.

It might be nice to split this patch up into mesa/main and Gallium parts.

Also...

On 04.04.2016 06:41, Bas Nieuwenhuizen wrote:
> Signed-off-by: Bas Nieuwenhuizen <bas at basnieuwenhuizen.nl>
> ---
>   src/gallium/docs/source/screen.rst               | 4 +++-
>   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/swr/swr_screen.cpp           | 1 +
>   src/gallium/drivers/vc4/vc4_screen.c             | 1 +
>   src/gallium/drivers/virgl/virgl_screen.c         | 1 +
>   src/gallium/include/pipe/p_defines.h             | 1 +
>   src/mesa/main/extensions_table.h                 | 1 +
>   src/mesa/main/mtypes.h                           | 1 +
>   src/mesa/main/version.c                          | 2 +-
>   src/mesa/state_tracker/st_extensions.c           | 1 +
>   21 files changed, 23 insertions(+), 2 deletions(-)
>
> diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
> index 47a19de..02564bd 100644
> --- a/src/gallium/docs/source/screen.rst
> +++ b/src/gallium/docs/source/screen.rst
> @@ -323,7 +323,9 @@ The integer capabilities:
>   * ``PIPE_CAP_PCI_BUS``: Return the PCI bus number.
>   * ``PIPE_CAP_PCI_DEVICE``: Return the PCI device number.
>   * ``PIPE_CAP_PCI_FUNCTION``: Return the PCI function number.
> -
> +* ``PIPE_CAP_ROBUST_BUFFER_ACCESS``: Implementation uses bounds checking on
> +  resource accesses by shader if the context is create with

*created.

Also, I think this comment should say slightly more about how the bounds 
checking works, because ARB_robust_buffer_access_behavior says more, 
i.e. stores being dropped and loads returning 0 or some value from 
inside the buffer. Maybe just state that the intended out-of-bounds 
behavior is that of the extension.

Cheers,
Nicolai

> +  PIPE_CONTEXT_ROBUST_BUFFER_ACCESS.
>
>   .. _pipe_capf:
>
> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
> index d47cb07..6bd3d81 100644
> --- a/src/gallium/drivers/freedreno/freedreno_screen.c
> +++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> @@ -255,6 +255,7 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>   	case PIPE_CAP_INVALIDATE_BUFFER:
>   	case PIPE_CAP_GENERATE_MIPMAP:
>   	case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
> +	case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>   		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 f4aa310..b8ad3c8 100644
> --- a/src/gallium/drivers/i915/i915_screen.c
> +++ b/src/gallium/drivers/i915/i915_screen.c
> @@ -269,6 +269,7 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         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 7812c82..ebe17a0 100644
> --- a/src/gallium/drivers/ilo/ilo_screen.c
> +++ b/src/gallium/drivers/ilo/ilo_screen.c
> @@ -498,6 +498,7 @@ ilo_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         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 2529b54..6d54685 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -319,6 +319,7 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         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 b105c6a..5e11c90 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> @@ -192,6 +192,7 @@ nv30_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_ROBUST_BUFFER_ACCESS:
>         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 ba5e500..12f35ce 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -245,6 +245,7 @@ nv50_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_ROBUST_BUFFER_ACCESS:
>         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 14438ce..f41c4d5 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -238,6 +238,7 @@ 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_ROBUST_BUFFER_ACCESS:
>         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 1c3bb64..70eab28 100644
> --- a/src/gallium/drivers/r300/r300_screen.c
> +++ b/src/gallium/drivers/r300/r300_screen.c
> @@ -214,6 +214,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>           case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
>           case PIPE_CAP_QUERY_BUFFER_OBJECT:
>           case PIPE_CAP_QUERY_MEMORY_INFO:
> +	case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>               return 0;
>
>           /* SWTCL-only features. */
> diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
> index c97e341..993f189 100644
> --- a/src/gallium/drivers/r600/r600_pipe.c
> +++ b/src/gallium/drivers/r600/r600_pipe.c
> @@ -364,6 +364,7 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>   	case PIPE_CAP_GENERATE_MIPMAP:
>   	case PIPE_CAP_STRING_MARKER:
>   	case PIPE_CAP_QUERY_BUFFER_OBJECT:
> +	case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>   		return 0;
>
>   	case PIPE_CAP_MAX_SHADER_PATCH_VARYINGS:
> diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
> index f9e3e8c..e0fecac 100644
> --- a/src/gallium/drivers/radeonsi/si_pipe.c
> +++ b/src/gallium/drivers/radeonsi/si_pipe.c
> @@ -358,6 +358,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>   	case PIPE_CAP_GENERATE_MIPMAP:
>   	case PIPE_CAP_STRING_MARKER:
>   	case PIPE_CAP_QUERY_BUFFER_OBJECT:
> +	case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>   		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 bfd3598..ea5e91c 100644
> --- a/src/gallium/drivers/softpipe/sp_screen.c
> +++ b/src/gallium/drivers/softpipe/sp_screen.c
> @@ -270,6 +270,7 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         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 c0873c0..c4c251f 100644
> --- a/src/gallium/drivers/svga/svga_screen.c
> +++ b/src/gallium/drivers/svga/svga_screen.c
> @@ -364,6 +364,7 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         return 0;
>      case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
>         return 64;
> diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
> index f9e52be..7bc0b91 100644
> --- a/src/gallium/drivers/swr/swr_screen.cpp
> +++ b/src/gallium/drivers/swr/swr_screen.cpp
> @@ -337,6 +337,7 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_SURFACE_REINTERPRET_BLOCKS:
>      case PIPE_CAP_QUERY_BUFFER_OBJECT:
>      case PIPE_CAP_QUERY_MEMORY_INFO:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         return 0;
>      }
>
> diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
> index 92d910b..0d47b8e 100644
> --- a/src/gallium/drivers/vc4/vc4_screen.c
> +++ b/src/gallium/drivers/vc4/vc4_screen.c
> @@ -207,6 +207,7 @@ vc4_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_ROBUST_BUFFER_ACCESS:
>                   return 0;
>
>                   /* Stream output. */
> diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c
> index 8126bde..d53747c 100644
> --- a/src/gallium/drivers/virgl/virgl_screen.c
> +++ b/src/gallium/drivers/virgl/virgl_screen.c
> @@ -239,6 +239,7 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
>      case PIPE_CAP_PCI_BUS:
>      case PIPE_CAP_PCI_DEVICE:
>      case PIPE_CAP_PCI_FUNCTION:
> +   case PIPE_CAP_ROBUST_BUFFER_ACCESS:
>         return 0;
>      case PIPE_CAP_VENDOR_ID:
>         return 0x1af4;
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index 6f30f9e..d95f416 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -690,6 +690,7 @@ enum pipe_cap
>      PIPE_CAP_PCI_BUS,
>      PIPE_CAP_PCI_DEVICE,
>      PIPE_CAP_PCI_FUNCTION,
> +   PIPE_CAP_ROBUST_BUFFER_ACCESS,
>   };
>
>   #define PIPE_QUIRK_TEXTURE_BORDER_COLOR_SWIZZLE_NV50 (1 << 0)
> diff --git a/src/mesa/main/extensions_table.h b/src/mesa/main/extensions_table.h
> index 1190390..54811b6 100644
> --- a/src/mesa/main/extensions_table.h
> +++ b/src/mesa/main/extensions_table.h
> @@ -91,6 +91,7 @@ EXT(ARB_point_sprite                        , ARB_point_sprite
>   EXT(ARB_program_interface_query             , dummy_true                             , GLL, GLC,  x ,  x , 2012)
>   EXT(ARB_provoking_vertex                    , EXT_provoking_vertex                   , GLL, GLC,  x ,  x , 2009)
>   EXT(ARB_query_buffer_object                 , ARB_query_buffer_object                , GLL, GLC,  x ,  x , 2013)
> +EXT(ARB_robust_buffer_access_behavior       , ARB_robust_buffer_access_behavior      , GLL, GLC,  x ,  x , 2012)
>   EXT(ARB_robustness                          , dummy_true                             , GLL, GLC,  x ,  x , 2010)
>   EXT(ARB_sample_shading                      , ARB_sample_shading                     , GLL, GLC,  x ,  x , 2009)
>   EXT(ARB_sampler_objects                     , dummy_true                             , GLL, GLC,  x ,  x , 2009)
> diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
> index b2060c2..bf0773e 100644
> --- a/src/mesa/main/mtypes.h
> +++ b/src/mesa/main/mtypes.h
> @@ -3817,6 +3817,7 @@ struct gl_extensions
>      GLboolean ARB_pipeline_statistics_query;
>      GLboolean ARB_point_sprite;
>      GLboolean ARB_query_buffer_object;
> +   GLboolean ARB_robust_buffer_access_behavior;
>      GLboolean ARB_sample_shading;
>      GLboolean ARB_seamless_cube_map;
>      GLboolean ARB_shader_atomic_counter_ops;
> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
> index 2af3653..b9c1bcb 100644
> --- a/src/mesa/main/version.c
> +++ b/src/mesa/main/version.c
> @@ -361,7 +361,7 @@ compute_version(const struct gl_extensions *extensions,
>                            extensions->ARB_fragment_layer_viewport &&
>                            extensions->ARB_framebuffer_no_attachments &&
>                            extensions->ARB_internalformat_query2 &&
> -                         /* extensions->ARB_robust_buffer_access_behavior */ 0 &&
> +                         extensions->ARB_robust_buffer_access_behavior &&
>                            extensions->ARB_shader_image_size &&
>                            extensions->ARB_shader_storage_buffer_object &&
>                            extensions->ARB_stencil_texturing &&
> diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
> index 7bbe87d..b5f744b 100644
> --- a/src/mesa/state_tracker/st_extensions.c
> +++ b/src/mesa/state_tracker/st_extensions.c
> @@ -577,6 +577,7 @@ void st_init_extensions(struct pipe_screen *screen,
>         { o(ARB_pipeline_statistics_query),    PIPE_CAP_QUERY_PIPELINE_STATISTICS        },
>         { o(ARB_point_sprite),                 PIPE_CAP_POINT_SPRITE                     },
>         { o(ARB_query_buffer_object),          PIPE_CAP_QUERY_BUFFER_OBJECT              },
> +      { o(ARB_robust_buffer_access_behavior), PIPE_CAP_ROBUST_BUFFER_ACCESS            },
>         { o(ARB_sample_shading),               PIPE_CAP_SAMPLE_SHADING                   },
>         { o(ARB_seamless_cube_map),            PIPE_CAP_SEAMLESS_CUBE_MAP                },
>         { o(ARB_shader_draw_parameters),       PIPE_CAP_DRAW_PARAMETERS                  },
>


More information about the mesa-dev mailing list