From 4cdb1c92119738eb49fb7e811950cb96f9b9262f Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Wed, 2 Sep 2009 09:27:58 +0200 Subject: [PATCH] wined3d: Print a warning when an ARB program exceeds the native resource limits. --- dlls/wined3d/arb_program_shader.c | 52 ++++++++++++++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index be2dfd25ff4..a26950cd169 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -3016,6 +3016,14 @@ static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_inf FIXME("Vertex program error at position %d: %s\n", pos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + } return program_id; } @@ -3070,6 +3078,14 @@ static GLuint create_arb_blt_fragment_program(const struct wined3d_gl_info *gl_i FIXME("Fragment program error at position %d: %s\n", pos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + } return program_id; } @@ -3515,6 +3531,14 @@ static GLuint shader_arb_generate_pshader(IWineD3DPixelShaderImpl *This, struct errPos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); retval = 0; } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + } /* Load immediate constants */ if(lconst_map) { @@ -3909,7 +3933,15 @@ static GLuint shader_arb_generate_vshader(IWineD3DVertexShaderImpl *This, struct FIXME("HW VertexShader Error at position %d: %s\n", errPos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); ret = -1; - } else { + } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + /* Load immediate constants */ if(lconst_map) { LIST_FOR_EACH_ENTRY(lconst, &This->baseShader.constantsF, local_constant, entry) { @@ -5742,6 +5774,15 @@ static GLuint gen_arbfp_ffp_shader(const struct ffp_frag_settings *settings, IWi FIXME("Fragment program error at position %d: %s\n", pos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + } + shader_buffer_free(&buffer); return ret; } @@ -6433,6 +6474,15 @@ static GLuint gen_yuv_shader(IWineD3DDeviceImpl *device, enum yuv_fixup yuv_fixu FIXME("Fragment program error at position %d: %s\n", pos, debugstr_a((const char *)glGetString(GL_PROGRAM_ERROR_STRING_ARB))); } + else + { + GLint native; + + GL_EXTCALL(glGetProgramivARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_UNDER_NATIVE_LIMITS_ARB, &native)); + checkGLcall("glGetProgramivARB()"); + if (!native) WARN("Program exceeds native resource limits.\n"); + } + shader_buffer_free(&buffer); LEAVE_GL();