r300-gallium: Emit UCP.

This commit is contained in:
Corbin Simpson 2009-06-05 11:21:09 -07:00
parent 9e4590dff7
commit 1a359d9835
4 changed files with 53 additions and 20 deletions

View file

@ -117,23 +117,24 @@ struct r300_viewport_state {
uint32_t vte_control; /* R300_VAP_VTE_CNTL: 0x20b0 */
};
#define R300_NEW_BLEND 0x0000001
#define R300_NEW_BLEND_COLOR 0x0000002
#define R300_NEW_CONSTANTS 0x0000004
#define R300_NEW_DSA 0x0000008
#define R300_NEW_FRAMEBUFFERS 0x0000010
#define R300_NEW_FRAGMENT_SHADER 0x0000020
#define R300_NEW_RASTERIZER 0x0000040
#define R300_NEW_RS_BLOCK 0x0000080
#define R300_NEW_SAMPLER 0x0000100
#define R300_ANY_NEW_SAMPLERS 0x000ff00
#define R300_NEW_SCISSOR 0x0010000
#define R300_NEW_TEXTURE 0x0020000
#define R300_ANY_NEW_TEXTURES 0x1fe0000
#define R300_NEW_VERTEX_FORMAT 0x2000000
#define R300_NEW_VERTEX_SHADER 0x4000000
#define R300_NEW_VIEWPORT 0x8000000
#define R300_NEW_KITCHEN_SINK 0xfffffff
#define R300_NEW_BLEND 0x00000001
#define R300_NEW_BLEND_COLOR 0x00000002
#define R300_NEW_CLIP 0x00000004
#define R300_NEW_CONSTANTS 0x00000008
#define R300_NEW_DSA 0x00000010
#define R300_NEW_FRAMEBUFFERS 0x00000020
#define R300_NEW_FRAGMENT_SHADER 0x00000040
#define R300_NEW_RASTERIZER 0x00000080
#define R300_NEW_RS_BLOCK 0x00000100
#define R300_NEW_SAMPLER 0x00000200
#define R300_ANY_NEW_SAMPLERS 0x0001fe00
#define R300_NEW_SCISSOR 0x00020000
#define R300_NEW_TEXTURE 0x00040000
#define R300_ANY_NEW_TEXTURES 0x03fc0000
#define R300_NEW_VERTEX_FORMAT 0x04000000
#define R300_NEW_VERTEX_SHADER 0x08000000
#define R300_NEW_VIEWPORT 0x10000000
#define R300_NEW_KITCHEN_SINK 0x1fffffff
/* The next several objects are not pure Radeon state; they inherit from
* various Gallium classes. */
@ -292,6 +293,8 @@ struct r300_context {
struct r300_blend_state* blend_state;
/* Blend color state. */
struct r300_blend_color_state* blend_color_state;
/* User clip planes. */
struct pipe_clip_state clip_state;
/* Shader constants. */
struct r300_constant_buffer shader_constants[PIPE_SHADER_TYPES];
/* Depth, stencil, and alpha state. */

View file

@ -56,6 +56,27 @@ void r300_emit_blend_color_state(struct r300_context* r300,
}
}
void r300_emit_clip_state(struct r300_context* r300,
struct pipe_clip_state* clip)
{
int i;
struct r300_screen* r300screen = r300_screen(r300->context.screen);
CS_LOCALS(r300);
BEGIN_CS(3 + (6 * 4));
OUT_CS_REG(R300_VAP_PVS_VECTOR_INDX_REG,
(r300screen->caps->is_r500 ?
R500_PVS_UCP_START : R300_PVS_UCP_START));
OUT_CS_ONE_REG(R300_VAP_PVS_UPLOAD_DATA, 6 * 4);
for (i = 0; i < 6; i++) {
OUT_CS_32F(clip->ucp[i][0]);
OUT_CS_32F(clip->ucp[i][1]);
OUT_CS_32F(clip->ucp[i][2]);
OUT_CS_32F(clip->ucp[i][3]);
}
END_CS;
}
void r300_emit_dsa_state(struct r300_context* r300,
struct r300_dsa_state* dsa)
{
@ -527,6 +548,11 @@ validate:
r300->dirty_state &= ~R300_NEW_BLEND_COLOR;
}
if (r300->dirty_state & R300_NEW_CLIP) {
r300_emit_clip_state(r300, &r300->clip_state);
r300->dirty_state &= ~R300_NEW_CLIP;
}
if (r300->dirty_state & R300_NEW_DSA) {
r300_emit_dsa_state(r300, r300->dsa_state);
r300->dirty_state &= ~R300_NEW_DSA;

View file

@ -36,6 +36,9 @@ void r300_emit_blend_state(struct r300_context* r300,
void r300_emit_blend_color_state(struct r300_context* r300,
struct r300_blend_color_state* bc);
void r300_emit_clip_state(struct r300_context* r300,
struct pipe_clip_state* clip);
void r300_emit_dsa_state(struct r300_context* r300,
struct r300_dsa_state* dsa);

View file

@ -119,9 +119,10 @@ static void r300_set_clip_state(struct pipe_context* pipe,
const struct pipe_clip_state* state)
{
struct r300_context* r300 = r300_context(pipe);
/* XXX add HW TCL clipping setup */
draw_flush(r300->draw);
draw_set_clip_state(r300->draw, state);
r300->clip_state = *state;
r300->dirty_state |= R300_NEW_CLIP;
}
static void