third_party/virtualbox/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp
/**
 * Worker for vmsvga3dQueryCaps that figures out supported operations for a
 * given surface format capability.
 *
 * @returns Supported/indented operations (SVGA3DFORMAT_OP_XXX).
 * @param   idx3dCaps       The SVGA3D_CAPS_XXX value of the surface format.
 *
 * @remarks See fromat_cap_table in svga_format.c (mesa/gallium) for a reference
 *          of implicit guest expectations:
 *              http://cgit.freedesktop.org/mesa/mesa/tree/src/gallium/drivers/svga/svga_format.c
 */
Worker for vmsvga3dQueryCaps that figures out supported operations for a
given surface format capability.

@returns Supported/indented operations (SVGA3DFORMAT_OP_XXX).
@param   idx3dCaps       The SVGA3D_CAPS_XXX value of the surface format.


Worker for vmsvga3dQueryCaps that figures out supported operations for a given surface format capability . @returns Supported / indented operations ( SVGA3DFORMAT_OP_XXX ) . @param idx3dCaps The SVGA3D_CAPS_XXX value of the surface format .
static uint32_t vmsvga3dGetSurfaceFormatSupport(uint32_t idx3dCaps)
{
    uint32_t result = 0;
    switch (idx3dCaps)
    {
    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
        result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
               |  SVGA3DFORMAT_OP_CONVERT_TO_ARGB
               |  SVGA3DFORMAT_OP_DISPLAYMODE           
               |  SVGA3DFORMAT_OP_3DACCELERATION;       
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
        result |=     SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB
                  |   SVGA3DFORMAT_OP_CONVERT_TO_ARGB
                  |   SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET;
        break;
    }
    switch (idx3dCaps)
    {
    case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8:
    case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8:
    case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10:
    case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5:
    case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5:
    case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4:
    case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5:
    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16:
    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8:
    case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8:
    case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8:
        result |= SVGA3DFORMAT_OP_TEXTURE
               |  SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET
               |  SVGA3DFORMAT_OP_OFFSCREENPLAIN
               |  SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET
               |  SVGA3DFORMAT_OP_VOLUMETEXTURE
               |  SVGA3DFORMAT_OP_CUBETEXTURE
               |  SVGA3DFORMAT_OP_SRGBREAD
               |  SVGA3DFORMAT_OP_SRGBWRITE;
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_Z_D16:
    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8:
    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8:
    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16:
    case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24:
    case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT:
        result |= SVGA3DFORMAT_OP_ZSTENCIL
               |  SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH
               |  SVGA3DFORMAT_OP_TEXTURE ;
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_DXT1:
    case SVGA3D_DEVCAP_SURFACEFMT_DXT3:
    case SVGA3D_DEVCAP_SURFACEFMT_DXT5:
        result |= SVGA3DFORMAT_OP_TEXTURE
               |  SVGA3DFORMAT_OP_VOLUMETEXTURE
               |  SVGA3DFORMAT_OP_CUBETEXTURE
               |  SVGA3DFORMAT_OP_SRGBREAD;
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8:
    case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10:
    case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8:
    case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8:
    case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8:
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5:
    case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8:
    case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5:
    case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8:
    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5:
    case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8:
        break;
    case SVGA3D_DEVCAP_SURFACEFMT_V16U16:
    case SVGA3D_DEVCAP_SURFACEFMT_G16R16:
    case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16:
    case SVGA3D_DEVCAP_SURFACEFMT_UYVY:
    case SVGA3D_DEVCAP_SURFACEFMT_YUY2:
    case SVGA3D_DEVCAP_SURFACEFMT_NV12:
    case SVGA3D_DEVCAP_SURFACEFMT_AYUV:
        break;
    }
    Log(("CAPS: %s =\n%s\n", vmsvga3dGetCapString(idx3dCaps), vmsvga3dGet3dFormatString(result)));
    return result;
}
static uint32_t vmsvga3dGetSurfaceFormatSupport ( uint32_t idx3dCaps ) { uint32_t result = 0 ; switch ( idx3dCaps ) { case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 : case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 : case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 : result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB | SVGA3DFORMAT_OP_CONVERT_TO_ARGB | SVGA3DFORMAT_OP_DISPLAYMODE | SVGA3DFORMAT_OP_3DACCELERATION ; break ; case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 : case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 : case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 : case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 : result |= SVGA3DFORMAT_OP_MEMBEROFGROUP_ARGB | SVGA3DFORMAT_OP_CONVERT_TO_ARGB | SVGA3DFORMAT_OP_SAME_FORMAT_UP_TO_ALPHA_RENDERTARGET ; break ; } switch ( idx3dCaps ) { case SVGA3D_DEVCAP_SURFACEFMT_X8R8G8B8 : case SVGA3D_DEVCAP_SURFACEFMT_A8R8G8B8 : case SVGA3D_DEVCAP_SURFACEFMT_A2R10G10B10 : case SVGA3D_DEVCAP_SURFACEFMT_X1R5G5B5 : case SVGA3D_DEVCAP_SURFACEFMT_A1R5G5B5 : case SVGA3D_DEVCAP_SURFACEFMT_A4R4G4B4 : case SVGA3D_DEVCAP_SURFACEFMT_R5G6B5 : case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE16 : case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8_ALPHA8 : case SVGA3D_DEVCAP_SURFACEFMT_ALPHA8 : case SVGA3D_DEVCAP_SURFACEFMT_LUMINANCE8 : result |= SVGA3DFORMAT_OP_TEXTURE | SVGA3DFORMAT_OP_OFFSCREEN_RENDERTARGET | SVGA3DFORMAT_OP_OFFSCREENPLAIN | SVGA3DFORMAT_OP_SAME_FORMAT_RENDERTARGET | SVGA3DFORMAT_OP_VOLUMETEXTURE | SVGA3DFORMAT_OP_CUBETEXTURE | SVGA3DFORMAT_OP_SRGBREAD | SVGA3DFORMAT_OP_SRGBWRITE ; break ; case SVGA3D_DEVCAP_SURFACEFMT_Z_D16 : case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8 : case SVGA3D_DEVCAP_SURFACEFMT_Z_D24X8 : case SVGA3D_DEVCAP_SURFACEFMT_Z_DF16 : case SVGA3D_DEVCAP_SURFACEFMT_Z_DF24 : case SVGA3D_DEVCAP_SURFACEFMT_Z_D24S8_INT : result |= SVGA3DFORMAT_OP_ZSTENCIL | SVGA3DFORMAT_OP_ZSTENCIL_WITH_ARBITRARY_COLOR_DEPTH | SVGA3DFORMAT_OP_TEXTURE ; break ; case SVGA3D_DEVCAP_SURFACEFMT_DXT1 : case SVGA3D_DEVCAP_SURFACEFMT_DXT3 : case SVGA3D_DEVCAP_SURFACEFMT_DXT5 : result |= SVGA3DFORMAT_OP_TEXTURE | SVGA3DFORMAT_OP_VOLUMETEXTURE | SVGA3DFORMAT_OP_CUBETEXTURE | SVGA3DFORMAT_OP_SRGBREAD ; break ; case SVGA3D_DEVCAP_SURFACEFMT_BUMPX8L8V8U8 : case SVGA3D_DEVCAP_SURFACEFMT_A2W10V10U10 : case SVGA3D_DEVCAP_SURFACEFMT_BUMPU8V8 : case SVGA3D_DEVCAP_SURFACEFMT_Q8W8V8U8 : case SVGA3D_DEVCAP_SURFACEFMT_CxV8U8 : break ; case SVGA3D_DEVCAP_SURFACEFMT_R_S10E5 : case SVGA3D_DEVCAP_SURFACEFMT_R_S23E8 : case SVGA3D_DEVCAP_SURFACEFMT_RG_S10E5 : case SVGA3D_DEVCAP_SURFACEFMT_RG_S23E8 : case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S10E5 : case SVGA3D_DEVCAP_SURFACEFMT_ARGB_S23E8 : break ; case SVGA3D_DEVCAP_SURFACEFMT_V16U16 : case SVGA3D_DEVCAP_SURFACEFMT_G16R16 : case SVGA3D_DEVCAP_SURFACEFMT_A16B16G16R16 : case SVGA3D_DEVCAP_SURFACEFMT_UYVY : case SVGA3D_DEVCAP_SURFACEFMT_YUY2 : case SVGA3D_DEVCAP_SURFACEFMT_NV12 : case SVGA3D_DEVCAP_SURFACEFMT_AYUV : break ; } Log ( ( " \n \n " , vmsvga3dGetCapString ( idx3dCaps ) , vmsvga3dGet3dFormatString ( result ) ) ) ; return result ; }
Worker for vmsvga3dQueryCaps that figures out supported operations for a
 given surface format capability.
Worker for vmsvga3dQueryCaps that figures out supported operations for a given surface format capability .
/** @todo missing:
     *
     * SVGA3DFORMAT_OP_PIXELSIZE
     */ /* Should not be set for alpha formats. */ /* implies OP_DISPLAYMODE */ /** @todo check hardware caps! */ /* Necessary for Ubuntu Unity */