[Mesa-dev] Implementation of VK_KHR_draw_indirect_count extension for anv

Ilia Mirkin imirkin at alum.mit.edu
Wed Sep 12 16:14:46 UTC 2018


On Wed, Sep 12, 2018 at 11:30 AM, Danylo Piliaiev
<danylo.piliaiev at gmail.com> wrote:
> Hi,
>
> Thank you for the directions!
>
> On 9/12/18 6:13 PM, Jason Ekstrand wrote:
>
> Danylo,
>
> You're free to implement anything not already implemented.  Here are some
> other (probably simpler) extensions that I think can be reasonably
> implemented on Intel HW:
>
>
>  - VK_EXT_conservative_rasterization
>  - VK_EXT_conditional_render
>
> Didn't see them, will take closer look later.
>
>
> As far as VK_KHR_draw_indirect_count go, I haven't implemented it yet
> because the "proper" implementation is actually kind-of painful though not
> impossible.  In general, there are two ways it can be done:
>
> ## 1. The cheap and easy way
>
> The spec explicitly allows for the cheap and easy way by requiring the
> caller to pass in a maxDrawCount.  The idea here would be to emit
> maxDrawCount draw calls only have each one of them predicated on draw_id <
> draw_count_from_buffer.  This one probably wouldn't take much to wire up but
> it does mean doing maxDrawCount 3DPRIMITIVE commands no matter how many of
> them are actually needed.
>
> I saw such implementation for i965, looked straightforward and I thought it
> will easily translate into Vulkan implementation. Didn't know that it's
> possible to do it other way on Intel.

Not that it has to drive how you implement on Intel, but I believe
that this is the only way that the implementation can work on NVIDIA
GPUs (i.e. call a function which processes N draws' worth of data, but
might ignore some of them).

Cheers,

  -ilia


More information about the mesa-dev mailing list