From: Dave Airlie Date: Tue, 30 Jun 2009 02:19:28 +0000 (+1000) Subject: radeon: add support for write followed by read relocs. X-Git-Tag: submit/1.0/20121108.012404~466 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=de1ed01214874dcdd6116ff2587c8710d6ed4d2d;p=profile%2Fivi%2Flibdrm.git radeon: add support for write followed by read relocs. the DDX does this and used to handle it internally --- diff --git a/libdrm/radeon/radeon_cs_gem.c b/libdrm/radeon/radeon_cs_gem.c index b9f6f4b..82ef16c 100644 --- a/libdrm/radeon/radeon_cs_gem.c +++ b/libdrm/radeon/radeon_cs_gem.c @@ -144,12 +144,19 @@ static int cs_gem_write_reloc(struct radeon_cs *cs, * domain set then the read_domain should also be set for this * new relocation. */ - if (reloc->read_domain && !read_domain) { - return -EINVAL; - } - if (reloc->write_domain && !write_domain) { - return -EINVAL; + /* the DDX expects to read and write from same pixmap */ + if (write_domain && (reloc->read_domain & write_domain)) { + reloc->read_domain = 0; + reloc->write_domain = write_domain; + } else if (read_domain & reloc->write_domain) { + reloc->read_domain = 0; + } else { + if (write_domain != reloc->write_domain) + return -EINVAL; + if (read_domain != reloc->read_domain) + return -EINVAL; } + reloc->read_domain |= read_domain; reloc->write_domain |= write_domain; /* update flags */