From 923ff60d9f4a80a8f80bc3905388296a0a9e7f1c Mon Sep 17 00:00:00 2001 From: David Rose Date: Tue, 23 Oct 2007 00:38:12 +0000 Subject: [PATCH] temp hack fix for released-buffer-cache-size on dx8/9 --- .../glstuff/glGraphicsStateGuardian_src.cxx | 5 +++ panda/src/gobj/preparedGraphicsObjects.cxx | 32 +++++++++++++------ panda/src/gobj/preparedGraphicsObjects.h | 5 +++ 3 files changed, 32 insertions(+), 10 deletions(-) diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index a7b4366648..0635f658f6 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -248,6 +248,11 @@ CLP(GraphicsStateGuardian)(GraphicsPipe *pipe) : GraphicsStateGuardian(CS_yup_right, pipe) { _error_count = 0; + + // Hack. Turn on the flag that we turned off at a higher level, + // since we know this works properly in OpenGL, and we want the + // performance benefit it gives us. + _prepared_objects->_support_released_buffer_cache = true; } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/gobj/preparedGraphicsObjects.cxx b/panda/src/gobj/preparedGraphicsObjects.cxx index 83ea8e39bd..681e9ece1a 100644 --- a/panda/src/gobj/preparedGraphicsObjects.cxx +++ b/panda/src/gobj/preparedGraphicsObjects.cxx @@ -46,6 +46,10 @@ PreparedGraphicsObjects() : _vertex_buffer_cache_size(0), _index_buffer_cache_size(0) { + // GLGSG will turn this flag on. This is a temporary hack to + // disable this feature for DX8/DX9 for now, until we work out the + // fine points of updating the fvf properly. + _support_released_buffer_cache = false; } //////////////////////////////////////////////////////////////////// @@ -758,11 +762,15 @@ release_vertex_buffer(VertexBufferContext *vbc) { bool removed = (_prepared_vertex_buffers.erase(vbc) != 0); nassertv(removed); - cache_unprepared_buffer(vbc, data_size_bytes, usage_hint, - _vertex_buffer_cache, - _vertex_buffer_cache_lru, _vertex_buffer_cache_size, - released_vbuffer_cache_size, - _released_vertex_buffers); + if (_support_released_buffer_cache) { + cache_unprepared_buffer(vbc, data_size_bytes, usage_hint, + _vertex_buffer_cache, + _vertex_buffer_cache_lru, _vertex_buffer_cache_size, + released_vbuffer_cache_size, + _released_vertex_buffers); + } else { + _released_vertex_buffers.insert(vbc); + } } //////////////////////////////////////////////////////////////////// @@ -983,11 +991,15 @@ release_index_buffer(IndexBufferContext *ibc) { bool removed = (_prepared_index_buffers.erase(ibc) != 0); nassertv(removed); - cache_unprepared_buffer(ibc, data_size_bytes, usage_hint, - _index_buffer_cache, - _index_buffer_cache_lru, _index_buffer_cache_size, - released_ibuffer_cache_size, - _released_index_buffers); + if (_support_released_buffer_cache) { + cache_unprepared_buffer(ibc, data_size_bytes, usage_hint, + _index_buffer_cache, + _index_buffer_cache_lru, _index_buffer_cache_size, + released_ibuffer_cache_size, + _released_index_buffers); + } else { + _released_index_buffers.insert(ibc); + } } //////////////////////////////////////////////////////////////////// diff --git a/panda/src/gobj/preparedGraphicsObjects.h b/panda/src/gobj/preparedGraphicsObjects.h index 3a8360c346..ad9b457b08 100644 --- a/panda/src/gobj/preparedGraphicsObjects.h +++ b/panda/src/gobj/preparedGraphicsObjects.h @@ -199,6 +199,11 @@ public: BufferResidencyTracker _vbuffer_residency; BufferResidencyTracker _ibuffer_residency; +public: + // This is only public as a temporary hack. Don't mess with it + // unless you know what you're doing. + bool _support_released_buffer_cache; + private: static int _name_index;