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

Marek Olšák maraeo at gmail.com
Sun Feb 1 13:33:21 PST 2015


I don't think it matters.

Generally, all drivers should support mapping all formats, but some
drivers can't map certain formats with more than 1 sample.

Marek

On Sun, Feb 1, 2015 at 8:28 PM, Axel Davy <axel.davy at ens.fr> wrote:
> I checked, and the application is allowed to lock the backbuffer if it
> specified a specific flag.
>
> However it seems locking a multisampled buffer is forbidden.
>
> So probably here the PIPE_BIND_TRANSFER_* flags could be removed for
> multisampling,
> should I add that behaviour ? Does it matter for some drivers ?
>
> Axel
>
> On 31/01/2015 07:04, Axel Davy wrote :
>
>> The patch modifies the code used to check for format support.
>>
>> It needs to test for these flags for render targets because we create the
>> back buffers
>> with these. Probably these flags are not required for back buffers, I'll
>> investigate.
>>
>> Axel
>>
>> On 31/01/2015 00:36, Marek Olšák wrote :
>>>
>>> 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
>>
>>
>> _______________________________________________
>> 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