mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-28 20:30:25 +01:00
st/mesa: implement Driver.InvalidateBufferSubData
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
9e2240e892
commit
70e66c57bb
3 changed files with 33 additions and 3 deletions
|
|
@ -332,6 +332,31 @@ st_bufferobj_data(struct gl_context *ctx,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via glInvalidateBuffer(Sub)Data.
|
||||
*/
|
||||
static void
|
||||
st_bufferobj_invalidate(struct gl_context *ctx,
|
||||
struct gl_buffer_object *obj,
|
||||
GLintptr offset,
|
||||
GLsizeiptr size)
|
||||
{
|
||||
struct st_context *st = st_context(ctx);
|
||||
struct pipe_context *pipe = st->pipe;
|
||||
struct st_buffer_object *st_obj = st_buffer_object(obj);
|
||||
|
||||
/* We ignore partial invalidates. */
|
||||
if (offset != 0 || size != obj->Size)
|
||||
return;
|
||||
|
||||
/* Nothing to invalidate. */
|
||||
if (!st_obj->buffer)
|
||||
return;
|
||||
|
||||
pipe->invalidate_resource(pipe, st_obj->buffer);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Called via glMapBufferRange().
|
||||
*/
|
||||
|
|
@ -517,7 +542,8 @@ st_bufferobj_validate_usage(struct st_context *st,
|
|||
|
||||
|
||||
void
|
||||
st_init_bufferobject_functions(struct dd_function_table *functions)
|
||||
st_init_bufferobject_functions(struct pipe_screen *screen,
|
||||
struct dd_function_table *functions)
|
||||
{
|
||||
/* plug in default driver fallbacks (such as for ClearBufferSubData) */
|
||||
_mesa_init_buffer_object_functions(functions);
|
||||
|
|
@ -532,4 +558,7 @@ st_init_bufferobject_functions(struct dd_function_table *functions)
|
|||
functions->UnmapBuffer = st_bufferobj_unmap;
|
||||
functions->CopyBufferSubData = st_copy_buffer_subdata;
|
||||
functions->ClearBufferSubData = st_clear_buffer_subdata;
|
||||
|
||||
if (screen->get_param(screen, PIPE_CAP_INVALIDATE_BUFFER))
|
||||
functions->InvalidateBufferSubData = st_bufferobj_invalidate;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,8 @@ st_bufferobj_validate_usage(struct st_context *st,
|
|||
|
||||
|
||||
extern void
|
||||
st_init_bufferobject_functions(struct dd_function_table *functions);
|
||||
st_init_bufferobject_functions(struct pipe_screen *screen,
|
||||
struct dd_function_table *functions);
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -446,7 +446,7 @@ void st_init_driver_functions(struct pipe_screen *screen,
|
|||
_mesa_init_sampler_object_functions(functions);
|
||||
|
||||
st_init_blit_functions(functions);
|
||||
st_init_bufferobject_functions(functions);
|
||||
st_init_bufferobject_functions(screen, functions);
|
||||
st_init_clear_functions(functions);
|
||||
st_init_bitmap_functions(functions);
|
||||
st_init_copy_image_functions(functions);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue