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 "colortab.h"
#include "context.h"
#if FEATURE_convolve
#include "convolve.h"
#endif
#include "depth.h"
#if FEATURE_dlist
#include "dlist.h"
@@ -384,21 +382,7 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_BlendEquationSeparateEXT(exec, _mesa_BlendEquationSeparateEXT);
_mesa_init_colortable_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
_mesa_init_convolve_dispatch(exec);
#if FEATURE_histogram
SET_GetHistogram(exec, _mesa_GetHistogram);
SET_GetHistogramParameterfv(exec, _mesa_GetHistogramParameterfv);
@@ -406,7 +390,6 @@ _mesa_init_exec_table(struct _glapi_table *exec)
SET_GetMinmax(exec, _mesa_GetMinmax);
SET_GetMinmaxParameterfv(exec, _mesa_GetMinmaxParameterfv);
SET_GetMinmaxParameteriv(exec, _mesa_GetMinmaxParameteriv);
SET_GetSeparableFilter(exec, _mesa_GetSeparableFilter);
SET_Histogram(exec, _mesa_Histogram);
SET_Minmax(exec, _mesa_Minmax);
SET_ResetHistogram(exec, _mesa_ResetHistogram);

View File

@@ -40,6 +40,10 @@
#include "mtypes.h"
#include "pixel.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)
{
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)
{
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)
{
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)
{
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)
{
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)
{
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,
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)
{
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)
{
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,
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)
{
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);
}
}
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
#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
_mesa_ConvolutionFilter1D(GLenum target, GLenum internalformat, GLsizei width,
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,
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
_mesa_convolve_1d_image(const GLcontext *ctx, GLsizei *width,
const GLfloat *srcImage, GLfloat *dstImage);
extern void
_mesa_convolve_2d_image(const GLcontext *ctx, GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage);
extern void
_mesa_convolve_sep_image(const GLcontext *ctx,
GLsizei *width, GLsizei *height,
const GLfloat *srcImage, GLfloat *dstImage);
extern void
_mesa_adjust_image_for_convolution(const GLcontext *ctx, GLuint dimensions,
GLsizei *width, GLsizei *height);
#else
#define _mesa_adjust_image_for_convolution(c, d, w, h) ((void)0)
#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
extern void
_mesa_init_convolve_dispatch(struct _glapi_table *disp);
#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 "bufferobj.h"
#include "context.h"
#if FEATURE_convolve
#include "convolve.h"
#endif
#include "enums.h"
#include "fbobject.h"
#include "framebuffer.h"

View File

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