[Mesa-dev] [PATCH 1/3] mesa: make Visual.samples to be of type unsigned int and propagate this
Gert Wollny
gw.fossdev at gmail.com
Mon Jan 15 16:10:51 UTC 2018
According to the ARB_multisample Visual.samples is a non-negative Integer.
Consequently define it, and related functions and values as such and fail
in glx/choose_visual if a negative number is given.
Signed-off-by: Gert Wollny <gw.fossdev at gmail.com>
---
The patch was motivated by Emil:
https://lists.freedesktop.org/archives/mesa-dev/2017-November/177218.html
It should be noted that the sample count was already converted to unsigned in
many places, e.g. in XMesaCreateVisual when passing it to
pipe_screen::is_format_supported.
PS: I have not commit rights.
src/gallium/include/state_tracker/st_api.h | 2 +-
src/gallium/state_trackers/glx/xlib/glx_api.c | 8 ++++++--
src/mesa/main/context.c | 4 ++--
src/mesa/main/context.h | 4 ++--
src/mesa/main/mtypes.h | 2 +-
src/mesa/main/multisample.c | 2 +-
6 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/gallium/include/state_tracker/st_api.h b/src/gallium/include/state_tracker/st_api.h
index f95f65f156..ec6e7844b8 100644
--- a/src/gallium/include/state_tracker/st_api.h
+++ b/src/gallium/include/state_tracker/st_api.h
@@ -202,7 +202,7 @@ struct st_visual
enum pipe_format color_format;
enum pipe_format depth_stencil_format;
enum pipe_format accum_format;
- int samples;
+ unsigned samples;
/**
* Desired render buffer.
diff --git a/src/gallium/state_trackers/glx/xlib/glx_api.c b/src/gallium/state_trackers/glx/xlib/glx_api.c
index c473a0fe54..bb8afe0e6f 100644
--- a/src/gallium/state_trackers/glx/xlib/glx_api.c
+++ b/src/gallium/state_trackers/glx/xlib/glx_api.c
@@ -181,7 +181,7 @@ save_glx_visual( Display *dpy, XVisualInfo *vinfo,
GLint depth_size, GLint stencil_size,
GLint accumRedSize, GLint accumGreenSize,
GLint accumBlueSize, GLint accumAlphaSize,
- GLint level, GLint numAuxBuffers, GLint num_samples )
+ GLint level, GLint numAuxBuffers, GLuint num_samples )
{
GLboolean ximageFlag = GL_TRUE;
XMesaVisual xmvis;
@@ -996,7 +996,11 @@ choose_visual( Display *dpy, int screen, const int *list, GLboolean fbConfig )
(void) caveat;
-
+ if (num_samples < 0) {
+ _mesa_warning(NULL, "GLX_SAMPLES_ARB: number of samples must not be negative");
+ return NULL;
+ }
+
/*
* Since we're only simulating the GLX extension this function will never
* find any real GL visuals. Instead, all we can do is try to find an RGB
diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
index 53261fea51..a52c98112e 100644
--- a/src/mesa/main/context.c
+++ b/src/mesa/main/context.c
@@ -227,7 +227,7 @@ _mesa_create_visual( GLboolean dbFlag,
GLint accumGreenBits,
GLint accumBlueBits,
GLint accumAlphaBits,
- GLint numSamples )
+ GLuint numSamples )
{
struct gl_config *vis = CALLOC_STRUCT(gl_config);
if (vis) {
@@ -269,7 +269,7 @@ _mesa_initialize_visual( struct gl_config *vis,
GLint accumGreenBits,
GLint accumBlueBits,
GLint accumAlphaBits,
- GLint numSamples )
+ GLuint numSamples )
{
assert(vis);
diff --git a/src/mesa/main/context.h b/src/mesa/main/context.h
index 17fb86c323..5d9e2ede47 100644
--- a/src/mesa/main/context.h
+++ b/src/mesa/main/context.h
@@ -79,7 +79,7 @@ _mesa_create_visual( GLboolean dbFlag,
GLint accumGreenBits,
GLint accumBlueBits,
GLint accumAlphaBits,
- GLint numSamples );
+ GLuint numSamples );
extern GLboolean
_mesa_initialize_visual( struct gl_config *v,
@@ -95,7 +95,7 @@ _mesa_initialize_visual( struct gl_config *v,
GLint accumGreenBits,
GLint accumBlueBits,
GLint accumAlphaBits,
- GLint numSamples );
+ GLuint numSamples );
extern void
_mesa_destroy_visual( struct gl_config *vis );
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index 226eb94da9..d33bf08bdf 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -243,7 +243,7 @@ struct gl_config
/* ARB_multisample / SGIS_multisample */
GLint sampleBuffers;
- GLint samples;
+ GLuint samples;
/* SGIX_pbuffer / GLX 1.3 */
GLint maxPbufferWidth;
diff --git a/src/mesa/main/multisample.c b/src/mesa/main/multisample.c
index 8ede94b745..dfe6a37142 100644
--- a/src/mesa/main/multisample.c
+++ b/src/mesa/main/multisample.c
@@ -87,7 +87,7 @@ _mesa_GetMultisamplefv(GLenum pname, GLuint index, GLfloat * val)
switch (pname) {
case GL_SAMPLE_POSITION: {
- if ((int) index >= ctx->DrawBuffer->Visual.samples) {
+ if (index >= ctx->DrawBuffer->Visual.samples) {
_mesa_error( ctx, GL_INVALID_VALUE, "glGetMultisamplefv(index)" );
return;
}
--
2.13.6
More information about the mesa-dev
mailing list