prevent run_arb_vertex_program from running tnl programs unless ctx->_MaintainTnlProgram is set
This commit is contained in:
@@ -48,6 +48,7 @@ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
#include "tnl/tnl.h"
|
||||
#include "tnl/t_pipeline.h"
|
||||
#include "tnl/t_vp_build.h"
|
||||
|
||||
#include "drivers/common/driverfuncs.h"
|
||||
|
||||
@@ -274,9 +275,6 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
|
||||
ctx->Const.MaxLineWidth = R300_LINESIZE_MAX;
|
||||
ctx->Const.MaxLineWidthAA = R300_LINESIZE_MAX;
|
||||
|
||||
if (hw_tcl_on)
|
||||
ctx->_MaintainTnlProgram = GL_TRUE;
|
||||
|
||||
#ifdef USER_BUFFERS
|
||||
/* Needs further modifications */
|
||||
#if 0
|
||||
@@ -325,6 +323,7 @@ GLboolean r300CreateContext(const __GLcontextModes * glVisual,
|
||||
ctx->Const.FragmentProgram.MaxNativeInstructions = PFS_MAX_ALU_INST+PFS_MAX_TEX_INST;
|
||||
ctx->Const.FragmentProgram.MaxNativeTexIndirections = PFS_MAX_TEX_INDIRECT;
|
||||
ctx->Const.FragmentProgram.MaxNativeAddressRegs = 0; /* and these are?? */
|
||||
_tnl_ProgramCacheInit(ctx);
|
||||
ctx->_MaintainTexEnvProgram = GL_TRUE;
|
||||
|
||||
driInitExtensions(ctx, card_extensions, GL_TRUE);
|
||||
@@ -454,6 +453,7 @@ void r300DestroyContext(__DRIcontextPrivate * driContextPriv)
|
||||
|
||||
release_texture_heaps = (r300->radeon.glCtx->Shared->RefCount == 1);
|
||||
_swsetup_DestroyContext(r300->radeon.glCtx);
|
||||
_tnl_ProgramCacheDestroy(r300->radeon.glCtx);
|
||||
_tnl_DestroyContext(r300->radeon.glCtx);
|
||||
_ac_DestroyContext(r300->radeon.glCtx);
|
||||
_swrast_DestroyContext(r300->radeon.glCtx);
|
||||
|
@@ -1678,10 +1678,6 @@ void r300UpdateShaders(r300ContextPtr rmesa)
|
||||
|
||||
ctx = rmesa->radeon.glCtx;
|
||||
|
||||
/* Disable tnl programs when doing software vertex programs.
|
||||
I can only hope this actually disables it at the right time. */
|
||||
ctx->_MaintainTnlProgram = hw_tcl_on;
|
||||
|
||||
if (rmesa->NewGLState && hw_tcl_on) {
|
||||
rmesa->NewGLState = 0;
|
||||
|
||||
|
@@ -87,14 +87,7 @@ _tnl_CreateContext( GLcontext *ctx )
|
||||
_tnl_vtx_init( ctx );
|
||||
|
||||
if (ctx->_MaintainTnlProgram) {
|
||||
tnl->vp_cache = (struct tnl_cache *) MALLOC(sizeof(*tnl->vp_cache));
|
||||
tnl->vp_cache->size = 5;
|
||||
tnl->vp_cache->n_items = 0;
|
||||
tnl->vp_cache->items = (struct tnl_cache_item**)
|
||||
_mesa_malloc(tnl->vp_cache->size * sizeof(*tnl->vp_cache->items));
|
||||
_mesa_memset(tnl->vp_cache->items, 0, tnl->vp_cache->size *
|
||||
sizeof(*tnl->vp_cache->items));
|
||||
|
||||
_tnl_ProgramCacheInit( ctx );
|
||||
_tnl_install_pipeline( ctx, _tnl_vp_pipeline );
|
||||
} else {
|
||||
_tnl_install_pipeline( ctx, _tnl_default_pipeline );
|
||||
|
@@ -1237,7 +1237,10 @@ run_arb_vertex_program(GLcontext *ctx, struct tnl_pipeline_stage *stage)
|
||||
if (ctx->ShaderObjects._VertexShaderPresent)
|
||||
return GL_TRUE;
|
||||
|
||||
program = (ctx->VertexProgram._Enabled ? ctx->VertexProgram.Current : ctx->_TnlProgram);
|
||||
program = (ctx->VertexProgram._Enabled ? ctx->VertexProgram.Current : 0);
|
||||
if (!program && ctx->_MaintainTnlProgram) {
|
||||
program = ctx->_TnlProgram;
|
||||
}
|
||||
if (!program || program->IsNVProgram)
|
||||
return GL_TRUE;
|
||||
|
||||
|
@@ -1544,6 +1544,16 @@ void _tnl_UpdateFixedFunctionProgram( GLcontext *ctx )
|
||||
ctx->VertexProgram._Current);
|
||||
}
|
||||
|
||||
void _tnl_ProgramCacheInit( GLcontext *ctx )
|
||||
{
|
||||
TNLcontext *tnl = TNL_CONTEXT(ctx);
|
||||
|
||||
tnl->vp_cache = (struct tnl_cache *) MALLOC(sizeof(*tnl->vp_cache));
|
||||
tnl->vp_cache->size = 17;
|
||||
tnl->vp_cache->n_items = 0;
|
||||
tnl->vp_cache->items = (struct tnl_cache_item**)
|
||||
_mesa_calloc(tnl->vp_cache->size * sizeof(*tnl->vp_cache->items));
|
||||
}
|
||||
|
||||
void _tnl_ProgramCacheDestroy( GLcontext *ctx )
|
||||
{
|
||||
|
@@ -30,6 +30,7 @@
|
||||
|
||||
extern void _tnl_UpdateFixedFunctionProgram( GLcontext *ctx );
|
||||
|
||||
extern void _tnl_ProgramCacheInit( GLcontext *ctx );
|
||||
extern void _tnl_ProgramCacheDestroy( GLcontext *ctx );
|
||||
|
||||
#endif
|
||||
|
Reference in New Issue
Block a user