diff options
author | Robert Noland <rnoland@2hip.net> | 2009-10-20 09:11:36 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2009-10-25 23:28:21 -0400 |
commit | c54b1820d69a1043acaf50d084852e628266e0e2 (patch) | |
tree | bdf3f36f5d9fde3106706ed1f81564ed60d3ed2b /drivers/gpu | |
parent | bc293e58cb4095f2ad43fe672ae269e31d1a18e2 (diff) |
drm/radeon/r600: Replace repeated calculations with variable.
- Reduce the chance of error and avoid a bit of overhead.
- Use switch to assign color and format
Signed-off-by: Robert Noland <rnoland@2hip.net>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/r600_blit.c | 52 |
1 files changed, 31 insertions, 21 deletions
diff --git a/drivers/gpu/drm/radeon/r600_blit.c b/drivers/gpu/drm/radeon/r600_blit.c index d988eece0187..626a9ab7075a 100644 --- a/drivers/gpu/drm/radeon/r600_blit.c +++ b/drivers/gpu/drm/radeon/r600_blit.c | |||
@@ -774,6 +774,7 @@ r600_blit_swap(struct drm_device *dev, | |||
774 | { | 774 | { |
775 | drm_radeon_private_t *dev_priv = dev->dev_private; | 775 | drm_radeon_private_t *dev_priv = dev->dev_private; |
776 | int cb_format, tex_format; | 776 | int cb_format, tex_format; |
777 | int sx2, sy2, dx2, dy2; | ||
777 | u64 vb_addr; | 778 | u64 vb_addr; |
778 | u32 *vb; | 779 | u32 *vb; |
779 | 780 | ||
@@ -790,16 +791,10 @@ r600_blit_swap(struct drm_device *dev, | |||
790 | vb = r600_nomm_get_vb_ptr(dev); | 791 | vb = r600_nomm_get_vb_ptr(dev); |
791 | } | 792 | } |
792 | 793 | ||
793 | if (cpp == 4) { | 794 | sx2 = sx + w; |
794 | cb_format = COLOR_8_8_8_8; | 795 | sy2 = sy + h; |
795 | tex_format = FMT_8_8_8_8; | 796 | dx2 = dx + w; |
796 | } else if (cpp == 2) { | 797 | dy2 = dy + h; |
797 | cb_format = COLOR_5_6_5; | ||
798 | tex_format = FMT_5_6_5; | ||
799 | } else { | ||
800 | cb_format = COLOR_8; | ||
801 | tex_format = FMT_8; | ||
802 | } | ||
803 | 798 | ||
804 | vb[0] = i2f(dx); | 799 | vb[0] = i2f(dx); |
805 | vb[1] = i2f(dy); | 800 | vb[1] = i2f(dy); |
@@ -807,31 +802,46 @@ r600_blit_swap(struct drm_device *dev, | |||
807 | vb[3] = i2f(sy); | 802 | vb[3] = i2f(sy); |
808 | 803 | ||
809 | vb[4] = i2f(dx); | 804 | vb[4] = i2f(dx); |
810 | vb[5] = i2f(dy + h); | 805 | vb[5] = i2f(dy2); |
811 | vb[6] = i2f(sx); | 806 | vb[6] = i2f(sx); |
812 | vb[7] = i2f(sy + h); | 807 | vb[7] = i2f(sy2); |
813 | 808 | ||
814 | vb[8] = i2f(dx + w); | 809 | vb[8] = i2f(dx2); |
815 | vb[9] = i2f(dy + h); | 810 | vb[9] = i2f(dy2); |
816 | vb[10] = i2f(sx + w); | 811 | vb[10] = i2f(sx2); |
817 | vb[11] = i2f(sy + h); | 812 | vb[11] = i2f(sy2); |
813 | |||
814 | switch(cpp) { | ||
815 | case 4: | ||
816 | cb_format = COLOR_8_8_8_8; | ||
817 | tex_format = FMT_8_8_8_8; | ||
818 | break; | ||
819 | case 2: | ||
820 | cb_format = COLOR_5_6_5; | ||
821 | tex_format = FMT_5_6_5; | ||
822 | break; | ||
823 | default: | ||
824 | cb_format = COLOR_8; | ||
825 | tex_format = FMT_8; | ||
826 | break; | ||
827 | } | ||
818 | 828 | ||
819 | /* src */ | 829 | /* src */ |
820 | set_tex_resource(dev_priv, tex_format, | 830 | set_tex_resource(dev_priv, tex_format, |
821 | src_pitch / cpp, | 831 | src_pitch / cpp, |
822 | sy + h, src_pitch / cpp, | 832 | sy2, src_pitch / cpp, |
823 | src_gpu_addr); | 833 | src_gpu_addr); |
824 | 834 | ||
825 | cp_set_surface_sync(dev_priv, | 835 | cp_set_surface_sync(dev_priv, |
826 | R600_TC_ACTION_ENA, (src_pitch * (sy + h)), src_gpu_addr); | 836 | R600_TC_ACTION_ENA, src_pitch * sy2, src_gpu_addr); |
827 | 837 | ||
828 | /* dst */ | 838 | /* dst */ |
829 | set_render_target(dev_priv, cb_format, | 839 | set_render_target(dev_priv, cb_format, |
830 | dst_pitch / cpp, dy + h, | 840 | dst_pitch / cpp, dy2, |
831 | dst_gpu_addr); | 841 | dst_gpu_addr); |
832 | 842 | ||
833 | /* scissors */ | 843 | /* scissors */ |
834 | set_scissors(dev_priv, dx, dy, dx + w, dy + h); | 844 | set_scissors(dev_priv, dx, dy, dx2, dy2); |
835 | 845 | ||
836 | /* Vertex buffer setup */ | 846 | /* Vertex buffer setup */ |
837 | vb_addr = dev_priv->gart_buffers_offset + | 847 | vb_addr = dev_priv->gart_buffers_offset + |
@@ -844,7 +854,7 @@ r600_blit_swap(struct drm_device *dev, | |||
844 | 854 | ||
845 | cp_set_surface_sync(dev_priv, | 855 | cp_set_surface_sync(dev_priv, |
846 | R600_CB_ACTION_ENA | R600_CB0_DEST_BASE_ENA, | 856 | R600_CB_ACTION_ENA | R600_CB0_DEST_BASE_ENA, |
847 | dst_pitch * (dy + h), dst_gpu_addr); | 857 | dst_pitch * dy2, dst_gpu_addr); |
848 | 858 | ||
849 | dev_priv->blit_vb->used += 12 * 4; | 859 | dev_priv->blit_vb->used += 12 * 4; |
850 | } | 860 | } |