i915: Simplify intel_wpos_* with a helper function.
This commit is contained in:
@@ -1342,7 +1342,6 @@ i915ValidateFragmentProgram(struct i915_context *i915)
|
|||||||
|
|
||||||
intel->vertex_attr_count = 0;
|
intel->vertex_attr_count = 0;
|
||||||
intel->wpos_offset = 0;
|
intel->wpos_offset = 0;
|
||||||
intel->wpos_size = 0;
|
|
||||||
intel->coloroffset = 0;
|
intel->coloroffset = 0;
|
||||||
intel->specoffset = 0;
|
intel->specoffset = 0;
|
||||||
|
|
||||||
@@ -1385,17 +1384,15 @@ i915ValidateFragmentProgram(struct i915_context *i915)
|
|||||||
EMIT_ATTR(_TNL_ATTRIB_GENERIC0 + i, EMIT_SZ(sz), 0, sz * 4);
|
EMIT_ATTR(_TNL_ATTRIB_GENERIC0 + i, EMIT_SZ(sz), 0, sz * 4);
|
||||||
}
|
}
|
||||||
else if (i == p->wpos_tex) {
|
else if (i == p->wpos_tex) {
|
||||||
|
int wpos_size = 4 * sizeof(float);
|
||||||
/* If WPOS is required, duplicate the XYZ position data in an
|
/* If WPOS is required, duplicate the XYZ position data in an
|
||||||
* unused texture coordinate:
|
* unused texture coordinate:
|
||||||
*/
|
*/
|
||||||
s2 &= ~S2_TEXCOORD_FMT(i, S2_TEXCOORD_FMT0_MASK);
|
s2 &= ~S2_TEXCOORD_FMT(i, S2_TEXCOORD_FMT0_MASK);
|
||||||
s2 |= S2_TEXCOORD_FMT(i, SZ_TO_HW(4));
|
s2 |= S2_TEXCOORD_FMT(i, SZ_TO_HW(wpos_size));
|
||||||
|
|
||||||
intel->wpos_offset = offset;
|
intel->wpos_offset = offset;
|
||||||
intel->wpos_size = 4 * sizeof(GLuint);
|
EMIT_PAD(wpos_size);
|
||||||
|
|
||||||
EMIT_PAD(intel->wpos_size);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -484,28 +484,33 @@ intel_atten_point(struct intel_context *intel, intelVertexPtr v0)
|
|||||||
* Fixup for I915 WPOS texture coordinate *
|
* Fixup for I915 WPOS texture coordinate *
|
||||||
***********************************************************************/
|
***********************************************************************/
|
||||||
|
|
||||||
|
static void
|
||||||
|
intel_emit_fragcoord(struct intel_context *intel, intelVertexPtr v)
|
||||||
|
{
|
||||||
|
struct gl_context *ctx = &intel->ctx;
|
||||||
|
struct gl_framebuffer *fb = ctx->DrawBuffer;
|
||||||
|
GLuint offset = intel->wpos_offset;
|
||||||
|
float *vertex_position = (float *)v;
|
||||||
|
float *fragcoord = (float *)((char *)v + offset);
|
||||||
|
|
||||||
|
fragcoord[0] = vertex_position[0];
|
||||||
|
|
||||||
|
if (fb->Name)
|
||||||
|
fragcoord[1] = vertex_position[1];
|
||||||
|
else
|
||||||
|
fragcoord[1] = fb->Height - vertex_position[1];
|
||||||
|
|
||||||
|
fragcoord[2] = vertex_position[2];
|
||||||
|
fragcoord[3] = vertex_position[3];
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
intel_wpos_triangle(struct intel_context *intel,
|
intel_wpos_triangle(struct intel_context *intel,
|
||||||
intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2)
|
intelVertexPtr v0, intelVertexPtr v1, intelVertexPtr v2)
|
||||||
{
|
{
|
||||||
const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
|
intel_emit_fragcoord(intel, v0);
|
||||||
GLuint offset = intel->wpos_offset;
|
intel_emit_fragcoord(intel, v1);
|
||||||
GLuint size = intel->wpos_size;
|
intel_emit_fragcoord(intel, v2);
|
||||||
GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
|
|
||||||
GLfloat *v1_wpos = (GLfloat *)((char *)v1 + offset);
|
|
||||||
GLfloat *v2_wpos = (GLfloat *)((char *)v2 + offset);
|
|
||||||
|
|
||||||
__memcpy(v0_wpos, v0, size);
|
|
||||||
__memcpy(v1_wpos, v1, size);
|
|
||||||
__memcpy(v2_wpos, v2, size);
|
|
||||||
|
|
||||||
if (!fb->Name) {
|
|
||||||
v0_wpos[1] = -v0_wpos[1] + fb->Height;
|
|
||||||
v1_wpos[1] = -v1_wpos[1] + fb->Height;
|
|
||||||
v2_wpos[1] = -v2_wpos[1] + fb->Height;
|
|
||||||
}
|
|
||||||
|
|
||||||
intel_draw_triangle(intel, v0, v1, v2);
|
intel_draw_triangle(intel, v0, v1, v2);
|
||||||
}
|
}
|
||||||
@@ -515,20 +520,8 @@ static void
|
|||||||
intel_wpos_line(struct intel_context *intel,
|
intel_wpos_line(struct intel_context *intel,
|
||||||
intelVertexPtr v0, intelVertexPtr v1)
|
intelVertexPtr v0, intelVertexPtr v1)
|
||||||
{
|
{
|
||||||
const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
|
intel_emit_fragcoord(intel, v0);
|
||||||
GLuint offset = intel->wpos_offset;
|
intel_emit_fragcoord(intel, v1);
|
||||||
GLuint size = intel->wpos_size;
|
|
||||||
GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
|
|
||||||
GLfloat *v1_wpos = (GLfloat *)((char *)v1 + offset);
|
|
||||||
|
|
||||||
__memcpy(v0_wpos, v0, size);
|
|
||||||
__memcpy(v1_wpos, v1, size);
|
|
||||||
|
|
||||||
if (!fb->Name) {
|
|
||||||
v0_wpos[1] = -v0_wpos[1] + fb->Height;
|
|
||||||
v1_wpos[1] = -v1_wpos[1] + fb->Height;
|
|
||||||
}
|
|
||||||
|
|
||||||
intel_draw_line(intel, v0, v1);
|
intel_draw_line(intel, v0, v1);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -536,16 +529,7 @@ intel_wpos_line(struct intel_context *intel,
|
|||||||
static void
|
static void
|
||||||
intel_wpos_point(struct intel_context *intel, intelVertexPtr v0)
|
intel_wpos_point(struct intel_context *intel, intelVertexPtr v0)
|
||||||
{
|
{
|
||||||
const struct gl_framebuffer *fb = intel->ctx.DrawBuffer;
|
intel_emit_fragcoord(intel, v0);
|
||||||
GLuint offset = intel->wpos_offset;
|
|
||||||
GLuint size = intel->wpos_size;
|
|
||||||
GLfloat *v0_wpos = (GLfloat *)((char *)v0 + offset);
|
|
||||||
|
|
||||||
__memcpy(v0_wpos, v0, size);
|
|
||||||
|
|
||||||
if (!fb->Name)
|
|
||||||
v0_wpos[1] = -v0_wpos[1] + fb->Height;
|
|
||||||
|
|
||||||
intel_draw_point(intel, v0);
|
intel_draw_point(intel, v0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -230,7 +230,6 @@ struct intel_context
|
|||||||
GLuint coloroffset;
|
GLuint coloroffset;
|
||||||
GLuint specoffset;
|
GLuint specoffset;
|
||||||
GLuint wpos_offset;
|
GLuint wpos_offset;
|
||||||
GLuint wpos_size;
|
|
||||||
|
|
||||||
struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
|
struct tnl_attr_map vertex_attrs[VERT_ATTRIB_MAX];
|
||||||
GLuint vertex_attr_count;
|
GLuint vertex_attr_count;
|
||||||
|
Reference in New Issue
Block a user