diff options
-rw-r--r-- | src/mesa/drivers/common/meta.c | 85 |
1 files changed, 43 insertions, 42 deletions
diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c index 0c9ee591859..10dc49598a0 100644 --- a/src/mesa/drivers/common/meta.c +++ b/src/mesa/drivers/common/meta.c @@ -3047,7 +3047,6 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, }; struct glsl_sampler *sampler; const char *vs_source; - const char *fs_template; static const char *vs_int_source = "#version 130\n" @@ -3070,11 +3069,41 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, " out_color = texture(tex2d, texCoords.xy);\n" "}\n"; char *fs_source; - const char *extension_mode; GLuint vs, fs; void *mem_ctx; + /* Check if already initialized */ + if (mipmap->ArrayObj == 0) { + + /* create vertex array object */ + _mesa_GenVertexArrays(1, &mipmap->ArrayObj); + _mesa_BindVertexArray(mipmap->ArrayObj); + + /* create vertex array buffer */ + _mesa_GenBuffersARB(1, &mipmap->VBO); + _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); + + /* setup vertex arrays */ + _mesa_VertexAttribPointerARB(0, 2, GL_FLOAT, GL_FALSE, + sizeof(struct vertex), OFFSET(x)); + _mesa_VertexAttribPointerARB(1, 3, GL_FLOAT, GL_FALSE, + sizeof(struct vertex), OFFSET(tex)); + } + + /* Generate a fragment shader program appropriate for the texture target */ + sampler = setup_texture_sampler(target, mipmap); + assert(sampler != NULL); + if (sampler->shader_prog != 0) { + mipmap->ShaderProg = sampler->shader_prog; + return; + } + + mem_ctx = ralloc_context(NULL); + if (ctx->Const.GLSLVersion < 130) { + const char *fs_template; + const char *extension_mode; + vs_source = "attribute vec2 position;\n" "attribute vec3 textureCoords;\n" @@ -3092,7 +3121,18 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, "{\n" " gl_FragColor = %s(texSampler, %s);\n" "}\n"; - } else { + + extension_mode = ((target == GL_TEXTURE_1D_ARRAY) || + (target == GL_TEXTURE_2D_ARRAY)) ? + "require" : "disable"; + + fs_source = ralloc_asprintf(mem_ctx, fs_template, + extension_mode, sampler->type, + sampler->func, sampler->texcoords); + } + else { + const char *fs_template; + vs_source = "#version 130\n" "in vec2 position;\n" @@ -3113,46 +3153,7 @@ setup_glsl_generate_mipmap(struct gl_context *ctx, "{\n" " out_color = texture(texSampler, %s);\n" "}\n"; - } - - /* Check if already initialized */ - if (mipmap->ArrayObj == 0) { - - /* create vertex array object */ - _mesa_GenVertexArrays(1, &mipmap->ArrayObj); - _mesa_BindVertexArray(mipmap->ArrayObj); - - /* create vertex array buffer */ - _mesa_GenBuffersARB(1, &mipmap->VBO); - _mesa_BindBufferARB(GL_ARRAY_BUFFER_ARB, mipmap->VBO); - - /* setup vertex arrays */ - _mesa_VertexAttribPointerARB(0, 2, GL_FLOAT, GL_FALSE, - sizeof(struct vertex), OFFSET(x)); - _mesa_VertexAttribPointerARB(1, 3, GL_FLOAT, GL_FALSE, - sizeof(struct vertex), OFFSET(tex)); - } - /* Generate a fragment shader program appropriate for the texture target */ - sampler = setup_texture_sampler(target, mipmap); - assert(sampler != NULL); - if (sampler->shader_prog != 0) { - mipmap->ShaderProg = sampler->shader_prog; - return; - } - - mem_ctx = ralloc_context(NULL); - - if (ctx->Const.GLSLVersion < 130) { - extension_mode = ((target == GL_TEXTURE_1D_ARRAY) || - (target == GL_TEXTURE_2D_ARRAY)) ? - "require" : "disable"; - - fs_source = ralloc_asprintf(mem_ctx, fs_template, - extension_mode, sampler->type, - sampler->func, sampler->texcoords); - } - else { fs_source = ralloc_asprintf(mem_ctx, fs_template, sampler->type, "vec4", sampler->texcoords); |