r300g: fix cbzb clears when hyperz is off

This commit is contained in:
Marek Olšák 2010-08-07 01:59:31 +02:00
parent a838cee6bc
commit ab0a3f30b8
5 changed files with 11 additions and 10 deletions

View File

@ -44,8 +44,7 @@ static void r300_flush(struct pipe_context* pipe,
u_upload_flush(r300->upload_ib);
if (r300->dirty_hw) {
if (r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
r300_emit_hyperz_end(r300);
r300_emit_hyperz_end(r300);
r300_emit_query_end(r300);
r300->flush_counter++;

View File

@ -21,12 +21,14 @@
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
* USE OR OTHER DEALINGS IN THE SOFTWARE. */
#include "util/u_format.h"
#include "util/u_mm.h"
#include "r300_context.h"
#include "r300_hyperz.h"
#include "r300_reg.h"
#include "r300_fs.h"
#include "r300_winsys.h"
#include "util/u_format.h"
#include "util/u_mm.h"
/*
HiZ rules - taken from various docs
@ -138,6 +140,9 @@ static void r300_update_hyperz(struct r300_context* r300)
return;
}
if (!r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
return;
/* Zbuffer compression. */
if (r300->z_compression) {
z->zb_bw_cntl |= R300_RD_COMP_ENABLE;

View File

@ -223,8 +223,7 @@ static void r300_prepare_for_rendering(struct r300_context *r300,
/* Emitted in flush. */
end_dwords += 26; /* emit_query_end */
if (r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
end_dwords += r300->hyperz_state.size + 2; /* emit_hyperz_end + zcache flush */
end_dwords += r300->hyperz_state.size + 2; /* emit_hyperz_end + zcache flush */
cs_dwords += end_dwords;

View File

@ -689,8 +689,7 @@ void r300_mark_fb_state_dirty(struct r300_context *r300,
/* What is marked as dirty depends on the enum r300_fb_state_change. */
r300->gpu_flush.dirty = TRUE;
r300->fb_state.dirty = TRUE;
if (r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
r300->hyperz_state.dirty = TRUE;
r300->hyperz_state.dirty = TRUE;
if (change == R300_CHANGED_FB_STATE) {
r300->aa_state.dirty = TRUE;

View File

@ -694,6 +694,5 @@ void r300_update_derived_state(struct r300_context* r300)
}
}
if (r300->rws->get_value(r300->rws, R300_CAN_HYPERZ))
r300_update_hyperz_state(r300);
r300_update_hyperz_state(r300);
}