diff options
author | marha <marha@users.sourceforge.net> | 2013-11-07 08:23:50 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2013-11-07 08:23:50 +0100 |
commit | 51c3a4e7b08aa904ff2af52a9f6f7adc748b361f (patch) | |
tree | 38fa447dc8970b83becb4d35487d2bb2e565301b /mesalib/src/mesa/program/program.c | |
parent | d79b6645eb21ca82d506ef038b8ea71a1e431f3f (diff) | |
parent | 31fd4c5654595a4763e492e4ec26f66ca3a8a405 (diff) | |
download | vcxsrv-51c3a4e7b08aa904ff2af52a9f6f7adc748b361f.tar.gz vcxsrv-51c3a4e7b08aa904ff2af52a9f6f7adc748b361f.tar.bz2 vcxsrv-51c3a4e7b08aa904ff2af52a9f6f7adc748b361f.zip |
Merge remote-tracking branch 'origin/released'
* origin/released:
libxtrans fontconfig mesa xserver pixman xkbcomp git update 4 nov 2013
Conflicts:
xorg-server/Xext/shm.c
xorg-server/os/xstrans.c
Diffstat (limited to 'mesalib/src/mesa/program/program.c')
-rw-r--r-- | mesalib/src/mesa/program/program.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/mesalib/src/mesa/program/program.c b/mesalib/src/mesa/program/program.c index 093d37297..a102ec17a 100644 --- a/mesalib/src/mesa/program/program.c +++ b/mesalib/src/mesa/program/program.c @@ -32,6 +32,7 @@ #include "main/glheader.h" #include "main/context.h" #include "main/hash.h" +#include "main/macros.h" #include "program.h" #include "prog_cache.h" #include "prog_parameter.h" @@ -1024,3 +1025,34 @@ _mesa_postprocess_program(struct gl_context *ctx, struct gl_program *prog) } } + +/* Gets the minimum number of shader invocations per fragment. + * This function is useful to determine if we need to do per + * sample shading or per fragment shading. + */ +GLint +_mesa_get_min_invocations_per_fragment(struct gl_context *ctx, + const struct gl_fragment_program *prog) +{ + /* From ARB_sample_shading specification: + * "Using gl_SampleID in a fragment shader causes the entire shader + * to be evaluated per-sample." + * + * "Using gl_SamplePosition in a fragment shader causes the entire + * shader to be evaluated per-sample." + * + * "If MULTISAMPLE or SAMPLE_SHADING_ARB is disabled, sample shading + * has no effect." + */ + if (ctx->Multisample.Enabled) { + if (prog->Base.SystemValuesRead & (SYSTEM_BIT_SAMPLE_ID | + SYSTEM_BIT_SAMPLE_POS)) + return MAX2(ctx->DrawBuffer->Visual.samples, 1); + else if (ctx->Multisample.SampleShading) + return MAX2(ceil(ctx->Multisample.MinSampleShadingValue * + ctx->DrawBuffer->Visual.samples), 1); + else + return 1; + } + return 1; +} |