Henri Verbeet : wined3d: Don't print the GLSL info log by default on fglrx.
Alexandre Julliard
julliard at winehq.org
Mon Sep 5 13:26:19 CDT 2011
Module: wine
Branch: master
Commit: 74b418c9e0a9d40e01b9a22bf9d3b4e652223da3
URL: http://source.winehq.org/git/wine.git/?a=commit;h=74b418c9e0a9d40e01b9a22bf9d3b4e652223da3
Author: Henri Verbeet <hverbeet at codeweavers.com>
Date: Sun Sep 4 22:43:49 2011 +0200
wined3d: Don't print the GLSL info log by default on fglrx.
---
dlls/wined3d/directx.c | 16 +++++++++++++
dlls/wined3d/glsl_shader.c | 49 +++++++++------------------------------
dlls/wined3d/wined3d_private.h | 1 +
3 files changed, 29 insertions(+), 37 deletions(-)
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index 116f1be..11582d4 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -774,6 +774,12 @@ static BOOL match_broken_rgba16(const struct wined3d_gl_info *gl_info, const cha
return size < 16;
}
+static BOOL match_fglrx(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
+ enum wined3d_gl_vendor gl_vendor, enum wined3d_pci_vendor card_vendor, enum wined3d_pci_device device)
+{
+ return gl_vendor == GL_VENDOR_FGLRX;
+}
+
static void quirk_arb_constants(struct wined3d_gl_info *gl_info)
{
TRACE_(d3d_caps)("Using ARB vs constant limit(=%u) for GLSL.\n", gl_info->limits.arb_vs_native_constants);
@@ -891,6 +897,11 @@ static void quirk_broken_rgba16(struct wined3d_gl_info *gl_info)
gl_info->quirks |= WINED3D_QUIRK_BROKEN_RGBA16;
}
+static void quirk_infolog_spam(struct wined3d_gl_info *gl_info)
+{
+ gl_info->quirks |= WINED3D_QUIRK_INFO_LOG_SPAM;
+}
+
struct driver_quirk
{
BOOL (*match)(const struct wined3d_gl_info *gl_info, const char *gl_renderer,
@@ -975,6 +986,11 @@ static const struct driver_quirk quirk_table[] =
quirk_broken_rgba16,
"True RGBA16 is not available"
},
+ {
+ match_fglrx,
+ quirk_infolog_spam,
+ "Not printing GLSL infolog"
+ },
};
/* Certain applications (Steam) complain if we report an outdated driver version. In general,
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index ee7c3b7..837b7d4 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -198,26 +198,9 @@ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleA
{
int infologLength = 0;
char *infoLog;
- unsigned int i;
- BOOL is_spam;
-
- static const char * const spam[] =
- {
- "Vertex shader was successfully compiled to run on hardware.\n", /* fglrx */
- "Fragment shader was successfully compiled to run on hardware.\n", /* fglrx, with \n */
- "Fragment shader was successfully compiled to run on hardware.", /* fglrx, no \n */
- "Fragment shader(s) linked, vertex shader(s) linked. \n ", /* fglrx, with \n */
- "Fragment shader(s) linked, vertex shader(s) linked. \n", /* fglrx, with \n */
- "Fragment shader(s) linked, vertex shader(s) linked.", /* fglrx, no \n */
- "Vertex shader(s) linked, no fragment shader(s) defined. \n ", /* fglrx, with \n */
- "Vertex shader(s) linked, no fragment shader(s) defined. \n", /* fglrx, with \n */
- "Vertex shader(s) linked, no fragment shader(s) defined.", /* fglrx, no \n */
- "Fragment shader(s) linked, no vertex shader(s) defined. \n ", /* fglrx, with \n */
- "Fragment shader(s) linked, no vertex shader(s) defined. \n", /* fglrx, with \n */
- "Fragment shader(s) linked, no vertex shader(s) defined.", /* fglrx, no \n */
- };
- if (!TRACE_ON(d3d_shader) && !FIXME_ON(d3d_shader)) return;
+ if (!WARN_ON(d3d_shader) && !FIXME_ON(d3d_shader))
+ return;
GL_EXTCALL(glGetObjectParameterivARB(obj,
GL_OBJECT_INFO_LOG_LENGTH_ARB,
@@ -229,31 +212,23 @@ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleA
{
char *ptr, *line;
- /* Fglrx doesn't terminate the string properly, but it tells us the proper length.
- * So use HEAP_ZERO_MEMORY to avoid uninitialized bytes
- */
- infoLog = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, infologLength);
+ infoLog = HeapAlloc(GetProcessHeap(), 0, infologLength);
+ /* The info log is supposed to be zero-terminated, but at least some
+ * versions of fglrx don't terminate the string properly. The reported
+ * length does include the terminator, so explicitly set it to zero
+ * here. */
+ infoLog[infologLength - 1] = 0;
GL_EXTCALL(glGetInfoLogARB(obj, infologLength, NULL, infoLog));
- is_spam = FALSE;
-
- for (i = 0; i < sizeof(spam) / sizeof(*spam); ++i)
- {
- if (!strcmp(infoLog, spam[i]))
- {
- is_spam = TRUE;
- break;
- }
- }
ptr = infoLog;
- if (is_spam)
+ if (gl_info->quirks & WINED3D_QUIRK_INFO_LOG_SPAM)
{
- TRACE("Spam received from GLSL shader #%u:\n", obj);
- while ((line = get_info_log_line(&ptr))) TRACE(" %s\n", line);
+ WARN("Info log received from GLSL shader #%u:\n", obj);
+ while ((line = get_info_log_line(&ptr))) WARN(" %s\n", line);
}
else
{
- FIXME("Error received from GLSL shader #%u:\n", obj);
+ FIXME("Info log received from GLSL shader #%u:\n", obj);
while ((line = get_info_log_line(&ptr))) FIXME(" %s\n", line);
}
HeapFree(GetProcessHeap(), 0, infoLog);
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index e210ca1..fd2bedc 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -52,6 +52,7 @@
#define WINED3D_QUIRK_NV_CLIP_BROKEN 0x00000010
#define WINED3D_QUIRK_FBO_TEX_UPDATE 0x00000020
#define WINED3D_QUIRK_BROKEN_RGBA16 0x00000040
+#define WINED3D_QUIRK_INFO_LOG_SPAM 0x00000080
/* Texture format fixups */
More information about the wine-cvs
mailing list