[Mesa-dev] [PATCH] virgl: add ARB_texture_view support

Gert Wollny gert.wollny at collabora.com
Wed Jun 20 14:11:41 UTC 2018


Looks good to me 
Reviewed-By: Gert Wollny <gert.wollny at collabora.com>

Am Freitag, den 08.06.2018, 11:20 +1000 schrieb Dave Airlie:
> From: Dave Airlie <airlied at redhat.com>
> 
> ---
>  docs/features.txt                        | 2 +-
>  src/gallium/drivers/virgl/virgl_encode.c | 7 +++++--
>  src/gallium/drivers/virgl/virgl_hw.h     | 1 +
>  src/gallium/drivers/virgl/virgl_screen.c | 3 ++-
>  4 files changed, 9 insertions(+), 4 deletions(-)
> 
> diff --git a/docs/features.txt b/docs/features.txt
> index 6e5cbc8b11e..118ed8a76ae 100644
> --- a/docs/features.txt
> +++ b/docs/features.txt
> @@ -187,7 +187,7 @@ GL 4.3, GLSL 4.30 -- all DONE: i965/gen8+, nvc0,
> r600, radeonsi
>    GL_ARB_texture_buffer_range                           DONE
> (freedreno, nv50, i965, llvmpipe, virgl)
>    GL_ARB_texture_query_levels                           DONE (all
> drivers that support GLSL 1.30)
>    GL_ARB_texture_storage_multisample                    DONE (all
> drivers that support GL_ARB_texture_multisample)
> -  GL_ARB_texture_view                                   DONE
> (freedreno, i965, nv50, llvmpipe, softpipe, swr)
> +  GL_ARB_texture_view                                   DONE
> (freedreno, i965, nv50, llvmpipe, softpipe, swr, virgl)
>    GL_ARB_vertex_attrib_binding                          DONE (all
> drivers)
>  
>  
> diff --git a/src/gallium/drivers/virgl/virgl_encode.c
> b/src/gallium/drivers/virgl/virgl_encode.c
> index f3cbd1ca4b0..373f1d494e0 100644
> --- a/src/gallium/drivers/virgl/virgl_encode.c
> +++ b/src/gallium/drivers/virgl/virgl_encode.c
> @@ -585,12 +585,15 @@ int virgl_encode_sampler_view(struct
> virgl_context *ctx,
>                               const struct pipe_sampler_view *state)
>  {
>     unsigned elem_size = util_format_get_blocksize(state->format);
> -
> +   struct virgl_screen *rs = virgl_screen(ctx->base.screen);
>     uint32_t tmp;
> +   uint32_t dword_fmt_target = state->format;
>     virgl_encoder_write_cmd_dword(ctx,
> VIRGL_CMD0(VIRGL_CCMD_CREATE_OBJECT, VIRGL_OBJECT_SAMPLER_VIEW,
> VIRGL_OBJ_SAMPLER_VIEW_SIZE));
>     virgl_encoder_write_dword(ctx->cbuf, handle);
>     virgl_encoder_write_res(ctx, res);
> -   virgl_encoder_write_dword(ctx->cbuf, state->format);
> +   if (rs->caps.caps.v2.capability_bits & VIRGL_CAP_TEXTURE_VIEW)
> +     dword_fmt_target |= (state->target << 24);
> +   virgl_encoder_write_dword(ctx->cbuf, dword_fmt_target);
>     if (res->u.b.target == PIPE_BUFFER) {
>        virgl_encoder_write_dword(ctx->cbuf, state->u.buf.offset /
> elem_size);
>        virgl_encoder_write_dword(ctx->cbuf, (state->u.buf.offset +
> state->u.buf.size) / elem_size - 1);
> diff --git a/src/gallium/drivers/virgl/virgl_hw.h
> b/src/gallium/drivers/virgl/virgl_hw.h
> index ee58520f9bb..d338051d9b3 100644
> --- a/src/gallium/drivers/virgl/virgl_hw.h
> +++ b/src/gallium/drivers/virgl/virgl_hw.h
> @@ -200,6 +200,7 @@ enum virgl_formats {
>  /* These are used by the capability_bits field in virgl_caps_v2. */
>  #define VIRGL_CAP_NONE 0
>  #define VIRGL_CAP_TGSI_INVARIANT       (1 << 0)
> +#define VIRGL_CAP_TEXTURE_VIEW         (1 << 1)
>  
>  #define VIRGL_BIND_DEPTH_STENCIL (1 << 0)
>  #define VIRGL_BIND_RENDER_TARGET (1 << 1)
> diff --git a/src/gallium/drivers/virgl/virgl_screen.c
> b/src/gallium/drivers/virgl/virgl_screen.c
> index e8d1c751779..03014c63319 100644
> --- a/src/gallium/drivers/virgl/virgl_screen.c
> +++ b/src/gallium/drivers/virgl/virgl_screen.c
> @@ -213,6 +213,8 @@ virgl_get_param(struct pipe_screen *screen, enum
> pipe_cap param)
>        return vscreen-
> >caps.caps.v1.bset.transform_feedback_overflow_query;
>     case PIPE_CAP_SHADER_BUFFER_OFFSET_ALIGNMENT:
>        return vscreen->caps.caps.v2.shader_buffer_offset_alignment;
> +   case PIPE_CAP_SAMPLER_VIEW_TARGET:
> +      return vscreen->caps.caps.v2.capability_bits &
> VIRGL_CAP_TEXTURE_VIEW;
>     case PIPE_CAP_TEXTURE_GATHER_SM5:
>     case PIPE_CAP_BUFFER_MAP_PERSISTENT_COHERENT:
>     case PIPE_CAP_FAKE_SW_MSAA:
> @@ -221,7 +223,6 @@ virgl_get_param(struct pipe_screen *screen, enum
> pipe_cap param)
>     case PIPE_CAP_MULTI_DRAW_INDIRECT:
>     case PIPE_CAP_MULTI_DRAW_INDIRECT_PARAMS:
>     case PIPE_CAP_MAX_VERTEX_ATTRIB_STRIDE:
> -   case PIPE_CAP_SAMPLER_VIEW_TARGET:
>     case PIPE_CAP_CLIP_HALFZ:
>     case PIPE_CAP_VERTEXID_NOBASE:
>     case PIPE_CAP_MULTISAMPLE_Z_RESOLVE:


More information about the mesa-dev mailing list