diff options
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 12 | ||||
-rw-r--r-- | src/mesa/drivers/dri/i965/intel_buffer_objects.c | 1 | ||||
-rw-r--r-- | src/mesa/main/bufferobj.c | 4 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 1 |
4 files changed, 13 insertions, 5 deletions
diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c index 76dc5775121..7da4a404668 100644 --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c @@ -946,12 +946,14 @@ brw_upload_ubo_surfaces(struct brw_context *brw, } else { struct intel_buffer_object *intel_bo = intel_buffer_object(binding->BufferObject); + GLsizeiptrARB size = MIN2(binding->BufferObject->BufferRangeSize, + binding->BufferObject->Size - binding->Offset); drm_intel_bo *bo = intel_bufferobj_buffer(brw, intel_bo, binding->Offset, - binding->BufferObject->Size - binding->Offset); + size); brw_create_constant_surface(brw, bo, binding->Offset, - binding->BufferObject->Size - binding->Offset, + size, &ubo_surf_offsets[i]); } } @@ -968,12 +970,14 @@ brw_upload_ubo_surfaces(struct brw_context *brw, } else { struct intel_buffer_object *intel_bo = intel_buffer_object(binding->BufferObject); + GLsizeiptrARB size = MIN2(binding->BufferObject->BufferRangeSize, + binding->BufferObject->Size - binding->Offset); drm_intel_bo *bo = intel_bufferobj_buffer(brw, intel_bo, binding->Offset, - binding->BufferObject->Size - binding->Offset); + size); brw_create_buffer_surface(brw, bo, binding->Offset, - binding->BufferObject->Size - binding->Offset, + size, &ssbo_surf_offsets[i]); } } diff --git a/src/mesa/drivers/dri/i965/intel_buffer_objects.c b/src/mesa/drivers/dri/i965/intel_buffer_objects.c index 7a5b3fca595..b26c939c214 100644 --- a/src/mesa/drivers/dri/i965/intel_buffer_objects.c +++ b/src/mesa/drivers/dri/i965/intel_buffer_objects.c @@ -198,6 +198,7 @@ brw_buffer_data(struct gl_context *ctx, (void) target; intel_obj->Base.Size = size; + intel_obj->Base.BufferRangeSize = size; intel_obj->Base.Usage = usage; intel_obj->Base.StorageFlags = storageFlags; diff --git a/src/mesa/main/bufferobj.c b/src/mesa/main/bufferobj.c index 3a05cd55042..8a9f9b6a48d 100644 --- a/src/mesa/main/bufferobj.c +++ b/src/mesa/main/bufferobj.c @@ -43,7 +43,7 @@ #include "glformats.h" #include "texstore.h" #include "transformfeedback.h" - +#include "macros.h" /* Debug flags */ /*#define VBO_DEBUG*/ @@ -2840,6 +2840,7 @@ bind_buffer_range_uniform_buffer(struct gl_context *ctx, _mesa_reference_buffer_object(ctx, &ctx->UniformBuffer, bufObj); bind_uniform_buffer(ctx, index, bufObj, offset, size, GL_FALSE); + bufObj->BufferRangeSize = MIN2(size, bufObj->Size); } /** @@ -2875,6 +2876,7 @@ bind_buffer_range_shader_storage_buffer(struct gl_context *ctx, _mesa_reference_buffer_object(ctx, &ctx->ShaderStorageBuffer, bufObj); bind_shader_storage_buffer(ctx, index, bufObj, offset, size, GL_FALSE); + bufObj->BufferRangeSize = MIN2(size, bufObj->Size); } /** diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 5b9fce8b7cc..97116e400ce 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -1268,6 +1268,7 @@ struct gl_buffer_object GLenum Usage; /**< GL_STREAM_DRAW_ARB, GL_STREAM_READ_ARB, etc. */ GLbitfield StorageFlags; /**< GL_MAP_PERSISTENT_BIT, etc. */ GLsizeiptrARB Size; /**< Size of buffer storage in bytes */ + GLsizeiptrARB BufferRangeSize; /**< Amount of data that can be read from or written to, in bytes */ GLubyte *Data; /**< Location of storage either in RAM or VRAM. */ GLboolean DeletePending; /**< true if buffer object is removed from the hash */ GLboolean Written; /**< Ever written to? (for debugging) */ |