GxpWriteFrameBufferPixels
NTSTATUS __stdcall GxpWriteFrameBufferPixels(_GRAPHICS_RECTANGLE *Rectangle, _OFFSET *Offset){
_OFFSET *v2;
_GRAPHICS_RECTANGLE *v3;
unsigned int v4;
INT64 v5;
CHAR v6;
unsigned int v7;
unsigned int v8;
NTSTATUS result;
int v10;
int v11;
size_t v12;
unsigned int v13;
__int64 v14;
char *v15;
_GRAPHICS_RECTANGLE v16;
unsigned int v17;
unsigned int v18;
unsigned int v19;
int v20;
unsigned int v21;
char *v22;
size_t v23;
__int64 v24;
__int64 v25;
NTSTATUS v26;
_GRAPHICS_RECTANGLE *v27;
CHAR v28;
unsigned int v29;
char *v30;
int v31;
INT64 v32;
int v33;
UINT64 v34;
size_t v35;
_OFFSET *v36;
int v37;
unsigned int v38;
_OFFSET v39;
__int64 v40;
UINT8 BlockMask[8];
int v42;
_OFFSET *v43;
int v44;
int v45[2];
int v46;
_GRAPHICS_RECTANGLE v47;
__int64 v48;
unsigned __int64 v49;
VOID *Src;
__int64 v51;
char v52[80];
v43 = Offset;
v2 = Offset;
*(_QWORD *)BlockMask = Rectangle;
v3 = Rectangle;
v51 = 0i64;
v49 = 0i64;
v34 = 0i64;
v35 = 0;
memset(v52, 0i64, 0x48u);
v4 = 0;
v40 = 0i64;
v39 = 0i64;
v32 = 0i64;
v33 = 0;
BgpGetBitsPerPixel(v6, v5);
v8 = v7;
v36 = (_OFFSET *)__PAIR64__(*(&SbiVmbusArrivalEvent + 65), *(&SbiVmbusArrivalEvent + 66));
v37 = *(&SbiVmbusArrivalEvent + 67);
if( !v3 || !v3[1] || !*v3 || v3[2] != v7 || !v2 )
return -1073741811;
if( (*(&SbiVmbusArrivalEvent + 368) & 2) == 0 )
return -1073741823;
result = GxpAdjustRectangleToFrameBuffer(
(unsigned int *)v3,
(unsigned int *)v2,
(__int64)&v36,
(unsigned int *)&v40,
&v39,
1);
if( result >= 0 )
{
if( *(&SbiVmbusArrivalEvent + 256) )
{
v10 = v37;
v11 = v37 * v2->Y;
v12 = v8 >> 3;
v13 = v12 * v40;
Src = (VOID *)*((_QWORD *)v3 + 3);
v14 = v12 * (v2->X + v11);
v38 = v12 * v40;
v15 = (char *)(*(&SbiVmbusArrivalEvent + 36) + v14);
if( !*(&SbiVmbusArrivalEvent + 258) )
{
LABEL_10:
v16 = v3[1];
v17 = v16;
v18 = *v3;
v19 = *v3;
LABEL_11:
v20 = v12 * v17;
v21 = v12 * v37;
v34 = __PAIR64__(v18, v20);
v35 = v12 * v37;
if( *(&SbiVmbusArrivalEvent + 258) )
{
v49 = __PAIR64__(v19, v16);
v29 = 0;
HIDWORD(v32) = 0;
if( v19 )
{
while( 1 )
{
LODWORD(v32) = 0;
v30 = (char *)(*((_QWORD *)v3 + 3) + v13 * v29);
if( v3[1] )
break;
LABEL_45:
++v29;
v4 = 0;
HIDWORD(v32) = v29;
if( v29 >= *v3 )
goto LABEL_16;
}
v43 = v36;
*(_QWORD *)BlockMask = v49;
v44 = v10;
v42 = v51;
while( 1 )
{
GxpGetRotatedPixelOffset((PPM_VETO_ACCOUNTING *)v32, (UINT8)BlockMask, (UINT8)v2);
v26 = v31;
if( v31 < 0 )
goto LABEL_19;
memmove((VOID *)(*(&SbiVmbusArrivalEvent + 36) + v12 * v33), v30, v12);
++v4;
v30 += v12;
LODWORD(v32) = v4;
if( v4 >= v3[1] )
{
v13 = v38;
v10 = v37;
goto LABEL_45;
}
}
}
}
else if( v18 )
{
v22 = (char *)Src;
v23 = v20;
v32 = v21;
v24 = v13;
v25 = v21;
do
{
memmove(v15, v22, v23);
v22 += v24;
v15 += v25;
--v18;
}
while( v18 );
v3 = *(_GRAPHICS_RECTANGLE **)BlockMask;
v2 = v43;
}
LABEL_16:
if( *(&SbiVmbusArrivalEvent + 90) )
BgfxGrowDirtyRect(&v34, (INT64 *)v2, v12);
LABEL_18:
v26 = 0;
LABEL_19:
*v3 = HIDWORD(v40);
v3[1] = v40;
*v2 = v39;
return v26;
}
if( *(&SbiVmbusArrivalEvent + 258) != 1 )
{
if( *(&SbiVmbusArrivalEvent + 258) == 2 )
goto LABEL_10;
if( *(&SbiVmbusArrivalEvent + 258) != 3 )
{
v26 = -1073741811;
goto LABEL_19;
}
}
v19 = *v3;
v17 = *v3;
v18 = v3[1];
v16 = v18;
goto LABEL_11;
}
v27 = 0i64;
v45[0] = *v3;
v45[1] = v3[1];
v32 = 0i64;
if( (*(&SbiVmbusArrivalEvent + 368) & 8) == 0 )
{
v47 = v3[3];
v48 = *((_QWORD *)v3 + 3);
v46 = *(&SbiVmbusArrivalEvent + 68);
goto LABEL_29;
}
if( (*(&SbiVmbusArrivalEvent + 184) & 0xC00) != 0 )
{
v28 = 1;
v32 = (INT64)v52;
}
else
{
v28 = 0;
}
result = BgpGxConvertRectangleEx((INT64)v3, 4ui64, &v32, v28);
if( result >= 0 )
{
v27 = (_GRAPHICS_RECTANGLE *)v32;
v47 = *(_DWORD *)(v32 + 12);
v48 = *(_QWORD *)(v32 + 24);
v46 = 1;
LABEL_29:
v26 = (*(&SbiVmbusArrivalEvent + 36))(v45, v2, 0i64);
if( v27 && v27 != (_GRAPHICS_RECTANGLE *)v52 )
BgpGxRectangleDestroy(v27);
if( v26 < 0 )
goto LABEL_19;
goto LABEL_18;
}
}
return result;
}Referenced by:
BgpGxDrawRectangle