Add support for NV_blend_square, and print errors if an unsupported blend

function is used.
This commit is contained in:
Eric Anholt 2004-10-08 21:37:08 +00:00
parent 3eccddb746
commit f6cdaa9c81
3 changed files with 27 additions and 10 deletions

View File

@ -65,6 +65,7 @@ static const char * const card_extensions[] =
{
"GL_ARB_multitexture",
"GL_EXT_texture_lod_bias",
"GL_NV_blend_square",
NULL
};

View File

@ -44,7 +44,7 @@ USE OR OTHER DEALINGS IN THE SOFTWARE.
#include "utils.h"
#define DRIVER_DATE "20040925"
#define DRIVER_DATE "20041008"
/* Return the width and height of the given buffer.
*/

View File

@ -107,9 +107,7 @@ sisDDBlendFuncSeparate( GLcontext *ctx,
__GLSiSHardware *prev = &smesa->prev;
__GLSiSHardware *current = &smesa->current;
/* TODO: in ICD, if no blend, it will reset these value */
/* blending enable */
current->hwDstSrcBlend = 0x10000; /* Default destination alpha */
current->hwDstSrcBlend = 0;
switch (dfactorRGB)
{
@ -131,12 +129,21 @@ sisDDBlendFuncSeparate( GLcontext *ctx,
case GL_ONE_MINUS_SRC_ALPHA:
current->hwDstSrcBlend |= SiS_D_ONE_MINUS_SRC_ALPHA;
break;
case GL_DST_COLOR:
current->hwDstSrcBlend |= SiS_D_DST_COLOR;
break;
case GL_ONE_MINUS_DST_COLOR:
current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_COLOR;
break;
case GL_DST_ALPHA:
current->hwDstSrcBlend |= SiS_D_DST_ALPHA;
break;
case GL_ONE_MINUS_DST_ALPHA:
current->hwDstSrcBlend |= SiS_D_ONE_MINUS_DST_ALPHA;
break;
default:
fprintf(stderr, "Unknown dst blend function 0x%x\n", dfactorRGB);
break;
}
switch (sfactorRGB)
@ -147,27 +154,36 @@ sisDDBlendFuncSeparate( GLcontext *ctx,
case GL_ONE:
current->hwDstSrcBlend |= SiS_S_ONE;
break;
case GL_SRC_COLOR:
current->hwDstSrcBlend |= SiS_S_SRC_COLOR;
break;
case GL_ONE_MINUS_SRC_COLOR:
current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_COLOR;
break;
case GL_SRC_ALPHA:
current->hwDstSrcBlend |= SiS_S_SRC_ALPHA;
break;
case GL_ONE_MINUS_SRC_ALPHA:
current->hwDstSrcBlend |= SiS_S_ONE_MINUS_SRC_ALPHA;
break;
case GL_DST_ALPHA:
current->hwDstSrcBlend |= SiS_S_DST_ALPHA;
break;
case GL_ONE_MINUS_DST_ALPHA:
current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_ALPHA;
break;
case GL_DST_COLOR:
current->hwDstSrcBlend |= SiS_S_DST_COLOR;
break;
case GL_ONE_MINUS_DST_COLOR:
current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_COLOR;
break;
case GL_DST_ALPHA:
current->hwDstSrcBlend |= SiS_S_DST_ALPHA;
break;
case GL_ONE_MINUS_DST_ALPHA:
current->hwDstSrcBlend |= SiS_S_ONE_MINUS_DST_ALPHA;
break;
case GL_SRC_ALPHA_SATURATE:
current->hwDstSrcBlend |= SiS_S_SRC_ALPHA_SATURATE;
break;
default:
fprintf(stderr, "Unknown src blend function 0x%x\n", sfactorRGB);
break;
}
if (current->hwDstSrcBlend != prev->hwDstSrcBlend) {