[PATCH 00/48] Etnaviv changes RFCv1->RFCv2

Christian Gmeiner christian.gmeiner at gmail.com
Wed Sep 30 00:53:31 PDT 2015


Hi Lucas,

2015-09-28 12:39 GMT+02:00 Lucas Stach <l.stach at pengutronix.de>:
> Hi Christian,
>
> Am Montag, den 28.09.2015, 11:46 +0200 schrieb Christian Gmeiner:
>> Hi Lucas.
>>
>> I think I have run into a cache flush / cache coherency issue. I will
>> try to reproduce this issue with a small example and will
>> keep you updated.
>
> What are the symptoms of the issue you are hitting? Maybe I can
> reproduce or see if I have an idea right away.
>

With the help of the etnaviv_2d_test in my libdrm repo on github I was able
to test different bo flags.

ETNA_BO_UNCACHED and ETNA_BO_CACHED are working as expected.
The rendering result looks as expected. If I try ETNA_BO_WC the rendering
result looks different for every run.

debian at cubox:~/libdrm$ tests/etnaviv/etnaviv_2d_test /dev/dri/card1
Version: 1.0.0
  Name: etnaviv
  Date: 20150910
  Description: etnaviv DRM
bo cpu prep: 0
debian at cubox:~/libdrm$ md5sum /tmp/etna.bmp
052880d433e1bf495e268206addd4087  /tmp/etna.bmp
debian at cubox:~/libdrm$ tests/etnaviv/etnaviv_2d_test /dev/dri/card1
Version: 1.0.0
  Name: etnaviv
  Date: 20150910
  Description: etnaviv DRM
bo cpu prep: 0
debian at cubox:~/libdrm$ md5sum /tmp/etna.bmp
f1a02a52d81c0b79b098877e6b7d9303  /tmp/etna.bmp
debian at cubox:~/libdrm$ tests/etnaviv/etnaviv_2d_test /dev/dri/card1
Version: 1.0.0
  Name: etnaviv
  Date: 20150910
  Description: etnaviv DRM
bo cpu prep: 0
debian at cubox:~/libdrm$ md5sum /tmp/etna.bmp
de5a428eb1f6567849ef40a944a995b8  /tmp/etna.bmp

etna_cmd_stream_finish() waits until the submitted command stream was
processed by the GPU. I tried to use etna_bo_cpu_prep(..) but I that did not
help.

I am doing something wrong? Should this work in theory?

diff --git a/tests/etnaviv/etnaviv_2d_test.c b/tests/etnaviv/etnaviv_2d_test.c
index e1ee8a8..037da5b 100644
--- a/tests/etnaviv/etnaviv_2d_test.c
+++ b/tests/etnaviv/etnaviv_2d_test.c
@@ -200,7 +200,7 @@ int main(int argc, char *argv[])
                goto fail;
        }

-       bmp = etna_bo_new(dev, bmp_size, ETNA_BO_UNCACHED);
+       bmp = etna_bo_new(dev, bmp_size, ETNA_BO_WC);
        if (!bmp) {
                ret = 5;
                goto fail;
@@ -218,8 +218,10 @@ int main(int argc, char *argv[])

        etna_cmd_stream_finish(stream);

+       int state = etna_bo_cpu_prep(bmp, DRM_ETNA_PREP_READ);
+       printf("bo cpu prep: %d\n", state);
        bmp_dump32(etna_bo_map(bmp), width, height, false, "/tmp/etna.bmp");
-
+       etna_bo_cpu_fini(bmp);
 fail:
        if (stream)
                etna_cmd_stream_del(stream);

Greets
--
Christian Gmeiner, MSc

https://soundcloud.com/christian-gmeiner


More information about the dri-devel mailing list