r600: add alpha test support

This commit is contained in:
Alex Deucher 2009-07-21 01:58:05 -04:00
parent cf24119d38
commit 9e6d38f8a2
3 changed files with 54 additions and 5 deletions

View file

@ -139,6 +139,7 @@ GLboolean r700InitChipObject(context_t *context)
// SX
LINK_STATES(SX_MISC);
LINK_STATES(SX_ALPHA_TEST_CONTROL);
LINK_STATES(SX_ALPHA_REF);
// VGT
LINK_STATES(VGT_MAX_VTX_INDX);

View file

@ -372,6 +372,7 @@ typedef struct _R700_CHIP_CONTEXT
// SX
union UINT_FLOAT SX_MISC ; /* 0xA0D4 */
union UINT_FLOAT SX_ALPHA_TEST_CONTROL ; /* 0xA104 */
union UINT_FLOAT SX_ALPHA_REF ; /* 0xA10E */
// VGT
union UINT_FLOAT VGT_MAX_VTX_INDX ; /* 0xA100 */
@ -422,7 +423,7 @@ typedef struct _R700_CHIP_CONTEXT
union UINT_FLOAT SPI_FOG_FUNC_SCALE ; /* 0xA1B8 */
union UINT_FLOAT SPI_FOG_FUNC_BIAS ; /* 0xA1B9 */
union UINT_FLOAT SQ_VTX_SEMANTIC_0 ; /* 0xA0E0 */
union UINT_FLOAT SQ_VTX_SEMANTIC_0 ; /* 0xA0E0 */
union UINT_FLOAT SQ_VTX_SEMANTIC_1 ; /* 0xA0E1 */
union UINT_FLOAT SQ_VTX_SEMANTIC_2 ; /* 0xA0E2 */
union UINT_FLOAT SQ_VTX_SEMANTIC_3 ; /* 0xA0E3 */

View file

@ -305,8 +305,57 @@ static void r700SetDepthState(GLcontext * ctx)
}
}
static void r700SetAlphaState(GLcontext * ctx)
{
context_t *context = R700_CONTEXT(ctx);
R700_CHIP_CONTEXT *r700 = (R700_CHIP_CONTEXT*)(&context->hw);
uint32_t alpha_func;
GLboolean really_enabled = ctx->Color.AlphaEnabled;
switch (ctx->Color.AlphaFunc) {
case GL_NEVER:
alpha_func = REF_NEVER;
break;
case GL_LESS:
alpha_func = REF_LESS;
break;
case GL_EQUAL:
alpha_func = REF_EQUAL;
break;
case GL_LEQUAL:
alpha_func = REF_LEQUAL;
break;
case GL_GREATER:
alpha_func = REF_GREATER;
break;
case GL_NOTEQUAL:
alpha_func = REF_NOTEQUAL;
break;
case GL_GEQUAL:
alpha_func = REF_GEQUAL;
break;
case GL_ALWAYS:
/*alpha_func = REF_ALWAYS; */
really_enabled = GL_FALSE;
break;
}
if (really_enabled) {
SETfield(r700->SX_ALPHA_TEST_CONTROL.u32All, alpha_func,
ALPHA_FUNC_shift, ALPHA_FUNC_mask);
SETbit(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_TEST_ENABLE_bit);
r700->SX_ALPHA_REF.f32All = ctx->Color.AlphaRef;
} else {
CLEARbit(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_TEST_ENABLE_bit);
}
}
static void r700AlphaFunc(GLcontext * ctx, GLenum func, GLfloat ref) //---------------
{
(void)func;
(void)ref;
r700SetAlphaState(ctx);
}
@ -628,7 +677,7 @@ static void r700Enable(GLcontext * ctx, GLenum cap, GLboolean state) //---------
/* empty */
break;
case GL_ALPHA_TEST:
//r700SetAlphaState(ctx);
r700SetAlphaState(ctx);
break;
case GL_COLOR_LOGIC_OP:
r700SetLogicOpState(ctx);
@ -1327,9 +1376,7 @@ void r700InitState(GLcontext * ctx) //-------------------
/* Specify the number of instances */
r700->VGT_DMA_NUM_INSTANCES.u32All = 1;
/* not alpha blend */
CLEARfield(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_FUNC_mask);
CLEARbit(r700->SX_ALPHA_TEST_CONTROL.u32All, ALPHA_TEST_ENABLE_bit);
r700AlphaFunc(ctx, ctx->Color.AlphaFunc, ctx->Color.AlphaRef);
/* default shader connections. */
r700->SPI_VS_OUT_ID_0.u32All = 0x03020100;