View Issue Details

IDProjectCategoryView StatusLast Update
0004877The Dark ModCodingpublic06.01.2019 10:05
ReporterSpringheel Assigned Tostgatilov  
PrioritynormalSeveritynormalReproducibilityhave not tried
Status resolvedResolutionfixed 
Product VersionTDM 2.06 
Target VersionTDM 2.07Fixed in VersionTDM 2.07 
Summary0004877: 2.06 dmapping removing triangles?
DescriptionThere have been numerous reports of missing triangles in brushes and patches lately. While this has happened periodically before 2.06, it's possible something in 2.06 is making this more frequent.

There is at least one report of a map working fine in 2.05 but then displaying problems when dmapped in 2.06.

http://forums.thedarkmod.com/topic/19588-briarwood-manor-issue-whats-causing-this/
Additional Informationhttp://forums.thedarkmod.com/topic/19714-render-issue/page-2#entry429551
TagsNo tags attached.

Activities

Abusimplea

Abusimplea

26.10.2018 03:41

reporter  

fstmp.map (56,220 bytes)
Abusimplea

Abusimplea

26.10.2018 03:42

reporter   ~0010793

Added test map from http://forums.thedarkmod.com/topic/19714-render-issue/page-2#entry429482
duzenko

duzenko

27.10.2018 17:32

developer   ~0010794

@stgatilov

Can you confirm that the ifdef in idMath::InvSqrt is affecting this?

What is the difference between idMath::RSqrt and idMath::InvSqrt?

I would suggest adding a 'slow' version of idVec3::Normalize that calls a more precise version of InvSqrt
nbohr1more

nbohr1more

28.11.2018 22:01

developer   ~0010803

This might also be the root cause for old maps like "Rightful Property" and "Samhain Night" getting "AAS Out of Date" errors. Broken AAS geometry?
Judith

Judith

03.12.2018 07:17

reporter   ~0010812

I also noticed that it can affect models. E.g. I have a model with two opposite planes very close to each other (below 1 unit). In 2.05 there was no problem with that. In 2.06 I see z-fighting.
stgatilov

stgatilov

05.12.2018 15:10

administrator   ~0010821

I tried both test maps and don't see any missing triangles in any of the stairs. I have AMD Ryzen CPU.

1) Did someone reproduce the problem successfully?
2) Could someone who can reproduce the problem write #undef __SSE__ before idMath::RSqrt and write #define __SSE__ after idMath::Sqrt64, then try again?
3) If that does not help, please try to remove StreamingSIMDExtensions2 clause from Common_x86.props, recompile the whole game and try again?

The different between various versions of rsqrt/sqrt are the precision they provide. If these functions cause problems, I would start with making RSqrt work the same as InvSqrt16 (i.e. add the line with NR iteration). If this does not help, we can try reverting to old and slow implementations.
duzenko

duzenko

05.12.2018 16:21

developer  

