<div dir="ltr">On 29 December 2012 04:35, Chris Forbes <span dir="ltr"><<a href="mailto:chrisf@ijw.co.nz" target="_blank">chrisf@ijw.co.nz</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">
Actual sample locations deferred to a driverfunc since only the driver<br>
really knows where they will be.<br>
<br>
V2: pass the draw buffer to the driverfunc; don't fallback to pixel<br>
center if driverfunc is missing.<br>
<br>
Signed-off-by: Chris Forbes <<a href="mailto:chrisf@ijw.co.nz">chrisf@ijw.co.nz</a>><br></blockquote><div><br></div><div>I'm a little bothered by the nomenclature inconsistency between the GL enum GL_SAMPLE_POSITION and the driver function GetSampleLocation.  Can we call the driver function GetSamplePosition to match GL terminology?<br>
</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
---<br>
 src/mesa/drivers/common/driverfuncs.c |  3 +++<br>
 src/mesa/main/dd.h                    |  8 ++++++++<br>
 src/mesa/main/multisample.c           | 21 +++++++++++++++++++--<br>
 3 files changed, 30 insertions(+), 2 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/common/driverfuncs.c b/src/mesa/drivers/common/driverfuncs.c<br>
index 93fa3c7..5ee4e7c 100644<br>
--- a/src/mesa/drivers/common/driverfuncs.c<br>
+++ b/src/mesa/drivers/common/driverfuncs.c<br>
@@ -209,6 +209,9 @@ _mesa_init_driver_functions(struct dd_function_table *driver)<br>
<br>
    /* GL_ARB_texture_storage */<br>
    driver->AllocTextureStorage = _swrast_AllocTextureStorage;<br>
+<br>
+   /* GL_ARB_texture_multisample */<br>
+   driver->GetSampleLocation = NULL;<br>
 }<br>
<br>
<br>
diff --git a/src/mesa/main/dd.h b/src/mesa/main/dd.h<br>
index 70c5324..69e0252 100644<br>
--- a/src/mesa/main/dd.h<br>
+++ b/src/mesa/main/dd.h<br>
@@ -829,6 +829,14 @@ struct dd_function_table {<br>
     * This should be equivalent to glGetInteger64v(GL_TIMESTAMP);<br>
     */<br>
    uint64_t (*GetTimestamp)(struct gl_context *ctx);<br>
+<br>
+   /**<br>
+    * \name GL_ARB_texture_multisample<br>
+    */<br>
+   void (*GetSampleLocation)(struct gl_context *ctx,<br>
+                             struct gl_framebuffer *fb,<br>
+                             GLuint index,<br>
+                             GLfloat *outValue);<br>
 };<br>
<br>
<br>
diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c<br>
index 0cc8eaf..ee9e263 100644<br>
--- a/src/mesa/main/multisample.c<br>
+++ b/src/mesa/main/multisample.c<br>
@@ -64,8 +64,25 @@ _mesa_init_multisample(struct gl_context *ctx)<br>
 void GLAPIENTRY<br>
 _mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat * val)<br>
 {<br>
-   assert(!"Not implemented");<br>
-   // TODO: make this work<br>
+   GET_CURRENT_CONTEXT(ctx);<br>
+<br>
+   switch (pname) {<br>
+   case GL_SAMPLE_POSITION: {<br>
+      int samples = ctx->DrawBuffer->Visual.samples;<br>
+<br>
+      if (index >= samples) {<br>
+         _mesa_error( ctx, GL_INVALID_VALUE, "glGetMultisamplefv(index)" );<br>
+         return;<br>
+      }<br>
+<br>
+      ctx->Driver.GetSampleLocation(ctx, ctx->DrawBuffer, index, val);<br>
+      return;<br>
+   }<br>
+<br>
+   default:<br>
+      _mesa_error( ctx, GL_INVALID_ENUM, "glGetMultisamplefv(pname)" );<br>
+      return;<br>
+   }<br>
 }<br>
<br>
 void GLAPIENTRY<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.0.3<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>