r5xx: Enable depth write emission.

Thanks to nh for the r3xx version.
This commit is contained in:
Corbin Simpson
2008-06-01 11:45:30 -07:00
parent c9ea62444c
commit 915e49e0fd
3 changed files with 11 additions and 2 deletions
+2
View File
@@ -833,6 +833,8 @@ struct r500_fragment_program {
int max_temp_idx;
GLboolean writes_depth;
GLuint optimization;
};
+4 -1
View File
@@ -411,7 +411,10 @@ static GLboolean current_fragment_program_writes_depth(GLcontext* ctx)
(char *)ctx->FragmentProgram._Current;
return (fp && fp->WritesDepth);
} else {
return GL_FALSE; /* TODO: Verify depth writing works on R5xx */
struct r500_fragment_program* fp =
(struct r500_fragment_program*)(char*)
ctx->FragmentProgram._Current;
return (fp && fp->writes_depth);
}
}
+5 -1
View File
@@ -365,7 +365,9 @@ static void emit_alu(struct r500_fragment_program *fp, int counter, struct prog_
fp->inst[counter].inst0 |= (fpi->DstReg.WriteMask << 15);
if (fpi->DstReg.Index == FRAG_RESULT_DEPR)
fp->inst[counter].inst4 = R500_ALPHA_W_OMASK;
fp->inst[counter].inst4 |= R500_ALPHA_W_OMASK;
/* Notify the state emission! */
fp->writes_depth = GL_TRUE;
} else {
fp->inst[counter].inst0 = R500_INST_TYPE_ALU
/* pixel_mask */
@@ -1251,6 +1253,8 @@ static void init_program(r300ContextPtr r300, struct r500_fragment_program *fp)
fp->max_temp_idx = 1;
/* Temp register offset. */
fp->temp_reg_offset = 0;
/* Whether or not we perform any depth writing. */
fp->writes_depth = GL_FALSE;
_mesa_memset(cs, 0, sizeof(*fp->cs));
for (i = 0; i < PFS_MAX_ALU_INST; i++) {