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