[Mesa-dev] [PATCH 36/43] st/nine: Fix multisampling support detection

Marek Olšák maraeo at gmail.com
Fri Jan 30 15:36:12 PST 2015


I recommend not using PIPE_BIND_TRANSFER_READ/WRITE. Transfers with
multisample textures should be supported, but the mapped texture is
always a resolved single-sample copy, so it's not really an MSAA
transfer.

Marek

On Fri, Jan 30, 2015 at 9:34 PM, Axel Davy <axel.davy at ens.fr> wrote:
> Signed-off-by: Axel Davy <axel.davy at ens.fr>
> ---
>  src/gallium/state_trackers/nine/adapter9.c  | 12 +++++++++---
>  src/gallium/state_trackers/nine/nine_pipe.h | 25 -------------------------
>  2 files changed, 9 insertions(+), 28 deletions(-)
>
> diff --git a/src/gallium/state_trackers/nine/adapter9.c b/src/gallium/state_trackers/nine/adapter9.c
> index e9bb9c0..069cc03 100644
> --- a/src/gallium/state_trackers/nine/adapter9.c
> +++ b/src/gallium/state_trackers/nine/adapter9.c
> @@ -359,6 +359,7 @@ NineAdapter9_CheckDeviceMultiSampleType( struct NineAdapter9 *This,
>      struct pipe_screen *screen;
>      HRESULT hr;
>      enum pipe_format pf;
> +    unsigned bind;
>
>      DBG("This=%p DeviceType=%s SurfaceFormat=%s Windowed=%i MultiSampleType=%u "
>          "pQualityLevels=%p\n", This, nine_D3DDEVTYPE_to_str(DeviceType),
> @@ -369,9 +370,14 @@ NineAdapter9_CheckDeviceMultiSampleType( struct NineAdapter9 *This,
>      if (FAILED(hr))
>          return hr;
>
> -    pf = d3d9_to_pipe_format_checked_no_bind(screen, SurfaceFormat,
> -                                             PIPE_TEXTURE_2D,
> -                                             MultiSampleType, FALSE);
> +    if (depth_stencil_format(SurfaceFormat))
> +        bind = d3d9_get_pipe_depth_format_bindings(SurfaceFormat);
> +    else /* render-target */
> +        bind = PIPE_BIND_SAMPLER_VIEW | PIPE_BIND_TRANSFER_READ |
> +               PIPE_BIND_TRANSFER_WRITE | PIPE_BIND_RENDER_TARGET;
> +
> +    pf = d3d9_to_pipe_format_checked(screen, SurfaceFormat, PIPE_TEXTURE_2D,
> +                                     MultiSampleType, bind, FALSE);
>
>      if (pf == PIPE_FORMAT_NONE) {
>          DBG("%s with %u samples not available.\n",
> diff --git a/src/gallium/state_trackers/nine/nine_pipe.h b/src/gallium/state_trackers/nine/nine_pipe.h
> index 7295bdf..17844d5 100644
> --- a/src/gallium/state_trackers/nine/nine_pipe.h
> +++ b/src/gallium/state_trackers/nine/nine_pipe.h
> @@ -309,31 +309,6 @@ d3d9_to_pipe_format_checked(struct pipe_screen *screen,
>      return PIPE_FORMAT_NONE;
>  }
>
> -/* same that above, but determines binding flags */
> -static INLINE enum pipe_format
> -d3d9_to_pipe_format_checked_no_bind(struct pipe_screen *screen,
> -                                    D3DFORMAT format,
> -                                    enum pipe_texture_target target,
> -                                    unsigned sample_count,
> -                                    boolean srgb)
> -{
> -    enum pipe_format result;
> -    unsigned bindings;
> -
> -    result = d3d9_to_pipe_format_internal(format);
> -    if (result == PIPE_FORMAT_NONE)
> -        return PIPE_FORMAT_NONE;
> -
> -    bindings = util_format_is_depth_or_stencil(result) ?
> -        PIPE_BIND_DEPTH_STENCIL : PIPE_BIND_RENDER_TARGET;
> -    if (srgb)
> -        result = util_format_srgb(result);
> -
> -    if (format_check_internal(result))
> -        return result;
> -    return PIPE_FORMAT_NONE;
> -}
> -
>  static INLINE const char *
>  d3dformat_to_string(D3DFORMAT fmt)
>  {
> --
> 2.1.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list