[Mesa-dev] [PATCH 4/8] glsl: Add new builtins required by GL_ARB_sample_shading
Kenneth Graunke
kenneth at whitecape.org
Tue Oct 15 20:03:02 CEST 2013
On 10/14/2013 10:12 AM, Anuj Phogat wrote:
> New builtins added by GL_ARB_sample_shading:
> in vec2 gl_SamplePosition
> in int gl_SampleID
> in int gl_NumSamples
> out int gl_SampleMask[]
>
> Signed-off-by: Anuj Phogat <anuj.phogat at gmail.com>
> ---
> src/glsl/builtin_variables.cpp | 11 +++++++++++
> src/glsl/link_varyings.cpp | 2 ++
> src/mesa/main/mtypes.h | 7 ++++++-
> src/mesa/program/prog_print.c | 5 +++++
> 4 files changed, 24 insertions(+), 1 deletion(-)
>
> diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp
> index ae0a03f..c886840 100644
> --- a/src/glsl/builtin_variables.cpp
> +++ b/src/glsl/builtin_variables.cpp
> @@ -30,6 +30,9 @@
> #include "program/prog_statevars.h"
> #include "program/prog_instruction.h"
>
> +static struct gl_builtin_uniform_element gl_NumSamples_elements[] = {
> + {NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XYZW}
I believe this should be SWIZZLE_XXXX, since it's a scalar value. (See
the similar code for gl_DepthRange immediately below.)
> +};
>
> static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {
> {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX},
> @@ -236,6 +239,7 @@ static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = {
> #define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)}
>
> static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {
> + STATEVAR(gl_NumSamples),
> STATEVAR(gl_DepthRange),
> STATEVAR(gl_ClipPlane),
> STATEVAR(gl_Point),
> @@ -613,6 +617,7 @@ builtin_variable_generator::generate_constants()
> void
> builtin_variable_generator::generate_uniforms()
> {
> + add_uniform(int_t, "gl_NumSamples");
> add_uniform(type("gl_DepthRangeParameters"), "gl_DepthRange");
> add_uniform(array(vec4_t, VERT_ATTRIB_MAX), "gl_CurrentAttribVertMESA");
> add_uniform(array(vec4_t, VARYING_SLOT_MAX), "gl_CurrentAttribFragMESA");
> @@ -789,6 +794,12 @@ builtin_variable_generator::generate_fs_special_vars()
> if (state->AMD_shader_stencil_export_warn)
> var->warn_extension = "GL_AMD_shader_stencil_export";
> }
> +
> + if (state->ARB_sample_shading_enable) {
> + add_input(VARYING_SLOT_SAMPLE_ID, int_t, "gl_SampleID");
> + add_input(VARYING_SLOT_SAMPLE_POS, vec2_t, "gl_SamplePosition");
/* From the ARB_sample_shading specification:
* "The number of elements in the array is ceil(<s>/32), where <s>
* is the maximum number of color samples supported by the
* implementation."
*
* Since no drivers expose more than 32x MSAA, we can simply set
* the size to 1 rather than computing it.
*/
I think it's reasonable that you did this - I doubt anybody is going to
support >32x MSAA any time soon. To do it properly, we'd have to use
ctx->Const.MaxColorTextureSamples (or MaxSamples?). I believe they
should be initialized before this code gets called. If not, that would
need to get fixed.
Adding a comment is definitely worthwhile, though.
> + add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");
> + }
> }
With those changes, this patch is:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
More information about the mesa-dev
mailing list