From 125bd4cae51c6deaacd2e90f14931c2052f146ab Mon Sep 17 00:00:00 2001 From: Eric Anholt Date: Wed, 5 Dec 2007 16:57:27 -0800 Subject: Revert "[965] Add missing flagging of new stage programs for updating stage state." I had forgotten part of brw_state_cache.c that made this fix not relevant for master (last_addr comparison and flagging based on cache id). This reverts commit a4642f3d18bdaebaba31e5dee72fe5de9d890ffb. --- src/mesa/drivers/dri/i965/brw_clip.c | 34 +++++++++++++++------------------- src/mesa/drivers/dri/i965/brw_gs.c | 31 ++++++++++++------------------- src/mesa/drivers/dri/i965/brw_sf.c | 32 +++++++++++++------------------- src/mesa/drivers/dri/i965/brw_vs.c | 24 ++++++------------------ src/mesa/drivers/dri/i965/brw_wm.c | 26 +++++++------------------- 5 files changed, 53 insertions(+), 94 deletions(-) (limited to 'src/mesa/drivers') diff --git a/src/mesa/drivers/dri/i965/brw_clip.c b/src/mesa/drivers/dri/i965/brw_clip.c index c548681aca..8287fd9edf 100644 --- a/src/mesa/drivers/dri/i965/brw_clip.c +++ b/src/mesa/drivers/dri/i965/brw_clip.c @@ -128,14 +128,25 @@ static void compile_clip_prog( struct brw_context *brw, &brw->clip.prog_data ); } + +static GLboolean search_cache( struct brw_context *brw, + struct brw_clip_prog_key *key ) +{ + return brw_search_cache(&brw->cache[BRW_CLIP_PROG], + key, sizeof(*key), + &brw->clip.prog_data, + &brw->clip.prog_gs_offset); +} + + + + /* Calculate interpolants for triangle and line rasterization. */ static void upload_clip_prog( struct brw_context *brw ) { GLcontext *ctx = &brw->intel.ctx; struct brw_clip_prog_key key; - struct brw_clip_prog_data *prog_data; - uint32_t offset; memset(&key, 0, sizeof(key)); @@ -241,23 +252,8 @@ static void upload_clip_prog( struct brw_context *brw ) } } - if (brw_search_cache(&brw->cache[BRW_CLIP_PROG], - &key, sizeof(key), - &prog_data, - &offset)) { - if (offset != brw->clip.prog_gs_offset || - !brw->clip.prog_data || - memcmp(prog_data, &brw->clip.prog_data, - sizeof(*brw->clip.prog_data)) != 0) - { - brw->clip.prog_gs_offset = offset; - brw->clip.prog_data = prog_data; - brw->state.dirty.cache |= CACHE_NEW_CLIP_PROG; - } - } else { - compile_clip_prog(brw, &key); - brw->state.dirty.cache |= CACHE_NEW_CLIP_PROG; - } + if (!search_cache(brw, &key)) + compile_clip_prog( brw, &key ); } diff --git a/src/mesa/drivers/dri/i965/brw_gs.c b/src/mesa/drivers/dri/i965/brw_gs.c index fb419367db..73263a5fff 100644 --- a/src/mesa/drivers/dri/i965/brw_gs.c +++ b/src/mesa/drivers/dri/i965/brw_gs.c @@ -128,6 +128,17 @@ static void compile_gs_prog( struct brw_context *brw, &brw->gs.prog_data ); } + +static GLboolean search_cache( struct brw_context *brw, + struct brw_gs_prog_key *key ) +{ + return brw_search_cache(&brw->cache[BRW_GS_PROG], + key, sizeof(*key), + &brw->gs.prog_data, + &brw->gs.prog_gs_offset); +} + + static const GLenum gs_prim[GL_POLYGON+1] = { GL_POINTS, GL_LINES, @@ -176,26 +187,8 @@ static void upload_gs_prog( struct brw_context *brw ) } if (brw->gs.prog_active) { - struct brw_gs_prog_data *prog_data; - uint32_t offset; - - if (brw_search_cache(&brw->cache[BRW_GS_PROG], - &key, sizeof(key), - &prog_data, - &offset)) { - if (offset != brw->gs.prog_gs_offset || - !brw->gs.prog_data || - memcmp(prog_data, &brw->gs.prog_data, - sizeof(*brw->gs.prog_data)) != 0) - { - brw->gs.prog_gs_offset = offset; - brw->gs.prog_data = prog_data; - brw->state.dirty.cache |= CACHE_NEW_GS_PROG; - } - } else { + if (!search_cache(brw, &key)) compile_gs_prog( brw, &key ); - brw->state.dirty.cache |= CACHE_NEW_GS_PROG; - } } } diff --git a/src/mesa/drivers/dri/i965/brw_sf.c b/src/mesa/drivers/dri/i965/brw_sf.c index fd7fb9659f..738ceb0552 100644 --- a/src/mesa/drivers/dri/i965/brw_sf.c +++ b/src/mesa/drivers/dri/i965/brw_sf.c @@ -1,4 +1,3 @@ - /* Copyright (C) Intel Corp. 2006. All Rights Reserved. Intel funded Tungsten Graphics (http://www.tungstengraphics.com) to @@ -126,13 +125,22 @@ static void compile_sf_prog( struct brw_context *brw, &brw->sf.prog_data ); } + +static GLboolean search_cache( struct brw_context *brw, + struct brw_sf_prog_key *key ) +{ + return brw_search_cache(&brw->cache[BRW_SF_PROG], + key, sizeof(*key), + &brw->sf.prog_data, + &brw->sf.prog_gs_offset); +} + + /* Calculate interpolants for triangle and line rasterization. */ static void upload_sf_prog( struct brw_context *brw ) { struct brw_sf_prog_key key; - struct brw_sf_prog_data *prog_data; - uint32_t offset; memset(&key, 0, sizeof(key)); @@ -172,23 +180,9 @@ static void upload_sf_prog( struct brw_context *brw ) if (key.do_twoside_color) key.frontface_ccw = (brw->attribs.Polygon->FrontFace == GL_CCW); - if (brw_search_cache(&brw->cache[BRW_SF_PROG], - &key, sizeof(key), - &prog_data, - &offset)) { - if (offset != brw->sf.prog_gs_offset || - !brw->sf.prog_data || - memcmp(prog_data, &brw->sf.prog_data, - sizeof(*brw->sf.prog_data)) != 0) - { - brw->sf.prog_gs_offset = offset; - brw->sf.prog_data = prog_data; - brw->state.dirty.cache |= CACHE_NEW_SF_PROG; - } - } else { + + if (!search_cache(brw, &key)) compile_sf_prog( brw, &key ); - brw->state.dirty.cache |= CACHE_NEW_SF_PROG; - } } diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c index a889a9900f..e173f6fce3 100644 --- a/src/mesa/drivers/dri/i965/brw_vs.c +++ b/src/mesa/drivers/dri/i965/brw_vs.c @@ -90,8 +90,6 @@ static void brw_upload_vs_prog( struct brw_context *brw ) struct brw_vs_prog_key key; struct brw_vertex_program *vp = (struct brw_vertex_program *)brw->vertex_program; - struct brw_vs_prog_data *prog_data; - uint32_t offset; assert (vp && !vp->program.IsNVProgram); @@ -112,23 +110,13 @@ static void brw_upload_vs_prog( struct brw_context *brw ) /* Make an early check for the key. */ - if (brw_search_cache(&brw->cache[BRW_VS_PROG], + if (brw_search_cache(&brw->cache[BRW_VS_PROG], &key, sizeof(key), - &prog_data, - &offset)) { - if (offset != brw->vs.prog_gs_offset || - !brw->vs.prog_data || - memcmp(prog_data, &brw->vs.prog_data, - sizeof(*brw->vs.prog_data)) != 0) - { - brw->vs.prog_gs_offset = offset; - brw->vs.prog_data = prog_data; - brw->state.dirty.cache |= CACHE_NEW_VS_PROG; - } - } else { - do_vs_prog(brw, vp, &key); - brw->state.dirty.cache |= CACHE_NEW_VS_PROG; - } + &brw->vs.prog_data, + &brw->vs.prog_gs_offset)) + return; + + do_vs_prog(brw, vp, &key); } diff --git a/src/mesa/drivers/dri/i965/brw_wm.c b/src/mesa/drivers/dri/i965/brw_wm.c index b7f027c5d6..2d6249e3b5 100644 --- a/src/mesa/drivers/dri/i965/brw_wm.c +++ b/src/mesa/drivers/dri/i965/brw_wm.c @@ -326,30 +326,18 @@ static void brw_upload_wm_prog( struct brw_context *brw ) struct brw_wm_prog_key key; struct brw_fragment_program *fp = (struct brw_fragment_program *) brw->fragment_program; - struct brw_wm_prog_data *prog_data; - uint32_t offset; - + brw_wm_populate_key(brw, &key); /* Make an early check for the key. */ - if (brw_search_cache(&brw->cache[BRW_WM_PROG], + if (brw_search_cache(&brw->cache[BRW_WM_PROG], &key, sizeof(key), - &prog_data, - &offset)) { - if (offset != brw->wm.prog_gs_offset || - !brw->wm.prog_data || - memcmp(prog_data, &brw->wm.prog_data, - sizeof(*brw->wm.prog_data)) != 0) - { - brw->wm.prog_gs_offset = offset; - brw->wm.prog_data = prog_data; - brw->state.dirty.cache |= CACHE_NEW_WM_PROG; - } - } else { - do_wm_prog(brw, fp, &key); - brw->state.dirty.cache |= CACHE_NEW_WM_PROG; - } + &brw->wm.prog_data, + &brw->wm.prog_gs_offset)) + return; + + do_wm_prog(brw, fp, &key); } -- cgit v1.2.3