stairs.map (26,774 bytes)   
Version 2
// entity 0
{
"classname" "worldspawn"
"editor_drMapPos1" "622.965 891.597 194.506"
"editor_drMapAngle1" "0 4.7 0"
"editor_drMapPos2" "856 856 194.506"
"editor_drMapAngle2" "0 -88.6028 0"
"editor_drMapPos3" "832 264 194.506"
"editor_drMapAngle3" "0 82.1467 0"
"editor_drMapPos4" "462.987 512.708 197.518"
"editor_drMapAngle4" "-2.8 151.047 0"
"editor_drMapPos5" "395.633 301.73 201.855"
"editor_drMapAngle5" "-2.6 187.447 0"
"editor_drMapPos6" "406.528 296.563 56.6098"
"editor_drMapAngle6" "-4 187.247 0"
"editor_drMapPos7" "952.822 285.005 1366.04"
"editor_drMapAngle7" "-74.8 149.373 0"
"editor_drMapPos8" "976 424 320"
"editor_drMapAngle8" "-3 15.3467 0"
"editor_drMapPos9" "409.146 547.464 392.83"
"editor_drMapAngle9" "-16.8 284.947 0"
"editor_drLastCameraPos" "236.324 58.601 291.219"
"editor_drLastCameraAngle" "-51 86.51 0"
// primitive 0
{
brushDef3
{
( 0 0 1 -136 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
( 0 1 0 -384 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
( 1 0 0 -384 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
( 0 -1 0 128 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
( -1 0 0 128 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
( 0 0 -1 128 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "textures/darkmod/wood/panels/panel_decayed" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 1 0 -392 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 1 0 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 0 -1 0 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( -1 0 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 -1 0 384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 1 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 1 0 0 -392 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 0 -1 0 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 -1 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( -1 0 0 384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 1 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
( 1 0 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
( 0 0 -1 -8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
( 0 -1 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
( -1 0 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
( 0 0 1 0 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/boards/dark_rough" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 1 0 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 0 -1 0 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 -1 0 120 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( -1 0 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 1 0 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 1 0 -384 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 0 -1 0 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 0 -1 0 128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( -1 0 0 120 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
( 1 0 0 -128 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_darksheen_smooth" 0 0 0
}
}
// primitive 6
{
brushDef3
{
( 0 0 1 -112 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
( 0 1 0 -288 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
( 1 0 0 -544 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
( 0 0 -1 48 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
( 0 -1 0 224 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
( -1 0 0 480 ) ( ( 0.03125 0 0 ) ( 0 0.03125 0 ) ) "_default" 0 0 0
}
}
}
// entity 1
{
"classname" "info_player_start"
"name" "info_player_start_1"
"angle" "90.000000"
"origin" "256 168 0"
}
// entity 2
{
"classname" "atdm:ambient_world"
"name" "ambient_world"
"_color" "0.729 0.639 0.514"
"light_center" "0 0 0"
"light_radius" "3537 3968 3990"
"nodiffuse" "0"
"noshadows" "0"
"nospecular" "0"
"origin" "512 256 80"
"parallel" "0"
"texture" "lights/ambientlightnfo"
}
// entity 3
{
"classname" "func_static"
"name" "func_static_18"
"model" "func_static_18"
"origin" "161 259 33"
// primitive 0
{
brushDef3
{
( 0 0 1 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 55 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -73 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 15 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 39 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -17 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -57 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -41 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 0 1 -1 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -1 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 -17 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 15 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 6
{
brushDef3
{
( 0 0 1 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -73 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
}
// entity 4
{
"classname" "func_static"
"name" "func_static_19"
"model" "func_static_19"
"origin" "352 260 28"
// primitive 0
{
brushDef3
{
( 0 0 1 -20 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 -24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 -12 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 -8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 -4 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 0 1 4 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 12 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -56 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 20 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 56 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -72 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 6
{
brushDef3
{
( 0 0 1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 1 0 -72 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
}
// entity 5
{
"classname" "func_static"
"name" "func_static_20"
"model" "func_static_20"
"origin" "160 244 28"
// primitive 0
{
brushDef3
{
( 0 0 1 -20 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 -12 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 -4 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -8 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 0 1 4 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -24 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 12 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 20 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 -56 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 6
{
brushDef3
{
( 0 0 1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0.4472136354339113 -0.8944272708678226 1.563625907863297e-05 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
}
// entity 6
{
"classname" "func_static"
"name" "func_static_21"
"model" "func_static_21"
"origin" "160 260 28"
// primitive 0
{
brushDef3
{
( 0 1 0 -40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -0.4472136354339113 0.8944272708678226 -7.15543380320166 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 1 0 -72 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 -1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 0 1 -28 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( -1 0 0 -32 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
( 0 -1 0 40 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/stone/brick/blocks_brown" 0 0 0
}
}
}
// entity 7
{
"classname" "func_static"
"name" "func_static_1"
"model" "func_static_1"
"origin" "351 259 33"
// primitive 0
{
brushDef3
{
( 0 0 1 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 55 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -73 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 1
{
brushDef3
{
( 0 0 1 15 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 39 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -17 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -57 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 2
{
brushDef3
{
( 0 0 1 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -41 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 3
{
brushDef3
{
( 0 0 1 -1 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 -1 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 4
{
brushDef3
{
( 0 0 1 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 -9 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 5
{
brushDef3
{
( 0 0 1 -17 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 15 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 7 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
// primitive 6
{
brushDef3
{
( 0 0 1 -25 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 1 0 -73 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 0 -1 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( 0 -1 0 23 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
( -1 0 0 -33 ) ( ( 0.0078125 0 0 ) ( 0 0.0078125 0 ) ) "textures/darkmod/wood/panels/pine_generic_rough" 0 0 0
}
}
}
stairs.map (26,774 bytes)   
duzenko

duzenko

05.12.2018 16:23

developer   ~0010822

Last edited: 05.12.2018 16:26

View 2 revisions

Using the attached stairs.map, run in console

dmap stairs.map
map stairs.map

How does it look to you?
My screenshot attached

For me it's caused by the ifdef in idMath::InvSqrt

duzenko

duzenko

05.12.2018 16:25

developer  

Untitled.jpg (921,877 bytes)
stgatilov

stgatilov

05.12.2018 16:27

administrator  

stairs_relx64_ryzen.jpg (831,302 bytes)
stgatilov

stgatilov

05.12.2018 16:31

administrator   ~0010823

Last edited: 05.12.2018 16:34

View 3 revisions

Attached screenshot.

The problem is in InvSqrt? Not in RSqrt?

If that's really the case, try adding one NR iteration for InvSqrt, i.e. replace implementation with:
    //stgatilov: one NR iteration is almost enough for float32 precision, let's make second one
    float r = InvSqrt16(x);
    r = (0.5f * r) * (3.0f - x * r * r); //max precision
    return r;

stgatilov

stgatilov

05.12.2018 16:34

administrator   ~0010824

Sorry, I meant using "float" for variable "r".

If that still does not help, then try the same, but with "r" declared as "double", and all float constaints replaced with double constants (0.5f -> 0.5, 3.0f -> 3.0).
stgatilov

stgatilov

05.12.2018 17:11

administrator   ~0010825

As last resort, try using full-precision instruction:
  return 1.0f / SSE_SQRT(SSE_MAKEPOSITIVE(x));
This gives max precision. And it has almost the same speed as two NR iterations =)
duzenko

duzenko

05.12.2018 17:50

developer   ~0010826

Try the 32 bit build
stgatilov

stgatilov

06.12.2018 05:22

administrator   ~0010830

Last edited: 06.12.2018 05:23

View 2 revisions

Also works properly on Release 32-bit on Ryzen.

I tried my laptop (some modern Intel CPU): it fails to build stairs.map: something leaks.
But I can reproduce the problem on fstmp.map.

stgatilov

stgatilov

06.12.2018 07:52

administrator   ~0010831

I have committed a supposed fix (svn rev 7788).

It replaces the "approximate rsqrt + NR" magic with an ordinary 1.0f / sqrtf(x) implementation inside idMath::InvSqrt.
The output of the new version is precisely defined by IEEE standard (on any input), so now this function should work exactly the same way on all CPUs.
duzenko

duzenko

06.12.2018 15:58

developer   ~0010836

We now have four inverse square root functions, not counting the crt one

Can we get rid of one or two of them or at least make it clear which one is used for what?
stgatilov

stgatilov

06.12.2018 16:50

administrator   ~0010839

I had the same question when I was implementing SSE versions =)
Here is how I see it.

Every function in idMath is available in three precisions --- that's a matter of uniformity. There are:
1) Ordinary function (InvSqrt / Sqrt) --- full float32 precision.
2) Low-precision one (InvSqrt16 / Sqrt16) --- only float16 = half precision.
3) Double precision one (InvSqrt64 / Sqrt64) --- float64 = double precision.

Which one to use:
a) The CRT version is most likely never used in ID code. In fact, you should not use it either, but if you do, nothing bad will happen =)
b) When you want to use some math function, you have to decide how much precision you need.

In 99.99% cases you need full float32 precision, so you use the version without digits on the end.
In rare cases 16 bits are enough, so you can use 16-bit version (although you don't have to). I cannot see any case when double precision version could be useful, but for some reason ID implemented it too.

Now there is one minor exception: RSqrt is an additional very imprecise version of inverse square root. It is very fast, and sometimes it is enough for your needs.

Summary: Unless you use square root in a tight loop which has bottleneck in arithmetic operations, you should use Sqrt/InvSqrt and other similar functions without suffix. Don't use RSqrt unless you know what you are doing

Issue History

Date Modified Username Field Change
12.08.2018 13:54 Springheel New Issue
26.10.2018 03:41 Abusimplea File Added: fstmp.map
26.10.2018 03:42 Abusimplea Note Added: 0010793
27.10.2018 17:29 duzenko Assigned To => stgatilov
27.10.2018 17:29 duzenko Status new => assigned
27.10.2018 17:32 duzenko Note Added: 0010794
27.10.2018 17:32 duzenko Additional Information Updated View Revisions
28.11.2018 22:01 nbohr1more Note Added: 0010803
03.12.2018 07:17 Judith Note Added: 0010812
05.12.2018 15:10 stgatilov Note Added: 0010821
05.12.2018 16:21 duzenko File Added: stairs.map
05.12.2018 16:23 duzenko Note Added: 0010822
05.12.2018 16:25 duzenko File Added: Untitled.jpg
05.12.2018 16:26 duzenko Note Edited: 0010822 View Revisions
05.12.2018 16:27 stgatilov File Added: stairs_relx64_ryzen.jpg
05.12.2018 16:31 stgatilov Note Added: 0010823
05.12.2018 16:32 stgatilov Note Edited: 0010823 View Revisions
05.12.2018 16:34 stgatilov Note Added: 0010824
05.12.2018 16:34 stgatilov Note Edited: 0010823 View Revisions
05.12.2018 17:11 stgatilov Note Added: 0010825
05.12.2018 17:50 duzenko Note Added: 0010826
06.12.2018 05:22 stgatilov Note Added: 0010830
06.12.2018 05:23 stgatilov Note Edited: 0010830 View Revisions
06.12.2018 07:52 stgatilov Note Added: 0010831
06.12.2018 07:52 stgatilov Status assigned => feedback
06.12.2018 12:28 stgatilov Status feedback => resolved
06.12.2018 12:28 stgatilov Fixed in Version => TDM 2.07
06.12.2018 12:28 stgatilov Resolution open => fixed
06.12.2018 15:58 duzenko Note Added: 0010836
06.12.2018 16:50 stgatilov Note Added: 0010839