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 */
|
||||
st->dirty.st |= ST_NEW_VERTEX_ARRAYS | ST_NEW_UNIFORM_BUFFER;
|
||||
/* The current buffer may be bound, so we have to revalidate all atoms that
|
||||
* 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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user