[Mesa-dev] [PATCH 20/22] meta/blit: Don't dynamically select the MSAA "emit" function

Ian Romanick idr at freedesktop.org
Mon Feb 22 21:15:33 UTC 2016


On 02/19/2016 01:55 AM, Iago Toral wrote:
> On Wed, 2016-02-17 at 17:58 -0800, Ian Romanick wrote:
>> From: Ian Romanick <ian.d.romanick at intel.com>
>>
>> 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.
> 
> I am a bit confused by this last paragraph, isn't this issue fixed in
> patch 18?

Yes... that whole paragraph is a left-over.  I'll remove it.

>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>> ---
>>  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,
> 
> 



More information about the mesa-dev mailing list