mesa/main: Make FEATURE_convolve follow feature conventions.

As shown in mfeatures.h, this allows users of convolve.h to work without
knowing if the feature is available.
This commit is contained in:
Chia-I Wu
2009-09-23 16:56:20 +08:00
committed by Brian Paul
parent cb4f24e51d
commit 5a1e25afac
5 changed files with 105 additions and 88 deletions

View File

@@ -56,9 +56,7 @@
#include "clip.h" #include "clip.h"
#include "colortab.h" #include "colortab.h"
#include "context.h" #include "context.h"
#if FEATURE_convolve
#include "convolve.h" #include "convolve.h"
#endif
#include "depth.h" #include "depth.h"
#if FEATURE_dlist #if FEATURE_dlist
#include "dlist.h" #include "dlist.h"
@@ -384,21 +382,7 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT); SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT);
_mesa_init_colortable_dispatch(exec); _mesa_init_colortable_dispatch(exec);
_mesa_init_convolve_dispatch(exec);
#if FEATURE_convolve
SET_ConvolutionFilter1D(exec, _mesa_ConvolutionFilter1D);
SET_ConvolutionFilter2D(exec, _mesa_ConvolutionFilter2D);
SET_ConvolutionParameterf(exec, _mesa_ConvolutionParameterf);
SET_ConvolutionParameterfv(exec, _mesa_ConvolutionParameterfv);
SET_ConvolutionParameteri(exec, _mesa_ConvolutionParameteri);
SET_ConvolutionParameteriv(exec, _mesa_ConvolutionParameteriv);
SET_CopyConvolutionFilter1D(exec, _mesa_CopyConvolutionFilter1D);
SET_CopyConvolutionFilter2D(exec, _mesa_CopyConvolutionFilter2D);
SET_GetConvolutionFilter(exec, _mesa_GetConvolutionFilter);
SET_GetConvolutionParameterfv(exec, _mesa_GetConvolutionParameterfv);
SET_GetConvolutionParameteriv(exec, _mesa_GetConvolutionParameteriv);
SET_SeparableFilter2D(exec, _mesa_SeparableFilter2D);
#endif
#if FEATURE_histogram #if FEATURE_histogram
SET_GetHistogram(exec, _mesa_GetHistogram); SET_GetHistogram(exec, _mesa_GetHistogram);
SET_GetHistogramParameterfv(exec, _mesa_GetHistogramParameterfv); SET_GetHistogramParameterfv(exec, _mesa_GetHistogramParameterfv);
@@ -406,7 +390,6 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_GetMinmax(exec, _mesa_GetMinmax); SET_GetMinmax(exec, _mesa_GetMinmax);
SET_GetMinmaxParameterfv(exec, _mesa_GetMinmaxParameterfv); SET_GetMinmaxParameterfv(exec, _mesa_GetMinmaxParameterfv);
SET_GetMinmaxParameteriv(exec, _mesa_GetMinmaxParameteriv); SET_GetMinmaxParameteriv(exec, _mesa_GetMinmaxParameteriv);
SET_GetSeparableFilter(exec, _mesa_GetSeparableFilter);
SET_Histogram(exec, _mesa_Histogram); SET_Histogram(exec, _mesa_Histogram);
SET_Minmax(exec, _mesa_Minmax); SET_Minmax(exec, _mesa_Minmax);
SET_ResetHistogram(exec, _mesa_ResetHistogram); SET_ResetHistogram(exec, _mesa_ResetHistogram);

View File

