mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 04:48:08 +02:00
mesa: add no_error support into get_buffer_target()
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Acked-by: Adam Jackson <ajax@redhat.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/19844>
This commit is contained in:
parent
ba91328444
commit
c924cfae42
1 changed files with 34 additions and 30 deletions
|
|
@ -662,11 +662,11 @@ static struct gl_buffer_object DummyBufferObject = {
|
|||
* \return pointer to pointer to the buffer object bound to \c target in the
|
||||
* specified context or \c NULL if \c target is invalid.
|
||||
*/
|
||||
static inline struct gl_buffer_object **
|
||||
get_buffer_target(struct gl_context *ctx, GLenum target)
|
||||
static ALWAYS_INLINE struct gl_buffer_object **
|
||||
get_buffer_target(struct gl_context *ctx, GLenum target, bool no_error)
|
||||
{
|
||||
/* Other targets are only supported in desktop OpenGL and OpenGL ES 3.0. */
|
||||
if (!_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) {
|
||||
if (!no_error && !_mesa_is_desktop_gl(ctx) && !_mesa_is_gles3(ctx)) {
|
||||
switch (target) {
|
||||
case GL_ARRAY_BUFFER:
|
||||
case GL_ELEMENT_ARRAY_BUFFER:
|
||||
|
|
@ -692,58 +692,61 @@ get_buffer_target(struct gl_context *ctx, GLenum target)
|
|||
case GL_COPY_WRITE_BUFFER:
|
||||
return &ctx->CopyWriteBuffer;
|
||||
case GL_QUERY_BUFFER:
|
||||
if (_mesa_has_ARB_query_buffer_object(ctx))
|
||||
if (no_error || _mesa_has_ARB_query_buffer_object(ctx))
|
||||
return &ctx->QueryBuffer;
|
||||
break;
|
||||
case GL_DRAW_INDIRECT_BUFFER:
|
||||
if ((_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_draw_indirect) ||
|
||||
if (no_error ||
|
||||
(_mesa_is_desktop_gl(ctx) && ctx->Extensions.ARB_draw_indirect) ||
|
||||
_mesa_is_gles31(ctx)) {
|
||||
return &ctx->DrawIndirectBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_PARAMETER_BUFFER_ARB:
|
||||
if (_mesa_has_ARB_indirect_parameters(ctx)) {
|
||||
if (no_error || _mesa_has_ARB_indirect_parameters(ctx)) {
|
||||
return &ctx->ParameterBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_DISPATCH_INDIRECT_BUFFER:
|
||||
if (_mesa_has_compute_shaders(ctx)) {
|
||||
if (no_error || _mesa_has_compute_shaders(ctx)) {
|
||||
return &ctx->DispatchIndirectBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_TRANSFORM_FEEDBACK_BUFFER:
|
||||
if (ctx->Extensions.EXT_transform_feedback) {
|
||||
if (no_error || ctx->Extensions.EXT_transform_feedback) {
|
||||
return &ctx->TransformFeedback.CurrentBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_TEXTURE_BUFFER:
|
||||
if (_mesa_has_ARB_texture_buffer_object(ctx) ||
|
||||
if (no_error ||
|
||||
_mesa_has_ARB_texture_buffer_object(ctx) ||
|
||||
_mesa_has_OES_texture_buffer(ctx)) {
|
||||
return &ctx->Texture.BufferObject;
|
||||
}
|
||||
break;
|
||||
case GL_UNIFORM_BUFFER:
|
||||
if (ctx->Extensions.ARB_uniform_buffer_object) {
|
||||
if (no_error || ctx->Extensions.ARB_uniform_buffer_object) {
|
||||
return &ctx->UniformBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_SHADER_STORAGE_BUFFER:
|
||||
if (ctx->Extensions.ARB_shader_storage_buffer_object || _mesa_is_gles31(ctx)) {
|
||||
if (no_error ||
|
||||
ctx->Extensions.ARB_shader_storage_buffer_object ||
|
||||
_mesa_is_gles31(ctx)) {
|
||||
return &ctx->ShaderStorageBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_ATOMIC_COUNTER_BUFFER:
|
||||
if (ctx->Extensions.ARB_shader_atomic_counters || _mesa_is_gles31(ctx)) {
|
||||
if (no_error ||
|
||||
ctx->Extensions.ARB_shader_atomic_counters || _mesa_is_gles31(ctx)) {
|
||||
return &ctx->AtomicBuffer;
|
||||
}
|
||||
break;
|
||||
case GL_EXTERNAL_VIRTUAL_MEMORY_BUFFER_AMD:
|
||||
if (ctx->Extensions.AMD_pinned_memory) {
|
||||
if (no_error || ctx->Extensions.AMD_pinned_memory) {
|
||||
return &ctx->ExternalVirtualMemoryBuffer;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
return NULL;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -761,7 +764,7 @@ static inline struct gl_buffer_object *
|
|||
get_buffer(struct gl_context *ctx, const char *func, GLenum target,
|
||||
GLenum error)
|
||||
{
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target, false);
|
||||
|
||||
if (!bufObj) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "%s(target)", func);
|
||||
|
|
@ -1535,7 +1538,7 @@ _mesa_BindBuffer_no_error(GLenum target, GLuint buffer)
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **bindTarget = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bindTarget = get_buffer_target(ctx, target, true);
|
||||
bind_buffer_object(ctx, bindTarget, buffer, true);
|
||||
}
|
||||
|
||||
|
|
@ -1550,7 +1553,7 @@ _mesa_BindBuffer(GLenum target, GLuint buffer)
|
|||
_mesa_enum_to_string(target), buffer);
|
||||
}
|
||||
|
||||
struct gl_buffer_object **bindTarget = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bindTarget = get_buffer_target(ctx, target, false);
|
||||
if (!bindTarget) {
|
||||
_mesa_error(ctx, GL_INVALID_ENUM, "glBindBufferARB(target %s)",
|
||||
_mesa_enum_to_string(target));
|
||||
|
|
@ -1565,7 +1568,7 @@ _mesa_InternalBindElementBuffer(struct gl_context *ctx,
|
|||
struct gl_buffer_object *buf)
|
||||
{
|
||||
struct gl_buffer_object **bindTarget =
|
||||
get_buffer_target(ctx, GL_ELEMENT_ARRAY_BUFFER);
|
||||
get_buffer_target(ctx, GL_ELEMENT_ARRAY_BUFFER, false);
|
||||
|
||||
/* Move the buffer reference from the parameter to the bind point. */
|
||||
_mesa_reference_buffer_object(ctx, bindTarget, NULL);
|
||||
|
|
@ -2246,7 +2249,8 @@ inlined_buffer_storage(GLenum target, GLuint buffer, GLsizeiptr size,
|
|||
}
|
||||
} else {
|
||||
if (no_error) {
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr =
|
||||
get_buffer_target(ctx, target, true);
|
||||
bufObj = *bufObjPtr;
|
||||
} else {
|
||||
bufObj = get_buffer(ctx, func, target, GL_INVALID_OPERATION);
|
||||
|
|
@ -2473,7 +2477,7 @@ _mesa_BufferData_no_error(GLenum target, GLsizeiptr size, const GLvoid *data,
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target, true);
|
||||
buffer_data_no_error(ctx, *bufObj, target, size, data, usage,
|
||||
"glBufferData");
|
||||
}
|
||||
|
|
@ -2622,7 +2626,7 @@ buffer_sub_data(GLenum target, GLuint buffer, GLintptr offset,
|
|||
}
|
||||
} else {
|
||||
if (no_error) {
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target, true);
|
||||
bufObj = *bufObjPtr;
|
||||
} else {
|
||||
bufObj = get_buffer(ctx, func, target, GL_INVALID_OPERATION);
|
||||
|
|
@ -2853,7 +2857,7 @@ _mesa_ClearBufferData_no_error(GLenum target, GLenum internalformat,
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target, true);
|
||||
clear_buffer_sub_data_no_error(ctx, *bufObj, internalformat, 0,
|
||||
(*bufObj)->Size, format, type, data,
|
||||
"glClearBufferData", false);
|
||||
|
|
@ -2931,7 +2935,7 @@ _mesa_ClearBufferSubData_no_error(GLenum target, GLenum internalformat,
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObj = get_buffer_target(ctx, target, true);
|
||||
clear_buffer_sub_data_no_error(ctx, *bufObj, internalformat, offset, size,
|
||||
format, type, data, "glClearBufferSubData",
|
||||
true);
|
||||
|
|
@ -3076,7 +3080,7 @@ GLboolean GLAPIENTRY
|
|||
_mesa_UnmapBuffer_no_error(GLenum target)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target, true);
|
||||
struct gl_buffer_object *bufObj = *bufObjPtr;
|
||||
|
||||
return unmap_buffer(ctx, bufObj);
|
||||
|
|
@ -3422,10 +3426,10 @@ _mesa_CopyBufferSubData_no_error(GLenum readTarget, GLenum writeTarget,
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **src_ptr = get_buffer_target(ctx, readTarget);
|
||||
struct gl_buffer_object **src_ptr = get_buffer_target(ctx, readTarget, true);
|
||||
struct gl_buffer_object *src = *src_ptr;
|
||||
|
||||
struct gl_buffer_object **dst_ptr = get_buffer_target(ctx, writeTarget);
|
||||
struct gl_buffer_object **dst_ptr = get_buffer_target(ctx, writeTarget, true);
|
||||
struct gl_buffer_object *dst = *dst_ptr;
|
||||
|
||||
bufferobj_copy_subdata(ctx, src, dst, readOffset, writeOffset,
|
||||
|
|
@ -3754,7 +3758,7 @@ _mesa_MapBufferRange_no_error(GLenum target, GLintptr offset,
|
|||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target, true);
|
||||
struct gl_buffer_object *bufObj = *bufObjPtr;
|
||||
|
||||
return map_buffer_range(ctx, bufObj, offset, length, access,
|
||||
|
|
@ -3882,7 +3886,7 @@ _mesa_MapBuffer_no_error(GLenum target, GLenum access)
|
|||
GLbitfield accessFlags;
|
||||
get_map_buffer_access_flags(ctx, access, &accessFlags);
|
||||
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target, true);
|
||||
struct gl_buffer_object *bufObj = *bufObjPtr;
|
||||
|
||||
return map_buffer_range(ctx, bufObj, 0, bufObj->Size, accessFlags,
|
||||
|
|
@ -4037,7 +4041,7 @@ _mesa_FlushMappedBufferRange_no_error(GLenum target, GLintptr offset,
|
|||
GLsizeiptr length)
|
||||
{
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target);
|
||||
struct gl_buffer_object **bufObjPtr = get_buffer_target(ctx, target, true);
|
||||
struct gl_buffer_object *bufObj = *bufObjPtr;
|
||||
|
||||
_mesa_bufferobj_flush_mapped_range(ctx, offset, length, bufObj,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue