r5xx: Enable depth write emission.
Thanks to nh for the r3xx version.
This commit is contained in:
@@ -833,6 +833,8 @@ struct r500_fragment_program {
|
||||
|
||||
int max_temp_idx;
|
||||
|
||||
GLboolean writes_depth;
|
||||
|
||||
GLuint optimization;
|
||||
};
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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++) {
|
||||
|
||||
Reference in New Issue
Block a user