Просмотр исходного кода

r5xx: Enable depth write emission.

Thanks to nh for the r3xx version.
tags/mesa_7_1_rc2
Corbin Simpson 17 лет назад
Родитель
Сommit
915e49e0fd

+ 2
- 0
src/mesa/drivers/dri/r300/r300_context.h Просмотреть файл

@@ -833,6 +833,8 @@ struct r500_fragment_program {

int max_temp_idx;

GLboolean writes_depth;

GLuint optimization;
};


+ 4
- 1
src/mesa/drivers/dri/r300/r300_state.c Просмотреть файл

@@ -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
src/mesa/drivers/dri/r300/r500_fragprog.c Просмотреть файл

@@ -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++) {

Загрузка…
Отмена
Сохранить