# -*- coding: utf-8 -*-

#-------------------------------------------------------------------------
# drawElements Quality Program utilities
# --------------------------------------
#
# Copyright 2015 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
#-------------------------------------------------------------------------

from src_util import *

# Functions that have special implementation
OVERRIDE_FUNCS = set([
	"glGetError",
	"glGetIntegerv",
	"glGetBooleanv",
	"glGetFloatv",
	"glGetString",
	"glGetStringi",
	"glCreateShader",
	"glCreateProgram",
	"glGetShaderiv",
	"glGetProgramiv",
	"glGenTextures",
	"glGenQueries",
	"glGenBuffers",
	"glGenRenderbuffers",
	"glGenFramebuffers",
	"glGenVertexArrays",
	"glGenSamplers",
	"glGenTransformFeedbacks",
	"glGenProgramPipelines",
	"glGetInternalformativ",
	"glMapBufferRange",
	"glCheckFramebufferStatus",
	"glReadPixels",
	"glBindBuffer",
	"glDeleteBuffers",
	"glGetAttribLocation",
])

NULL_PLATFORM_DIR = os.path.normpath(os.path.join(SCRIPTS_DIR, "..", "..", "framework", "platform", "null"))

def commandDummyImpl (command):
	if command.name in OVERRIDE_FUNCS:
		return None
	template = """
GLW_APICALL {returnType} GLW_APIENTRY {commandName} ({paramDecls})
{{
{body}{maybeReturn}
}}"""
	return template.format(
		returnType	= command.type,
		commandName	= command.name,
		paramDecls	= commandParams(command),
		body		= ''.join("\tDE_UNREF(%s);\n" % p.name for p in command.params),
		maybeReturn = "\n\treturn (%s)0;" % command.type if command.type != 'void' else "")

def commandInitStatement (command):
	return "gl->%s\t= %s;" % (getFunctionMemberName(command.name), command.name)

def genNullRenderContext (iface):
	genCommandList(iface, commandInitStatement,
				   directory	= NULL_PLATFORM_DIR,
				   filename		= "tcuNullRenderContextInitFuncs.inl",
				   align		= True)
	genCommandList(iface, commandDummyImpl,
				   directory	= NULL_PLATFORM_DIR,
				   filename		= "tcuNullRenderContextFuncs.inl")

if __name__ == "__main__":
	genNullRenderContext(getHybridInterface())