Browse Source

r300g: make a local copy of framebuffer state

The previous more direct approach was simply incorrect.

piglit/levelclamp passes again.
gallium-sw-api
Marek Olšák 15 years ago
parent
commit
2f5fcce933
2 changed files with 5 additions and 1 deletions
  1. 4
    0
      src/gallium/drivers/r300/r300_context.c
  2. 1
    1
      src/gallium/drivers/r300/r300_state.c

+ 4
- 0
src/gallium/drivers/r300/r300_context.c View File

@@ -55,6 +55,7 @@ static void r300_destroy_context(struct pipe_context* context)

FREE(r300->blend_color_state.state);
FREE(r300->clip_state.state);
FREE(r300->fb_state.state);
FREE(r300->rs_block_state.state);
FREE(r300->scissor_state.state);
FREE(r300->vertex_format_state.state);
@@ -124,6 +125,9 @@ static void r300_setup_atoms(struct r300_context* r300)
R300_INIT_ATOM(viewport, 9);
R300_INIT_ATOM(rs_block, 21);
R300_INIT_ATOM(vertex_format, 26);

/* Some non-CSO atoms need explicit space to store the state locally. */
r300->fb_state.state = CALLOC_STRUCT(pipe_framebuffer_state);
}

struct pipe_context* r300_create_context(struct pipe_screen* screen,

+ 1
- 1
src/gallium/drivers/r300/r300_state.c View File

@@ -511,7 +511,7 @@ static void
draw_flush(r300->draw);
}

r300->fb_state.state = state;
memcpy(r300->fb_state.state, state, sizeof(struct pipe_framebuffer_state));

/* Don't rely on the order of states being set for the first time. */
/* XXX wait what */

Loading…
Cancel
Save