@@ -40,6 +40,10 @@
#include "mtypes.h" #include "mtypes.h"
#include "pixel.h" #include "pixel.h"
#include "state.h" #include "state.h"
#include "glapi/dispatch.h"
#if FEATURE_convolve
/* /*
@@ -256,7 +260,7 @@ _mesa_ConvolutionFilter2D(GLenum target, GLenum internalFormat, GLsizei width, G
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param) _mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -299,7 +303,7 @@ _mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat param)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params) _mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -351,7 +355,7 @@ _mesa_ConvolutionParameterfv(GLenum target, GLenum pname, const GLfloat *params)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param) _mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -394,7 +398,7 @@ _mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint param)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params) _mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -459,7 +463,7 @@ _mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width) _mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width)
{ {
GLint baseFormat; GLint baseFormat;
@@ -491,7 +495,7 @@ _mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalFormat, GLint x, GLi
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height) _mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLint y, GLsizei width, GLsizei height)
{ {
GLint baseFormat; GLint baseFormat;
@@ -527,7 +531,7 @@ _mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalFormat, GLint x, GLi
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type, _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
GLvoid *image) GLvoid *image)
{ {
@@ -586,7 +590,7 @@ _mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params) _mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -647,7 +651,7 @@ _mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params) _mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params)
{ {
GET_CURRENT_CONTEXT(ctx); GET_CURRENT_CONTEXT(ctx);
@@ -717,7 +721,7 @@ _mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params)
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type, _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
GLvoid *row, GLvoid *column, GLvoid *span) GLvoid *row, GLvoid *column, GLvoid *span)
{ {
@@ -784,7 +788,7 @@ _mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
} }
void GLAPIENTRY static void GLAPIENTRY
_mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column) _mesa_SeparableFilter2D(GLenum target, GLenum internalFormat, GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *row, const GLvoid *column)
{ {
const GLint colStart = MAX_CONVOLUTION_WIDTH * 4; const GLint colStart = MAX_CONVOLUTION_WIDTH * 4;
@@ -1433,3 +1437,25 @@ _mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
*height = *height - (MAX2(ctx->Separable2D.Height, 1) - 1); *height = *height - (MAX2(ctx->Separable2D.Height, 1) - 1);
} }
} }
void
_mesa_init_convolve_dispatch(struct _glapi_table *disp)
{
SET_ConvolutionFilter1D(disp, _mesa_ConvolutionFilter1D);
SET_ConvolutionFilter2D(disp, _mesa_ConvolutionFilter2D);
SET_ConvolutionParameterf(disp, _mesa_ConvolutionParameterf);
SET_ConvolutionParameterfv(disp, _mesa_ConvolutionParameterfv);
SET_ConvolutionParameteri(disp, _mesa_ConvolutionParameteri);
SET_ConvolutionParameteriv(disp, _mesa_ConvolutionParameteriv);
SET_CopyConvolutionFilter1D(disp, _mesa_CopyConvolutionFilter1D);
SET_CopyConvolutionFilter2D(disp, _mesa_CopyConvolutionFilter2D);
SET_GetConvolutionFilter(disp, _mesa_GetConvolutionFilter);
SET_GetConvolutionParameterfv(disp, _mesa_GetConvolutionParameterfv);
SET_GetConvolutionParameteriv(disp, _mesa_GetConvolutionParameteriv);
SET_SeparableFilter2D(disp, _mesa_SeparableFilter2D);
SET_GetSeparableFilter(disp, _mesa_GetSeparableFilter);
}
#endif /* FEATURE_convolve */

View File

