On Sat, Apr 30, 2016 at 1:55 PM, Rob Clark <robdcl...@gmail.com> wrote:
> On Sat, Apr 30, 2016 at 5:39 AM, Michel Dänzer <mic...@daenzer.net> wrote:
>> On 26.04.2016 03:51, Rob Herring wrote:
>>> On Mon, Apr 25, 2016 at 9:25 AM, Emil Velikov <emil.l.veli...@gmail.com> 
>>> wrote:
>>>> On 25 April 2016 at 13:46, Daniel Stone <dan...@fooishbar.org> wrote:
>>>>> On 23 April 2016 at 03:08, Rob Herring <r...@kernel.org> wrote:
>>>>>> On Fri, Apr 22, 2016 at 6:32 PM, Emil Velikov <emil.l.veli...@gmail.com> 
>>>>>> wrote:
>>>>>>> Can we take a look at the GBM gralloc as well. One thing that worries
>>>>>>> me is that (most likely) you are requesting/creating a bo without
>>>>>>> GBM_BO_USE_WRITE whist using MAP + CPU write UNMAP. If you do set the
>>>>>>> USE_WRITE flag, you're getting a dumb buffer, which I'm not sure how
>>>>>>> well is going to work.
>>>>>>
>>>>>> I'm not using GBM_BO_USE_WRITE and that is not a condition for mapping
>>>>>> given that flag is tied to cursors (according to comments) and gives
>>>>>> dumb buffers. Also of note, if gralloc flags are set for r/w often,
>>>>>> then I request a linear buffer. Here's the gralloc side:
>>>>>
>>>>> Right, I wouldn't take GBM_BO_USE_WRITE to have much of an effect on
>>>>> mappings, as it pessimises allocation like you say.
>>>>>
>>>> Ftr, I'm not objecting as to how things are done. Just saying that
>>>> things should be blindly obvious as one reads the documentation alone.
>>>> I'm assuming that most people involved are "tainted" (the know to a
>>>> level how things are implemented) thus things are clearer for them.
>>>
>>> I'm not sure what to document here other than the use flags have no
>>> impact or restrictions on mapping. If that's not true, then that is a
>>> limitation within the gallium drivers of which I have little knowledge
>>> about and need someone tainted to spell out. I suppose documenting
>>> that buffers with frequent cpu access should use a linear buffer would
>>> be universally true?
>>
>> It's actually stricter than that with the radeonsi driver: It sets the
>> RADEON_GEM_NO_CPU_ACCESS/AMDGPU_GEM_CREATE_NO_CPU_ACCESS flag when
>> allocating non-linear buffers, signalling to the kernel driver that CPU
>> access to the buffer doesn't need to work. At least the amdgpu kernel
>> driver actually enforces this and returns an error if userspace tries
>> mapping such a buffer.
>>
>
> *But*, the cpu access is going via pipe_transfer so it could work
> exactly the same way as (for example) glReadPixels() (ie. copies to
> and/or from a staging bo, rather than direct mmap access to the
> original bo).
>
> (The one slight problem is that android/gralloc doesn't know how to
> deal when pitch of the staging buffer returned differers from the
> pitch of the actual buffer.. but that kinda somehow needs to be fixed
> in android.  Maybe for the time being we need a
> PIPE_TRANSFER_GRALLOC_HACK type flag to tell drivers to allocate an
> unnecessarily large staging bo to preserve the pitch.)

Well, you can transfer_map the whole layer, but that's not enough to
get the original pitch, because tiled textures can be aligned to 8x8,
but linear textures can be aligned to 64x1.

Marek
_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to