[Mesa-dev] [PATCH v3] i965: intel_texture_barrier reimplemented
Alejandro Piñeiro
apinheiro at igalia.com
Fri Jul 8 19:03:34 UTC 2016
Forget the previous email. It was an error on the test. The texture
barrier works fine.
Sorry for the noise.
BR
On 08/07/16 15:58, Alejandro Piñeiro wrote:
> Hi, today I was updating the piglit test, as I got a detailed review.
> While testing the changes, I found that there are some parameters
> combinations that are still not passing. They are related to the number
> of draw passes (or in other words, the number of glDrawElements calls
> for the same vertices). So I added more combinations on the piglit
> patch. Before it was testing with 1 and 8 drawing passes. But I added
> the cases of 2, 3 and 4 drawing passes.
>
> So:
> * v3 version of the piglit patch includes 48 parameter combinations of
> the same test. All passing with current master.
> * v5 version (the one committed [1]) includes 144 parameter
> combinations. 40 are failing.
>
> Just as a quick test, I tried the old version of the mesa fix,
> consisting on a combination of gen7_emit_cs_stall_flush +
> brw_emit_mi_flush (that was called as a "big hammer"), and still have 40
> subtests not passing.
>
> I will start to look to this problem, but any idea/feedback to get it
> solved would be welcome.
>
> BR
>
> [1]
> https://cgit.freedesktop.org/piglit/commit/?id=8cb75a1bc1cbdec0e0c8f9a9b10631a369df2f5b
>
> On 30/06/16 23:16, Francisco Jerez wrote:
>> Alejandro Piñeiro <apinheiro at igalia.com> writes:
>>
>>> Fixes:
>>> GL44-CTS.texture_barrier_ARB.same-texel-rw-multipass
>>>
>>> On Haswell, Broadwell and Skylake (note that in order to execute that
>>> test, it is needed to override GL and GLSL versions).
>>>
>>> On gen6 this test was already working without this change. It keeps
>>> working after it.
>>>
>>> This commit replaces the call to brw_emit_mi_flush for gen6+ with two
>>> calls to brw_emit_pipe_control_flush:
>>>
>>> * The first one with RENDER_TARGET_FLUSH and CS_STALL set to initiate
>>> a render cache flush after any concurrent rendering completes and
>>> cause the CS to stop parsing commands until the render cache
>>> becomes coherent with memory.
>>>
>>> * The second one have TEXTURE_CACHE_INVALIDATE set (and no CS stall)
>>> to clean up any stale data from the sampler caches before rendering
>>> continues.
>>>
>>> Didn't touch gen4-5, basically because I don't have a way to test
>>> them.
>>>
>>> More info on commits:
>>> 0aa4f99f562a05880a779707cbcd46be459863bf
>>> 72473658c51d5e074ce219c1e6385a4cce29f467
>>>
>>> Thanks to Curro to help to tracking this down, as the root case was a
>>> hw race condition.
>>>
>>> v2: use two calls to pipe_control_flush instead of a combination of
>>> gen7_emit_cs_stall_flush and brw_emit_mi_flush calls (Curro)
>>> v3: no need to const cache invalidation (Curro)
>>> ---
>>>
>>> FWIW: checked with the CTS tests, and the piglit series, and confirmed
>>> that the const cache invalidation is not needed.
>>>
>>> src/mesa/drivers/dri/i965/intel_tex.c | 21 ++++++++++++++++++++-
>>> 1 file changed, 20 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/src/mesa/drivers/dri/i965/intel_tex.c b/src/mesa/drivers/dri/i965/intel_tex.c
>>> index cac33ac..a802d5a 100644
>>> --- a/src/mesa/drivers/dri/i965/intel_tex.c
>>> +++ b/src/mesa/drivers/dri/i965/intel_tex.c
>>> @@ -9,6 +9,7 @@
>>> #include "intel_mipmap_tree.h"
>>> #include "intel_tex.h"
>>> #include "intel_fbo.h"
>>> +#include "intel_reg.h"
>>>
>>> #define FILE_DEBUG_FLAG DEBUG_TEXTURE
>>>
>>> @@ -362,7 +363,25 @@ intel_texture_barrier(struct gl_context *ctx)
>>> {
>>> struct brw_context *brw = brw_context(ctx);
>>>
>>> - brw_emit_mi_flush(brw);
>>> + if (brw->gen >= 6) {
>>> + if (brw->gen == 6) {
>>> + /* [Dev-SNB{W/A}]: Before a PIPE_CONTROL with Write Cache
>>> + * Flush Enable = 1, a PIPE_CONTROL with any non-zero
>>> + * post-sync-op is required.
>>> + */
>>> + brw_emit_post_sync_nonzero_flush(brw);
>>> + }
>>> +
>>> + brw_emit_pipe_control_flush(brw,
>>> + PIPE_CONTROL_DEPTH_CACHE_FLUSH |
>>> + PIPE_CONTROL_RENDER_TARGET_FLUSH |
>>> + PIPE_CONTROL_CS_STALL);
>>> +
>>> + brw_emit_pipe_control_flush(brw,
>>> + PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE);
>>> + } else {
>>> + brw_emit_mi_flush(brw);
>>> + }
>> Looks reasonable to me, let's get this bug fixed on master, things can
>> be refactored later on:
>>
>> Reviewed-by: Francisco Jerez <currojerez at riseup.net>
>>
>>> }
>>>
>>> void
>>> --
>>> 2.7.4
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: OpenPGP digital signature
URL: <https://lists.freedesktop.org/archives/mesa-dev/attachments/20160708/4d1cbb79/attachment.sig>
More information about the mesa-dev
mailing list