@@ -765,18 +765,14 @@ uint32_t nv03_pgraph_blend_factor(uint32_t alpha, uint32_t beta) {
765
765
return (alpha * beta ) >> 1 ;
766
766
}
767
767
768
- uint32_t nv03_pgraph_do_blend (uint32_t factor , uint32_t dst , uint32_t src , int is_r5g5b5 ) {
768
+ uint32_t nv03_pgraph_do_blend (uint32_t factor , uint32_t dst , uint32_t src ) {
769
769
factor >>= 3 ;
770
770
if (factor == 0x1f )
771
771
return src ;
772
772
if (!factor )
773
773
return dst ;
774
774
src >>= 2 ;
775
775
dst >>= 2 ;
776
- if (is_r5g5b5 ) {
777
- src &= 0xf8 ;
778
- dst &= 0xf8 ;
779
- }
780
776
return (dst * (0x20 - factor ) + src * factor ) >> 3 ;
781
777
}
782
778
@@ -796,7 +792,6 @@ uint32_t nv03_pgraph_rop(struct pgraph_state *state, int x, int y, uint32_t pixe
796
792
struct pgraph_color d = nv03_pgraph_expand_surf (fmt , pixel );
797
793
struct pgraph_color p = nv03_pgraph_pattern_pixel (state , x , y );
798
794
if (blend_en ) {
799
- int is_r5g5b5 = fmt != 3 && !dither ;
800
795
uint32_t beta = state -> beta >> 23 ;
801
796
uint8_t factor ;
802
797
if (op >= 0x1b && op != 0x1d )
@@ -817,7 +812,7 @@ uint32_t nv03_pgraph_rop(struct pgraph_state *state, int x, int y, uint32_t pixe
817
812
insrt (s .r , 0 , 2 , extr (s .r , 8 , 2 ));
818
813
insrt (s .g , 0 , 2 , extr (s .g , 8 , 2 ));
819
814
insrt (s .b , 0 , 2 , extr (s .b , 8 , 2 ));
820
- if (fmt != 3 && is_rgb5 ) {
815
+ if (fmt != 3 && ( is_rgb5 || ! dither ) ) {
821
816
s .r &= 0x3e0 ;
822
817
s .g &= 0x3e0 ;
823
818
s .b &= 0x3e0 ;
@@ -828,9 +823,9 @@ uint32_t nv03_pgraph_rop(struct pgraph_state *state, int x, int y, uint32_t pixe
828
823
d .g &= 0x3e0 ;
829
824
d .b &= 0x3e0 ;
830
825
}
831
- s .r = nv03_pgraph_do_blend (factor , d .r , s .r , is_r5g5b5 );
832
- s .g = nv03_pgraph_do_blend (factor , d .g , s .g , is_r5g5b5 );
833
- s .b = nv03_pgraph_do_blend (factor , d .b , s .b , is_r5g5b5 );
826
+ s .r = nv03_pgraph_do_blend (factor , d .r , s .r );
827
+ s .g = nv03_pgraph_do_blend (factor , d .g , s .g );
828
+ s .b = nv03_pgraph_do_blend (factor , d .b , s .b );
834
829
} else {
835
830
if (op < 0x16 ) {
836
831
if (op >= 9 && !p .a )
@@ -871,6 +866,7 @@ uint32_t nv03_pgraph_rop(struct pgraph_state *state, int x, int y, uint32_t pixe
871
866
}
872
867
}
873
868
}
869
+ uint32_t ropres ;
874
870
switch (fmt ) {
875
871
case 1 :
876
872
return s .i ;
0 commit comments