mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
mesa: implement GetMultisamplefv
Actual sample locations deferred to a driverfunc since only the driver
really knows where they will be.
V2: - pass the draw buffer to the driverfunc; don't fallback to pixel
center if driverfunc is missing.
- rename GetSampleLocation to GetSamplePosition
- invert y sample position for winsys FBOs, at Paul's suggestion
Signed-off-by: Chris Forbes <chrisf@ijw.co.nz>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
abb5429537
commit
7c1017e292
3 changed files with 34 additions and 2 deletions
|
|
@ -209,6 +209,9 @@ _mesa_init_driver_functions(struct dd_function_table *driver)
|
|||
|
||||
/* GL_ARB_texture_storage */
|
||||
driver->AllocTextureStorage = _swrast_AllocTextureStorage;
|
||||
|
||||
/* GL_ARB_texture_multisample */
|
||||
driver->GetSamplePosition = NULL;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -833,6 +833,14 @@ struct dd_function_table {
|
|||
* This should be equivalent to glGetInteger64v(GL_TIMESTAMP);
|
||||
*/
|
||||
uint64_t (*GetTimestamp)(struct gl_context *ctx);
|
||||
|
||||
/**
|
||||
* \name GL_ARB_texture_multisample
|
||||
*/
|
||||
void (*GetSamplePosition)(struct gl_context *ctx,
|
||||
struct gl_framebuffer *fb,
|
||||
GLuint index,
|
||||
GLfloat *outValue);
|
||||
};
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@
|
|||
#include "main/macros.h"
|
||||
#include "main/multisample.h"
|
||||
#include "main/mtypes.h"
|
||||
#include "main/fbobject.h"
|
||||
|
||||
|
||||
/**
|
||||
|
|
@ -65,8 +66,28 @@ _mesa_init_multisample(struct gl_context *ctx)
|
|||
void GLAPIENTRY
|
||||
_mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat * val)
|
||||
{
|
||||
assert(!"Not implemented");
|
||||
// TODO: make this work
|
||||
GET_CURRENT_CONTEXT(ctx);
|
||||
|
||||
switch (pname) {
|
||||
case GL_SAMPLE_POSITION: {
|
||||
if (index >= ctx->DrawBuffer->Visual.samples) {
|
||||
_mesa_error( ctx, GL_INVALID_VALUE, "glGetMultisamplefv(index)" );
|
||||
return;
|
||||
}
|
||||
|
||||
ctx->Driver.GetSamplePosition(ctx, ctx->DrawBuffer, index, val);
|
||||
|
||||
/* winsys FBOs are upside down */
|
||||
if (_mesa_is_winsys_fbo(ctx->DrawBuffer))
|
||||
val[1] = 1 - val[1];
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
default:
|
||||
_mesa_error( ctx, GL_INVALID_ENUM, "glGetMultisamplefv(pname)" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
void GLAPIENTRY
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue