diff options
author | Marek Olšák <[email protected]> | 2013-01-12 03:29:40 +0100 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2013-01-15 21:48:58 +0100 |
commit | ca2c28859eca83f8fbf1f43616f5ef861e95e8d6 (patch) | |
tree | ce839793a720913a19cf69f1e6734fdab3e016ab /src/gallium/drivers/r300/r300_context.h | |
parent | 1dfe8eead95613a7db62dd17d3da56884b5a887e (diff) |
r300g: implement MSAA compression and fast MSAA color clear
These are optimizations which make MSAA a lot faster.
The MSAA work is complete with this commit. (except for enablement of AA
optimizations for RGBA16F, for which a patch is ready and waiting until
the kernel CS checker fix lands)
MSAA can't be made any faster as far as hw programming is concerned.
The catch is only one process and one colorbuffer can use the optimizations
at a time. There usually is only one MSAA colorbuffer, so it shouldn't be
an issue.
Also, there is a limit on the size of MSAA colorbuffer resolution in terms
of megapixels. If the limit is surpassed, the AA optimizations are disabled.
The limit is:
- 1 Mpix on low-end and some mid-level chipsets (1024x768 and 1280x720)
- 2 Mpix on some mid-level chipsets (1600x1200 and 1920x1080)
- 3 or 4 Mpix on high-end chipsets (2048x1536 or 2560x1600, respectively)
It corresponds to the number of raster pipes (= GB pipes) available, each pipe
can hold 1 Mpix of AA compression data.
If it's enabled, the driver prints to stdout:
radeon: Acquired access to AA optimizations.
Diffstat (limited to 'src/gallium/drivers/r300/r300_context.h')
-rw-r--r-- | src/gallium/drivers/r300/r300_context.h | 17 |
1 files changed, 16 insertions, 1 deletions
diff --git a/src/gallium/drivers/r300/r300_context.h b/src/gallium/drivers/r300/r300_context.h index 1b912c3eeee..33851519bd8 100644 --- a/src/gallium/drivers/r300/r300_context.h +++ b/src/gallium/drivers/r300/r300_context.h @@ -309,6 +309,7 @@ struct r300_surface { uint32_t pitch; /* COLORPITCH or DEPTHPITCH. */ uint32_t pitch_zmask; /* ZMASK_PITCH */ uint32_t pitch_hiz; /* HIZ_PITCH */ + uint32_t pitch_cmask; /* CMASK_PITCH */ uint32_t format; /* US_OUT_FMT or ZB_FORMAT. */ /* Parameters dedicated to the CBZB clear. */ @@ -380,6 +381,10 @@ struct r300_texture_desc { /* Zmask/HiZ strides for each miplevel. */ unsigned zmask_stride_in_pixels[R300_MAX_TEXTURE_LEVELS]; unsigned hiz_stride_in_pixels[R300_MAX_TEXTURE_LEVELS]; + + /* CMASK info for AA buffers (no mipmapping). */ + unsigned cmask_dwords; + unsigned cmask_stride_in_pixels; }; struct r300_resource @@ -536,6 +541,8 @@ struct r300_context { struct r300_atom hiz_clear; /* zmask clear */ struct r300_atom zmask_clear; + /* cmask clear */ + struct r300_atom cmask_clear; /* Occlusion query. */ struct r300_atom query_start; @@ -616,6 +623,13 @@ struct r300_context { enum r300_hiz_func hiz_func; /* HiZ function. Can be either MIN or MAX. */ uint32_t hiz_clear_value; /* HiZ clear value. */ + /* CMASK state. */ + boolean cmask_access; + boolean cmask_in_use; + uint32_t color_clear_value; /* RGBA8 or RGBA1010102 */ + uint32_t color_clear_value_ar; /* RGBA16F */ + uint32_t color_clear_value_gb; /* RGBA16F */ + /* Compiler state. */ struct rc_regalloc_state fs_regalloc_state; /* Register allocator info for * fragment shaders. */ @@ -722,7 +736,8 @@ void r300_blitter_draw_rectangle(struct blitter_context *blitter, enum r300_fb_state_change { R300_CHANGED_FB_STATE = 0, R300_CHANGED_HYPERZ_FLAG, - R300_CHANGED_MULTIWRITE + R300_CHANGED_MULTIWRITE, + R300_CHANGED_CMASK_ENABLE, }; void r300_mark_fb_state_dirty(struct r300_context *r300, |