[Mesa-dev] [PATCH 2/2] nvc0: fix memory barrier flag handling

Samuel Pitoiset samuel.pitoiset at gmail.com
Fri Jun 3 11:32:48 UTC 2016



On 06/03/2016 10:29 AM, Samuel Pitoiset wrote:
> This doesn't seem crazy, but it will require testing I would say.
>
> Especially, arb_shader_image_load_store-host-mem-barrier which makes use
> of different barriers with images.

I have just tested on GK106, no regression with that test. But I will 
make an other test on GF119 later today.

>
> On 06/03/2016 08:25 AM, Ilia Mirkin wrote:
>> Signed-off-by: Ilia Mirkin <imirkin at alum.mit.edu>
>> Cc: "12.0" <mesa-stable at lists.freedesktop.org>
>> ---
>>  src/gallium/drivers/nouveau/nvc0/nvc0_context.c | 25
>> ++++++++++++++++---------
>>  1 file changed, 16 insertions(+), 9 deletions(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
>> b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
>> index 98e787a..1137e6c 100644
>> --- a/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
>> +++ b/src/gallium/drivers/nouveau/nvc0/nvc0_context.c
>> @@ -90,17 +90,24 @@ nvc0_memory_barrier(struct pipe_context *pipe,
>> unsigned flags)
>>                 nvc0->cb_dirty = true;
>>           }
>>        }
>> +   } else {
>> +      /* Pretty much any writing by shaders needs a serialize after
>> +       * it. Especially when moving between 3d and compute pipelines,
>> but even
>> +       * without that.
>> +       */
>> +      IMMED_NVC0(push, NVC0_3D(SERIALIZE), 0);
>>     }
>>
>> -   if (flags & (PIPE_BARRIER_SHADER_BUFFER   |
>> -                PIPE_BARRIER_CONSTANT_BUFFER |
>> -                PIPE_BARRIER_INDEX_BUFFER    |
>> -                PIPE_BARRIER_IMAGE           |
>> -                PIPE_BARRIER_TEXTURE         |
>> -                PIPE_BARRIER_VERTEX_BUFFER   |
>> -                PIPE_BARRIER_STREAMOUT_BUFFER)) {
>> -      IMMED_NVC0(push, NVC0_3D(MEM_BARRIER), 0x1011);
>> -   }
>> +   /* If we're going to texture from a buffer/image written by a
>> shader, we
>> +    * must flush the texture cache.
>> +    */
>> +   if (flags & PIPE_BARRIER_TEXTURE)
>> +      IMMED_NVC0(push, NVC0_3D(TEX_CACHE_CTL), 0);
>> +
>> +   if (flags & PIPE_BARRIER_CONSTANT_BUFFER)
>> +      nvc0->cb_dirty = true;
>> +   if (flags & (PIPE_BARRIER_VERTEX_BUFFER | PIPE_BARRIER_INDEX_BUFFER))
>> +      nvc0->base.vbo_dirty = true;
>>  }
>>
>>  static void
>>
>

-- 
-Samuel


More information about the mesa-dev mailing list