[Mesa-dev] [PATCH 09/10] gallium: add PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT

Roland Scheidegger sroland at vmware.com
Wed Apr 25 21:29:11 UTC 2018


Am 25.04.2018 um 23:16 schrieb Marek Olšák:
> From: Marek Olšák <marek.olsak at amd.com>
> 
> ---
>  src/gallium/docs/source/screen.rst               | 3 +++
>  src/gallium/drivers/etnaviv/etnaviv_screen.c     | 1 +
>  src/gallium/drivers/freedreno/freedreno_screen.c | 1 +
>  src/gallium/drivers/i915/i915_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_get.c            | 3 +++
>  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/vc5/vc5_screen.c             | 1 +
>  src/gallium/drivers/virgl/virgl_screen.c         | 1 +
>  src/gallium/include/pipe/p_defines.h             | 1 +
>  18 files changed, 22 insertions(+)
> 
> diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
> index 3837360fb40..7cc6d378306 100644
> --- a/src/gallium/docs/source/screen.rst
> +++ b/src/gallium/docs/source/screen.rst
> @@ -413,20 +413,23 @@ The integer capabilities:
>    supported priority levels.  A driver that does not support prioritized
>    contexts can return 0.
>  * ``PIPE_CAP_FENCE_SIGNAL``: True if the driver supports signaling semaphores
>    using fence_server_signal().
>  * ``PIPE_CAP_CONSTBUF0_FLAGS``: The bits of pipe_resource::flags that must be
>    set when binding that buffer as constant buffer 0. If the buffer doesn't have
>    those bits set, pipe_context::set_constant_buffer(.., 0, ..) is ignored
>    by the driver, and the driver can throw assertion failures.
>  * ``PIPE_CAP_PACKED_UNIFORMS``: True if the driver supports packed uniforms
>    as opposed to padding to vec4s.
> +* ``PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT``: The minimum supported alignment of
> +  the user_stride parameter of transfer_map. If 0, the user-specified stride
> +  is unsupported and the user_stride parameter is ignored.
Does this really make a whole lot of sense? What if the minimum stride
natively supported isn't always the same? What happens if the stride
requested is larger than what the hw usually would do, does that need to
be honored as well - it certainly looks like the cap query here wouldn't
answer that?

Roland




