[Mesa-dev] [PATCH V2 1/2] meta: Refactor _mesa_meta_setup_blit_shader() to avoid duplicate shader code
Anuj Phogat
anuj.phogat at gmail.com
Tue May 20 14:09:47 PDT 2014
On Tue, May 20, 2014 at 1:47 PM, Pohjolainen, Topi
<topi.pohjolainen at intel.com> wrote:
> On Tue, May 20, 2014 at 10:31:04AM -0700, Anuj Phogat wrote:
>> Cc: <mesa-stable at lists.freedesktop.org>
>> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
>> Reviewed-by: Matt Turner <mattst88 at gmail.com>
>> ---
>> src/mesa/drivers/common/meta.c | 101 ++++++++++++++++++++---------------------
>> 1 file changed, 48 insertions(+), 53 deletions(-)
>>
>> diff --git a/src/mesa/drivers/common/meta.c b/src/mesa/drivers/common/meta.c
>> index 3ef3f79..fab9106 100644
>> --- a/src/mesa/drivers/common/meta.c
>> +++ b/src/mesa/drivers/common/meta.c
>> @@ -242,10 +242,30 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>> GLenum target,
>> struct blit_shader_table *table)
>> {
>> - const char *vs_source;
>> - char *fs_source;
>> + char *vs_source, *fs_source;
>> void *const mem_ctx = ralloc_context(NULL);
>> struct blit_shader *shader = choose_blit_shader(target, table);
>> + const char *vs_input, *vs_output, *fs_input, *vs_preprocess, *fs_preprocess;
>> + const char *fs_output_var, *fs_output_var_decl;
>> +
>> + if (ctx->Const.GLSLVersion < 130) {
>> + vs_preprocess = "";
>> + vs_input = "attribute";
>> + vs_output = "varying";
>> + fs_preprocess = "#extension GL_EXT_texture_array : enable";
>> + fs_input = "varying";
>> + fs_output_var_decl = "";
>> + fs_output_var = "gl_FragColor";
>> + } else {
>> + vs_preprocess = "#version 130";
>> + vs_input = "in";
>> + vs_output = "out";
>> + fs_preprocess = "#version 130";
>> + fs_input = "in";
>> + fs_output_var_decl = "out vec4 out_color;";
>> + fs_output_var = "out_color";
>> + shader->func = "texture";
>> + }
>>
>> assert(shader != NULL);
>>
>> @@ -254,57 +274,32 @@ _mesa_meta_setup_blit_shader(struct gl_context *ctx,
>> return;
>> }
>>
>> - if (ctx->Const.GLSLVersion < 130) {
>> - vs_source =
>> - "attribute vec2 position;\n"
>> - "attribute vec4 textureCoords;\n"
>> - "varying vec4 texCoords;\n"
>> - "void main()\n"
>> - "{\n"
>> - " texCoords = textureCoords;\n"
>> - " gl_Position = vec4(position, 0.0, 1.0);\n"
>> - "}\n";
>> -
>> - fs_source = ralloc_asprintf(mem_ctx,
>> - "#extension GL_EXT_texture_array : enable\n"
>> - "#extension GL_ARB_texture_cube_map_array: enable\n"
>> - "uniform %s texSampler;\n"
>> - "varying vec4 texCoords;\n"
>> - "void main()\n"
>> - "{\n"
>> - " gl_FragColor = %s(texSampler, %s);\n"
>> - " gl_FragDepth = gl_FragColor.x;\n"
>> - "}\n",
>> - shader->type,
>> - shader->func, shader->texcoords);
>> - }
>> - else {
>> - vs_source = ralloc_asprintf(mem_ctx,
>> - "#version 130\n"
>> - "in vec2 position;\n"
>> - "in vec4 textureCoords;\n"
>> - "out vec4 texCoords;\n"
>> - "void main()\n"
>> - "{\n"
>> - " texCoords = textureCoords;\n"
>> - " gl_Position = vec4(position, 0.0, 1.0);\n"
>> - "}\n");
>> - fs_source = ralloc_asprintf(mem_ctx,
>> - "#version 130\n"
>> - "#extension GL_ARB_texture_cube_map_array: enable\n"
>> - "uniform %s texSampler;\n"
>> - "in vec4 texCoords;\n"
>> - "out vec4 out_color;\n"
>> - "\n"
>> - "void main()\n"
>> - "{\n"
>> - " out_color = texture(texSampler, %s);\n"
>> - " gl_FragDepth = out_color.x;\n"
>> - "}\n",
>> - shader->type,
>> - shader->texcoords);
>> - }
>> -
>> + vs_source = ralloc_asprintf(mem_ctx,
>> + "%s\n"
>> + "%s vec2 position;\n"
>> + "%s vec4 textureCoords;\n"
>> + "%s vec4 texCoords;\n"
>> + "void main()\n"
>> + "{\n"
>> + " texCoords = textureCoords;\n"
>> + " gl_Position = vec4(position, 0.0, 1.0);\n"
>> + "}\n",
>> + vs_preprocess, vs_input, vs_input, vs_output);
>> +
>> + fs_source = ralloc_asprintf(mem_ctx,
>> + "%s\n"
>> + "#extension GL_ARB_texture_cube_map_array: enable\n"
>> + "uniform %s texSampler;\n"
>> + "%s vec4 texCoords;\n"
>> + "%s\n"
>> + "void main()\n"
>> + "{\n"
>> + " vec4 color = %s(texSampler, %s);\n"
>> + " %s = color;\n"
>> + " gl_FragDepth = color.x;\n"
>> + "}\n",
>> + fs_preprocess, shader->type, fs_input, fs_output_decl,
>> + shader->func, shader->texcoords, fs_output);
>
> This won't compile, I guess you meant to use 'fs_output_var' and
> 'fs_output_var_decl' instead. Applying the second patch fixes this but...
>
Oops. Will fix it before pushing the patch.
>>
>> _mesa_meta_compile_and_link_program(ctx, vs_source, fs_source,
>> ralloc_asprintf(mem_ctx, "%s blit",
>> --
>> 1.8.3.1
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list