From: Ian Romanick <[email protected]> Just include all 3 versions in the shader. The GLSL type system will pick the correct one. This simplifies the code a bit, and it helps pave the way for additional simplifications.
For vec4 outputs, we have to make out_color not be a shader output. Otherwise the shader will fail to compile due to static writes to both a user-defined output and gl_FragColor. This is pretty ugly, and I think it should be fixed by not writing to gl_FragColor... but that has its own challenges. Signed-off-by: Ian Romanick <[email protected]> --- src/mesa/drivers/common/meta_blit.c | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/src/mesa/drivers/common/meta_blit.c b/src/mesa/drivers/common/meta_blit.c index 72428f9..355c937 100644 --- a/src/mesa/drivers/common/meta_blit.c +++ b/src/mesa/drivers/common/meta_blit.c @@ -550,19 +550,6 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx, } } - /* Scale the final result. */ - if (src_datatype == GL_UNSIGNED_INT || src_datatype == GL_INT) { - ralloc_asprintf_append(&sample_resolve, - " for (int i = 0; i < out_color.length(); i++)\n" - " out_color[i] = sample_%d_0;\n", - samples); - } else { - ralloc_asprintf_append(&sample_resolve, - " for (int i = 0; i < out_color.length(); i++)\n" - " out_color[i] = sample_%d_0 / %f;\n", - samples, (float)samples); - } - fs_source = ralloc_asprintf(mem_ctx, "#version 130\n" "#extension GL_ARB_texture_multisample: require\n" @@ -575,17 +562,25 @@ setup_glsl_msaa_blit_shader(struct gl_context *ctx, "ivec4 merge(ivec4 a, ivec4 b) { return (a >> 1) + (b >> 1) + (a & b & 1); }\n" /* The divide will happen at the end for floats. */ "vec4 merge(vec4 a, vec4 b) { return a + b; }\n" + "void emit2(gvec4 s) { for (int i = 0; i < out_color.length(); i++) out_color[i] = s; }\n" + "void emit(ivec4 s) { emit2(gvec4(s)); }\n" + "void emit(uvec4 s) { emit2(gvec4(s)); }\n" + /* Scale the final result. */ + "void emit(vec4 s) { emit2(gvec4(s / %f)); }\n" "\n" "void main()\n" "{\n" "%s\n" /* sample_resolve */ + " emit(sample_%d_0);\n" "}\n", vec4_prefix, vec4_prefix, sampler_array_suffix, texcoord_type, drawFb->_NumColorDrawBuffers, - sample_resolve); + (float) samples, + sample_resolve, + samples); } vs_source = ralloc_asprintf(mem_ctx, -- 2.5.0 _______________________________________________ mesa-dev mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-dev
