duzenko Posted November 2, 2017 Report Posted November 2, 2017 Yeah, it seems to be working. I pushed it to trunk; let me know if you find any problems.Errors in the frontend are OK. The problems are with the rest of the code.E.g. calling common->Error from idImage::ActuallyLoadImage results in an Unhandled exception...Maybe check current thread != main thread? 1 Quote
cabalistic Posted November 2, 2017 Author Report Posted November 2, 2017 Ah, hm, oversight on my end. I didn't think about the parts of the code that run outside of the frontend/backend split. Unfortunately, it's not as simple as checking the thread. The backend needs special logic, too, if the frontend is running. Simplest fix would be a boolean flag that gets set while frontend/backend are running. It's not exactly elegant, but it should do the trick. 1 Quote
duzenko Posted November 3, 2017 Report Posted November 3, 2017 Should be fixed.All looks good now Quote
duzenko Posted November 10, 2017 Report Posted November 10, 2017 Just curious: are you still CPU-limited on your system? And with the new shadow maps option on? (r_shadows 2) 1 Quote
cabalistic Posted November 11, 2017 Author Report Posted November 11, 2017 I just tested a few scenes, GPU ultilization barely surpasses 40% anywhere, as measured by MSI Afterburner. And when FPS drop, then so does GPU utilization. So yeah, I think this is still strongly CPU bound. Enabling shadow maps doesn't really make a difference in that regard, although overall performance is slightly worse. 1 Quote
duzenko Posted November 11, 2017 Report Posted November 11, 2017 I just tested a few scenes, GPU ultilization barely surpasses 40% anywhere, as measured by MSI Afterburner. And when FPS drop, then so does GPU utilization. So yeah, I think this is still strongly CPU bound. Enabling shadow maps doesn't really make a difference in that regard, although overall performance is slightly worse.Try quick save\load after switching to shadow maps to clear the shadow tri's 1 Quote
cabalistic Posted November 11, 2017 Author Report Posted November 11, 2017 I had r_shadows 2 in my autoexec on start. That should do it, shouldn't it? 1 Quote
duzenko Posted November 12, 2017 Report Posted November 12, 2017 I had r_shadows 2 in my autoexec on start. That should do it, shouldn't it?I guess, but then you would have to compare the fps from previous run which is tedious and not exact 1 Quote
cabalistic Posted November 12, 2017 Author Report Posted November 12, 2017 True, but my two go-to scenes are clear enough.Btw, I have experienced a general fps drop since my last svn update. The opening scene in Briarwood Manor e.g. dropped from about 60fps to 45-53 fps (depending on settings). I'm not sure of the cause, yet. A quick checkout of an older revision suggests it's not a code change. So perhaps assets, or something messed up my local config. Either way, in that scene, it's currently like this:r_useGLSL 1 costs 2-3 fps.r_shadows makes fairly little difference, I would say 1-2 fps drop with shadow maps. But even disabling shadows is not that much of a difference. Other scenes can vary slightly. I can make a more thorough analysis if you think it would help you. But either way, the engine is still CPU bound. 2 Quote
duzenko Posted November 12, 2017 Report Posted November 12, 2017 Briarwood Manor is known to be slow due to unnecessary high-poly bushes.Anyone can make a map that is too slow. Goes without saying that all advice on improving performance/cpu bottleneck is appreciated.I don't use that particular map for performance testing for the reason above but e.g. Rightful Property bottleneck is AI calculation. Ideally we might want a separate thread for that but my last-year attempts crashed because AFAIR collision manager was not thread safe. Quote
cabalistic Posted November 12, 2017 Author Report Posted November 12, 2017 If it's high-poly bushes, it should tax the graphics card, but the bottleneck is still CPU. Unless it uploads all those polygons every frame... Either way, I also tested with the standard first mission, and the results are similar. Especially when you look down from the rooftops where you encounter the first two watchmen. Quote
duzenko Posted November 12, 2017 Report Posted November 12, 2017 If it's high-poly bushes, it should tax the graphics card, but the bottleneck is still CPU. Unless it uploads all those polygons every frame... Either way, I also tested with the standard first mission, and the results are similar. Especially when you look down from the rooftops where you encounter the first two watchmen.First mission be the New Job? From your description is sounds like model skinning might be the bottleneck. Quote
duzenko Posted November 19, 2017 Report Posted November 19, 2017 Problem: idRenderSystemLocal.renderCrops not thread safe.Both frontend and backend may want to change it.Frontend uses it for scissoring, etc.Backend sets it to FBO internal resolution and then back to window size. 1 Quote
cabalistic Posted November 19, 2017 Author Report Posted November 19, 2017 Well, then we need to introduce separate renderCrops for the backend. 1 Quote
duzenko Posted November 19, 2017 Report Posted November 19, 2017 Well, then we need to introduce separate renderCrops for the backend.Maybe I am just doing it wrong.They kinda need to be the same size, but some "external" code does not know about FBO so screen and FBO resolutions conflict.Probably a false alarm. 1 Quote
duzenko Posted November 25, 2017 Report Posted November 25, 2017 I am really interested about your opinion of the frontendGeo/backendGeo pair.I am trying to move some vertex cache uploads from frontend to backend because I suspect that frontend is often blocked by video driver at that point.Now the problem with that is frontendGeo can't be touched by backend and backendGeo does not exist when frontend is currently uploading vertex data for the frontendGeo.Frontend then does a memcpy frontendGeo->backendGeo and it seems to me that frontendGeo is just a pointer to model tris.Here's my question: can we do a memcpy on the model tris -> frontendGeo step and just have the backendGeo pointing to frontendGeo? This way we probably don't need backendGeo at all?It should allow me to queue vertex uploads from the frontend and actually do them in backend.Please see my last commit in trunk svn where I moved the memcpy to frontendGeo and it seems to work in a simple scene. 1 Quote
duzenko Posted November 25, 2017 Report Posted November 25, 2017 Revision: 7311 drops backendGeo in favor of ambientCache copy integrated in frontendGeo 1 Quote
nbohr1more Posted November 26, 2017 Report Posted November 26, 2017 Crashing with a bad vertex cache position error for mission Closemouthed Shadows. Edit: Reverting to rev 7310 fixes the issue. 1 Quote Please visit TDM's IndieDB site and help promote the mod: http://www.indiedb.com/mods/the-dark-mod (Yeah, shameless promotion... but traffic is traffic folks...)
duzenko Posted November 26, 2017 Report Posted November 26, 2017 Crashing with a bad vertex cache position error for mission Closemouthed Shadows. Edit: Reverting to rev 7310 fixes the issue.Can't repeat.Does it happen immediately on map load? Please attach your .cfgDoes r_ignore 1 before map load fixes it? 1 Quote
cabalistic Posted November 26, 2017 Author Report Posted November 26, 2017 Hm, I'm not sure doing vertex uploads on the backend is a good idea. At the very least, it will make the move to the BFG-style vertex cache virtually impossible. If you see performance issues with the current upload, you might want to try reverting the switch to glMapBuffer. In the current form I think it is inferior; it's only an advantage if the full buffer can be mapped for the frontend in advance (like BFG does it). As far as frontendGeo/backendGeo goes, there's really only a part of the structure that needed to be replicated. But it was easier/quicker to just copy the whole structure. I don't remember the details, though, but there is a definitive race condition involved here, possibly what nbohr1more is seeing. So be careful. 1 Quote
nbohr1more Posted November 26, 2017 Report Posted November 26, 2017 Can't repeat.Does it happen immediately on map load? Please attach your .cfgDoes r_ignore 1 before map load fixes it?It happens right when the map finishes loading before the click to start prompt. idVertexCache::Position: bad vertexCache_t 0 r_ignore 1 got me a little further to actually see in-game but then bombed out with idVertexCache::Position: bad vertexCache_t 204019972 I tried r_useMapBufferRange 1 and 0I tried disabling SMP and Capping FPS.I tried using Shadow Maps. Config: unbindall bind "ENTER" "_impulse51" bind "ESCAPE" "togglemenu" bind "SPACE" "_moveup" bind "-" "_impulse50" bind "0" "_impulse10" bind "1" "_impulse1" bind "2" "_impulse2" bind "3" "_impulse3" bind "4" "_impulse4" bind "5" "_impulse5" bind "6" "_impulse6" bind "7" "_impulse7" bind "8" "_impulse8" bind "9" "_impulse9" bind "=" "_impulse49" bind "[" "_impulse48" bind "\" "_mlook" bind "]" "_impulse47" bind "`" "_impulse0" bind "a" "_moveleft" bind "b" "_impulse27" bind "c" "_impulse24" bind "d" "_moveright" bind "e" "_impulse46" bind "f" "_impulse44" bind "g" "inventory_use '#str_02396'" bind "h" "envshot example 256" bind "i" "inventory_cycle_group '#str_02391'" bind "k" "inventory_cycle_group '#str_02392'" bind "l" "inventory_use '#str_02395'" bind "m" "inventory_cycle_maps" bind "o" "_impulse19" bind "p" "inventory_cycle_group '#str_02389'" bind "q" "_impulse45" bind "r" "_impulse52" bind "s" "_back" bind "t" "clientMessageMode" bind "u" "_impulse30" bind "w" "_forward" bind "x" "_impulse23" bind "y" "clientMessageMode 1" bind "z" "_zoom" bind "BACKSPACE" "clientDropWeapon" bind "PAUSE" "pause" bind "UPARROW" "_forward" bind "DOWNARROW" "_back" bind "LEFTARROW" "_left" bind "RIGHTARROW" "_right" bind "ALT" "_strafe" bind "CTRL" "toggle tdm_toggle_creep 0 1" bind "SHIFT" "_speed" bind "DEL" "_lookdown" bind "PGDN" "_lookup" bind "END" "_impulse18" bind "F1" "_impulse28" bind "F2" "_impulse29" bind "F3" "_impulse17" bind "F5" "savegame quick" bind "F6" "_impulse20" bind "F7" "_impulse22" bind "F9" "loadgame quick" bind "F12" "screenshot" bind "MOUSE1" "_attack" bind "MOUSE2" "_impulse41" bind "MOUSE3" "_zoom" bind "MWHEELDOWN" "_impulse15" bind "MWHEELUP" "_impulse14" seta gui_mediumFontLimit "0.30" seta gui_smallFontLimit "0.15" seta radiant_entityMode "0" seta net_socksPassword "" seta net_socksUsername "" seta net_socksPort "1080" seta net_socksServer "" seta net_socksEnabled "0" seta win_ypos "0" seta win_xpos "0" seta sys_lang "english" seta s_decompressionLimit "6" seta s_useEAXReverb "1" seta s_numberOfSpeakers "2" seta s_doorDistanceAdd "450" seta s_globalFraction "0.8" seta s_subFraction "0.75" seta s_playDefaultSound "1" seta s_volume_dB "-1.26984" seta s_meterTopTime "2000" seta s_reverse "0" seta s_spatializationDecay "2" seta s_maxSoundsPerShader "0" seta s_device "default" seta s_diffractionMax "30" seta r_useMapBufferRange "0" seta r_cinematic_legacyRoq "0" seta r_fboResolution "1.0" seta r_fboSharedColor "0" seta r_shadowMapSize "2048" seta r_fboDepthBits "24" seta r_fboColorBits "32" seta r_useGLSL "1" seta r_useFBO "1" seta r_useBfgPortalCulling "0" seta r_postprocess_bloomKernelSize "2" seta r_postprocess_bloomIntensity "0.94482" seta r_postprocess "1" seta r_screenshot_format "png" seta r_debugArrowStep "120" seta r_debugLineWidth "1" seta r_debugLineDepthTest "0" seta com_smp "1" seta r_forceLoadImages "0" seta r_testARBProgram "1" seta r_shadows "1" seta r_shadowPolygonFactor "0" seta r_shadowPolygonOffset "-1" seta r_offsetunits "-0.1" seta r_offsetfactor "-2" seta r_clear "2" seta r_useSoftParticles "1" seta r_skipDepthCapture "0" seta r_skipBump "0" seta r_skipSpecular "0" seta r_skipNewAmbient "0" seta r_brightness "1.007544" seta r_gamma "1.047619" seta r_swapInterval "0" seta r_useIndexBuffers "0" seta r_softShadowsRadius "1.5" seta r_softShadowsQuality "48" seta r_customHeight "768" seta r_customWidth "1360" seta r_fullscreen "1" seta r_mode "-1" seta r_multiSamples "0" seta image_mipmapMode "2" seta image_blockChecksum "0" seta image_downSizeLimit "512" seta image_ignoreHighQuality "0" seta image_downSizeBumpLimit "512" seta image_downSizeSpecularLimit "128" seta image_downSizeBump "0" seta image_downSizeSpecular "0" seta image_useCache "0" seta image_cacheMegs "128" seta image_cacheMinK "2048" seta image_usePrecompressedTextures "1" seta image_useNormalCompression "1" seta image_useAllFormats "1" seta image_useCompression "1" seta image_preload "1" seta image_roundDown "0" seta image_forceDownSize "0" seta image_downSize "0" seta image_lodbias "0" seta image_anisotropy "8" seta image_filter "GL_LINEAR_MIPMAP_LINEAR" seta r_cinematic_checkImmediately "0" seta r_cinematic_log_flush "0" seta r_cinematic_log_ffmpeg "0" seta r_cinematic_log "0" seta net_serverDlTable "" seta net_serverDlBaseURL "" seta net_serverDownload "0" seta mod_validSkins "skins/characters/player/marine_mp;skins/characters/player/marine_mp_green;skins/characters/player/marine_mp_blue;skins/characters/player/marine_mp_red;skins/characters/player/marine_mp_yellow" seta g_mapCycle "mapcycle" seta g_voteFlags "0" seta g_gameReviewPause "10" seta g_countDown "10" seta g_password "" seta g_testModelHeadJoint "Spine2" seta g_testModelHead "atdm:ai_head_citywatch" seta g_fov "90" seta g_showBrass "1" seta g_showProjectilePct "0" seta g_showHud "1" seta g_showPlayerShadow "0" seta pm_walkspeed "70" seta g_enablePortalSky "1" seta g_showcamerainfo "0" seta g_damageScale "1" seta g_decals "1" seta g_doubleVision "1" seta g_bloodEffects "1" seta g_projectileLights "1" seta g_muzzleFlash "1" seta gui_CenterY "0.5" seta gui_CenterX "0.5" seta gui_Height "1.0" seta gui_Width "1.0" seta r_fovRatio "0" seta r_aspectRatio "4" seta ui_showGun "1" seta ui_autoSwitch "1" seta ui_team "Red" seta ui_skin "skins/characters/player/marine_mp" seta ui_name "Player" seta si_serverURL "" seta si_spectators "1" seta si_usePass "0" seta si_warmup "0" seta si_teamDamage "0" seta si_timeLimit "10" seta si_maxPlayers "4" seta si_map "game/mp/d3dm1" seta si_gameType "singleplayer" seta si_name "DOOM Server" seta tdm_lod_bias "1.0" seta tdm_voice_from_off_volume "-2.539682" seta tdm_voice_player_volume "-4.126984" seta tdm_music_volume "-20.317461" seta tdm_ambient_method "0" seta tdm_door_auto_open_on_unlock "1" seta tdm_bow_aimer "0" seta tdm_lp_debug_hud "0" seta tdm_lp_pawlow "0" seta tdm_lp_randomize "1" seta tdm_lp_auto_pick "0" seta tdm_lp_autopick_attempts "3" seta tdm_lp_pick_timeout "500" seta tdm_lp_sample_delay "10" seta tdm_lp_base_count "5" seta tdm_empty_model "models/darkmod/misc/system/empty.lwo" seta tdm_lg_split "1" seta tdm_lg_model "models/darkmod/misc/system/lightgem.lwo" seta tdm_lg_weak "0" seta tdm_lg_interleave_min "1" seta tdm_lg_interleave "3" seta pm_rope_snd_rep_dist "32" seta pm_min_stepsound_interval "200" seta pm_stepvol_crouch_creep "-7" seta pm_stepvol_crouch_run "4" seta pm_stepvol_crouch_walk "-2" seta pm_stepvol_creep "-5" seta pm_stepvol_run "8" seta pm_stepvol_walk "0" seta tdm_underwater_blur "3" seta tdm_rope_pull_force_factor "140" seta gui_objectiveTextSize "0.801687" seta gui_barSize "1.290855" seta gui_lightgemSize "0.981349" seta gui_bigTextSize "0.742308" seta gui_smallTextSize "0.816478" seta gui_iconSize "1.189734" seta tdm_inv_use_visual_feedback "1" seta tdm_door_control "0" seta tdm_inv_use_on_frob "1" seta tdm_inv_loot_sound "frob_loot" seta tdm_inv_hud_pickupmessages "1" seta tdm_hud_hide_lightgem "0" seta tdm_hud_opacity "0.293259" seta tdm_grabber_reverse_control "0" seta tdm_bounce_sound_min_vel "80" seta tdm_bounce_sound_max_vel "400" seta tdm_throw_max_vel "900" seta tdm_throw_time "1200" seta tdm_throw_max "3500" seta tdm_throw_min "600" seta tdm_phys_show_momentum "0" seta tdm_ai_hearing_hardcore "1.2" seta tdm_ai_hearing_challenging "1.0" seta tdm_ai_hearing_forgiving "0.8" seta tdm_ai_hearing_nearly_deaf "0.6" seta tdm_ai_hearing "2" seta tdm_ai_vision_hardcore "1.5" seta tdm_ai_vision_challenging "1.2" seta tdm_ai_vision_forgiving "0.7" seta tdm_ai_vision_nearly_blind "0.1" seta tdm_ai_vision "1" seta tdm_melee_difficulty "normal" seta tdm_melee_max_particles "10" seta tdm_melee_forbid_auto_parry "0" seta tdm_melee_auto_parry "0" seta tdm_melee_invert_parry "0" seta tdm_melee_invert_attack "0" seta tdm_melee_mouse_thresh_ "0" seta tdm_dragged_item_highlight "1" seta tdm_drag_encumber_max "0.4" seta tdm_drag_encumber_maxmass "55" seta tdm_drag_encumber_minmass "10" seta tdm_drag_jump_masslimit "20" seta tdm_drag_af_free "0" seta tdm_drag_af_ground_timer "800" seta tdm_drag_damping_af "0.4" seta tdm_drag_damping "0.0" seta tdm_drag_stuck_dist "38.0" seta tdm_drag_force_max "100000" seta tdm_drag_limit_force "1" seta tdm_collision_damage_scale_horiz "0.5" seta tdm_collision_damage_scale_vert "1" seta tdm_frob_fadetime "100" seta tdm_frob_width "10.0" seta tdm_frob_distance_default "63" seta pm_lean_toggle "0" seta pm_lean_door_bounds_exp "8.0" seta pm_lean_door_max "40" seta pm_lean_door_increments "10" seta pm_lean_to_valid_increments "25" seta pm_lean_forward_stretch "15" seta pm_lean_forward_height "0.4" seta pm_lean_forward_time "400.0" seta pm_lean_forward_angle "2" seta pm_lean_stretch "2" seta pm_lean_height "0.4" seta pm_lean_time "400.0" seta pm_lean_angle "15.0" seta tdm_reattach_delay "100" seta tdm_crouch_toggle_hold_time "400" seta tdm_toggle_crouch "1" seta tdm_footfall_sounds_movetype_specific "1" seta pm_mantle_minflatness "0.707" seta pm_mantle_height "0.2" seta pm_mantle_reach "0.5" seta pm_weightmod "1" seta pm_push_max_mass "200" seta pm_push_heavy_threshold "0.15" seta pm_push_accel_time "1000" seta pm_push_start_delay "1000" seta pm_push_maximpulse "300" seta pm_pushmod "0.15" seta pm_max_swimspeed_mod "1.4" seta pm_crouchmod "0.54" seta pm_creepmod "0.44" seta pm_runmod "2.12" seta tdm_savegame_compress "1" seta tdm_force_savegame_load "0" seta tdm_mainmenu_confirmquit "0" seta tdm_debug_aastype "aas32" seta tdm_allow_http_access "1" seta tdm_proxy_pass "" seta tdm_proxy_user "" seta tdm_proxy "" seta tdm_fm_restart_delay "0" seta tdm_default_relations_def "atdm:team_relations_default" seta tdm_show_trainer_messages "1" seta tdm_menu_music "1" seta tdm_wideScreenMode "13" seta tdm_ai_show_aasfuncobstacle_state "0" seta tdm_show_health "0" seta tdm_ai_debug_greetings "0" seta tdm_ai_debug_transition_barks "0" seta tdm_ai_opt_nolipsync "0" seta tdm_ai_opt_update_enemypos_interleave "48" seta tdm_ai_opt_interleavethinkframes "0" seta tdm_ai_opt_interleavethinkskipPVS "0" seta tdm_ai_opt_interleavethinkmaxdist "0" seta tdm_ai_opt_interleavethinkmindist "0" seta tdm_ai_search_type "4" seta tdm_ai_visdist_show "0.0" seta tdm_ai_search_show "0.0" seta tdm_showko "0" seta tdm_showsprop_radius "0" seta tdm_showsprop "0" seta tdm_spr_debug "0" seta tdm_sndprop_disable "0" seta tdm_ai_acuity_susp "1.2" seta tdm_ai_acuity_L5 "1.5" seta tdm_ai_acuity_L4 "1.3" seta tdm_ai_acuity_L3 "1.1" seta tdm_ai_show_conversationstate "0" seta tdm_ai_show_enemy_visibility "0" seta tdm_ai_sight_scale "1000.0" seta tdm_ai_sight_thresh "1.0" seta tdm_ai_showelevator "0" seta tdm_ai_showdoor "0" seta tdm_ai_debug_blocked "0" seta tdm_ai_showAASarea "0" seta tdm_ai_showgoalpos "0" seta tdm_ai_showdest "0" seta tdm_ai_showalert "0" seta tdm_ai_showtasks "0" seta tdm_ai_showanimstate "0" seta tdm_ai_showko "0" seta tdm_ai_showfov "0" seta tdm_ai_debug "0" seta tdm_ai_bumpobject_impulse "250" seta tdm_ai_tact "20.0" seta tdm_ai_sight_combat_cutoff "20.0" seta tdm_ai_sightmin "15.0" seta tdm_ai_sightmax "40.0" seta tdm_ai_sight_mag "1.0" seta tdm_ai_sight_prob "0.7" seta tdm_ai_showname "0" seta tdm_ai_showbark "0" seta tdm_ai_sndvol "0.0" seta tdm_player_wait_until_ready "1" seta m_strafeSmooth "4" seta m_smooth "3" seta m_strafeScale "6.25" seta m_yaw "0.022" seta m_pitch "0.022" seta sensitivity "8.415848" seta in_toggleZoom "0" seta in_toggleCrouch "0" seta in_toggleRun "0" seta in_alwaysRun "0" seta in_freeLook "1" seta in_anglespeedkey "1.5" seta in_pitchspeed "140" seta in_yawspeed "140" seta gui_configServerRate "0" seta com_savegame_preview_format "jpg" seta com_numQuickSaves "2" seta com_guid "" seta com_fixedTic "1" seta com_preloadDemos "0" seta com_compressDemos "1" seta com_product_lang_ext "1" seta logFile "0" seta com_showFPS "1" seta com_purgeAll "0" 1 Quote Please visit TDM's IndieDB site and help promote the mod: http://www.indiedb.com/mods/the-dark-mod (Yeah, shameless promotion... but traffic is traffic folks...)
cabalistic Posted November 26, 2017 Author Report Posted November 26, 2017 I'm reasonably certain that's the exact problem why I introduced the frontendGeo/backendGeo split in the first place. 1 Quote
duzenko Posted November 26, 2017 Report Posted November 26, 2017 It happens right when the map finishes loading before the click to start prompt. idVertexCache::Position: bad vertexCache_t 0 r_ignore 1 got me a little further to actually see in-game but then bombed out with idVertexCache::Position: bad vertexCache_t 204019972 I tried r_useMapBufferRange 1 and 0I tried disabling SMP and Capping FPS.I tried using Shadow Maps. Config: I see - it's the lightgem.Svn rev 7312 should fix that. Hm, I'm not sure doing vertex uploads on the backend is a good idea. At the very least, it will make the move to the BFG-style vertex cache virtually impossible. If you see performance issues with the current upload, you might want to try reverting the switch to glMapBuffer. In the current form I think it is inferior; it's only an advantage if the full buffer can be mapped for the frontend in advance (like BFG does it). As far as frontendGeo/backendGeo goes, there's really only a part of the structure that needed to be replicated. But it was easier/quicker to just copy the whole structure. I don't remember the details, though, but there is a definitive race condition involved here, possibly what nbohr1more is seeing. So be careful.How are things with BFG-style vertex cache anyway? Been quiet on that front for a while. I have no idea how to approach it with this linked list that controls it.However we all know that current version is cpu-limited (read frontend limited). I'm just doing what I can to lift the weight off frontend. We can certainly not control video driver when it comes to vertex uploads so our only options are map entire VB to CPU address space at frame start or move vertex uploads to backend. I'm merely doing the one I know how to do. I wish I knew how to do mapping the right way but I don't. I can't see any fps gain so far but it paves way to worker jobs for e.g. tangent derive, etc. (Yes, I know we'd be better off with GPU skinning, but again I don't know how to approach that ATM). EDITThere is of course an option of moving vertex uploads to yet another thread along with derive tangents, etc.I kinda like that even more because it's easier to control a single thread than N workers.Back to benchmark I can see CPU mostly sitting in shadow calc (the open space in Rightful Property). 1 Quote
nbohr1more Posted November 27, 2017 Report Posted November 27, 2017 Crash is resolved No performance benefits noticed in any of the pathological scenes though. I'm probably less draw batch bound than just plain CPU bound on the skinning calcs? I didn't test with shadow maps yet but I don't expect the story to change there from my previous observations. Edit: r_shadows 2 (shadow maps) == crash: idVertexCache::Position: bad vertexCache_t 0 Quote Please visit TDM's IndieDB site and help promote the mod: http://www.indiedb.com/mods/the-dark-mod (Yeah, shameless promotion... but traffic is traffic folks...)
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.