swrast: Implement ARB_fragment_coord_conventions but don't enable.
This brings swrast's support up to the state of gallium, and fixes the default center behavior of fragment.position.xy in piglit fp-arb-fragment-coord-conventions-none. The extension is not enabled currently because the GLSL part of the extension isn't supported, so piglit glsl-arb-fragment-coord-conventions-define fails as would any serious test of the GLSL part.
This commit is contained in:
@@ -144,12 +144,22 @@ init_machine(GLcontext *ctx, struct gl_program_machine *machine,
|
|||||||
const struct gl_fragment_program *program,
|
const struct gl_fragment_program *program,
|
||||||
const SWspan *span, GLuint col)
|
const SWspan *span, GLuint col)
|
||||||
{
|
{
|
||||||
|
GLfloat *wpos = span->array->attribs[FRAG_ATTRIB_WPOS][col];
|
||||||
|
|
||||||
if (program->Base.Target == GL_FRAGMENT_PROGRAM_NV) {
|
if (program->Base.Target == GL_FRAGMENT_PROGRAM_NV) {
|
||||||
/* Clear temporary registers (undefined for ARB_f_p) */
|
/* Clear temporary registers (undefined for ARB_f_p) */
|
||||||
_mesa_bzero(machine->Temporaries,
|
_mesa_bzero(machine->Temporaries,
|
||||||
MAX_PROGRAM_TEMPS * 4 * sizeof(GLfloat));
|
MAX_PROGRAM_TEMPS * 4 * sizeof(GLfloat));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* ARB_fragment_coord_conventions */
|
||||||
|
if (program->OriginUpperLeft)
|
||||||
|
wpos[1] = ctx->DrawBuffer->Height - 1 - wpos[1];
|
||||||
|
if (!program->PixelCenterInteger) {
|
||||||
|
wpos[0] += 0.5;
|
||||||
|
wpos[1] += 0.5;
|
||||||
|
}
|
||||||
|
|
||||||
/* Setup pointer to input attributes */
|
/* Setup pointer to input attributes */
|
||||||
machine->Attribs = span->array->attribs;
|
machine->Attribs = span->array->attribs;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user