<div dir="ltr">On 14 October 2013 10:12, Anuj Phogat <span dir="ltr"><<a href="mailto:anuj.phogat@gmail.com" target="_blank">anuj.phogat@gmail.com</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">New builtins added by GL_ARB_sample_shading:<br>
in vec2 gl_SamplePosition<br>
in int gl_SampleID<br>
in int gl_NumSamples<br>
out int gl_SampleMask[]<br>
<br>
Signed-off-by: Anuj Phogat <<a href="mailto:anuj.phogat@gmail.com">anuj.phogat@gmail.com</a>><br>
---<br>
 src/glsl/builtin_variables.cpp | 11 +++++++++++<br>
 src/glsl/link_varyings.cpp     |  2 ++<br>
 src/mesa/main/mtypes.h         |  7 ++++++-<br>
 src/mesa/program/prog_print.c  |  5 +++++<br>
 4 files changed, 24 insertions(+), 1 deletion(-)<br>
<br>
diff --git a/src/glsl/builtin_variables.cpp b/src/glsl/builtin_variables.cpp<br>
index ae0a03f..c886840 100644<br>
--- a/src/glsl/builtin_variables.cpp<br>
+++ b/src/glsl/builtin_variables.cpp<br>
@@ -30,6 +30,9 @@<br>
 #include "program/prog_statevars.h"<br>
 #include "program/prog_instruction.h"<br>
<br>
+static struct gl_builtin_uniform_element gl_NumSamples_elements[] = {<br>
+   {NULL, {STATE_NUM_SAMPLES, 0, 0}, SWIZZLE_XYZW}<br>
+};<br>
<br>
 static struct gl_builtin_uniform_element gl_DepthRange_elements[] = {<br>
    {"near", {STATE_DEPTH_RANGE, 0, 0}, SWIZZLE_XXXX},<br>
@@ -236,6 +239,7 @@ static struct gl_builtin_uniform_element gl_NormalMatrix_elements[] = {<br>
 #define STATEVAR(name) {#name, name ## _elements, Elements(name ## _elements)}<br>
<br>
 static const struct gl_builtin_uniform_desc _mesa_builtin_uniform_desc[] = {<br>
+   STATEVAR(gl_NumSamples),<br>
    STATEVAR(gl_DepthRange),<br>
    STATEVAR(gl_ClipPlane),<br>
    STATEVAR(gl_Point),<br>
@@ -613,6 +617,7 @@ builtin_variable_generator::generate_constants()<br>
 void<br>
 builtin_variable_generator::generate_uniforms()<br>
 {<br>
+   add_uniform(int_t, "gl_NumSamples");<br>
    add_uniform(type("gl_DepthRangeParameters"), "gl_DepthRange");<br>
    add_uniform(array(vec4_t, VERT_ATTRIB_MAX), "gl_CurrentAttribVertMESA");<br>
    add_uniform(array(vec4_t, VARYING_SLOT_MAX), "gl_CurrentAttribFragMESA");<br>
@@ -789,6 +794,12 @@ builtin_variable_generator::generate_fs_special_vars()<br>
       if (state->AMD_shader_stencil_export_warn)<br>
          var->warn_extension = "GL_AMD_shader_stencil_export";<br>
    }<br>
+<br>
+   if (state->ARB_sample_shading_enable) {<br>
+      add_input(VARYING_SLOT_SAMPLE_ID, int_t, "gl_SampleID");<br>
+      add_input(VARYING_SLOT_SAMPLE_POS, vec2_t, "gl_SamplePosition");<br></blockquote><div><br></div><div>Can we make gl_SampleID and gl_SamplePosition system values (like SYSTEM_VALUE_VERTEX_ID and SYSTEM_VALUE_INSTANCE_ID) instead of varyings?  They aren't really varyings at all (since they don't appear in any shader stage except the fragment shader), and that way they won't take up space in all the data structures that we use to represent varyings (such as the i965 VUE map).<br>
<br></div><div>With that fixed, and assuming that the other issues brought up by Ken and Ian are addressed, this patch is:<br><br>Reviewed-by: Paul Berry <<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>><br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
+      add_output(FRAG_RESULT_SAMPLE_MASK, array(int_t, 1), "gl_SampleMask");<br>
+   }<br>
 }<br>
<br>
<br>
diff --git a/src/glsl/link_varyings.cpp b/src/glsl/link_varyings.cpp<br>
index 4ba6d8a..3595a58 100644<br>
--- a/src/glsl/link_varyings.cpp<br>
+++ b/src/glsl/link_varyings.cpp<br>
@@ -938,6 +938,8 @@ is_varying_var(GLenum shaderType, const ir_variable *var)<br>
       case VARYING_SLOT_POS:<br>
       case VARYING_SLOT_FACE:<br>
       case VARYING_SLOT_PNTC:<br>
+      case VARYING_SLOT_SAMPLE_ID:<br>
+      case VARYING_SLOT_SAMPLE_POS:<br>
          return false;<br>
       default:<br>
          return true;<br>
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h<br>
index 5520e86..65ec829 100644<br>
--- a/src/mesa/main/mtypes.h<br>
+++ b/src/mesa/main/mtypes.h<br>
@@ -236,6 +236,8 @@ typedef enum<br>
    VARYING_SLOT_LAYER, /* Appears as VS or GS output */<br>
    VARYING_SLOT_FACE, /* FS only */<br>
    VARYING_SLOT_PNTC, /* FS only */<br>
+   VARYING_SLOT_SAMPLE_ID, /* FS only */<br>
+   VARYING_SLOT_SAMPLE_POS, /* FS only */<br>
    VARYING_SLOT_VAR0, /* First generic varying slot */<br>
    VARYING_SLOT_MAX = VARYING_SLOT_VAR0 + MAX_VARYING<br>
 } gl_varying_slot;<br>
