}
}
- shader_addline(buffer, "const float FLT_MAX = 1e38;\n");
-
/* Start the main program */
shader_addline(buffer, "void main() {\n");
if(pshader && reg_maps->vpos) {
if (dst_size > 1)
{
- shader_addline(buffer, "vec%d(%s == 0.0 ? 0.0 : pow(abs(%s), %s)));\n",
- dst_size, src0_param.param_str, src0_param.param_str, src1_param.param_str);
+ shader_addline(buffer, "vec%u(pow(abs(%s), %s)));\n",
+ dst_size, src0_param.param_str, src1_param.param_str);
}
else
{
- shader_addline(buffer, "%s == 0.0 ? 0.0 : pow(abs(%s), %s));\n",
- src0_param.param_str, src0_param.param_str, src1_param.param_str);
+ shader_addline(buffer, "pow(abs(%s), %s));\n",
+ src0_param.param_str, src1_param.param_str);
}
}
if (dst_size > 1)
{
- shader_addline(buffer, "vec%d(%s == 0.0 ? -FLT_MAX : log2(abs(%s))));\n",
- dst_size, src0_param.param_str, src0_param.param_str);
+ shader_addline(buffer, "vec%u(log2(abs(%s))));\n",
+ dst_size, src0_param.param_str);
}
else
{
- shader_addline(buffer, "%s == 0.0 ? -FLT_MAX : log2(abs(%s)));\n",
- src0_param.param_str, src0_param.param_str);
+ shader_addline(buffer, "log2(abs(%s)));\n",
+ src0_param.param_str);
}
}
if (mask_size > 1)
{
- shader_addline(ins->ctx->buffer, "vec%d(%s == 0.0 ? FLT_MAX : 1.0 / %s));\n",
- mask_size, src_param.param_str, src_param.param_str);
+ shader_addline(ins->ctx->buffer, "vec%u(1.0 / %s));\n",
+ mask_size, src_param.param_str);
}
else
{
- shader_addline(ins->ctx->buffer, "%s == 0.0 ? FLT_MAX : 1.0 / %s);\n",
- src_param.param_str, src_param.param_str);
+ shader_addline(ins->ctx->buffer, "1.0 / %s);\n",
+ src_param.param_str);
}
}
if (mask_size > 1)
{
- shader_addline(buffer, "vec%d(%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s))));\n",
- mask_size, src_param.param_str, src_param.param_str);
+ shader_addline(buffer, "vec%u(inversesqrt(abs(%s))));\n",
+ mask_size, src_param.param_str);
}
else
{
- shader_addline(buffer, "%s == 0.0 ? FLT_MAX : inversesqrt(abs(%s)));\n",
- src_param.param_str, src_param.param_str);
+ shader_addline(buffer, "inversesqrt(abs(%s)));\n",
+ src_param.param_str);
}
}
set[in_idx] = mask;
shader_glsl_write_mask_to_str(mask, reg_mask);
- shader_addline(buffer, "%s%s = OUT[%u]%s;\n",
+ shader_addline(buffer, "%s%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
destination, reg_mask, j, reg_mask);
}
}
shader_buffer_clear(buffer);
shader_addline(buffer, "#version 120\n");
+ shader_addline(buffer, "const float FLT_MAX = 1e38;\n");
if (ps_major < 3)
{
if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_COLOR))
{
if (semantic_idx == 0)
- shader_addline(buffer, "gl_FrontColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ shader_addline(buffer, "gl_FrontColor%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
+ reg_mask, i, reg_mask);
else if (semantic_idx == 1)
- shader_addline(buffer, "gl_FrontSecondaryColor%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ shader_addline(buffer, "gl_FrontSecondaryColor%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
+ reg_mask, i, reg_mask);
}
else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
{
- shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ shader_addline(buffer, "gl_Position%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
+ reg_mask, i, reg_mask);
}
else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_TEXCOORD))
{
if (!(gl_info->quirks & WINED3D_QUIRK_SET_TEXCOORD_W) || ps_major > 0)
write_mask |= WINED3DSP_WRITEMASK_3;
- shader_addline(buffer, "gl_TexCoord[%u]%s = OUT[%u]%s;\n",
+ shader_addline(buffer, "gl_TexCoord[%u]%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
semantic_idx, reg_mask, i, reg_mask);
if (!(write_mask & WINED3DSP_WRITEMASK_3))
shader_addline(buffer, "gl_TexCoord[%u].w = 1.0;\n", semantic_idx);
}
else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
{
- shader_addline(buffer, "gl_PointSize = OUT[%u].%c;\n", i, reg_mask[1]);
+ shader_addline(buffer, "gl_PointSize = clamp(OUT[%u].%c, -FLT_MAX, FLT_MAX);\n", i, reg_mask[1]);
}
else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_FOG))
{
- shader_addline(buffer, "gl_FogFragCoord = OUT[%u].%c;\n", i, reg_mask[1]);
+ shader_addline(buffer, "gl_FogFragCoord = clamp(OUT[%u].%c, -FLT_MAX, FLT_MAX);\n", i, reg_mask[1]);
}
}
shader_addline(buffer, "}\n");
if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_POSITION))
{
- shader_addline(buffer, "gl_Position%s = OUT[%u]%s;\n", reg_mask, i, reg_mask);
+ shader_addline(buffer, "gl_Position%s = clamp(OUT[%u]%s, -FLT_MAX, FLT_MAX);\n",
+ reg_mask, i, reg_mask);
}
else if (shader_match_semantic(semantic_name, WINED3DDECLUSAGE_PSIZE))
{
- shader_addline(buffer, "gl_PointSize = OUT[%u].%c;\n", i, reg_mask[1]);
+ shader_addline(buffer, "gl_PointSize = clamp(OUT[%u].%c, -FLT_MAX, FLT_MAX);\n", i, reg_mask[1]);
}
}