[Mesa-dev] [PATCH 1/3] gallium: add PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION

Marek Olšák maraeo at gmail.com
Tue May 23 17:27:29 UTC 2017


On Tue, May 23, 2017 at 6:52 PM, Rob Clark <robdclark at gmail.com> wrote:
> On Mon, May 15, 2017 at 10:41 AM, Marek Olšák <maraeo at gmail.com> wrote:
>> From: Marek Olšák <marek.olsak at amd.com>
>>
>> for skipping mapped-buffer checking in every GL draw call
>> ---
>>  src/gallium/docs/source/screen.rst               | 1 +
>>  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_pipe.c           | 1 +
>>  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/virgl/virgl_screen.c         | 1 +
>>  src/gallium/include/pipe/p_defines.h             | 1 +
>>  17 files changed, 17 insertions(+)
>>
>> diff --git a/src/gallium/docs/source/screen.rst b/src/gallium/docs/source/screen.rst
>> index 971dc1f..871669c 100644
>> --- a/src/gallium/docs/source/screen.rst
>> +++ b/src/gallium/docs/source/screen.rst
>> @@ -384,20 +384,21 @@ The integer capabilities:
>>  * ``PIPE_CAP_SPARSE_BUFFER_PAGE_SIZE``: The page size of sparse buffers in
>>    bytes, or 0 if sparse buffers are not supported. The page size must be at
>>    most 64KB.
>>  * ``PIPE_CAP_TGSI_BALLOT``: Whether the BALLOT and READ_* opcodes as well as
>>    the SUBGROUP_* semantics are supported.
>>  * ``PIPE_CAP_TGSI_TES_LAYER_VIEWPORT``: Whether ``TGSI_SEMANTIC_LAYER`` and
>>    ``TGSI_SEMANTIC_VIEWPORT_INDEX`` are supported as tessellation evaluation
>>    shader outputs.
>>  * ``PIPE_CAP_CAN_BIND_CONST_BUFFER_AS_VERTEX``: Whether a buffer with just
>>    PIPE_BIND_CONSTANT_BUFFER can be legally passed to set_vertex_buffers.
>> +* ``PIPE_CAP_ALLOW_MAPPED_BUFFERS_DURING_EXECUTION``: As the name says.
>
> btw, what determines if a driver can allow mapped buffers during
> execution?  Presumably it can't be cases where unmapping does some
> sort of copy of the data?  What about cache coherency?  And also,
> *which* buffers does this apply to?
>
> (This would be, I guess, sort of more useful info to put in screen.rst ;-))

I can't guarantee what will happen in all cases of mapped buffers.
Generally, unsychronized mappings and mappings when the buffer is idle
follow the same rules as persistent (coherent) mappings. We don't
really have non-coherent mappings in our driver, so that bit remains
unspecified.

I guess all drivers where normal mappings behave like persistent
coherent mappings can flip the switch on.

Marek


More information about the mesa-dev mailing list