Replace the disable-npots tool with a COGL_DEBUG option

Previously in the tests/tools directory we build a disable-npots
library which was used as an LD_PRELOAD to trick Cogl in to thinking
there is no NPOT texture extension. This is a little awkward to use so
it seems much simpler to just define a COGL_DEBUG option to disable
npot textures.
This commit is contained in:
Neil Roberts 2010-11-05 14:55:46 +00:00
parent 632412c9c8
commit 8112bfc49f
11 changed files with 19 additions and 226 deletions

View File

@ -127,6 +127,12 @@ OPT (DISABLE_BLENDING,
"disable-blending",
"Disable blending",
"Disable use of blending")
OPT (DISABLE_NPOT_TEXTURES,
"Root Cause",
"disable-npot-textures",
"Disable non-power-of-two textures",
"Makes Cogl think that the GL driver doesn't support NPOT textures "
"so that it will create sliced textures or textures with waste instead.")
OPT (SHOW_SOURCE,
"Cogl Tracing",
"show-source",

View File

@ -69,7 +69,8 @@ static const GDebugKey cogl_behavioural_debug_keys[] = {
{ "disable-texturing", COGL_DEBUG_DISABLE_TEXTURING},
{ "disable-arbfp", COGL_DEBUG_DISABLE_ARBFP},
{ "disable-glsl", COGL_DEBUG_DISABLE_GLSL},
{ "disable-blending", COGL_DEBUG_DISABLE_BLENDING}
{ "disable-blending", COGL_DEBUG_DISABLE_BLENDING},
{ "disable-npot-textures", COGL_DEBUG_DISABLE_NPOT_TEXTURES}
};
static const int n_cogl_behavioural_debug_keys =
G_N_ELEMENTS (cogl_behavioural_debug_keys);

View File

@ -55,7 +55,8 @@ typedef enum {
COGL_DEBUG_SHOW_SOURCE = 1 << 22,
COGL_DEBUG_DISABLE_BLENDING = 1 << 23,
COGL_DEBUG_TEXTURE_PIXMAP = 1 << 24,
COGL_DEBUG_BITMAP = 1 << 25
COGL_DEBUG_BITMAP = 1 << 25,
COGL_DEBUG_DISABLE_NPOT_TEXTURES = 1 << 26
} CoglDebugFlags;
#ifdef COGL_ENABLE_DEBUG

View File

@ -444,6 +444,12 @@ cogl_get_features (void)
if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_DISABLE_GLSL))
ctx->feature_flags &= ~COGL_FEATURE_SHADERS_GLSL;
if (G_UNLIKELY (cogl_debug_flags & COGL_DEBUG_DISABLE_NPOT_TEXTURES))
ctx->feature_flags &= ~(COGL_FEATURE_TEXTURE_NPOT |
COGL_FEATURE_TEXTURE_NPOT_BASIC |
COGL_FEATURE_TEXTURE_NPOT_MIPMAP |
COGL_FEATURE_TEXTURE_NPOT_REPEAT);
return ctx->feature_flags;
}

View File

