mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 09:38:07 +02:00
r300g: enable clamping controls
This commit is contained in:
parent
8d4ec87d7f
commit
f037914670
4 changed files with 14 additions and 6 deletions
|
|
@ -580,6 +580,8 @@ struct r300_context {
|
|||
int sprite_coord_enable;
|
||||
/* Whether two-sided color selection is enabled (AKA light_twoside). */
|
||||
boolean two_sided_color;
|
||||
/* Whether fragment color clamping is enabled. */
|
||||
boolean frag_clamp;
|
||||
/* Whether fast color clear is enabled. */
|
||||
boolean cbzb_clear;
|
||||
/* Whether ZMASK is enabled. */
|
||||
|
|
|
|||
|
|
@ -146,10 +146,11 @@ static void get_external_state(
|
|||
struct r300_fragment_program_external_state* state)
|
||||
{
|
||||
struct r300_textures_state *texstate = r300->textures_state.state;
|
||||
struct r300_rs_state *rs = r300->rs_state.state;
|
||||
unsigned i;
|
||||
unsigned char *swizzle;
|
||||
|
||||
state->frag_clamp = 0;
|
||||
state->frag_clamp = rs ? rs->rs.clamp_fragment_color : 0;
|
||||
|
||||
for (i = 0; i < texstate->sampler_state_count; i++) {
|
||||
struct r300_sampler_state *s = texstate->sampler_states[i];
|
||||
|
|
|
|||
|
|
@ -114,6 +114,7 @@ static int r300_get_param(struct pipe_screen* pscreen, enum pipe_cap param)
|
|||
case PIPE_CAP_TEXTURE_MIRROR_REPEAT:
|
||||
case PIPE_CAP_BLEND_EQUATION_SEPARATE:
|
||||
case PIPE_CAP_VERTEX_ELEMENT_INSTANCE_DIVISOR:
|
||||
case PIPE_CAP_FRAGMENT_COLOR_CLAMP_CONTROL:
|
||||
return 1;
|
||||
case PIPE_CAP_TEXTURE_SWIZZLE:
|
||||
return util_format_s3tc_enabled ? r300screen->caps.dxtc_swizzle : 1;
|
||||
|
|
|
|||
|
|
@ -398,10 +398,6 @@ static void r300_bind_blend_state(struct pipe_context* pipe,
|
|||
struct r300_context* r300 = r300_context(pipe);
|
||||
|
||||
UPDATE_STATE(state, r300->blend_state);
|
||||
|
||||
if (r300->fs.state && r300_pick_fragment_shader(r300)) {
|
||||
r300_mark_fs_code_dirty(r300);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free blend state. */
|
||||
|
|
@ -1047,7 +1043,7 @@ static void* r300_create_rs_state(struct pipe_context* pipe,
|
|||
float point_texcoord_bottom = 0;/* R300_GA_POINT_T0: 0x4204 */
|
||||
float point_texcoord_right = 1; /* R300_GA_POINT_S1: 0x4208 */
|
||||
float point_texcoord_top = 0; /* R300_GA_POINT_T1: 0x420c */
|
||||
boolean vclamp = TRUE;
|
||||
boolean vclamp = state->clamp_vertex_color;
|
||||
CB_LOCALS;
|
||||
|
||||
/* Copy rasterizer state. */
|
||||
|
|
@ -1233,6 +1229,7 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
|
|||
struct r300_rs_state* rs = (struct r300_rs_state*)state;
|
||||
int last_sprite_coord_enable = r300->sprite_coord_enable;
|
||||
boolean last_two_sided_color = r300->two_sided_color;
|
||||
boolean last_frag_clamp = r300->frag_clamp;
|
||||
|
||||
if (r300->draw && rs) {
|
||||
draw_set_rasterizer_state(r300->draw, &rs->rs_draw, state);
|
||||
|
|
@ -1242,10 +1239,12 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
|
|||
r300->polygon_offset_enabled = rs->polygon_offset_enable;
|
||||
r300->sprite_coord_enable = rs->rs.sprite_coord_enable;
|
||||
r300->two_sided_color = rs->rs.light_twoside;
|
||||
r300->frag_clamp = rs->rs.clamp_fragment_color;
|
||||
} else {
|
||||
r300->polygon_offset_enabled = FALSE;
|
||||
r300->sprite_coord_enable = 0;
|
||||
r300->two_sided_color = FALSE;
|
||||
r300->frag_clamp = FALSE;
|
||||
}
|
||||
|
||||
UPDATE_STATE(state, r300->rs_state);
|
||||
|
|
@ -1255,6 +1254,11 @@ static void r300_bind_rs_state(struct pipe_context* pipe, void* state)
|
|||
last_two_sided_color != r300->two_sided_color) {
|
||||
r300_mark_atom_dirty(r300, &r300->rs_block_state);
|
||||
}
|
||||
|
||||
if (last_frag_clamp != r300->frag_clamp &&
|
||||
r300->fs.state && r300_pick_fragment_shader(r300)) {
|
||||
r300_mark_fs_code_dirty(r300);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free rasterizer state. */
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue