From 3a9786d4eef583ee3dae4bba3669fe8ad7ca3670 Mon Sep 17 00:00:00 2001 From: Rohan Garg Date: Tue, 28 Jul 2020 18:43:57 +0200 Subject: [PATCH] i965: Implement BufferDataMem MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Rohan Garg Reviewed-by: Tapani Pälli Part-of: --- .../drivers/dri/i965/brw_buffer_objects.c | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/mesa/drivers/dri/i965/brw_buffer_objects.c b/src/mesa/drivers/dri/i965/brw_buffer_objects.c index b7d44e42163..e0827cf69ca 100644 --- a/src/mesa/drivers/dri/i965/brw_buffer_objects.c +++ b/src/mesa/drivers/dri/i965/brw_buffer_objects.c @@ -219,6 +219,39 @@ brw_buffer_data(struct gl_context *ctx, return true; } +static GLboolean +brw_buffer_data_mem(struct gl_context *ctx, + GLenum target, + GLsizeiptrARB size, + struct gl_memory_object *memObj, + GLuint64 offset, + GLenum usage, + struct gl_buffer_object *bufObj) +{ + struct brw_buffer_object *intel_obj = brw_buffer_object(bufObj); + struct brw_memory_object *intel_memObj = brw_memory_object(memObj); + + /* Part of the ABI, but this function doesn't use it. + */ + (void) target; + + intel_obj->Base.Size = size; + intel_obj->Base.Usage = usage; + intel_obj->Base.StorageFlags = 0; + + assert(!bufObj->Mappings[MAP_USER].Pointer); /* Mesa should have unmapped it */ + assert(!bufObj->Mappings[MAP_INTERNAL].Pointer); + + if (intel_obj->buffer != NULL) + release_buffer(intel_obj); + + if (size != 0) { + intel_obj->buffer = intel_memObj->bo; + mark_buffer_valid_data(intel_obj, 0, size); + } + + return true; +} /** * The BufferSubData() driver hook. @@ -667,6 +700,7 @@ brw_init_buffer_object_functions(struct dd_function_table *functions) functions->NewBufferObject = brw_new_buffer_object; functions->DeleteBuffer = brw_delete_buffer; functions->BufferData = brw_buffer_data; + functions->BufferDataMem = brw_buffer_data_mem; functions->BufferSubData = brw_buffer_subdata; functions->GetBufferSubData = brw_get_buffer_subdata; functions->MapBufferRange = brw_map_buffer_range;