| @@ -385,6 +385,7 @@ static void r300_translate_fragment_shader( | |||
| compiler.code = &shader->code; | |||
| compiler.state = shader->compare_state; | |||
| compiler.Base.is_r500 = r300->screen->caps.is_r500; | |||
| compiler.Base.has_half_swizzles = TRUE; | |||
| compiler.Base.max_temp_regs = compiler.Base.is_r500 ? 128 : 32; | |||
| compiler.Base.max_constants = compiler.Base.is_r500 ? 256 : 32; | |||
| compiler.Base.max_alu_insts = compiler.Base.is_r500 ? 512 : 64; | |||
| @@ -205,6 +205,7 @@ void r300_translate_vertex_shader(struct r300_context *r300, | |||
| compiler.code = &vs->code; | |||
| compiler.UserData = vs; | |||
| compiler.Base.is_r500 = r300->screen->caps.is_r500; | |||
| compiler.Base.has_half_swizzles = FALSE; | |||
| compiler.Base.max_temp_regs = 32; | |||
| compiler.Base.max_constants = 256; | |||
| compiler.Base.max_alu_insts = r300->screen->caps.is_r500 ? 1024 : 256; | |||
| @@ -41,6 +41,7 @@ struct radeon_compiler { | |||
| /* Hardware specification. */ | |||
| unsigned is_r500:1; | |||
| unsigned has_half_swizzles:1; | |||
| unsigned max_temp_regs; | |||
| unsigned max_constants; | |||
| int max_alu_insts; | |||
| @@ -410,7 +410,7 @@ static void constant_folding(struct radeon_compiler * c, struct rc_instruction * | |||
| newswz = RC_SWIZZLE_ZERO; | |||
| } else if (baseimm == 1.0) { | |||
| newswz = RC_SWIZZLE_ONE; | |||
| } else if (baseimm == 0.5) { | |||
| } else if (baseimm == 0.5 && c->has_half_swizzles) { | |||
| newswz = RC_SWIZZLE_HALF; | |||
| } else { | |||
| have_real_reference = 1; | |||
| @@ -89,6 +89,7 @@ static void create_vertex_program(struct r300_context *r300) | |||
| compiler.SetHwInputOutput = vp_ins_outs; | |||
| compiler.code = &r300->blit.vp_code; | |||
| compiler.Base.is_r500 = r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515; | |||
| compiler.Base.has_half_swizzles = 0; | |||
| compiler.Base.max_temp_regs = 32; | |||
| compiler.Base.max_constants = 256; | |||
| compiler.Base.max_alu_insts = compiler.Base.is_r500 ? 1024 : 256; | |||
| @@ -123,6 +124,7 @@ static void create_fragment_program(struct r300_context *r300) | |||
| compiler.OutputDepth = FRAG_RESULT_DEPTH; | |||
| compiler.enable_shadow_ambient = GL_TRUE; | |||
| compiler.Base.is_r500 = (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515); | |||
| compiler.Base.has_half_swizzles = 1; | |||
| compiler.Base.max_temp_regs = (compiler.Base.is_r500) ? 128 : 32; | |||
| compiler.Base.max_constants = compiler.Base.is_r500 ? 256 : 32; | |||
| compiler.Base.max_alu_insts = compiler.Base.is_r500 ? 512 : 64; | |||
| @@ -220,6 +220,7 @@ static void translate_fragment_program(GLcontext *ctx, struct r300_fragment_prog | |||
| compiler.state = fp->state; | |||
| compiler.enable_shadow_ambient = GL_TRUE; | |||
| compiler.Base.is_r500 = (r300->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515) ? GL_TRUE : GL_FALSE; | |||
| compiler.Base.has_half_swizzles = 1; | |||
| compiler.Base.max_temp_regs = (compiler.Base.is_r500) ? 128 : 32; | |||
| compiler.Base.max_constants = compiler.Base.is_r500 ? 256 : 32; | |||
| compiler.Base.max_alu_insts = compiler.Base.is_r500 ? 512 : 64; | |||
| @@ -245,6 +245,7 @@ static struct r300_vertex_program *build_program(GLcontext *ctx, | |||
| compiler.RequiredOutputs = compute_required_outputs(vp->Base, vp->key.FpReads); | |||
| compiler.SetHwInputOutput = &t_inputs_outputs; | |||
| compiler.Base.is_r500 = R300_CONTEXT(ctx)->radeon.radeonScreen->chip_family >= CHIP_FAMILY_RV515; | |||
| compiler.Base.has_half_swizzles = 0; | |||
| compiler.Base.max_temp_regs = 32; | |||
| compiler.Base.max_constants = 256; | |||
| compiler.Base.max_alu_insts = compiler.Base.is_r500 ? 1024 : 256; | |||