intel: Add support for EXT_provoking_vertex.
This commit is contained in:
@@ -40,6 +40,7 @@
|
|||||||
#define I830_UPLOAD_BUFFERS 0x2
|
#define I830_UPLOAD_BUFFERS 0x2
|
||||||
#define I830_UPLOAD_STIPPLE 0x4
|
#define I830_UPLOAD_STIPPLE 0x4
|
||||||
#define I830_UPLOAD_INVARIENT 0x8
|
#define I830_UPLOAD_INVARIENT 0x8
|
||||||
|
#define I830_UPLOAD_RASTER_RULES 0x10
|
||||||
#define I830_UPLOAD_TEX(i) (0x10<<(i))
|
#define I830_UPLOAD_TEX(i) (0x10<<(i))
|
||||||
#define I830_UPLOAD_TEXBLEND(i) (0x100<<(i))
|
#define I830_UPLOAD_TEXBLEND(i) (0x100<<(i))
|
||||||
#define I830_UPLOAD_TEX_ALL (0x0f0)
|
#define I830_UPLOAD_TEX_ALL (0x0f0)
|
||||||
@@ -99,6 +100,11 @@
|
|||||||
|
|
||||||
#define I830_TEXBLEND_SIZE 12 /* (4 args + op) * 2 + COLOR_FACTOR */
|
#define I830_TEXBLEND_SIZE 12 /* (4 args + op) * 2 + COLOR_FACTOR */
|
||||||
|
|
||||||
|
enum {
|
||||||
|
I830_RASTER_RULES,
|
||||||
|
I830_RASTER_RULES_SIZE
|
||||||
|
};
|
||||||
|
|
||||||
struct i830_texture_object
|
struct i830_texture_object
|
||||||
{
|
{
|
||||||
struct intel_texture_object intel;
|
struct intel_texture_object intel;
|
||||||
@@ -112,6 +118,7 @@ struct i830_hw_state
|
|||||||
GLuint Ctx[I830_CTX_SETUP_SIZE];
|
GLuint Ctx[I830_CTX_SETUP_SIZE];
|
||||||
GLuint Buffer[I830_DEST_SETUP_SIZE];
|
GLuint Buffer[I830_DEST_SETUP_SIZE];
|
||||||
GLuint Stipple[I830_STP_SETUP_SIZE];
|
GLuint Stipple[I830_STP_SETUP_SIZE];
|
||||||
|
GLuint RasterRules[I830_RASTER_RULES_SIZE];
|
||||||
GLuint Tex[I830_TEX_UNITS][I830_TEX_SETUP_SIZE];
|
GLuint Tex[I830_TEX_UNITS][I830_TEX_SETUP_SIZE];
|
||||||
GLuint TexBlend[I830_TEX_UNITS][I830_TEXBLEND_SIZE];
|
GLuint TexBlend[I830_TEX_UNITS][I830_TEXBLEND_SIZE];
|
||||||
GLuint TexBlendWordsUsed[I830_TEX_UNITS];
|
GLuint TexBlendWordsUsed[I830_TEX_UNITS];
|
||||||
@@ -197,6 +204,7 @@ extern void i830InitStateFuncs(struct dd_function_table *functions);
|
|||||||
extern void i830EmitState(struct i830_context *i830);
|
extern void i830EmitState(struct i830_context *i830);
|
||||||
|
|
||||||
extern void i830InitState(struct i830_context *i830);
|
extern void i830InitState(struct i830_context *i830);
|
||||||
|
extern void i830_update_provoking_vertex(GLcontext *ctx);
|
||||||
|
|
||||||
/* i830_metaops.c
|
/* i830_metaops.c
|
||||||
*/
|
*/
|
||||||
|
@@ -420,8 +420,11 @@
|
|||||||
#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
|
#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
|
||||||
#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
|
#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
|
||||||
#define ENABLE_TRI_STRIP_PROVOKE_VRTX (1<<2)
|
#define ENABLE_TRI_STRIP_PROVOKE_VRTX (1<<2)
|
||||||
|
#define LINE_STRIP_PROVOKE_VRTX_MASK (3<<6)
|
||||||
#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
|
#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
|
||||||
|
#define TRI_FAN_PROVOKE_VRTX_MASK (3<<3)
|
||||||
#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
|
#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
|
||||||
|
#define TRI_STRIP_PROVOKE_VRTX_MASK (3<<0)
|
||||||
#define TRI_STRIP_PROVOKE_VRTX(x) (x)
|
#define TRI_STRIP_PROVOKE_VRTX(x) (x)
|
||||||
|
|
||||||
/* _3DSTATE_SCISSOR_ENABLE, p200 */
|
/* _3DSTATE_SCISSOR_ENABLE, p200 */
|
||||||
|
@@ -1047,6 +1047,16 @@ i830_init_packets(struct i830_context *i830)
|
|||||||
TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |
|
TEXBIND_SET1(TEXCOORDSRC_VTXSET_1) |
|
||||||
TEXBIND_SET0(TEXCOORDSRC_VTXSET_0));
|
TEXBIND_SET0(TEXCOORDSRC_VTXSET_0));
|
||||||
|
|
||||||
|
i830->state.RasterRules[I830_RASTER_RULES] = (_3DSTATE_RASTER_RULES_CMD |
|
||||||
|
ENABLE_POINT_RASTER_RULE |
|
||||||
|
OGL_POINT_RASTER_RULE |
|
||||||
|
ENABLE_LINE_STRIP_PROVOKE_VRTX |
|
||||||
|
ENABLE_TRI_FAN_PROVOKE_VRTX |
|
||||||
|
ENABLE_TRI_STRIP_PROVOKE_VRTX |
|
||||||
|
LINE_STRIP_PROVOKE_VRTX(1) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(2) |
|
||||||
|
TRI_STRIP_PROVOKE_VRTX(2));
|
||||||
|
|
||||||
|
|
||||||
i830->state.Stipple[I830_STPREG_ST0] = _3DSTATE_STIPPLE;
|
i830->state.Stipple[I830_STPREG_ST0] = _3DSTATE_STIPPLE;
|
||||||
|
|
||||||
@@ -1058,6 +1068,27 @@ i830_init_packets(struct i830_context *i830)
|
|||||||
i830->state.Buffer[I830_DESTREG_SR2] = 0;
|
i830->state.Buffer[I830_DESTREG_SR2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
i830_update_provoking_vertex(GLcontext * ctx)
|
||||||
|
{
|
||||||
|
struct i830_context *i830 = i830_context(ctx);
|
||||||
|
|
||||||
|
I830_STATECHANGE(i830, I830_UPLOAD_RASTER_RULES);
|
||||||
|
i830->state.RasterRules[I830_RASTER_RULES] &= ~(LINE_STRIP_PROVOKE_VRTX_MASK |
|
||||||
|
TRI_FAN_PROVOKE_VRTX_MASK |
|
||||||
|
TRI_STRIP_PROVOKE_VRTX_MASK);
|
||||||
|
|
||||||
|
/* _NEW_LIGHT */
|
||||||
|
if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION) {
|
||||||
|
i830->state.RasterRules[I830_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(1) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(2) |
|
||||||
|
TRI_STRIP_PROVOKE_VRTX(2));
|
||||||
|
} else {
|
||||||
|
i830->state.RasterRules[I830_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(0) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(1) |
|
||||||
|
TRI_STRIP_PROVOKE_VRTX(0));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
i830InitStateFuncs(struct dd_function_table *functions)
|
i830InitStateFuncs(struct dd_function_table *functions)
|
||||||
@@ -1101,6 +1132,7 @@ i830InitState(struct i830_context *i830)
|
|||||||
i830->current = &i830->state;
|
i830->current = &i830->state;
|
||||||
i830->state.emitted = 0;
|
i830->state.emitted = 0;
|
||||||
i830->state.active = (I830_UPLOAD_INVARIENT |
|
i830->state.active = (I830_UPLOAD_INVARIENT |
|
||||||
|
I830_UPLOAD_RASTER_RULES |
|
||||||
I830_UPLOAD_TEXBLEND(0) |
|
I830_UPLOAD_TEXBLEND(0) |
|
||||||
I830_UPLOAD_STIPPLE |
|
I830_UPLOAD_STIPPLE |
|
||||||
I830_UPLOAD_CTX | I830_UPLOAD_BUFFERS);
|
I830_UPLOAD_CTX | I830_UPLOAD_BUFFERS);
|
||||||
|
@@ -299,7 +299,7 @@ i830_emit_invarient_state(struct intel_context *intel)
|
|||||||
{
|
{
|
||||||
BATCH_LOCALS;
|
BATCH_LOCALS;
|
||||||
|
|
||||||
BEGIN_BATCH(30, IGNORE_CLIPRECTS);
|
BEGIN_BATCH(29, IGNORE_CLIPRECTS);
|
||||||
|
|
||||||
OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD);
|
OUT_BATCH(_3DSTATE_DFLT_DIFFUSE_CMD);
|
||||||
OUT_BATCH(0);
|
OUT_BATCH(0);
|
||||||
@@ -351,15 +351,6 @@ i830_emit_invarient_state(struct intel_context *intel)
|
|||||||
OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
|
OUT_BATCH(_3DSTATE_MAP_COORD_TRANSFORM);
|
||||||
OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3));
|
OUT_BATCH(DISABLE_TEX_TRANSFORM | TEXTURE_SET(3));
|
||||||
|
|
||||||
OUT_BATCH(_3DSTATE_RASTER_RULES_CMD |
|
|
||||||
ENABLE_POINT_RASTER_RULE |
|
|
||||||
OGL_POINT_RASTER_RULE |
|
|
||||||
ENABLE_LINE_STRIP_PROVOKE_VRTX |
|
|
||||||
ENABLE_TRI_FAN_PROVOKE_VRTX |
|
|
||||||
ENABLE_TRI_STRIP_PROVOKE_VRTX |
|
|
||||||
LINE_STRIP_PROVOKE_VRTX(1) |
|
|
||||||
TRI_FAN_PROVOKE_VRTX(2) | TRI_STRIP_PROVOKE_VRTX(2));
|
|
||||||
|
|
||||||
OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM);
|
OUT_BATCH(_3DSTATE_VERTEX_TRANSFORM);
|
||||||
OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE);
|
OUT_BATCH(DISABLE_VIEWPORT_TRANSFORM | DISABLE_PERSPECTIVE_DIVIDE);
|
||||||
|
|
||||||
@@ -394,6 +385,9 @@ get_state_size(struct i830_hw_state *state)
|
|||||||
if (dirty & I830_UPLOAD_INVARIENT)
|
if (dirty & I830_UPLOAD_INVARIENT)
|
||||||
sz += 40 * sizeof(int);
|
sz += 40 * sizeof(int);
|
||||||
|
|
||||||
|
if (dirty & I830_UPLOAD_RASTER_RULES)
|
||||||
|
sz += sizeof(state->RasterRules);
|
||||||
|
|
||||||
if (dirty & I830_UPLOAD_CTX)
|
if (dirty & I830_UPLOAD_CTX)
|
||||||
sz += sizeof(state->Ctx);
|
sz += sizeof(state->Ctx);
|
||||||
|
|
||||||
@@ -486,6 +480,11 @@ i830_emit_state(struct intel_context *intel)
|
|||||||
i830_emit_invarient_state(intel);
|
i830_emit_invarient_state(intel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dirty & I830_UPLOAD_RASTER_RULES) {
|
||||||
|
DBG("I830_UPLOAD_RASTER_RULES:\n");
|
||||||
|
emit(intel, state->RasterRules, sizeof(state->RasterRules));
|
||||||
|
}
|
||||||
|
|
||||||
if (dirty & I830_UPLOAD_CTX) {
|
if (dirty & I830_UPLOAD_CTX) {
|
||||||
DBG("I830_UPLOAD_CTX:\n");
|
DBG("I830_UPLOAD_CTX:\n");
|
||||||
emit(intel, state->Ctx, sizeof(state->Ctx));
|
emit(intel, state->Ctx, sizeof(state->Ctx));
|
||||||
@@ -737,6 +736,13 @@ i830_assert_not_dirty( struct intel_context *intel )
|
|||||||
assert(!get_dirty(state));
|
assert(!get_dirty(state));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
i830_invalidate_state(struct intel_context *intel, GLuint new_state)
|
||||||
|
{
|
||||||
|
if (new_state & _NEW_LIGHT)
|
||||||
|
i830_update_provoking_vertex(&intel->ctx);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
i830InitVtbl(struct i830_context *i830)
|
i830InitVtbl(struct i830_context *i830)
|
||||||
{
|
{
|
||||||
@@ -752,4 +758,5 @@ i830InitVtbl(struct i830_context *i830)
|
|||||||
i830->intel.vtbl.render_prevalidate = i830_render_prevalidate;
|
i830->intel.vtbl.render_prevalidate = i830_render_prevalidate;
|
||||||
i830->intel.vtbl.assert_not_dirty = i830_assert_not_dirty;
|
i830->intel.vtbl.assert_not_dirty = i830_assert_not_dirty;
|
||||||
i830->intel.vtbl.finish_batch = intel_finish_vb;
|
i830->intel.vtbl.finish_batch = intel_finish_vb;
|
||||||
|
i830->intel.vtbl.invalidate_state = i830_invalidate_state;
|
||||||
}
|
}
|
||||||
|
@@ -77,6 +77,8 @@ i915InvalidateState(GLcontext * ctx, GLuint new_state)
|
|||||||
i915_update_fog(ctx);
|
i915_update_fog(ctx);
|
||||||
if (new_state & (_NEW_STENCIL | _NEW_BUFFERS | _NEW_POLYGON))
|
if (new_state & (_NEW_STENCIL | _NEW_BUFFERS | _NEW_POLYGON))
|
||||||
i915_update_stencil(ctx);
|
i915_update_stencil(ctx);
|
||||||
|
if (new_state & (_NEW_LIGHT))
|
||||||
|
i915_update_provoking_vertex(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -48,6 +48,7 @@
|
|||||||
#define I915_UPLOAD_FOG 0x20
|
#define I915_UPLOAD_FOG 0x20
|
||||||
#define I915_UPLOAD_INVARIENT 0x40
|
#define I915_UPLOAD_INVARIENT 0x40
|
||||||
#define I915_UPLOAD_DEFAULTS 0x80
|
#define I915_UPLOAD_DEFAULTS 0x80
|
||||||
|
#define I915_UPLOAD_RASTER_RULES 0x100
|
||||||
#define I915_UPLOAD_TEX(i) (0x00010000<<(i))
|
#define I915_UPLOAD_TEX(i) (0x00010000<<(i))
|
||||||
#define I915_UPLOAD_TEX_ALL (0x00ff0000)
|
#define I915_UPLOAD_TEX_ALL (0x00ff0000)
|
||||||
#define I915_UPLOAD_TEX_0_SHIFT 16
|
#define I915_UPLOAD_TEX_0_SHIFT 16
|
||||||
@@ -112,6 +113,10 @@
|
|||||||
#define I915_DEFREG_Z1 5
|
#define I915_DEFREG_Z1 5
|
||||||
#define I915_DEF_SETUP_SIZE 6
|
#define I915_DEF_SETUP_SIZE 6
|
||||||
|
|
||||||
|
enum {
|
||||||
|
I915_RASTER_RULES,
|
||||||
|
I915_RASTER_RULES_SETUP_SIZE,
|
||||||
|
};
|
||||||
|
|
||||||
#define I915_MAX_CONSTANT 32
|
#define I915_MAX_CONSTANT 32
|
||||||
#define I915_CONSTANT_SIZE (2+(4*I915_MAX_CONSTANT))
|
#define I915_CONSTANT_SIZE (2+(4*I915_MAX_CONSTANT))
|
||||||
@@ -208,6 +213,7 @@ struct i915_hw_state
|
|||||||
GLuint Stipple[I915_STP_SETUP_SIZE];
|
GLuint Stipple[I915_STP_SETUP_SIZE];
|
||||||
GLuint Fog[I915_FOG_SETUP_SIZE];
|
GLuint Fog[I915_FOG_SETUP_SIZE];
|
||||||
GLuint Defaults[I915_DEF_SETUP_SIZE];
|
GLuint Defaults[I915_DEF_SETUP_SIZE];
|
||||||
|
GLuint RasterRules[I915_RASTER_RULES_SETUP_SIZE];
|
||||||
GLuint Tex[I915_TEX_UNITS][I915_TEX_SETUP_SIZE];
|
GLuint Tex[I915_TEX_UNITS][I915_TEX_SETUP_SIZE];
|
||||||
GLuint Constant[I915_CONSTANT_SIZE];
|
GLuint Constant[I915_CONSTANT_SIZE];
|
||||||
GLuint ConstantSize;
|
GLuint ConstantSize;
|
||||||
@@ -324,6 +330,7 @@ extern void i915InitStateFunctions(struct dd_function_table *functions);
|
|||||||
extern void i915InitState(struct i915_context *i915);
|
extern void i915InitState(struct i915_context *i915);
|
||||||
extern void i915_update_fog(GLcontext * ctx);
|
extern void i915_update_fog(GLcontext * ctx);
|
||||||
extern void i915_update_stencil(GLcontext * ctx);
|
extern void i915_update_stencil(GLcontext * ctx);
|
||||||
|
extern void i915_update_provoking_vertex(GLcontext *ctx);
|
||||||
|
|
||||||
|
|
||||||
/*======================================================================
|
/*======================================================================
|
||||||
|
@@ -297,7 +297,9 @@
|
|||||||
#define TEXKILL_4D (1<<9)
|
#define TEXKILL_4D (1<<9)
|
||||||
#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
|
#define ENABLE_LINE_STRIP_PROVOKE_VRTX (1<<8)
|
||||||
#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
|
#define ENABLE_TRI_FAN_PROVOKE_VRTX (1<<5)
|
||||||
|
#define LINE_STRIP_PROVOKE_VRTX_MASK (3 << 6)
|
||||||
#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
|
#define LINE_STRIP_PROVOKE_VRTX(x) ((x)<<6)
|
||||||
|
#define TRI_FAN_PROVOKE_VRTX_MASK (3 << 3)
|
||||||
#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
|
#define TRI_FAN_PROVOKE_VRTX(x) ((x)<<3)
|
||||||
|
|
||||||
/* _3DSTATE_SCISSOR_ENABLE, p256 */
|
/* _3DSTATE_SCISSOR_ENABLE, p256 */
|
||||||
|
@@ -1033,6 +1033,13 @@ i915_init_packets(struct i915_context *i915)
|
|||||||
i915->state.Buffer[I915_DESTREG_SR2] = 0;
|
i915->state.Buffer[I915_DESTREG_SR2] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
i915->state.RasterRules[I915_RASTER_RULES] = _3DSTATE_RASTER_RULES_CMD |
|
||||||
|
ENABLE_POINT_RASTER_RULE |
|
||||||
|
OGL_POINT_RASTER_RULE |
|
||||||
|
ENABLE_LINE_STRIP_PROVOKE_VRTX |
|
||||||
|
ENABLE_TRI_FAN_PROVOKE_VRTX |
|
||||||
|
LINE_STRIP_PROVOKE_VRTX(1) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(2) | ENABLE_TEXKILL_3D_4D | TEXKILL_4D;
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
{
|
{
|
||||||
@@ -1053,7 +1060,33 @@ i915_init_packets(struct i915_context *i915)
|
|||||||
i915->state.active = (I915_UPLOAD_PROGRAM |
|
i915->state.active = (I915_UPLOAD_PROGRAM |
|
||||||
I915_UPLOAD_STIPPLE |
|
I915_UPLOAD_STIPPLE |
|
||||||
I915_UPLOAD_CTX |
|
I915_UPLOAD_CTX |
|
||||||
I915_UPLOAD_BUFFERS | I915_UPLOAD_INVARIENT);
|
I915_UPLOAD_BUFFERS |
|
||||||
|
I915_UPLOAD_INVARIENT |
|
||||||
|
I915_UPLOAD_RASTER_RULES);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
i915_update_provoking_vertex(GLcontext * ctx)
|
||||||
|
{
|
||||||
|
struct i915_context *i915 = I915_CONTEXT(ctx);
|
||||||
|
|
||||||
|
I915_STATECHANGE(i915, I915_UPLOAD_CTX);
|
||||||
|
i915->state.Ctx[I915_CTXREG_LIS6] &= ~(S6_TRISTRIP_PV_MASK);
|
||||||
|
|
||||||
|
I915_STATECHANGE(i915, I915_UPLOAD_RASTER_RULES);
|
||||||
|
i915->state.RasterRules[I915_RASTER_RULES] &= ~(LINE_STRIP_PROVOKE_VRTX_MASK |
|
||||||
|
TRI_FAN_PROVOKE_VRTX_MASK);
|
||||||
|
|
||||||
|
/* _NEW_LIGHT */
|
||||||
|
if (ctx->Light.ProvokingVertex == GL_LAST_VERTEX_CONVENTION) {
|
||||||
|
i915->state.RasterRules[I915_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(1) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(2));
|
||||||
|
i915->state.Ctx[I915_CTXREG_LIS6] |= (2 << S6_TRISTRIP_PV_SHIFT);
|
||||||
|
} else {
|
||||||
|
i915->state.RasterRules[I915_RASTER_RULES] |= (LINE_STRIP_PROVOKE_VRTX(0) |
|
||||||
|
TRI_FAN_PROVOKE_VRTX(1));
|
||||||
|
i915->state.Ctx[I915_CTXREG_LIS6] |= (0 << S6_TRISTRIP_PV_SHIFT);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@@ -176,7 +176,7 @@ i915_emit_invarient_state(struct intel_context *intel)
|
|||||||
{
|
{
|
||||||
BATCH_LOCALS;
|
BATCH_LOCALS;
|
||||||
|
|
||||||
BEGIN_BATCH(18, IGNORE_CLIPRECTS);
|
BEGIN_BATCH(17, IGNORE_CLIPRECTS);
|
||||||
|
|
||||||
OUT_BATCH(_3DSTATE_AA_CMD |
|
OUT_BATCH(_3DSTATE_AA_CMD |
|
||||||
AA_LINE_ECAAR_WIDTH_ENABLE |
|
AA_LINE_ECAAR_WIDTH_ENABLE |
|
||||||
@@ -200,14 +200,6 @@ i915_emit_invarient_state(struct intel_context *intel)
|
|||||||
CSB_TCB(3, 3) |
|
CSB_TCB(3, 3) |
|
||||||
CSB_TCB(4, 4) | CSB_TCB(5, 5) | CSB_TCB(6, 6) | CSB_TCB(7, 7));
|
CSB_TCB(4, 4) | CSB_TCB(5, 5) | CSB_TCB(6, 6) | CSB_TCB(7, 7));
|
||||||
|
|
||||||
OUT_BATCH(_3DSTATE_RASTER_RULES_CMD |
|
|
||||||
ENABLE_POINT_RASTER_RULE |
|
|
||||||
OGL_POINT_RASTER_RULE |
|
|
||||||
ENABLE_LINE_STRIP_PROVOKE_VRTX |
|
|
||||||
ENABLE_TRI_FAN_PROVOKE_VRTX |
|
|
||||||
LINE_STRIP_PROVOKE_VRTX(1) |
|
|
||||||
TRI_FAN_PROVOKE_VRTX(2) | ENABLE_TEXKILL_3D_4D | TEXKILL_4D);
|
|
||||||
|
|
||||||
/* Need to initialize this to zero.
|
/* Need to initialize this to zero.
|
||||||
*/
|
*/
|
||||||
OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | (0));
|
OUT_BATCH(_3DSTATE_LOAD_STATE_IMMEDIATE_1 | I1_LOAD_S(3) | (0));
|
||||||
@@ -258,6 +250,9 @@ get_state_size(struct i915_hw_state *state)
|
|||||||
if (dirty & I915_UPLOAD_INVARIENT)
|
if (dirty & I915_UPLOAD_INVARIENT)
|
||||||
sz += 30 * 4;
|
sz += 30 * 4;
|
||||||
|
|
||||||
|
if (dirty & I915_UPLOAD_RASTER_RULES)
|
||||||
|
sz += sizeof(state->RasterRules);
|
||||||
|
|
||||||
if (dirty & I915_UPLOAD_CTX)
|
if (dirty & I915_UPLOAD_CTX)
|
||||||
sz += sizeof(state->Ctx);
|
sz += sizeof(state->Ctx);
|
||||||
|
|
||||||
@@ -366,6 +361,12 @@ i915_emit_state(struct intel_context *intel)
|
|||||||
i915_emit_invarient_state(intel);
|
i915_emit_invarient_state(intel);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dirty & I915_UPLOAD_RASTER_RULES) {
|
||||||
|
if (INTEL_DEBUG & DEBUG_STATE)
|
||||||
|
fprintf(stderr, "I915_UPLOAD_RASTER_RULES:\n");
|
||||||
|
emit(intel, state->RasterRules, sizeof(state->RasterRules));
|
||||||
|
}
|
||||||
|
|
||||||
if (dirty & I915_UPLOAD_CTX) {
|
if (dirty & I915_UPLOAD_CTX) {
|
||||||
if (INTEL_DEBUG & DEBUG_STATE)
|
if (INTEL_DEBUG & DEBUG_STATE)
|
||||||
fprintf(stderr, "I915_UPLOAD_CTX:\n");
|
fprintf(stderr, "I915_UPLOAD_CTX:\n");
|
||||||
|
@@ -113,7 +113,7 @@ struct brw_sf_unit_key {
|
|||||||
|
|
||||||
unsigned int nr_urb_entries, urb_size, sfsize;
|
unsigned int nr_urb_entries, urb_size, sfsize;
|
||||||
|
|
||||||
GLenum front_face, cull_face;
|
GLenum front_face, cull_face, provoking_vertex;
|
||||||
unsigned scissor:1;
|
unsigned scissor:1;
|
||||||
unsigned line_smooth:1;
|
unsigned line_smooth:1;
|
||||||
unsigned point_sprite:1;
|
unsigned point_sprite:1;
|
||||||
@@ -153,6 +153,9 @@ sf_unit_populate_key(struct brw_context *brw, struct brw_sf_unit_key *key)
|
|||||||
key->point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
|
key->point_size = CLAMP(ctx->Point.Size, ctx->Point.MinSize, ctx->Point.MaxSize);
|
||||||
key->point_attenuated = ctx->Point._Attenuated;
|
key->point_attenuated = ctx->Point._Attenuated;
|
||||||
|
|
||||||
|
/* _NEW_LIGHT */
|
||||||
|
key->provoking_vertex = ctx->Light.ProvokingVertex;
|
||||||
|
|
||||||
key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
|
key->render_to_fbo = brw->intel.ctx.DrawBuffer->Name != 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -284,9 +287,15 @@ sf_unit_create_from_key(struct brw_context *brw, struct brw_sf_unit_key *key,
|
|||||||
|
|
||||||
/* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
|
/* might be BRW_NEW_PRIMITIVE if we have to adjust pv for polygons:
|
||||||
*/
|
*/
|
||||||
sf.sf7.trifan_pv = 2;
|
if (key->provoking_vertex == GL_LAST_VERTEX_CONVENTION) {
|
||||||
sf.sf7.linestrip_pv = 1;
|
sf.sf7.trifan_pv = 2;
|
||||||
sf.sf7.tristrip_pv = 2;
|
sf.sf7.linestrip_pv = 1;
|
||||||
|
sf.sf7.tristrip_pv = 2;
|
||||||
|
} else {
|
||||||
|
sf.sf7.trifan_pv = 1;
|
||||||
|
sf.sf7.linestrip_pv = 0;
|
||||||
|
sf.sf7.tristrip_pv = 0;
|
||||||
|
}
|
||||||
sf.sf7.line_last_pixel_enable = 0;
|
sf.sf7.line_last_pixel_enable = 0;
|
||||||
|
|
||||||
/* Set bias for OpenGL rasterization rules:
|
/* Set bias for OpenGL rasterization rules:
|
||||||
@@ -340,6 +349,7 @@ static void upload_sf_unit( struct brw_context *brw )
|
|||||||
const struct brw_tracked_state brw_sf_unit = {
|
const struct brw_tracked_state brw_sf_unit = {
|
||||||
.dirty = {
|
.dirty = {
|
||||||
.mesa = (_NEW_POLYGON |
|
.mesa = (_NEW_POLYGON |
|
||||||
|
_NEW_LIGHT |
|
||||||
_NEW_LINE |
|
_NEW_LINE |
|
||||||
_NEW_POINT |
|
_NEW_POINT |
|
||||||
_NEW_SCISSOR |
|
_NEW_SCISSOR |
|
||||||
|
@@ -48,6 +48,7 @@
|
|||||||
#define need_GL_EXT_framebuffer_blit
|
#define need_GL_EXT_framebuffer_blit
|
||||||
#define need_GL_EXT_gpu_program_parameters
|
#define need_GL_EXT_gpu_program_parameters
|
||||||
#define need_GL_EXT_point_parameters
|
#define need_GL_EXT_point_parameters
|
||||||
|
#define need_GL_EXT_provoking_vertex
|
||||||
#define need_GL_EXT_secondary_color
|
#define need_GL_EXT_secondary_color
|
||||||
#define need_GL_EXT_stencil_two_side
|
#define need_GL_EXT_stencil_two_side
|
||||||
#define need_GL_APPLE_vertex_array_object
|
#define need_GL_APPLE_vertex_array_object
|
||||||
@@ -93,6 +94,7 @@ static const struct dri_extension card_extensions[] = {
|
|||||||
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
{ "GL_EXT_fog_coord", GL_EXT_fog_coord_functions },
|
||||||
{ "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions },
|
{ "GL_EXT_gpu_program_parameters", GL_EXT_gpu_program_parameters_functions },
|
||||||
{ "GL_EXT_packed_depth_stencil", NULL },
|
{ "GL_EXT_packed_depth_stencil", NULL },
|
||||||
|
{ "GL_EXT_provoking_vertex", GL_EXT_provoking_vertex_functions },
|
||||||
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
{ "GL_EXT_secondary_color", GL_EXT_secondary_color_functions },
|
||||||
{ "GL_EXT_stencil_wrap", NULL },
|
{ "GL_EXT_stencil_wrap", NULL },
|
||||||
{ "GL_EXT_texture_edge_clamp", NULL },
|
{ "GL_EXT_texture_edge_clamp", NULL },
|
||||||
|
Reference in New Issue
Block a user