@ -165,10 +165,6 @@ AC_ARG_WITH([gles],
# backend specific pkg-config files
BACKEND_PC_FILES=""
# This is only used to decide whether to build tests/tools/disable-npots.la
AC_CHECK_LIB(dl, [dlopen], [HAVE_LIBDL=yes], [HAVE_LIBDL=no])
AM_CONDITIONAL(HAVE_LIBDL, [test "x$HAVE_LIBDL" = "xyes"])
dnl === Clutter windowing system backend ======================================
AS_CASE([$CLUTTER_FLAVOUR],
@ -1110,7 +1106,6 @@ AC_CONFIG_FILES([
tests/interactive/Makefile
tests/interactive/wrapper.sh
tests/micro-bench/Makefile
tests/tools/Makefile
doc/Makefile
doc/reference/Makefile

View File

@ -1,10 +1,10 @@
SUBDIRS = accessibility data interactive micro-bench tools
SUBDIRS = accessibility data interactive micro-bench
if BUILD_TESTS
SUBDIRS += conform
endif
DIST_SUBDIRS = accessibility data conform interactive micro-bench tools
DIST_SUBDIRS = accessibility data conform interactive micro-bench
EXTRA_DIST = README

View File

@ -215,7 +215,7 @@ test-report perf-report full-report: ${TEST_PROGS}
# two textures
test-report-npot perf-report-npot full-report-npot: ${TEST_PROGS}
@test -z "${TEST_PROGS}" || { \
$(top_srcdir)/tests/tools/disable-npots.sh ; \
export COGL_DEBUG="$COGL_DEBUG,disable-npot-textures"; \
export GTESTER_LOGDIR=`mktemp -d "$(srcdir)/.testlogs-XXXXXX"` ; \
if test -d "$(top_srcdir)/.git"; then \
export REVISION="`git describe`" ; \

View File

@ -1,43 +0,0 @@
include $(top_srcdir)/build/autotools/Makefile.am.silent
noinst_LTLIBRARIES =
build_shared_libs =
if HAVE_LIBDL
noinst_LTLIBRARIES += libdisable-npots-static.la
build_shared_libs += libdisable-npots.la
endif
libdisable_npots_static_la_SOURCES = disable-npots.c
libdisable_npots_static_la_LIBADD = -ldl
INCLUDES = \
-I$(top_srcdir)/clutter \
-I$(top_srcdir)/clutter/cogl \
-I$(top_builddir)/clutter \
-I$(top_builddir)/clutter/cogl \
$(CLUTTER_CFLAGS) \
-D_GNU_SOURCE
all-local : disable-npots.sh $(build_shared_libs)
clean-local :
$(QUIET_RM)rm -f disable-npots.sh libdisable-npots.la
disable-npots.sh : $(top_builddir)/tests/tools/disable-npots.sh.in
$(QUIET_GEN) \
sed 's|--builddir--|'`cd '$(top_builddir)' && pwd`'|' < $< > $@ \
&& chmod 755 disable-npots.sh
# Also put the static library into a shared library. We need to do
# this without the automake magic because we don't want it to get
# installed
libdisable-npots.la : libdisable-npots-static.la
$(LINK) -ldl -rpath /nowhere libdisable-npots-static.la
EXTRA_DIST = README disable-npots.sh.in

View File

@ -1,2 +0,0 @@
This is a place holder for tools such as gltrace like libraries

View File

@ -1,156 +0,0 @@
/*
* This file can be build as a shared library and then used as an
* LD_PRELOAD to fake a system where NPOTs is not supported. It simply
* overrides glGetString and removes the extension strings.
*/
/* This is just included to get the right GL header */
#include <cogl/cogl.h>
#include <dlfcn.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <ctype.h>
#include <stdlib.h>
/* If RTLD_NEXT isn't available then try just using NULL */
#ifdef RTLD_NEXT
#define LIB_HANDLE RTLD_NEXT
#else
#define LIB_HANDLE NULL
#endif
typedef const GLubyte * (* GetStringFunc) (GLenum name);
static const char * const bad_strings[]
= { "GL_ARB_texture_non_power_of_two",
"GL_ARB_texture_rectangle",
"GL_EXT_texture_rectangle",
NULL };
static gboolean
get_gl_version (const gchar *version_string,
int *major_out, int *minor_out)
{
const char *major_end, *minor_end;
int major = 0, minor = 0;
if (version_string == NULL)
return FALSE;
/* Extract the major number */
for (major_end = version_string; *major_end >= '0'
&& *major_end <= '9'; major_end++)
major = (major * 10) + *major_end - '0';
/* If there were no digits or the major number isn't followed by a
dot then it is invalid */
if (major_end == version_string || *major_end != '.')
return FALSE;
/* Extract the minor number */
for (minor_end = major_end + 1; *minor_end >= '0'
&& *minor_end <= '9'; minor_end++)
minor = (minor * 10) + *minor_end - '0';
/* If there were no digits or there is an unexpected character then
it is invalid */
if (minor_end == major_end + 1
|| (*minor_end && *minor_end != ' ' && *minor_end != '.'))
return FALSE;
*major_out = major;
*minor_out = minor;
return TRUE;
}
const GLubyte *
glGetString (GLenum name)
{
const gchar *ret = NULL;
static GetStringFunc func = NULL;
static gchar *extensions = NULL;
static gchar *version = NULL;
if (func == NULL
&& (func = (GetStringFunc) dlsym (LIB_HANDLE, "glGetString")) == NULL)
fprintf (stderr, "dlsym: %s\n", dlerror ());
else if (func == glGetString)
fprintf (stderr, "dlsym returned the wrapper of glGetString\n");
else
{
ret = (const gchar *) (* func) (name);
if (name == GL_EXTENSIONS)
{
if (extensions == NULL)
{
if ((extensions = strdup ((char *) ret)) == NULL)
fprintf (stderr, "strdup: %s\n", strerror (errno));
else
{
gchar *dst = extensions, *src = extensions;
while (1)
{
const char * const *str = bad_strings;
gchar *end;
while (isspace (*src))
*(dst++) = *(src++);
if (*src == 0)
break;
for (end = src + 1; *end && !isspace (*end); end++);
while (*str && strncmp ((char *) src, *str, end - src))
str++;
if (*str == NULL)
{
memcpy (dst, src, end - src);
dst += end - src;
}
src = end;
}
*dst = '\0';
}
}
ret = extensions;
}
else if (name == GL_VERSION)
{
int gl_major, gl_minor;
/* If the GL version is >= 2.0 then Cogl will assume it
supports NPOT textures anyway so we need to tweak it */
if (get_gl_version ((const gchar *) ret,
&gl_major, &gl_minor) && gl_major >= 2)
{
if (version == NULL)
{
const gchar *tail = strchr (ret, ' ');
if (tail)
{
version = malloc (3 + strlen (tail) + 1);
if (version)
{
strcpy (version + 3, tail);
memcpy (version, "1.9", 3);
}
}
else
version = strdup ("1.9");
}
ret = version;
}
}
}
return (const GLubyte *) ret;
}

View File

@ -1,15 +0,0 @@
#!/bin/sh
# This script sets up the LD_PRELOAD environment to use
# libdisable-npots.la
# Read the .la file so we can get the library name
. "--builddir--/tests/tools/libdisable-npots.la"
if test -n "$LD_PRELOAD"; then
LD_PRELOAD="${LD_PRELOAD}:";
fi
export LD_PRELOAD="${LD_PRELOAD}--builddir--/tests/tools/.libs/${dlname}"
exec "$@"