mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-26 06:20:09 +01:00
mesa: extract need_xfb_remaining_prims_check
The same logic needs to be applied to glMultiDrawArrays. Cc: mesa-stable@lists.freedesktop.org Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com> Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
parent
ea9a8940ca
commit
756e9ebbdd
1 changed files with 28 additions and 20 deletions
|
|
@ -816,25 +816,10 @@ _mesa_validate_DrawRangeElements(struct gl_context *ctx, GLenum mode,
|
|||
"glDrawRangeElements");
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
validate_draw_arrays(struct gl_context *ctx, const char *func,
|
||||
GLenum mode, GLsizei count, GLsizei numInstances)
|
||||
need_xfb_remaining_prims_check(const struct gl_context *ctx)
|
||||
{
|
||||
struct gl_transform_feedback_object *xfb_obj
|
||||
= ctx->TransformFeedback.CurrentObject;
|
||||
FLUSH_CURRENT(ctx, 0);
|
||||
|
||||
if (count < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(count)", func);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_mesa_valid_prim_mode(ctx, mode, func))
|
||||
return false;
|
||||
|
||||
if (!check_valid_to_render(ctx, func))
|
||||
return false;
|
||||
|
||||
/* From the GLES3 specification, section 2.14.2 (Transform Feedback
|
||||
* Primitive Capture):
|
||||
*
|
||||
|
|
@ -862,9 +847,32 @@ validate_draw_arrays(struct gl_context *ctx, const char *func,
|
|||
* is removed and replaced with the GL behavior (primitives are not
|
||||
* written and the corresponding counter is not updated)..."
|
||||
*/
|
||||
if (_mesa_is_gles3(ctx) && _mesa_is_xfb_active_and_unpaused(ctx) &&
|
||||
!_mesa_has_OES_geometry_shader(ctx) &&
|
||||
!_mesa_has_OES_tessellation_shader(ctx)) {
|
||||
return _mesa_is_gles3(ctx) && _mesa_is_xfb_active_and_unpaused(ctx) &&
|
||||
!_mesa_has_OES_geometry_shader(ctx) &&
|
||||
!_mesa_has_OES_tessellation_shader(ctx);
|
||||
}
|
||||
|
||||
|
||||
static bool
|
||||
validate_draw_arrays(struct gl_context *ctx, const char *func,
|
||||
GLenum mode, GLsizei count, GLsizei numInstances)
|
||||
{
|
||||
FLUSH_CURRENT(ctx, 0);
|
||||
|
||||
if (count < 0) {
|
||||
_mesa_error(ctx, GL_INVALID_VALUE, "%s(count)", func);
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!_mesa_valid_prim_mode(ctx, mode, func))
|
||||
return false;
|
||||
|
||||
if (!check_valid_to_render(ctx, func))
|
||||
return false;
|
||||
|
||||
if (need_xfb_remaining_prims_check(ctx)) {
|
||||
struct gl_transform_feedback_object *xfb_obj
|
||||
= ctx->TransformFeedback.CurrentObject;
|
||||
size_t prim_count = vbo_count_tessellated_primitives(mode, count, numInstances);
|
||||
if (xfb_obj->GlesRemainingPrims < prim_count) {
|
||||
_mesa_error(ctx, GL_INVALID_OPERATION,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue