summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/drivers/common/meta.c85
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);