>  
>  
>  .. _pipe_capf:
>  
>  PIPE_CAPF_*
>  ^^^^^^^^^^^^^^^^
>  
>  The floating-point capabilities are:
>  
>  * ``PIPE_CAPF_MAX_LINE_WIDTH``: The maximum width of a regular line.
> diff --git a/src/gallium/drivers/etnaviv/etnaviv_screen.c b/src/gallium/drivers/etnaviv/etnaviv_screen.c
> index b0f8b4bebe3..915e7d7da7d 100644
> --- a/src/gallium/drivers/etnaviv/etnaviv_screen.c
> +++ b/src/gallium/drivers/etnaviv/etnaviv_screen.c
> @@ -267,20 +267,21 @@ etna_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     /* Stream output. */
>     case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
>     case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
>     case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
>     case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
>        return 0;
>  
>     /* Geometry shader output, unsupported. */
> diff --git a/src/gallium/drivers/freedreno/freedreno_screen.c b/src/gallium/drivers/freedreno/freedreno_screen.c
> index f338d756dfe..dd052a22f25 100644
> --- a/src/gallium/drivers/freedreno/freedreno_screen.c
> +++ b/src/gallium/drivers/freedreno/freedreno_screen.c
> @@ -333,20 +333,21 @@ fd_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>  	case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
>  	case PIPE_CAP_QUERY_SO_OVERFLOW:
>  	case PIPE_CAP_MEMOBJ:
>  	case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>  	case PIPE_CAP_TILE_RASTER_ORDER:
>  	case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>  	case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>  	case PIPE_CAP_FENCE_SIGNAL:
>  	case PIPE_CAP_CONSTBUF0_FLAGS:
>  	case PIPE_CAP_PACKED_UNIFORMS:
> +	case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>  		return 0;
>  
>  	case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>  		return screen->priority_mask;
>  
>  	case PIPE_CAP_DRAW_INDIRECT:
>  		if (is_a4xx(screen) || is_a5xx(screen))
>  			return 1;
>  		return 0;
>  
> diff --git a/src/gallium/drivers/i915/i915_screen.c b/src/gallium/drivers/i915/i915_screen.c
> index 59d2ec66284..6ec0d026bed 100644
> --- a/src/gallium/drivers/i915/i915_screen.c
> +++ b/src/gallium/drivers/i915/i915_screen.c
> @@ -320,20 +320,21 @@ i915_get_param(struct pipe_screen *screen, enum pipe_cap cap)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     case PIPE_CAP_MAX_VIEWPORTS:
>        return 1;
>  
>     case PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT:
>        return 64;
>  
>     case PIPE_CAP_GLSL_FEATURE_LEVEL:
>        return 120;
> diff --git a/src/gallium/drivers/llvmpipe/lp_screen.c b/src/gallium/drivers/llvmpipe/lp_screen.c
> index 3f5d0327bf9..736d5750953 100644
> --- a/src/gallium/drivers/llvmpipe/lp_screen.c
> +++ b/src/gallium/drivers/llvmpipe/lp_screen.c
> @@ -355,20 +355,21 @@ llvmpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>     }
>     /* should only get here on unhandled cases */
>     debug_printf("Unexpected PIPE_CAP %d query\n", param);
>     return 0;
>  }
>  
>  static int
>  llvmpipe_get_shader_param(struct pipe_screen *screen,
>                            enum pipe_shader_type shader,
> diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> index 1d1fbaad607..4965b16891b 100644
> --- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> +++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
> @@ -222,20 +222,21 @@ nv30_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
>        return 0x10de;
>     case PIPE_CAP_DEVICE_ID: {
>        uint64_t device_id;
>        if (nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) {
>           NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n");
>           return -1;
>        }
> diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> index 6fd2982e3cb..9a6e655f010 100644
> --- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> +++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
> @@ -274,20 +274,21 @@ nv50_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
>        return 0x10de;
>     case PIPE_CAP_DEVICE_ID: {
>        uint64_t device_id;
>        if (nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) {
>           NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n");
>           return -1;
>        }
> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> index eb50149b647..622e6fa40bd 100644
> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
> @@ -302,20 +302,21 @@ nvc0_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
>        return 0x10de;
>     case PIPE_CAP_DEVICE_ID: {
>        uint64_t device_id;
>        if (nouveau_getparam(dev, NOUVEAU_GETPARAM_PCI_DEVICE, &device_id)) {
>           NOUVEAU_ERR("NOUVEAU_GETPARAM_PCI_DEVICE failed.\n");
>           return -1;
>        }
> diff --git a/src/gallium/drivers/r300/r300_screen.c b/src/gallium/drivers/r300/r300_screen.c
> index 8ea2e87ce68..66e136125ce 100644
> --- a/src/gallium/drivers/r300/r300_screen.c
> +++ b/src/gallium/drivers/r300/r300_screen.c
> @@ -244,20 +244,21 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>          case PIPE_CAP_MEMOBJ:
>          case PIPE_CAP_LOAD_CONSTBUF:
>          case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>          case PIPE_CAP_TILE_RASTER_ORDER:
>          case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>          case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>          case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>          case PIPE_CAP_FENCE_SIGNAL:
>          case PIPE_CAP_CONSTBUF0_FLAGS:
>          case PIPE_CAP_PACKED_UNIFORMS:
> +        case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>              return 0;
>  
>          /* SWTCL-only features. */
>          case PIPE_CAP_PRIMITIVE_RESTART:
>          case PIPE_CAP_USER_VERTEX_BUFFERS:
>          case PIPE_CAP_TGSI_VS_WINDOW_SPACE_POSITION:
>              return !r300screen->caps.has_tcl;
>  
>          /* HWTCL-only features / limitations. */
>          case PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY:
> diff --git a/src/gallium/drivers/r600/r600_pipe.c b/src/gallium/drivers/r600/r600_pipe.c
> index 43f2dfae7ec..696646f3e7d 100644
> --- a/src/gallium/drivers/r600/r600_pipe.c
> +++ b/src/gallium/drivers/r600/r600_pipe.c
> @@ -408,20 +408,21 @@ static int r600_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
>  	case PIPE_CAP_QUERY_SO_OVERFLOW:
>  	case PIPE_CAP_MEMOBJ:
>  	case PIPE_CAP_LOAD_CONSTBUF:
>  	case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>  	case PIPE_CAP_TILE_RASTER_ORDER:
>  	case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>  	case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>  	case PIPE_CAP_FENCE_SIGNAL:
>  	case PIPE_CAP_CONSTBUF0_FLAGS:
>  	case PIPE_CAP_PACKED_UNIFORMS:
> +	case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>  		return 0;
>  
>  	case PIPE_CAP_DOUBLES:
>  		if (rscreen->b.family == CHIP_ARUBA ||
>  		    rscreen->b.family == CHIP_CAYMAN ||
>  		    rscreen->b.family == CHIP_CYPRESS ||
>  		    rscreen->b.family == CHIP_HEMLOCK)
>  			return 1;
>  		return 0;
>  	case PIPE_CAP_CULL_DISTANCE:
> diff --git a/src/gallium/drivers/radeonsi/si_get.c b/src/gallium/drivers/radeonsi/si_get.c
> index cb28920bbed..accbbbda053 100644
> --- a/src/gallium/drivers/radeonsi/si_get.c
> +++ b/src/gallium/drivers/radeonsi/si_get.c
> @@ -253,20 +253,23 @@ static int si_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>  		    sscreen->info.drm_major == 3 &&
>  		    sscreen->info.drm_minor >= 13)
>  			return RADEON_SPARSE_PAGE_SIZE;
>  		return 0;
>  
>  	case PIPE_CAP_PACKED_UNIFORMS:
>  		if (sscreen->debug_flags & DBG(NIR))
>  			return 1;
>  		return 0;
>  
> +	case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
> +		return sscreen->info.chip_class >= GFX9 ? 256 : 64;
> +
>  	/* Unsupported features. */
>  	case PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY:
>  	case PIPE_CAP_TGSI_FS_COORD_ORIGIN_LOWER_LEFT:
>  	case PIPE_CAP_TGSI_CAN_COMPACT_CONSTANTS:
>  	case PIPE_CAP_USER_VERTEX_BUFFERS:
>  	case PIPE_CAP_FAKE_SW_MSAA:
>  	case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
>  	case PIPE_CAP_VERTEXID_NOBASE:
>  	case PIPE_CAP_PRIMITIVE_RESTART_FOR_PATCHES:
>  	case PIPE_CAP_MAX_WINDOW_RECTANGLES:
> diff --git a/src/gallium/drivers/softpipe/sp_screen.c b/src/gallium/drivers/softpipe/sp_screen.c
> index 25f6f74f366..2a0b320c61d 100644
> --- a/src/gallium/drivers/softpipe/sp_screen.c
> +++ b/src/gallium/drivers/softpipe/sp_screen.c
> @@ -307,20 +307,21 @@ softpipe_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>     case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
>        return 4;
>     }
>     /* should only get here on unhandled cases */
>     debug_printf("Unexpected PIPE_CAP %d query\n", param);
>     return 0;
>  }
>  
>  static int
> diff --git a/src/gallium/drivers/svga/svga_screen.c b/src/gallium/drivers/svga/svga_screen.c
> index f5f07fa75eb..e5464761280 100644
> --- a/src/gallium/drivers/svga/svga_screen.c
> +++ b/src/gallium/drivers/svga/svga_screen.c
> @@ -445,20 +445,21 @@ svga_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>     }
>  
>     debug_printf("Unexpected PIPE_CAP_ query %u\n", param);
>     return 0;
>  }
>  
>  
>  static int
>  vgpu9_get_shader_param(struct pipe_screen *screen,
> diff --git a/src/gallium/drivers/swr/swr_screen.cpp b/src/gallium/drivers/swr/swr_screen.cpp
> index 880a177c399..613cd5b71c7 100644
> --- a/src/gallium/drivers/swr/swr_screen.cpp
> +++ b/src/gallium/drivers/swr/swr_screen.cpp
> @@ -340,20 +340,21 @@ swr_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>  
>     case PIPE_CAP_VENDOR_ID:
>        return 0xFFFFFFFF;
>     case PIPE_CAP_DEVICE_ID:
>        return 0xFFFFFFFF;
>     case PIPE_CAP_ACCELERATED:
>        return 0;
>     case PIPE_CAP_VIDEO_MEMORY: {
>        /* XXX: Do we want to return the full amount of system memory ? */
> diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c
> index cead71b77cd..5805394a25b 100644
> --- a/src/gallium/drivers/vc4/vc4_screen.c
> +++ b/src/gallium/drivers/vc4/vc4_screen.c
> @@ -282,20 +282,21 @@ vc4_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>          case PIPE_CAP_QUERY_SO_OVERFLOW:
>          case PIPE_CAP_MEMOBJ:
>          case PIPE_CAP_LOAD_CONSTBUF:
>          case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>          case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>          case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>          case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>          case PIPE_CAP_FENCE_SIGNAL:
>  	case PIPE_CAP_CONSTBUF0_FLAGS:
>          case PIPE_CAP_PACKED_UNIFORMS:
> +	case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>                  return 0;
>  
>                  /* Stream output. */
>          case PIPE_CAP_MAX_STREAM_OUTPUT_BUFFERS:
>          case PIPE_CAP_STREAM_OUTPUT_PAUSE_RESUME:
>          case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
>          case PIPE_CAP_MAX_STREAM_OUTPUT_SEPARATE_COMPONENTS:
>          case PIPE_CAP_MAX_STREAM_OUTPUT_INTERLEAVED_COMPONENTS:
>                  return 0;
>  
> diff --git a/src/gallium/drivers/vc5/vc5_screen.c b/src/gallium/drivers/vc5/vc5_screen.c
> index 271c2c878bb..9327fc682d1 100644
> --- a/src/gallium/drivers/vc5/vc5_screen.c
> +++ b/src/gallium/drivers/vc5/vc5_screen.c
> @@ -254,20 +254,21 @@ vc5_screen_get_param(struct pipe_screen *pscreen, enum pipe_cap param)
>          case PIPE_CAP_NIR_SAMPLERS_AS_DEREF:
>          case PIPE_CAP_QUERY_SO_OVERFLOW:
>          case PIPE_CAP_MEMOBJ:
>          case PIPE_CAP_LOAD_CONSTBUF:
>          case PIPE_CAP_TILE_RASTER_ORDER:
>          case PIPE_CAP_STREAM_OUTPUT_INTERLEAVE_BUFFERS:
>          case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>          case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>  	case PIPE_CAP_CONSTBUF0_FLAGS:
>          case PIPE_CAP_PACKED_UNIFORMS:
> +	case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>                  return 0;
>  
>                  /* Geometry shader output, unsupported. */
>          case PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES:
>          case PIPE_CAP_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS:
>                  return 0;
>  
>                  /* Texturing. */
>          case PIPE_CAP_MAX_TEXTURE_2D_LEVELS:
>          case PIPE_CAP_MAX_TEXTURE_CUBE_LEVELS:
> diff --git a/src/gallium/drivers/virgl/virgl_screen.c b/src/gallium/drivers/virgl/virgl_screen.c
> index 02613f18663..282c536a44c 100644
> --- a/src/gallium/drivers/virgl/virgl_screen.c
> +++ b/src/gallium/drivers/virgl/virgl_screen.c
> @@ -269,20 +269,21 @@ virgl_get_param(struct pipe_screen *screen, enum pipe_cap param)
>     case PIPE_CAP_MEMOBJ:
>     case PIPE_CAP_LOAD_CONSTBUF:
>     case PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS:
>     case PIPE_CAP_TILE_RASTER_ORDER:
>     case PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES:
>     case PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET:
>     case PIPE_CAP_CONTEXT_PRIORITY_MASK:
>     case PIPE_CAP_FENCE_SIGNAL:
>     case PIPE_CAP_CONSTBUF0_FLAGS:
>     case PIPE_CAP_PACKED_UNIFORMS:
> +   case PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT:
>        return 0;
>     case PIPE_CAP_VENDOR_ID:
>        return 0x1af4;
>     case PIPE_CAP_DEVICE_ID:
>        return 0x1010;
>     case PIPE_CAP_ACCELERATED:
>        return 1;
>     case PIPE_CAP_UMA:
>     case PIPE_CAP_VIDEO_MEMORY:
>        return 0;
> diff --git a/src/gallium/include/pipe/p_defines.h b/src/gallium/include/pipe/p_defines.h
> index c4ae0532060..eff7b48ea73 100644
> --- a/src/gallium/include/pipe/p_defines.h
> +++ b/src/gallium/include/pipe/p_defines.h
> @@ -788,20 +788,21 @@ enum pipe_cap
>     PIPE_CAP_MEMOBJ,
>     PIPE_CAP_LOAD_CONSTBUF,
>     PIPE_CAP_TGSI_ANY_REG_AS_ADDRESS,
>     PIPE_CAP_TILE_RASTER_ORDER,
>     PIPE_CAP_MAX_COMBINED_SHADER_OUTPUT_RESOURCES,
>     PIPE_CAP_SIGNED_VERTEX_BUFFER_OFFSET,
>     PIPE_CAP_CONTEXT_PRIORITY_MASK,
>     PIPE_CAP_FENCE_SIGNAL,
>     PIPE_CAP_CONSTBUF0_FLAGS,
>     PIPE_CAP_PACKED_UNIFORMS,
> +   PIPE_CAP_TRANSFER_USER_STRIDE_ALIGNMENT,
>  };
>  
>  /**
>   * Possible bits for PIPE_CAP_CONTEXT_PRIORITY_MASK param, which should
>   * return a bitmask of the supported priorities.  If the driver does not
>   * support prioritized contexts, it can return 0.
>   *
>   * Note that these match __DRI2_RENDER_HAS_CONTEXT_PRIORITY_*
>   */
>  #define PIPE_CONTEXT_PRIORITY_LOW     (1 << 0)
> 



More information about the mesa-dev mailing list