Commit 10beee8a authored by Marek Olšák's avatar Marek Olšák
Browse files

mesa: remove no longer needed _mesa_is_bufferobj function



All buffers have Name != 0.

Note that there is no longer the pointer dereference to get Name,
so it's faster.
Reviewed-by: Pierre-Eric Pelloux-Prayer's avatarPierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <!4466>
parent 58fab9a6
......@@ -211,7 +211,7 @@ do_blit_bitmap( struct gl_context *ctx,
irb = intel_renderbuffer(fb->_ColorDrawBuffers[0]);
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
bitmap = map_pbo(ctx, width, height, unpack, bitmap);
if (bitmap == NULL)
return true; /* even though this is an error, we're done */
......@@ -310,7 +310,7 @@ out:
if (unlikely(INTEL_DEBUG & DEBUG_SYNC))
intel_batchbuffer_flush(intel);
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
/* done with PBO so unmap it now */
ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj, MAP_INTERNAL);
}
......
......@@ -84,7 +84,7 @@ do_blit_readpixels(struct gl_context * ctx,
DBG("%s\n", __func__);
assert(_mesa_is_bufferobj(pack->BufferObj));
assert(pack->BufferObj);
struct gl_renderbuffer *rb = ctx->ReadBuffer->_ColorReadBuffer;
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
......@@ -166,7 +166,7 @@ intelReadPixels(struct gl_context * ctx,
DBG("%s\n", __func__);
if (_mesa_is_bufferobj(pack->BufferObj)) {
if (pack->BufferObj) {
/* Using PBOs, so try the BLT based path. */
if (do_blit_readpixels(ctx, x, y, width, height, format, type, pack,
pixels)) {
......
......@@ -115,7 +115,7 @@ try_pbo_upload(struct gl_context *ctx,
GLuint src_offset;
drm_intel_bo *src_buffer;
if (!_mesa_is_bufferobj(unpack->BufferObj))
if (!unpack->BufferObj)
return false;
DBG("trying pbo upload\n");
......
......@@ -857,7 +857,7 @@ blorp_get_client_bo(struct brw_context *brw,
*row_stride_out = stride;
*image_stride_out = _mesa_image_image_stride(packing, w, h, format, type);
if (_mesa_is_bufferobj(packing->BufferObj)) {
if (packing->BufferObj) {
const uint32_t offset = first_pixel + (intptr_t)pixels;
if (!read_only && ((offset % cpp) || (stride % cpp))) {
perf_debug("Bad PBO alignment; fallback to CPU mapping\n");
......@@ -1070,7 +1070,7 @@ brw_blorp_download_miptree(struct brw_context *brw,
}
/* This pass only works for PBOs */
assert(_mesa_is_bufferobj(packing->BufferObj));
assert(packing->BufferObj);
uint32_t dst_offset, dst_row_stride, dst_image_stride;
struct brw_bo *dst_bo =
......
......@@ -493,7 +493,7 @@ brw_prepare_vertices(struct brw_context *brw)
_mesa_draw_buffer_binding(vao, ffs(vbomask) - 1);
const GLsizei stride = glbinding->Stride;
assert(_mesa_is_bufferobj(glbinding->BufferObj));
assert(glbinding->BufferObj);
/* Accumulate the range of a single vertex, start with inverted range */
uint32_t vertex_range_start = ~(uint32_t)0;
......@@ -581,7 +581,7 @@ brw_prepare_vertices(struct brw_context *brw)
_mesa_draw_buffer_binding(vao, ffs(usermask) - 1);
const GLsizei stride = glbinding->Stride;
assert(!_mesa_is_bufferobj(glbinding->BufferObj));
assert(!glbinding->BufferObj);
assert(brw->vb.index_bounds_valid);
/* Accumulate the range of a single vertex, start with inverted range */
......@@ -727,7 +727,7 @@ brw_upload_indices(struct brw_context *brw)
/* Turn into a proper VBO:
*/
if (!_mesa_is_bufferobj(bufferobj)) {
if (!bufferobj) {
/* Get new bufferobj, offset:
*/
brw_upload_data(&brw->upload, index_buffer->ptr, ib_size, ib_type_size,
......
......@@ -208,7 +208,7 @@ do_blit_bitmap( struct gl_context *ctx,
irb = intel_renderbuffer(fb->_ColorDrawBuffers[0]);
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
bitmap = map_pbo(ctx, width, height, unpack, bitmap);
if (bitmap == NULL)
return true; /* even though this is an error, we're done */
......@@ -312,7 +312,7 @@ out:
if (unlikely(INTEL_DEBUG & DEBUG_SYNC))
intel_batchbuffer_flush(brw);
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
/* done with PBO so unmap it now */
ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj, MAP_INTERNAL);
}
......
......@@ -164,7 +164,7 @@ intelDrawPixels(struct gl_context * ctx,
}
if (brw->screen->devinfo.gen < 6 &&
_mesa_is_bufferobj(unpack->BufferObj)) {
unpack->BufferObj) {
if (do_blit_drawpixels(ctx, x, y, width, height, format, type, unpack,
pixels)) {
return;
......
......@@ -95,7 +95,7 @@ intel_readpixels_tiled_memcpy(struct gl_context * ctx,
if (!devinfo->has_llc ||
!(type == GL_UNSIGNED_BYTE || type == GL_UNSIGNED_INT_8_8_8_8_REV) ||
pixels == NULL ||
_mesa_is_bufferobj(pack->BufferObj) ||
pack->BufferObj ||
pack->Alignment > 4 ||
pack->SkipPixels > 0 ||
pack->SkipRows > 0 ||
......@@ -272,7 +272,7 @@ intelReadPixels(struct gl_context * ctx,
intel_prepare_render(brw);
brw->front_buffer_dirty = dirty;
if (_mesa_is_bufferobj(pack->BufferObj)) {
if (pack->BufferObj) {
if (intel_readpixels_blorp(ctx, x, y, width, height,
format, type, pixels, pack))
return;
......
......@@ -208,7 +208,7 @@ intel_texsubimage_tiled_memcpy(struct gl_context * ctx,
!(texImage->TexObject->Target == GL_TEXTURE_2D ||
texImage->TexObject->Target == GL_TEXTURE_RECTANGLE) ||
pixels == NULL ||
_mesa_is_bufferobj(packing->BufferObj) ||
packing->BufferObj ||
packing->Alignment > 4 ||
packing->SkipPixels > 0 ||
packing->SkipRows > 0 ||
......@@ -322,13 +322,13 @@ intel_upload_tex(struct gl_context * ctx,
bool ok;
/* Check that there is actually data to store. */
if (pixels == NULL && !_mesa_is_bufferobj(packing->BufferObj))
if (pixels == NULL && !packing->BufferObj)
return;
bool tex_busy = mt &&
(brw_batch_references(&brw->batch, mt->bo) || brw_bo_busy(mt->bo));
if (_mesa_is_bufferobj(packing->BufferObj) || tex_busy ||
if (packing->BufferObj || tex_busy ||
mt->aux_usage == ISL_AUX_USAGE_CCS_E) {
ok = intel_texsubimage_blorp(brw, dims, texImage,
xoffset, yoffset, zoffset,
......@@ -756,7 +756,7 @@ intel_gettexsubimage_tiled_memcpy(struct gl_context *ctx,
!(texImage->TexObject->Target == GL_TEXTURE_2D ||
texImage->TexObject->Target == GL_TEXTURE_RECTANGLE) ||
pixels == NULL ||
_mesa_is_bufferobj(packing->BufferObj) ||
packing->BufferObj ||
packing->Alignment > 4 ||
packing->SkipPixels > 0 ||
packing->SkipRows > 0 ||
......@@ -867,7 +867,7 @@ intel_get_tex_sub_image(struct gl_context *ctx,
DBG("%s\n", __func__);
if (_mesa_is_bufferobj(ctx->Pack.BufferObj)) {
if (ctx->Pack.BufferObj) {
if (intel_gettexsubimage_blorp(brw, texImage,
xoffset, yoffset, zoffset,
width, height, depth, format, type,
......
......@@ -35,10 +35,10 @@ struct nouveau_bufferobj {
#define to_nouveau_bufferobj(x) ((struct nouveau_bufferobj *)(x))
#define nouveau_bufferobj_hw(x) \
(_mesa_is_bufferobj(x) ? to_nouveau_bufferobj(x)->bo : NULL)
(x ? to_nouveau_bufferobj(x)->bo : NULL)
#define nouveau_bufferobj_sys(x) \
(_mesa_is_bufferobj(x) ? to_nouveau_bufferobj(x)->sys : NULL)
(x ? to_nouveau_bufferobj(x)->sys : NULL)
void
nouveau_bufferobj_functions_init(struct dd_function_table *functions);
......
......@@ -46,7 +46,7 @@ get_array_stride(struct gl_context *ctx, const struct tnl_vertex_array *a)
struct nouveau_render_state *render = to_render_state(ctx);
const struct gl_vertex_buffer_binding *binding = a->BufferBinding;
if (render->mode == VBO && !_mesa_is_bufferobj(binding->BufferObj)) {
if (render->mode == VBO && !binding->BufferObj) {
const struct gl_array_attributes *attrib = a->VertexAttrib;
/* Pack client buffers. */
return align(attrib->Format._ElementSize, 4);
......@@ -230,7 +230,7 @@ get_max_client_stride(struct gl_context *ctx, const struct tnl_vertex_array *arr
FOR_EACH_BOUND_ATTR(render, i, attr) {
const struct tnl_vertex_array *a = &arrays[attr];
if (!_mesa_is_bufferobj(a->BufferBinding->BufferObj))
if (!a->BufferBinding->BufferObj)
s = MAX2(s, get_array_stride(ctx, a));
}
......
......@@ -131,13 +131,13 @@ do_blit_readpixels(struct gl_context * ctx,
aligned_rowstride = get_texture_image_row_stride(radeon, dst_format, dst_rowstride, 0, GL_TEXTURE_2D);
dst_rowstride *= _mesa_get_format_bytes(dst_format);
if (_mesa_is_bufferobj(pack->BufferObj) && aligned_rowstride != dst_rowstride)
if (pack->BufferObj && aligned_rowstride != dst_rowstride)
return GL_FALSE;
dst_imagesize = get_texture_image_size(dst_format,
aligned_rowstride,
height, 1, 0);
if (!_mesa_is_bufferobj(pack->BufferObj))
if (!pack->BufferObj)
{
dst_buffer = radeon_bo_open(radeon->radeonScreen->bom, 0, dst_imagesize, 1024, RADEON_GEM_DOMAIN_GTT, 0);
dst_offset = 0;
......@@ -176,8 +176,8 @@ do_blit_readpixels(struct gl_context * ctx,
height,
flip_y))
{
if (!_mesa_is_bufferobj(pack->BufferObj))
{
if (!pack->BufferObj)
{
radeon_bo_map(dst_buffer, 0);
copy_rows(pixels, dst_rowstride, dst_buffer->ptr,
aligned_rowstride, height, dst_rowstride);
......@@ -188,7 +188,7 @@ do_blit_readpixels(struct gl_context * ctx,
return GL_TRUE;
}
if (!_mesa_is_bufferobj(pack->BufferObj))
if (!pack->BufferObj)
radeon_bo_unref(dst_buffer);
return GL_FALSE;
......
......@@ -355,7 +355,7 @@ xmesa_DrawPixels_8R8G8B( struct gl_context *ctx,
if (swrast->NewState)
_swrast_validate_derived( ctx );
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
/* unpack from PBO */
GLubyte *buf;
if (!_mesa_validate_pbo_access(2, unpack, width, height, 1,
......@@ -415,7 +415,7 @@ xmesa_DrawPixels_8R8G8B( struct gl_context *ctx,
XPutImage(dpy, xrb->pixmap, gc, &ximage, 0, 0, dstX, dstY, w, h);
}
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
ctx->Driver.UnmapBuffer(ctx, unpack->BufferObj, MAP_INTERNAL);
}
}
......@@ -487,7 +487,7 @@ xmesa_DrawPixels_5R6G5B( struct gl_context *ctx,
if (swrast->NewState)
_swrast_validate_derived( ctx );
if (_mesa_is_bufferobj(unpack->BufferObj)) {
if (unpack->BufferObj) {
/* unpack from PBO */
GLubyte *buf;
if (!_mesa_validate_pbo_access(2, unpack, width, height, 1,
......
......@@ -1415,7 +1415,7 @@ attrib_src(const struct gl_vertex_array_object *vao,
&vao->BufferBinding[array->BufferBindingIndex];
const GLubyte *src = _mesa_vertex_attrib_address(array, binding);
if (_mesa_is_bufferobj(binding->BufferObj)) {
if (binding->BufferObj) {
src = ADD_POINTERS(binding->BufferObj->Mappings[MAP_INTERNAL].Pointer,
src);
}
......
......@@ -409,7 +409,7 @@ compute_vbo_offset_range(const struct gl_vertex_array_object *vao,
GLsizeiptr* min, GLsizeiptr* max)
{
/* The function is meant to work on VBO bindings */
assert(_mesa_is_bufferobj(binding->BufferObj));
assert(binding->BufferObj);
/* Start with an inverted range of relative offsets. */
GLuint min_offset = ~(GLuint)0;
......@@ -554,7 +554,7 @@ _mesa_update_vao_derived_arrays(struct gl_context *ctx,
struct gl_vertex_buffer_binding *binding = &vao->BufferBinding[bindex];
/* The scan goes different for user space arrays than vbos */
if (_mesa_is_bufferobj(binding->BufferObj)) {
if (binding->BufferObj) {
/* The bound arrays. */
const GLbitfield bound = enabled & binding->_BoundArrays;
......@@ -733,7 +733,7 @@ _mesa_update_vao_derived_arrays(struct gl_context *ctx,
}
/* User space buffer object */
assert(!_mesa_is_bufferobj(binding2->BufferObj));
assert(!binding2->BufferObj);
eff_bound_arrays |= VERT_BIT(j);
}
......@@ -776,7 +776,7 @@ _mesa_update_vao_derived_arrays(struct gl_context *ctx,
assert(binding->Stride == binding2->Stride);
assert(binding->InstanceDivisor == binding2->InstanceDivisor);
assert(binding->BufferObj == binding2->BufferObj);
if (_mesa_is_bufferobj(binding->BufferObj)) {
if (binding->BufferObj) {
assert(attrib->_EffRelativeOffset <= MaxRelativeOffset);
assert(binding->Offset + attrib->RelativeOffset ==
binding2->_EffOffset + attrib->_EffRelativeOffset);
......@@ -818,7 +818,7 @@ _mesa_all_varyings_in_vbos(const struct gl_vertex_array_object *vao)
&vao->BufferBinding[attrib_array->BufferBindingIndex];
/* We have already masked out vao->VertexAttribBufferMask */
assert(!_mesa_is_bufferobj(buffer_binding->BufferObj));
assert(!buffer_binding->BufferObj);
/* Bail out once we find the first non vbo with a non zero stride */
if (buffer_binding->Stride != 0)
......@@ -847,7 +847,7 @@ _mesa_all_buffers_are_unmapped(const struct gl_vertex_array_object *vao)
&vao->BufferBinding[attrib_array->BufferBindingIndex];
/* We have already masked with vao->VertexAttribBufferMask */
assert(_mesa_is_bufferobj(buffer_binding->BufferObj));
assert(buffer_binding->BufferObj);
/* Bail out once we find the first disallowed mapping */
if (_mesa_check_disallowed_mapping(buffer_binding->BufferObj))
......@@ -877,7 +877,7 @@ _mesa_vao_map_arrays(struct gl_context *ctx, struct gl_vertex_array_object *vao,
mask &= ~binding->_BoundArrays;
struct gl_buffer_object *bo = binding->BufferObj;
assert(_mesa_is_bufferobj(bo));
assert(bo);
if (_mesa_bufferobj_mapped(bo, MAP_INTERNAL))
continue;
......@@ -896,7 +896,7 @@ _mesa_vao_map(struct gl_context *ctx, struct gl_vertex_array_object *vao,
struct gl_buffer_object *bo = vao->IndexBufferObj;
/* map the index buffer, if there is one, and not already mapped */
if (_mesa_is_bufferobj(bo) && !_mesa_bufferobj_mapped(bo, MAP_INTERNAL))
if (bo && !_mesa_bufferobj_mapped(bo, MAP_INTERNAL))
ctx->Driver.MapBufferRange(ctx, 0, bo->Size, access, bo, MAP_INTERNAL);
_mesa_vao_map_arrays(ctx, vao, access);
......@@ -919,7 +919,7 @@ _mesa_vao_unmap_arrays(struct gl_context *ctx,
mask &= ~binding->_BoundArrays;
struct gl_buffer_object *bo = binding->BufferObj;
assert(_mesa_is_bufferobj(bo));
assert(bo);
if (!_mesa_bufferobj_mapped(bo, MAP_INTERNAL))
continue;
......@@ -937,7 +937,7 @@ _mesa_vao_unmap(struct gl_context *ctx, struct gl_vertex_array_object *vao)
struct gl_buffer_object *bo = vao->IndexBufferObj;
/* unmap the index buffer, if there is one, and still mapped */
if (_mesa_is_bufferobj(bo) && _mesa_bufferobj_mapped(bo, MAP_INTERNAL))
if (bo && _mesa_bufferobj_mapped(bo, MAP_INTERNAL))
ctx->Driver.UnmapBuffer(ctx, bo, MAP_INTERNAL);
_mesa_vao_unmap_arrays(ctx, vao);
......
......@@ -206,7 +206,7 @@ get_buffer(struct gl_context *ctx, const char *func, GLenum target,
return NULL;
}
if (!_mesa_is_bufferobj(*bufObj)) {
if (!*bufObj) {
_mesa_error(ctx, error, "%s(no buffer bound)", func);
return NULL;
}
......
......@@ -60,17 +60,6 @@ _mesa_check_disallowed_mapping(const struct gl_buffer_object *obj)
GL_MAP_PERSISTENT_BIT);
}
/**
* Is the given buffer object a user-created buffer object?
* Mesa uses default buffer objects in several places. Default buffers
* always have Name==0. User created buffers have Name!=0.
*/
static inline GLboolean
_mesa_is_bufferobj(const struct gl_buffer_object *obj)
{
return obj != NULL && obj->Name != 0;
}
extern void
_mesa_init_buffer_objects(struct gl_context *ctx);
......
......@@ -214,7 +214,7 @@ valid_dispatch_indirect(struct gl_context *ctx, GLintptr indirect)
* DRAW_INDIRECT_BUFFER binding, or if the command would source data
* beyond the end of the buffer object."
*/
if (!_mesa_is_bufferobj(ctx->DispatchIndirectBuffer)) {
if (!ctx->DispatchIndirectBuffer) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"%s: no buffer bound to DISPATCH_INDIRECT_BUFFER", name);
return GL_FALSE;
......
......@@ -1536,7 +1536,7 @@ unpack_image(struct gl_context *ctx, GLuint dimensions,
return NULL;
}
if (!_mesa_is_bufferobj(unpack->BufferObj)) {
if (!unpack->BufferObj) {
/* no PBO */
GLvoid *image;
......
......@@ -72,7 +72,7 @@ check_array_data(struct gl_context *ctx, struct gl_vertex_array_object *vao,
&vao->BufferBinding[array->BufferBindingIndex];
struct gl_buffer_object *bo = binding->BufferObj;
const void *data = array->Ptr;
if (_mesa_is_bufferobj(bo)) {
if (bo) {
data = ADD_POINTERS(_mesa_vertex_attrib_address(array, binding),
bo->Mappings[MAP_INTERNAL].Pointer);
}
......@@ -133,7 +133,7 @@ check_draw_elements_data(struct gl_context *ctx, GLsizei count,
_mesa_vao_map(ctx, vao, GL_MAP_READ_BIT);
if (_mesa_is_bufferobj(vao->IndexBufferObj))
if (vao->IndexBufferObj)
elements =
ADD_POINTERS(vao->IndexBufferObj->Mappings[MAP_INTERNAL].Pointer, elements);
......@@ -257,7 +257,7 @@ print_draw_arrays(struct gl_context *ctx,
array->Format.Size, binding->Stride,
array->Ptr, bufObj ? bufObj->Name : 0);
if (_mesa_is_bufferobj(bufObj)) {
if (bufObj) {
GLubyte *p = bufObj->Mappings[MAP_INTERNAL].Pointer;
int offset = (int) (GLintptr)
_mesa_vertex_attrib_address(array, binding);
......@@ -751,7 +751,7 @@ skip_draw_elements(struct gl_context *ctx, GLsizei count,
/* Not using a VBO for indices, so avoid NULL pointer derefs later.
*/
if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj) && indices == NULL)
if (!ctx->Array.VAO->IndexBufferObj && indices == NULL)
return true;
if (skip_validated_draw(ctx))
......@@ -1226,7 +1226,7 @@ _mesa_validated_multidrawelements(struct gl_context *ctx, GLenum mode,
* subranges of the index buffer as one large index buffer may lead to
* us reading unmapped memory.
*/
if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj))
if (!ctx->Array.VAO->IndexBufferObj)
fallback = GL_TRUE;
}
......@@ -1542,7 +1542,7 @@ _mesa_exec_DrawArraysIndirect(GLenum mode, const GLvoid *indirect)
* pointer passed as their <indirect> parameters."
*/
if (ctx->API == API_OPENGL_COMPAT &&
!_mesa_is_bufferobj(ctx->DrawIndirectBuffer)) {
!ctx->DrawIndirectBuffer) {
DrawArraysIndirectCommand *cmd = (DrawArraysIndirectCommand *) indirect;
_mesa_exec_DrawArraysInstancedBaseInstance(mode, cmd->first, cmd->count,
......@@ -1589,14 +1589,14 @@ _mesa_exec_DrawElementsIndirect(GLenum mode, GLenum type, const GLvoid *indirect
* pointer passed as their <indirect> parameters."
*/
if (ctx->API == API_OPENGL_COMPAT &&
!_mesa_is_bufferobj(ctx->DrawIndirectBuffer)) {
!ctx->DrawIndirectBuffer) {
/*
* Unlike regular DrawElementsInstancedBaseVertex commands, the indices
* may not come from a client array and must come from an index buffer.
* If no element array buffer is bound, an INVALID_OPERATION error is
* generated.
*/
if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) {
if (!ctx->Array.VAO->IndexBufferObj) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glDrawElementsIndirect(no buffer bound "
"to GL_ELEMENT_ARRAY_BUFFER)");
......@@ -1661,7 +1661,7 @@ _mesa_exec_MultiDrawArraysIndirect(GLenum mode, const GLvoid *indirect,
* pointer passed as their <indirect> parameters."
*/
if (ctx->API == API_OPENGL_COMPAT &&
!_mesa_is_bufferobj(ctx->DrawIndirectBuffer)) {
!ctx->DrawIndirectBuffer) {
if (!_mesa_valid_draw_indirect_multi(ctx, primcount, stride,
"glMultiDrawArraysIndirect"))
......@@ -1730,14 +1730,14 @@ _mesa_exec_MultiDrawElementsIndirect(GLenum mode, GLenum type,
* pointer passed as their <indirect> parameters."
*/
if (ctx->API == API_OPENGL_COMPAT &&
!_mesa_is_bufferobj(ctx->DrawIndirectBuffer)) {
!ctx->DrawIndirectBuffer) {
/*
* Unlike regular DrawElementsInstancedBaseVertex commands, the indices
* may not come from a client array and must come from an index buffer.
* If no element array buffer is bound, an INVALID_OPERATION error is
* generated.
*/
if (!_mesa_is_bufferobj(ctx->Array.VAO->IndexBufferObj)) {
if (!ctx->Array.VAO->IndexBufferObj) {
_mesa_error(ctx, GL_INVALID_OPERATION,
"glMultiDrawElementsIndirect(no buffer bound "
"to GL_ELEMENT_ARRAY_BUFFER)");
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment