st/mesa: use buffer usage history to set dirty flags for revalidation
We were previously unconditionally doing this for arrays and ubo's, and ignoring texture/storage/atomic buffers. Instead use the usage history to determine which atoms need to be revalidated. Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu> Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com> Cc: "12.0" <mesa-stable@lists.freedesktop.org>
This commit is contained in:
@@ -332,8 +332,19 @@ st_bufferobj_data(struct gl_context *ctx,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* BufferData may change an array or uniform buffer, need to update it */
|
/* The current buffer may be bound, so we have to revalidate all atoms that
|
||||||
st->dirty.st |= ST_NEW_VERTEX_ARRAYS | ST_NEW_UNIFORM_BUFFER;
|
* might be using it.
|
||||||
|
*/
|
||||||
|
/* TODO: Add arrays to usage history */
|
||||||
|
st->dirty.st |= ST_NEW_VERTEX_ARRAYS;
|
||||||
|
if (st_obj->Base.UsageHistory & USAGE_UNIFORM_BUFFER)
|
||||||
|
st->dirty.st |= ST_NEW_UNIFORM_BUFFER;
|
||||||
|
if (st_obj->Base.UsageHistory & USAGE_SHADER_STORAGE_BUFFER)
|
||||||
|
st->dirty.st |= ST_NEW_STORAGE_BUFFER;
|
||||||
|
if (st_obj->Base.UsageHistory & USAGE_TEXTURE_BUFFER)
|
||||||
|
st->dirty.st |= ST_NEW_SAMPLER_VIEWS | ST_NEW_IMAGE_UNITS;
|
||||||
|
if (st_obj->Base.UsageHistory & USAGE_ATOMIC_COUNTER_BUFFER)
|
||||||
|
st->dirty.st |= ST_NEW_ATOMIC_BUFFER;
|
||||||
|
|
||||||
return GL_TRUE;
|
return GL_TRUE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user