diff options
author | Marek Olšák <[email protected]> | 2010-07-12 13:23:24 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2010-07-12 13:26:00 +0200 |
commit | 8c836f7f740c6f74511c727c7bed0680ddba9974 (patch) | |
tree | 2e26e477cb1a9effb97eec38f7734fc87507312f /src/gallium/drivers/r300/r300_context.h | |
parent | 78e8a8765f435bf0902d62afbcb3b8d68a0b716f (diff) |
r300g: implement fast color clear
An initial implementation made by Dave Airlie.
For it to be used, a color-only clear must be invoked and exactly one
point-sampled render target must be set. The render target must be
macrotiled (for us to overcome alignment issues) and bpp must be either
16 or 32.
I can't see a difference in performance. :(
Conflicts:
src/gallium/drivers/r300/r300_blit.c
Diffstat (limited to 'src/gallium/drivers/r300/r300_context.h')
-rw-r--r-- | src/gallium/drivers/r300/r300_context.h | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index 2483af7fb5e..df4299b7ea3 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -311,6 +311,13 @@ struct r300_surface { uint32_t offset; /* COLOROFFSET or DEPTHOFFSET. */ uint32_t pitch; /* COLORPITCH or DEPTHPITCH. */ uint32_t format; /* US_OUT_FMT or ZB_FORMAT. */ + + /* Parameters dedicated to the CBZB clear. */ + uint32_t cbzb_width; /* Aligned width. */ + uint32_t cbzb_height; /* Half of the height. */ + uint32_t cbzb_midpoint_offset; /* DEPTHOFFSET. */ + uint32_t cbzb_pitch; /* DEPTHPITCH. */ + uint32_t cbzb_format; /* ZB_FORMAT. */ }; struct r300_texture { @@ -525,6 +532,7 @@ struct r300_context { /* Incompatible vertex buffer layout? (misaligned stride or buffer_offset) */ boolean incompatible_vb_layout; + boolean cbzb_clear; /* upload managers */ struct u_upload_mgr *upload_vb; struct u_upload_mgr *upload_ib; @@ -593,7 +601,8 @@ void r300_plug_in_stencil_ref_fallback(struct r300_context *r300); /* r300_state.c */ enum r300_fb_state_change { - R300_CHANGED_FB_STATE = 0 + R300_CHANGED_FB_STATE = 0, + R300_CHANGED_CBZB_FLAG }; void r300_mark_fb_state_dirty(struct r300_context *r300, |