Информация об изменениях

Сообщение Re[34]: Еще от 12.06.2017 17:59

Изменено 12.06.2017 18:00 ononim

Re[34]: Еще
O>>А мораль сей басни такова — не только BitBlt хардварно процессился, но еще и AlphaBlend.
CS>AlphaBlend это не GDI. Эта функция живет/жила в msimg32.dll что как бы намекает.
Это GDI: https://msdn.microsoft.com/library/windows/hardware/ff556176
Более того, у меня есть под рукой виртуалка с XP и IDA и легкий дизасминг показал что AlphaBlend в ней — это проверка параметров и вызов в GdiAlphaBlend:
  которая выглядит так
; Exported entry 242. GdiAlphaBlend

; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B    R O U T    I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

; Attributes: bp-based frame

; int __stdcall    GdiAlphaBlend(int,int,int,int,int,HDC hdc,int,int,int,int,__int16)
        public _GdiAlphaBlend@44
_GdiAlphaBlend@44 proc near        ; CODE XREF: GdiDrawStream(x,x,x)+22AD8p
                    ; MRALPHABLEND::bPlay(void *,tagHANDLETABLE *,uint)+100p

arg_0        = dword    ptr  8
arg_4        = dword    ptr  0Ch
arg_8        = dword    ptr  10h
arg_C        = dword    ptr  14h
arg_10        = dword    ptr  18h
hdc        = dword    ptr  1Ch
arg_18        = dword    ptr  20h
arg_1C        = dword    ptr  24h
arg_20        = dword    ptr  28h
arg_24        = dword    ptr  2Ch
arg_28        = word ptr  30h

; FUNCTION CHUNK AT 77F26B53 SIZE 00000072 BYTES
; FUNCTION CHUNK AT 77F38337 SIZE 00000025 BYTES

        mov    edi, edi
        push    ebp
        mov    ebp, esp
        push    ebx
        push    esi
        xor    esi, esi
        cmp    [ebp+hdc], esi
        push    edi
        jz    loc_77F26BBE
        mov    ecx, [ebp+hdc]
        mov    eax, 7F0000h
        and    ecx, eax
        mov    edx, 660000h
        cmp    ecx, edx
        jz    loc_77F26BBE
        mov    ebx, [ebp+arg_0]
        mov    ecx, ebx
        and    ecx, eax
        mov    edi, 10000h
        cmp    ecx, edi
        jnz    loc_77F26B53

loc_77F1A7CF:                ; CODE XREF: GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+C422j
                    ; GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+1DBBAj
        mov    eax, large fs:18h
        push    esi
        push    dword ptr [ebp+arg_28]
        mov    [eax+6D0h], esi
        push    [ebp+arg_24]
        push    [ebp+arg_20]
        push    [ebp+arg_1C]
        push    [ebp+arg_18]
        push    [ebp+hdc]
        push    [ebp+arg_10]
        push    [ebp+arg_C]
        push    [ebp+arg_8]
        push    [ebp+arg_4]
        push    ebx
        call    _NtGdiAlphaBlend@48 ; NtGdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x,x)

loc_77F1A800:                ; CODE XREF: GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+C42Fj
        pop    edi
        pop    esi
        pop    ebx
        pop    ebp
        retn    2Ch


CS>Фактически же это надстройка над BitBlt поэтому можно говорить что она тоже "accelerated".

Учитывая вышенаписанное — данное утверждение — ложный домысел, как и все остальное, поскипанное.
Re[34]: Еще
O>>А мораль сей басни такова — не только BitBlt хардварно процессился, но еще и AlphaBlend.
CS>AlphaBlend это не GDI. Эта функция живет/жила в msimg32.dll что как бы намекает.
Это GDI: https://msdn.microsoft.com/library/windows/hardware/ff556176
Более того, у меня есть под рукой виртуалка с XP и IDA и легкий дизасминг показал что msimg32!AlphaBlend в ней — это проверка параметров и вызов в gdi32!GdiAlphaBlend:
  которая выглядит так
; Exported entry 242. GdiAlphaBlend

; ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ S U B    R O U T    I N E ЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫЫ

; Attributes: bp-based frame

; int __stdcall    GdiAlphaBlend(int,int,int,int,int,HDC hdc,int,int,int,int,__int16)
        public _GdiAlphaBlend@44
_GdiAlphaBlend@44 proc near        ; CODE XREF: GdiDrawStream(x,x,x)+22AD8p
                    ; MRALPHABLEND::bPlay(void *,tagHANDLETABLE *,uint)+100p

arg_0        = dword    ptr  8
arg_4        = dword    ptr  0Ch
arg_8        = dword    ptr  10h
arg_C        = dword    ptr  14h
arg_10        = dword    ptr  18h
hdc        = dword    ptr  1Ch
arg_18        = dword    ptr  20h
arg_1C        = dword    ptr  24h
arg_20        = dword    ptr  28h
arg_24        = dword    ptr  2Ch
arg_28        = word ptr  30h

; FUNCTION CHUNK AT 77F26B53 SIZE 00000072 BYTES
; FUNCTION CHUNK AT 77F38337 SIZE 00000025 BYTES

        mov    edi, edi
        push    ebp
        mov    ebp, esp
        push    ebx
        push    esi
        xor    esi, esi
        cmp    [ebp+hdc], esi
        push    edi
        jz    loc_77F26BBE
        mov    ecx, [ebp+hdc]
        mov    eax, 7F0000h
        and    ecx, eax
        mov    edx, 660000h
        cmp    ecx, edx
        jz    loc_77F26BBE
        mov    ebx, [ebp+arg_0]
        mov    ecx, ebx
        and    ecx, eax
        mov    edi, 10000h
        cmp    ecx, edi
        jnz    loc_77F26B53

loc_77F1A7CF:                ; CODE XREF: GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+C422j
                    ; GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+1DBBAj
        mov    eax, large fs:18h
        push    esi
        push    dword ptr [ebp+arg_28]
        mov    [eax+6D0h], esi
        push    [ebp+arg_24]
        push    [ebp+arg_20]
        push    [ebp+arg_1C]
        push    [ebp+arg_18]
        push    [ebp+hdc]
        push    [ebp+arg_10]
        push    [ebp+arg_C]
        push    [ebp+arg_8]
        push    [ebp+arg_4]
        push    ebx
        call    _NtGdiAlphaBlend@48 ; NtGdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x,x)

loc_77F1A800:                ; CODE XREF: GdiAlphaBlend(x,x,x,x,x,x,x,x,x,x,x)+C42Fj
        pop    edi
        pop    esi
        pop    ebx
        pop    ebp
        retn    2Ch


CS>Фактически же это надстройка над BitBlt поэтому можно говорить что она тоже "accelerated".

Учитывая вышенаписанное — данное утверждение — ложный домысел, как и все остальное, поскипанное.