@@ -28,10 +28,17 @@
#define CONVOLVE_H #define CONVOLVE_H
#include "mtypes.h" #include "main/mtypes.h"
#if _HAVE_FULL_GL #if FEATURE_convolve
#define _MESA_INIT_CONVOLVE_FUNCTIONS(driver, impl) \
do { \
(driver)->CopyConvolutionFilter1D = impl ## CopyConvolutionFilter1D; \
(driver)->CopyConvolutionFilter2D = impl ## CopyConvolutionFilter2D; \
} while (0)
extern void GLAPIENTRY extern void GLAPIENTRY
_mesa_ConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width, _mesa_ConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width,
GLenum format, GLenum type, const GLvoid *image); GLenum format, GLenum type, const GLvoid *image);
@@ -41,74 +48,79 @@ _mesa_ConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width,
GLsizei height, GLenum format, GLenum type, GLsizei height, GLenum format, GLenum type,
const GLvoid *image); const GLvoid *image);
extern void GLAPIENTRY
_mesa_ConvolutionParameterf(GLenum target, GLenum pname, GLfloat params);
extern void GLAPIENTRY
_mesa_ConvolutionParameterfv(GLenum target, GLenum pname,
const GLfloat *params);
extern void GLAPIENTRY
_mesa_ConvolutionParameteri(GLenum target, GLenum pname, GLint params);
extern void GLAPIENTRY
_mesa_ConvolutionParameteriv(GLenum target, GLenum pname, const GLint *params);
extern void GLAPIENTRY
_mesa_CopyConvolutionFilter1D(GLenum target, GLenum internalformat,
GLint x, GLint y, GLsizei width);
extern void GLAPIENTRY
_mesa_CopyConvolutionFilter2D(GLenum target, GLenum internalformat,
GLint x, GLint y, GLsizei width, GLsizei height);
extern void GLAPIENTRY
_mesa_GetConvolutionFilter(GLenum target, GLenum format, GLenum type,
GLvoid *image);
extern void GLAPIENTRY
_mesa_GetConvolutionParameterfv(GLenum target, GLenum pname, GLfloat *params);
extern void GLAPIENTRY
_mesa_GetConvolutionParameteriv(GLenum target, GLenum pname, GLint *params);
extern void GLAPIENTRY
_mesa_GetSeparableFilter(GLenum target, GLenum format, GLenum type,
GLvoid *row, GLvoid *column, GLvoid *span);
extern void GLAPIENTRY
_mesa_SeparableFilter2D(GLenum target, GLenum internalformat,
GLsizei width, GLsizei height,
GLenum format, GLenum type,
const GLvoid *row, const GLvoid *column);
extern void extern void
_mesa_convolve_1d_image(const GLcontext *ctx, GLsizei *width, _mesa_convolve_1d_image(const GLcontext *ctx, GLsizei *width,
const GLfloat *srcImage, GLfloat *dstImage); const GLfloat *srcImage, GLfloat *dstImage);
extern void extern void
_mesa_convolve_2d_image(const GLcontext *ctx, GLsizei *width, GLsizei *height, _mesa_convolve_2d_image(const GLcontext *ctx, GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage); const GLfloat *srcImage, GLfloat *dstImage);
extern void extern void
_mesa_convolve_sep_image(const GLcontext *ctx, _mesa_convolve_sep_image(const GLcontext *ctx,
GLsizei *width, GLsizei *height, GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage); const GLfloat *srcImage, GLfloat *dstImage);
extern void extern void
_mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions, _mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
GLsizei *width, GLsizei *height); GLsizei *width, GLsizei *height);
#else extern void
#define _mesa_adjust_image_for_convolution(c, d, w, h) ((void)0) _mesa_init_convolve_dispatch(struct _glapi_table *disp);
#define _mesa_convolve_1d_image(c,w,s,d) ((void)0)
#define _mesa_convolve_2d_image(c,w,h,s,d) ((void)0)
#define _mesa_convolve_sep_image(c,w,h,s,d) ((void)0)
#endif
#endif #else /* FEATURE_convolve */
#define _MESA_INIT_CONVOLVE_FUNCTIONS(driver, impl) do { } while (0)
static INLINE void GLAPIENTRY
_mesa_ConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width,
GLenum format, GLenum type, const GLvoid *image)
{
ASSERT_NO_FEATURE();
}
static INLINE void GLAPIENTRY
_mesa_ConvolutionFilter2D(GLenum target, GLenum internalformat, GLsizei width,
GLsizei height, GLenum format, GLenum type,
const GLvoid *image)
{
ASSERT_NO_FEATURE();
}
static INLINE void
_mesa_convolve_1d_image(const GLcontext *ctx, GLsizei *width,
const GLfloat *srcImage, GLfloat *dstImage)
{
ASSERT_NO_FEATURE();
}
static INLINE void
_mesa_convolve_2d_image(const GLcontext *ctx, GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage)
{
ASSERT_NO_FEATURE();
}
static INLINE void
_mesa_convolve_sep_image(const GLcontext *ctx,
GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage)
{
ASSERT_NO_FEATURE();
}
static INLINE void
_mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
GLsizei *width, GLsizei *height)
{
}
static INLINE void
_mesa_init_convolve_dispatch(struct _glapi_table *disp)
{
}
#endif /* FEATURE_convolve */
#endif /* CONVOLVE_H */

View File

@@ -33,9 +33,7 @@
#include "glheader.h" #include "glheader.h"
#include "bufferobj.h" #include "bufferobj.h"
#include "context.h" #include "context.h"
#if FEATURE_convolve
#include "convolve.h" #include "convolve.h"
#endif
#include "enums.h" #include "enums.h"
#include "fbobject.h" #include "fbobject.h"
#include "framebuffer.h" #include "framebuffer.h"

View File

@@ -56,9 +56,7 @@
#include "bufferobj.h" #include "bufferobj.h"
#include "colormac.h" #include "colormac.h"
#include "context.h" #include "context.h"
#if FEATURE_convolve
#include "convolve.h" #include "convolve.h"
#endif
#include "image.h" #include "image.h"
#include "macros.h" #include "macros.h"
#include "mipmap.h" #include "mipmap.h"