IRIS_DOMAIN_DEPTH_WRITE,
/** Any other read-write cache. */
IRIS_DOMAIN_OTHER_WRITE,
+ /** Vertex cache. */
+ IRIS_DOMAIN_VF_READ,
/** Any other read-only cache. */
IRIS_DOMAIN_OTHER_READ,
/** Number of caching domains. */
static inline bool
iris_domain_is_read_only(enum iris_domain access)
{
- return access == IRIS_DOMAIN_OTHER_READ;
+ return access == IRIS_DOMAIN_OTHER_READ ||
+ access == IRIS_DOMAIN_VF_READ;
}
enum iris_mmap_mode {
[IRIS_DOMAIN_RENDER_WRITE] = PIPE_CONTROL_RENDER_TARGET_FLUSH,
[IRIS_DOMAIN_DEPTH_WRITE] = PIPE_CONTROL_DEPTH_CACHE_FLUSH,
[IRIS_DOMAIN_OTHER_WRITE] = PIPE_CONTROL_FLUSH_ENABLE,
+ [IRIS_DOMAIN_VF_READ] = PIPE_CONTROL_STALL_AT_SCOREBOARD,
[IRIS_DOMAIN_OTHER_READ] = PIPE_CONTROL_STALL_AT_SCOREBOARD,
};
const uint32_t invalidate_bits[NUM_IRIS_DOMAINS] = {
[IRIS_DOMAIN_RENDER_WRITE] = PIPE_CONTROL_RENDER_TARGET_FLUSH,
[IRIS_DOMAIN_DEPTH_WRITE] = PIPE_CONTROL_DEPTH_CACHE_FLUSH,
[IRIS_DOMAIN_OTHER_WRITE] = PIPE_CONTROL_FLUSH_ENABLE,
+ [IRIS_DOMAIN_VF_READ] = PIPE_CONTROL_VF_CACHE_INVALIDATE,
[IRIS_DOMAIN_OTHER_READ] = (PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE |
PIPE_CONTROL_CONST_CACHE_INVALIDATE),
};
* in order to handle any WaR dependencies.
*/
if (!iris_domain_is_read_only(access)) {
- for (unsigned i = IRIS_DOMAIN_OTHER_READ; i < NUM_IRIS_DOMAINS; i++) {
+ for (unsigned i = IRIS_DOMAIN_VF_READ; i < NUM_IRIS_DOMAINS; i++) {
assert(iris_domain_is_read_only(i));
const uint64_t seqno = READ_ONCE(bo->last_seqnos[i]);
iris_batch_mark_flush_sync(batch, IRIS_DOMAIN_OTHER_WRITE);
if ((flags & (PIPE_CONTROL_CACHE_FLUSH_BITS |
- PIPE_CONTROL_STALL_AT_SCOREBOARD)))
+ PIPE_CONTROL_STALL_AT_SCOREBOARD))) {
+ iris_batch_mark_flush_sync(batch, IRIS_DOMAIN_VF_READ);
iris_batch_mark_flush_sync(batch, IRIS_DOMAIN_OTHER_READ);
+ }
}
if ((flags & PIPE_CONTROL_RENDER_TARGET_FLUSH))
if ((flags & PIPE_CONTROL_FLUSH_ENABLE))
iris_batch_mark_invalidate_sync(batch, IRIS_DOMAIN_OTHER_WRITE);
+ if ((flags & PIPE_CONTROL_VF_CACHE_INVALIDATE))
+ iris_batch_mark_invalidate_sync(batch, IRIS_DOMAIN_VF_READ);
+
if ((flags & PIPE_CONTROL_TEXTURE_CACHE_INVALIDATE) &&
(flags & PIPE_CONTROL_CONST_CACHE_INVALIDATE))
iris_batch_mark_invalidate_sync(batch, IRIS_DOMAIN_OTHER_READ);