[Mesa-dev] [PATCH 4/8] glsl: Add new builtins required by GL_ARB_sample_shading
Kenneth Graunke
kenneth at whitecape.org
Wed Oct 16 00:02:17 CEST 2013
On 10/15/2013 10:02 AM, Ian Romanick wrote:
> 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}
>> +};
>>
>> 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");
>> + add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");
>
> I don't see code anywhere in this patch series that correctly sizes this
> array. I thought gl_SampleMask.length() == gl_NumSamples... except you
> can't use .length() on gl_SampleMask because the size can't be known at
> compile-time. We should have a test that 'gl_SampleMask.length()' fails
> to compile. :)
>
> The only other array that works like this is gl_TexCoord. That array is
> sized to 0 (line 837 of builtin_variables.cpp). I believe gl_SampleMask
> should do the same.
I believe 1 is the correct size. See my reply for a spec quote.
--Ken
More information about the mesa-dev
mailing list