Texture Console

From Second Life Wiki
Jump to navigation Jump to search


Decode - Uncompressing a downloaded texture, in SL's case a JPEG2000 texture, into memory. Once it is decoded it will be handed to OpenGL.

Discard Level - A discard level of 0 means the highest available detail version of the texture. Discard level 1 means the second highest detail version, which is 1/2 the size in each dimension (and thus 1/4 the memory footprint in memory)


Texture Console

Note: Unless the scene is *very* simple, this display only shows a tiny fraction of the number of textures. The textures displayed are active textures (i.e. textures that need more data) ordered by priority.

  1. Amount of texture data handed to OpenGL / Maximum amount SecondLife will hand to OpenGL*
  2. Amount of texture data currently bound by OpenGL / Threshold at which we decrease texture detail*
  3. FBO (Needs Details)
  4. Raw Tot. (ND)
  5. Bias. Texture detail multiplier. > 1 indicates that texture detail is being decreased to fit into memory
  6. Cache.
  7. Net Tot Tex. Total size of textures (MB) downloaded over network in this session. Includes both UDP and HTTP transport. Value is updated internally on a 10-second timer and so lags other activity in the console.
  8. Tot Obj. (MB) (ND)
  9. Tot Htp. Total number of HTTP requests issued for texture downloads. Repeated downloads (say, for existing or different discard levels) are counted individually. Retries on connection or HTTP failures were counted in the past. They are not counted currently.
  10. Cread. Count of on-disk texture cache reads requested by texture fetch code.
  11. Cwrite. Count of on-disk texture cache writes requested by texture fetch code.
  12. Rwait. Count of texture fetch requests that went to resource wait state (HTW) because the HTTP library had enough work queued up.
  13. Textures. Number of textures known to the texture management system. These will be in various states of completeness.
  14. Fetch. Number of outstanding texture fetch requests / Number of completed fetch requests awaiting finalization (leading to deletion of the request).
  15. Pkts. Count of UDP packets received containing texture header or image data. / Count of UDP packets received that could not be processed due to some error such as corruption or invalid ordering or no valid request.
  16. Cache R/W. Count of outstanding cache read requests / Count of outstanding cache write requests
  17. LFS. Count of async file operation requests outstanding on the LFS worker thread. LFS shouldn’t be involved in texture operations anymore so probably not interesting.
  18. RAW. Count of instances of LLImageRaw objects currently in the system.
  19. HTP. Count of active HTTP requests issued or queued for texture fetching. Completion will contribute to ‘Tot Htp’ above. These are the requests made available to the lower-level HTTP transport and not the number of concurrent requests (which is limited to eight by default).
  20. DEC. Count of requests outstanding for decoding of texture data.
  21. CRE. (ND)
  22. BW. UDP + HTTP texture bandwidth as consumed / UDP bandwidth limit as configured. Text will change color to yellow or red as configured value is approached and exceeded.
  23. Tex UUID. Fragment of UUID identifying texture. UUIDs will be rendered with varying colors:
    • White = Normal priority image
    • Yellow = Selected image, prioritized
    • Orange = Image under mouse ("hover"), prioritized
    • Magenta = Boosted (prioritized) image
    • Green = UI image
    • Grey = Image not in state machine (hopefully because current discard <= desired discard)
  24. Area. Area on screen. Approximate # of pixels this texture covers on-screen.
  25. DDis(Req). Desired Discard Level (see Discard definition) which is a function of area on screen and importance / Requested Discard Level. This is the client's record of the last discard level requested to the server. This is usually the same as Desired Discard Level, but may be larger if we have stopped requesting the texture because it is out of view (no area) or we have all of its data.
  26. DecodePri(Fetch). Priority for decode of image / Priority as requested for fetching.
  27. Progress Bar. Fills up as the requested texture is downloaded. This is basically a download progress bar for the textures current Desired Discard Level (but will only fill up if the requested discard level is 0). Incremental progress is indicated for UDP requests, HTTP will jump to completion.
  28. pk/max. For UDP, number of packets received (reflected in progress bar) / Max number of packets
  29. State. The texture request's current state in the fetching/decoding state machine. States include:
    • "---" - The texture is not being fetched (hopefully because current discard <= desired discard). If red, invalid state.
    • "INI" - The texture is waiting to be processed by the state machine
    • "DSK" - Reading from local cache (cyan=header, blue=body)
    • "NET" - Indicates the texture is in the UDP request queue, but has not yet been requested from the servers
    • "SIM" - Waiting for UDP packet data from simulator
    • "HTW" - Resource waiting for HTTP resources prior to "HTP" state
    • "REQ" - Preparing to send HTTP request to grid
    • "HTP" - Waiting for HTTP response data
    • "DEC" - Decoding Image
    • "WRT" - Writing image to local cache
    • "END" - Waiting for a request for more data or deletion (after timeout)
    • "CRE" - Texture needs to be created
    • "FUL/BAD/MIS" - Debug, shouldn't happen (needs create, fully loaded, bad, missing)
  30. Pkt. Handling information for recently-received data (mostly UDP-oriented):
    • White = packet received from simulator
    • Green = data requested from simulator
    • Yellow = texture processed by state machine
  31. Bnd. Binding of fetched data to OpenGL:
    • Purple = Texture is currently bound (i.e. being rendered)
  32. W x H. Dimensions of image.
  33. (Dis). Actual Discarded level. This should eventually (after textures are downloaded and decoded) be the same as Desired Discard Level (DDis).
  34. Mem. Amount of memory consumed by the texture.
  35. Mesh Reqs(Tot/Htp/Big). Mesh status line starting with counts of mesh requests issued: total (pre-cache), 'normal' HTTP and 'Big' (over 2MB) HTTP. A mesh request will typically be for a part of a full mesh: a single level-of-detail or perhaps a header. A request may be satisfied by the mesh cache. If not in the cache, then an HTTP request is issued. That request will be either a 'normal' or a 'big' request.
  36. Rtr/Err. Retries issued and final errors received for HTTP mesh requests.
  37. Cread/Cwrite. Mesh cache read and write operations. 'Cwrite' will approximately follow 'Htp' + 'Big'. 'Cread' gives an indication of the effectiveness of the local mesh cache.
  38. Low/At/High. The mesh fetching code maintains a pool of requests. This code attempts to keep the pool filled between the 'Low' and 'High' water levels shown here. The current pool level is given by 'At' and the pool is refilled when it falls below 'Low'.

Some patterns to look for when searching for texture fetch bugs:

1. If Cread is growing quickly while Cwrite and 'Tot Htp' are static or growing slowly then the texture cache is populated and being used.

2. If Cwrite and 'Tot Htp' grow at about the same rate as Cread, then either the texture cache is cold or it isn't working.

3. If 'Tot Htp' is growing faster than 'Cwrite', then we're doing unnecessary fetches for assets for some reason.


  • 'Texture Memory' or 'OpenGL Memory' refers to data passed to the OpenGL drivers. Depending upon the graphics card and driver, this memory may be on the graphics card, in system memory, or (likely) both.