Ver código fonte

arreglo muchos bugs chicos

David 11 anos atrás
pai
commit
491f9a6612
1 arquivos alterados com 24 adições e 31 exclusões
  1. 24 31
      filtros/blur_asm.asm

+ 24 - 31
filtros/blur_asm.asm

@@ -112,22 +112,20 @@ blur_asm:
 		mov rax,PIXEL_SIZE
 		mul col_faltan ;destruyo rdx
 		mov col_faltan, rax
-		mov rdx, basura ;salvo rdx
+		mov rdx, basura ;recupero rdx
 		.loopFila:
+			movdqu xmm2, [src] ;levanto 4px
+			cmp col_faltan, 3*PIXEL_SIZE
+			jg .normal ;no quiero shiftear
+			je .tres ;quiero borrar 1 elem
 
-			;levanto 4px
-			movdqu xmm2, [src]          ; Cargo 4 pix de la imagen 1 => xmm0 = |B(P1)|G(P1)|R(P1)|A(P1)|B(P2)|G(P2)|......|
-			cmp col_faltan, 3
-			jg .normal ;no qiuero shiftear
-			je .tres ;quiero borrar 3 elem
-			;quiero borrar 1 elem
-
-		.uno:
-			;shift (4-faltantes) bytes
-			psrldq xmm2, 1;ok, borre los que no queria
+			;quiero borrar 3 elem
+			pslldq xmm2, 3;ok, borre los que no queria
+			psrldq xmm2, 3;ok, borre los que no queria
 			jmp .normal
 		.tres:
-			psrldq xmm2, 3;ok, borre los que no queria
+			pslldq xmm2, 1;ok, borre los que no queria
+			psrldq xmm2, 1;ok, borre los que no queria
 		.normal:
 			;desempaqueto cada pixel a un registro (cada elem como dword)
 			pxor xmm3,xmm3
@@ -145,15 +143,15 @@ blur_asm:
 			punpcklwd xmm7, xmm4 ;pix c
 			punpckhwd xmm8, xmm4 ;pix d
 
-			;cargo 1 elem de matriz como single
-			movdqu xmm9, [matriz] ;traje 4 float.
+			;cargo 4 elem de matriz como single
+			movdqu xmm9, [matriz] 
 
-			pshufd xmm11, xmm9, 0x00
-			pshufd xmm12, xmm9, 0x55
-			pshufd xmm13, xmm9, 0xAA
-			pshufd xmm14, xmm9, 0xFF
+			pshufd xmm11, xmm9, 0x00 ;primer elem en las 4 pos
+			pshufd xmm12, xmm9, 0x55 ;2do...
+			pshufd xmm13, xmm9, 0xAA ;3ro..
+			pshufd xmm14, xmm9, 0xFF ;4to..
 
-			;acomodo los registros
+			;acomodo los registros (byte->dword)
 			psrldq xmm5, 3
 			psrldq xmm6, 3
 			psrldq xmm7, 3
@@ -182,35 +180,30 @@ blur_asm:
 			cmp col_faltan, 0
 			jle .finFilaInterna
 
-			cmp col_faltan, 4
-			jle .retroceder ;me faltan entre 0 y 4 pixeles, retrocedo suficiente para que me falten 4 exactos
-
+			cmp col_faltan, 4*PIXEL_SIZE ;me faltan entre 0 y 4 pixeles, retrocedo suficiente para que me falten 4 exactos
+			jle .retroceder
 
     		add src, PIXEL_SIZE*4      ; Incremento 4 pixeles
-			add matriz, PIXEL_SIZE*4
+			add matriz, PIXEL_SIZE*4   ; me faltan al menos 4 pixeles en esta fila 
 			jmp .loopFila
 
 		.retroceder:
 			lea src, [src-(4-col_faltan)]
+			lea matriz, [matriz-(4-col_faltan)] ;retrocedo 1-3
 			jmp .loopFila
 			
 		.finFilaInterna:
 			dec filas_faltan
 			cmp filas_faltan, 0
-			je .sumar
+			je .write
 
 			jmp .loopInterno
 
-		;avanzo ancho img - (2k+1 pix)
-		;faltan >0 filas? jmp .loopInterno
-
-.sumar:
-	xor rax,rax
 .write:
 	CVTPS2DQ xmm10,xmm10 ;me quedan 4 int (dword) <=255, necesito moverlos a 4byte en la parte baja
 	movdqu xmm11, [cosa] ;uso xmm11 de tmp
-	pshufb xmm10, xmm11
-	movd [dst], xmm10          ; Escribo en el destino
+	pshufb xmm10, xmm11	 ;dejo 0000,0000,0000,rgba
+	movd [dst], xmm10    ; Escribo en el destino
 .endLoop:
 	mov src, tmp_src
     add src, PIXEL_SIZE      ; Incremento 1 pixel