Edit

kc3-lang/angle/src/libANGLE/validationES2.h

Branch :

  • Show log

    Commit

  • Author : Jamie Madill
    Date : 2018-12-08 09:56:38
    Hash : f5c88e7e
    Message : Refactor and inline DrawElements validation. This moves ValidateDrawBase into a common inline function. It also moves some checks in ValidateDrawElementsCommon into ValidateDrawElementsBase. "Base" is called from DrawElementsIndirect while "Common" is only called from non-indirect entry points. But this improves conformance because the missing checks in "Base" apply to DrawIndirect as well. In a follow-up patch many checks in "Base" will be cached into a single value. Much like what we did for ValidateDrawBase. Also inlines ValidateDrawElements which just calls through to "Common". Bug: angleproject:2966 Change-Id: Ibe0c5db25f403dd52a50dc73373ebb50cedad003 Reviewed-on: https://chromium-review.googlesource.com/c/1357147 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: Yuly Novikov <ynovikov@chromium.org>

  • src/libANGLE/validationES2.h
  • //
    // Copyright 2018 The ANGLE Project Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style license that can be
    // found in the LICENSE file.
    //
    // validationES2.h:
    //  Inlined validation functions for OpenGL ES 2.0 entry points.
    
    #ifndef LIBANGLE_VALIDATION_ES2_H_
    #define LIBANGLE_VALIDATION_ES2_H_
    
    #include "libANGLE/ErrorStrings.h"
    #include "libANGLE/validationES.h"
    #include "libANGLE/validationES2_autogen.h"
    
    namespace gl
    {
    ANGLE_INLINE bool ValidateDrawArrays(Context *context,
                                         PrimitiveMode mode,
                                         GLint first,
                                         GLsizei count)
    {
        return ValidateDrawArraysCommon(context, mode, first, count, 1);
    }
    
    ANGLE_INLINE bool ValidateUniform2f(Context *context, GLint location, GLfloat x, GLfloat y)
    {
        return ValidateUniform(context, GL_FLOAT_VEC2, location, 1);
    }
    
    ANGLE_INLINE bool ValidateBindBuffer(Context *context, BufferBinding target, GLuint buffer)
    {
        if (!context->isValidBufferBinding(target))
        {
            context->validationError(GL_INVALID_ENUM, err::kInvalidBufferTypes);
            return false;
        }
    
        if (!context->getGLState().isBindGeneratesResourceEnabled() &&
            !context->isBufferGenerated(buffer))
        {
            context->validationError(GL_INVALID_OPERATION, err::kObjectNotGenerated);
            return false;
        }
    
        return true;
    }
    
    ANGLE_INLINE bool ValidateDrawElements(Context *context,
                                           PrimitiveMode mode,
                                           GLsizei count,
                                           DrawElementsType type,
                                           const void *indices)
    {
        return ValidateDrawElementsCommon(context, mode, count, type, indices, 1);
    }
    }  // namespace gl
    
    #endif  // LIBANGLE_VALIDATION_ES2_H_