@@ -272,6 +274,8 @@ typedef enum<br>
 #define VARYING_BIT_FACE BITFIELD64_BIT(VARYING_SLOT_FACE)<br>
 #define VARYING_BIT_PNTC BITFIELD64_BIT(VARYING_SLOT_PNTC)<br>
 #define VARYING_BIT_VAR(V) BITFIELD64_BIT(VARYING_SLOT_VAR0 + (V))<br>
+#define VARYING_BIT_SAMPLE_ID BITFIELD64_BIT(VARYING_SLOT_SAMPLE_ID)<br>
+#define VARYING_BIT_SAMPLE_POS BITFIELD64_BIT(VARYING_SLOT_SAMPLE_POS)<br>
 /*@}*/<br>
<br>
<br>
@@ -306,12 +310,13 @@ typedef enum<br>
     * register is written.  No FRAG_RESULT_DATAn will be written.<br>
     */<br>
    FRAG_RESULT_COLOR = 2,<br>
+   FRAG_RESULT_SAMPLE_MASK = 3,<br>
<br>
    /* FRAG_RESULT_DATAn are the per-render-target (GLSL gl_FragData[n]<br>
     * or ARB_fragment_program fragment.color[n]) color results.  If<br>
     * any are written, FRAG_RESULT_COLOR will not be written.<br>
     */<br>
-   FRAG_RESULT_DATA0 = 3,<br>
+   FRAG_RESULT_DATA0 = 4,<br>
    FRAG_RESULT_MAX = (FRAG_RESULT_DATA0 + MAX_DRAW_BUFFERS)<br>
 } gl_frag_result;<br>
<br>
diff --git a/src/mesa/program/prog_print.c b/src/mesa/program/prog_print.c<br>
index cf85213..0c56ae6 100644<br>
--- a/src/mesa/program/prog_print.c<br>
+++ b/src/mesa/program/prog_print.c<br>
@@ -150,6 +150,8 @@ arb_input_attrib_string(GLint index, GLenum progType)<br>
       "fragment.(twenty)", /* VARYING_SLOT_LAYER */<br>
       "fragment.(twenty-one)", /* VARYING_SLOT_FACE */<br>
       "fragment.(twenty-two)", /* VARYING_SLOT_PNTC */<br>
+      "fragment.(twenty-three)", /* VARYING_SLOT_SAMPLE_ID */<br>
+      "fragment.(twenty-four)", /* VARYING_SLOT_SAMPLE_POS */<br>
       "fragment.varying[0]",<br>
       "fragment.varying[1]",<br>
       "fragment.varying[2]",<br>
@@ -274,6 +276,8 @@ arb_output_attrib_string(GLint index, GLenum progType)<br>
       "result.(twenty)", /* VARYING_SLOT_LAYER */<br>
       "result.(twenty-one)", /* VARYING_SLOT_FACE */<br>
       "result.(twenty-two)", /* VARYING_SLOT_PNTC */<br>
+      "result.(twenty-three)", /* VARYING_SLOT_SAMPLE_ID */<br>
+      "result.(twenty-four)", /* VARYING_SLOT_SAMPLE_POS */<br>
       "result.varying[0]",<br>
       "result.varying[1]",<br>
       "result.varying[2]",<br>
@@ -311,6 +315,7 @@ arb_output_attrib_string(GLint index, GLenum progType)<br>
       "result.depth", /* FRAG_RESULT_DEPTH */<br>
       "result.(one)", /* FRAG_RESULT_STENCIL */<br>
       "result.color", /* FRAG_RESULT_COLOR */<br>
+      "result.sample_mask", /* FRAG_RESULT_SAMPLE_MASK */<br>
       "result.color[0]", /* FRAG_RESULT_DATA0 (named for GLSL's gl_FragData) */<br>
       "result.color[1]",<br>
       "result.color[2]",<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.1.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></span></blockquote></div><br></div></div>