132001f49Smrg/* 232001f49Smrg * (C) Copyright IBM Corporation 2006 332001f49Smrg * All Rights Reserved. 432001f49Smrg * 532001f49Smrg * Permission is hereby granted, free of charge, to any person obtaining a 632001f49Smrg * copy of this software and associated documentation files (the "Software"), 732001f49Smrg * to deal in the Software without restriction, including without limitation 832001f49Smrg * on the rights to use, copy, modify, merge, publish, distribute, sub 932001f49Smrg * license, and/or sell copies of the Software, and to permit persons to whom 1032001f49Smrg * the Software is furnished to do so, subject to the following conditions: 1132001f49Smrg * 1232001f49Smrg * The above copyright notice and this permission notice (including the next 1332001f49Smrg * paragraph) shall be included in all copies or substantial portions of the 1432001f49Smrg * Software. 1532001f49Smrg * 1632001f49Smrg * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1732001f49Smrg * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1832001f49Smrg * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL 1932001f49Smrg * VA LINUX SYSTEM, IBM AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, 2032001f49Smrg * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 2132001f49Smrg * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 2232001f49Smrg * USE OR OTHER DEALINGS IN THE SOFTWARE. 2332001f49Smrg */ 2432001f49Smrg 2532001f49Smrg/** 2632001f49Smrg * \file bug_3050.c 2732001f49Smrg * 2832001f49Smrg * Simple regression test for bug #3050. Create a texture and make a few 2932001f49Smrg * calls to \c glGetTexLevelParameteriv. If the bug still exists, trying 3032001f49Smrg * to get \c GL_TEXTURE_WITDH will cause a protocol error. 3132001f49Smrg * 3232001f49Smrg * This test \b only applies to indirect-rendering. This may mean that the 3332001f49Smrg * test needs to be run with the environment variable \c LIBGL_ALWAYS_INDIRECT 3432001f49Smrg * set to a non-zero value. 3532001f49Smrg * 3632001f49Smrg * \author Ian Romanick <idr@us.ibm.com> 3732001f49Smrg */ 3832001f49Smrg 3932001f49Smrg#include <stdio.h> 4032001f49Smrg#include <stdlib.h> 4132001f49Smrg#include <string.h> 4232001f49Smrg#include <GL/glew.h> 4332001f49Smrg#include "glut_wrap.h" 4432001f49Smrg 4532001f49Smrgstatic int Width = 400; 4632001f49Smrgstatic int Height = 200; 4732001f49Smrgstatic const GLfloat Near = 5.0, Far = 25.0; 4832001f49Smrg 4932001f49Smrg 5032001f49Smrgstatic void Display( void ) 5132001f49Smrg{ 5232001f49Smrg} 5332001f49Smrg 5432001f49Smrg 5532001f49Smrgstatic void Reshape( int width, int height ) 5632001f49Smrg{ 5732001f49Smrg} 5832001f49Smrg 5932001f49Smrg 6032001f49Smrgstatic void Key( unsigned char key, int x, int y ) 6132001f49Smrg{ 6232001f49Smrg (void) x; 6332001f49Smrg (void) y; 6432001f49Smrg switch (key) { 6532001f49Smrg case 27: 6632001f49Smrg exit(0); 6732001f49Smrg break; 6832001f49Smrg } 6932001f49Smrg glutPostRedisplay(); 7032001f49Smrg} 7132001f49Smrg 7232001f49Smrg 7332001f49Smrgstatic void Init( void ) 7432001f49Smrg{ 7532001f49Smrg unsigned i; 7632001f49Smrg static const GLenum pnames[] = { 7732001f49Smrg GL_TEXTURE_RED_SIZE, 7832001f49Smrg GL_TEXTURE_GREEN_SIZE, 7932001f49Smrg GL_TEXTURE_BLUE_SIZE, 8032001f49Smrg GL_TEXTURE_ALPHA_SIZE, 8132001f49Smrg GL_TEXTURE_LUMINANCE_SIZE, 8232001f49Smrg GL_TEXTURE_INTENSITY_SIZE, 8332001f49Smrg GL_TEXTURE_BORDER, 8432001f49Smrg GL_TEXTURE_INTERNAL_FORMAT, 8532001f49Smrg GL_TEXTURE_WIDTH, 8632001f49Smrg GL_TEXTURE_HEIGHT, 8732001f49Smrg GL_TEXTURE_DEPTH, 8832001f49Smrg ~0 8932001f49Smrg }; 9032001f49Smrg 9132001f49Smrg 9232001f49Smrg printf("GL_RENDERER = %s\n", (char *) glGetString(GL_RENDERER)); 9332001f49Smrg printf("GL_VERSION = %s\n", (char *) glGetString(GL_VERSION)); 9432001f49Smrg 9532001f49Smrg printf("\nThis program should log some data about a texture and exit.\n"); 9632001f49Smrg printf("This is a regression test for bug #3050. If the bug still\n"); 9732001f49Smrg printf("exists, a GLX protocol error will be generated.\n"); 9832001f49Smrg printf("https://bugs.freedesktop.org/show_bug.cgi?id=3050\n\n"); 9932001f49Smrg 10032001f49Smrg 10132001f49Smrg if ( ! glutExtensionSupported( "GL_NV_texture_rectangle" ) 10232001f49Smrg && ! glutExtensionSupported( "GL_EXT_texture_rectangle" ) 10332001f49Smrg && ! glutExtensionSupported( "GL_ARB_texture_rectangle" ) ) { 10432001f49Smrg printf( "This test requires one of GL_ARB_texture_rectangle, GL_EXT_texture_rectangle,\n" 10532001f49Smrg "or GL_NV_texture_rectangle be supported\n." ); 10632001f49Smrg exit( 1 ); 10732001f49Smrg } 10832001f49Smrg 10932001f49Smrg 11032001f49Smrg glBindTexture( GL_TEXTURE_RECTANGLE_NV, 1 ); 11132001f49Smrg glTexImage2D( GL_PROXY_TEXTURE_RECTANGLE_NV, 0, GL_RGBA, 8, 8, 0, 11232001f49Smrg GL_RGBA, GL_UNSIGNED_BYTE, NULL ); 11332001f49Smrg 11432001f49Smrg for ( i = 0 ; pnames[i] != ~0 ; i++ ) { 11532001f49Smrg GLint param_i; 11632001f49Smrg GLfloat param_f; 11732001f49Smrg GLenum err; 11832001f49Smrg 11932001f49Smrg glGetTexLevelParameteriv( GL_PROXY_TEXTURE_RECTANGLE_NV, 0, pnames[i], & param_i ); 12032001f49Smrg err = glGetError(); 12132001f49Smrg 12232001f49Smrg if ( err ) { 12332001f49Smrg printf("glGetTexLevelParameteriv(GL_PROXY_TEXTURE_RECTANGLE_NV, 0, 0x%04x, & param) generated a GL\n" 12432001f49Smrg "error of 0x%04x!", 12532001f49Smrg pnames[i], err ); 12632001f49Smrg exit( 1 ); 12732001f49Smrg } 12832001f49Smrg else { 12932001f49Smrg printf("glGetTexLevelParameteriv(GL_PROXY_TEXTURE_RECTANGLE_NV, 0, 0x%04x, & param) = 0x%04x\n", 13032001f49Smrg pnames[i], param_i ); 13132001f49Smrg } 13232001f49Smrg 13332001f49Smrg 13432001f49Smrg glGetTexLevelParameterfv( GL_PROXY_TEXTURE_RECTANGLE_NV, 0, pnames[i], & param_f ); 13532001f49Smrg err = glGetError(); 13632001f49Smrg 13732001f49Smrg if ( err ) { 13832001f49Smrg printf("glGetTexLevelParameterfv(GL_PROXY_TEXTURE_RECTANGLE_NV, 0, 0x%04x, & param) generated a GL\n" 13932001f49Smrg "error of 0x%04x!\n", 14032001f49Smrg pnames[i], err ); 14132001f49Smrg exit( 1 ); 14232001f49Smrg } 14332001f49Smrg else { 14432001f49Smrg printf("glGetTexLevelParameterfv(GL_PROXY_TEXTURE_RECTANGLE_NV, 0, 0x%04x, & param) = %.1f (0x%04x)\n", 14532001f49Smrg pnames[i], param_f, (GLint) param_f ); 14632001f49Smrg } 14732001f49Smrg } 14832001f49Smrg} 14932001f49Smrg 15032001f49Smrg 15132001f49Smrgint main( int argc, char *argv[] ) 15232001f49Smrg{ 15332001f49Smrg glutInit( &argc, argv ); 15432001f49Smrg glutInitWindowPosition( 0, 0 ); 15532001f49Smrg glutInitWindowSize( Width, Height ); 15632001f49Smrg glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE ); 15732001f49Smrg glutCreateWindow( "Bug #3050 Test" ); 15832001f49Smrg glewInit(); 15932001f49Smrg glutReshapeFunc( Reshape ); 16032001f49Smrg glutKeyboardFunc( Key ); 16132001f49Smrg glutDisplayFunc( Display ); 16232001f49Smrg Init(); 16332001f49Smrg return 0; 16432001f49Smrg} 165