blob: ee27b635002a72303b0e44804aa1f4389d6a3133 [file] [log] [blame]
//
// File: mantleWsiWinExt.h
//
// Copyright 2014 ADVANCED MICRO DEVICES, INC. All Rights Reserved.
//
// AMD is granting you permission to use this software for reference
// purposes only and not for use in any software product.
//
// You agree that you will not reverse engineer or decompile the Materials,
// in whole or in part, except as allowed by applicable law.
//
// WARRANTY DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND. AMD DISCLAIMS ALL WARRANTIES, EXPRESS, IMPLIED, OR STATUTORY,
// INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY,
// FITNESS FOR A PARTICULAR PURPOSE, TITLE, NON-INFRINGEMENT, THAT THE SOFTWARE
// WILL RUN UNINTERRUPTED OR ERROR-FREE OR WARRANTIES ARISING FROM CUSTOM OF
// TRADE OR COURSE OF USAGE. THE ENTIRE RISK ASSOCIATED WITH THE USE OF THE
// SOFTWARE IS ASSUMED BY YOU.
// Some jurisdictions do not allow the exclusion of implied warranties, so
// the above exclusion may not apply to You.
//
// LIMITATION OF LIABILITY AND INDEMNIFICATION: AMD AND ITS LICENSORS WILL
// NOT, UNDER ANY CIRCUMSTANCES BE LIABLE TO YOU FOR ANY PUNITIVE, DIRECT,
// INCIDENTAL, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM USE OF
// THE SOFTWARE OR THIS AGREEMENT EVEN IF AMD AND ITS LICENSORS HAVE BEEN
// ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
// In no event shall AMD's total liability to You for all damages, losses,
// and causes of action (whether in contract, tort (including negligence) or
// otherwise) exceed the amount of $100 USD. You agree to defend, indemnify
// and hold harmless AMD and its licensors, and any of their directors,
// officers, employees, affiliates or agents from and against any and all
// loss, damage, liability and other expenses (including reasonable attorneys'
// fees), resulting from Your use of the Software or violation of the terms and
// conditions of this Agreement.
//
// U.S. GOVERNMENT RESTRICTED RIGHTS: The Materials are provided with "RESTRICTED
// RIGHTS." Use, duplication, or disclosure by the Government is subject to the
// restrictions as set forth in FAR 52.227-14 and DFAR252.227-7013, et seq., or
// its successor. Use of the Materials by the Government constitutes
// acknowledgement of AMD's proprietary rights in them.
//
// EXPORT RESTRICTIONS: The Materials may be subject to export restrictions as
// stated in the Software License Agreement.
//
#ifndef __MANTLEWSIWINEXT_H__
#define __MANTLEWSIWINEXT_H__
#include <windows.h>
#include "mantle.h"
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
GR_DEFINE_SUBCLASS_HANDLE(GR_WSI_WIN_DISPLAY, GR_OBJECT)
#define GR_MAX_DEVICE_NAME_LEN 32
#define GR_MAX_GAMMA_RAMP_CONTROL_POINTS 1025
typedef enum _GR_WSI_WIN_RESULT_CODE
{
GR_WSI_WIN_PRESENT_OCCLUDED = 0x00210000,
GR_WSI_WIN_ERROR_FULLSCREEN_UNAVAILABLE = 0x00210001,
GR_WSI_WIN_ERROR_DISPLAY_REMOVED = 0x00210002,
GR_WSI_WIN_ERROR_INCOMPATIBLE_DISPLAY_MODE = 0x00210003,
GR_WSI_WIN_ERROR_MULTI_DEVICE_PRESENT_FAILED = 0x00210004,
GR_WSI_WIN_ERROR_BLT_PRESENT_UNAVAILABLE = 0x00210005,
GR_WSI_WIN_ERROR_INVALID_RESOLUTION = 0x00210006,
} GR_WSI_WIN_RESULT_CODE;
typedef enum _GR_WSI_WIN_IMAGE_STATE
{
GR_WSI_WIN_PRESENT_SOURCE_BLT = 0x00200000,
GR_WSI_WIN_PRESENT_SOURCE_FLIP = 0x00200001,
GR_WSI_WIN_IMAGE_STATE_BEGIN_RANGE = GR_WSI_WIN_PRESENT_SOURCE_BLT,
GR_WSI_WIN_IMAGE_STATE_END_RANGE = GR_WSI_WIN_PRESENT_SOURCE_FLIP,
GR_NUM_WSI_WIN_IMAGE_STATE = (GR_WSI_WIN_IMAGE_STATE_END_RANGE - GR_WSI_WIN_IMAGE_STATE_BEGIN_RANGE + 1),
} GR_WSI_WIN_IMAGE_STATE;
typedef enum _GR_WSI_WIN_ROTATION_ANGLE
{
GR_WSI_WIN_ROTATION_ANGLE_0 = 0x00200100,
GR_WSI_WIN_ROTATION_ANGLE_90 = 0x00200101,
GR_WSI_WIN_ROTATION_ANGLE_180 = 0x00200102,
GR_WSI_WIN_ROTATION_ANGLE_270 = 0x00200103,
GR_WSI_WIN_ROTATION_ANGLE_BEGIN_RANGE = GR_WSI_WIN_ROTATION_ANGLE_0,
GR_WSI_WIN_ROTATION_ANGLE_END_RANGE = GR_WSI_WIN_ROTATION_ANGLE_270,
GR_NUM_WSI_WIN_ROTATION_ANGLE = (GR_WSI_WIN_ROTATION_ANGLE_END_RANGE - GR_WSI_WIN_ROTATION_ANGLE_BEGIN_RANGE + 1),
} GR_WSI_WIN_ROTATION_ANGLE;
typedef enum _GR_WSI_WIN_PRESENT_MODE
{
GR_WSI_WIN_PRESENT_MODE_BLT = 0x00200200,
GR_WSI_WIN_PRESENT_MODE_FLIP = 0x00200201,
GR_WSI_WIN_PRESENT_MODE_BEGIN_RANGE = GR_WSI_WIN_PRESENT_MODE_BLT,
GR_WSI_WIN_PRESENT_MODE_END_RANGE = GR_WSI_WIN_PRESENT_MODE_FLIP,
GR_NUM_WSI_WIN_PRESENT_MODE = (GR_WSI_WIN_PRESENT_MODE_END_RANGE - GR_WSI_WIN_PRESENT_MODE_BEGIN_RANGE + 1),
} GR_WSI_WIN_PRESENT_MODE;
typedef enum _GR_WSI_WIN_INFO_TYPE
{
GR_WSI_WIN_INFO_TYPE_QUEUE_PROPERTIES = 0x00206800,
GR_WSI_WIN_INFO_TYPE_DISPLAY_PROPERTIES = 0x00206801,
GR_WSI_WIN_INFO_TYPE_GAMMA_RAMP_CAPABILITIES = 0x00206802,
GR_WSI_WIN_INFO_TYPE_BEGIN_RANGE = GR_WSI_WIN_INFO_TYPE_QUEUE_PROPERTIES,
GR_WSI_WIN_INFO_TYPE_END_RANGE = GR_WSI_WIN_INFO_TYPE_GAMMA_RAMP_CAPABILITIES,
GR_NUM_WSI_WIN_INFO_TYPE = (GR_WSI_WIN_INFO_TYPE_END_RANGE - GR_WSI_WIN_INFO_TYPE_BEGIN_RANGE + 1),
} GR_WSI_WIN_INFO_TYPE;
typedef enum _GR_WSI_WIN_PRESENT_FLAGS
{
GR_WSI_WIN_PRESENT_FLIP_DONOTWAIT = 0x00000001,
GR_WSI_WIN_PRESENT_FLIP_STEREO = 0x00000002,
} GR_WSI_WIN_PRESENT_FLAGS;
typedef enum _GR_WSI_WIN_IMAGE_CREATE_FLAGS
{
GR_WSI_WIN_IMAGE_CREATE_FLIPPABLE = 0x00000001,
GR_WSI_WIN_IMAGE_CREATE_STEREO = 0x00000002,
} GR_WSI_WIN_IMAGE_CREATE_FLAGS;
typedef enum _GR_WSI_WIN_PRESENT_SUPPORT_FLAGS
{
GR_WSI_WIN_FLIP_PRESENT_SUPPORTED = 0x00000001,
GR_WSI_WIN_BLT_PRESENT_SUPPORTED = 0x00000002,
} GR_WSI_WIN_PRESENT_SUPPORT_FLAGS;
typedef struct _GR_WSI_WIN_QUEUE_PROPERTIES
{
GR_FLAGS presentSupport; // GR_WSI_WIN_PRESENT_SUPPORT_FLAGS
} GR_WSI_WIN_QUEUE_PROPERTIES;
typedef struct _GR_WSI_WIN_DISPLAY_PROPERTIES
{
HMONITOR hMonitor;
GR_CHAR displayName[GR_MAX_DEVICE_NAME_LEN];
GR_RECT desktopCoordinates;
GR_ENUM rotation; // GR_WSI_WIN_ROTATION_ANGLE
} GR_WSI_WIN_DISPLAY_PROPERTIES;
typedef struct _GR_RGB_FLOAT
{
GR_FLOAT red;
GR_FLOAT green;
GR_FLOAT blue;
} GR_RGB_FLOAT;
typedef struct _GR_WSI_WIN_GAMMA_RAMP_CAPABILITIES
{
GR_BOOL supportsScaleAndOffset;
GR_FLOAT minConvertedValue;
GR_FLOAT maxConvertedValue;
GR_UINT controlPointCount;
GR_FLOAT controlPointPositions[GR_MAX_GAMMA_RAMP_CONTROL_POINTS];
} GR_WSI_WIN_GAMMA_RAMP_CAPABILITIES;
typedef struct _GR_WSI_WIN_GAMMA_RAMP
{
GR_RGB_FLOAT scale;
GR_RGB_FLOAT offset;
GR_RGB_FLOAT gammaCurve[GR_MAX_GAMMA_RAMP_CONTROL_POINTS];
} GR_WSI_WIN_GAMMA_RAMP;
typedef struct _GR_WSI_WIN_PRESENTABLE_IMAGE_CREATE_INFO
{
GR_FORMAT format;
GR_FLAGS usage; // GR_IMAGE_USAGE_FLAGS
GR_EXTENT2D extent;
GR_WSI_WIN_DISPLAY display;
GR_FLAGS flags; // GR_WSI_WIN_IMAGE_CREATE_FLAGS
} GR_WSI_WIN_PRESENTABLE_IMAGE_CREATE_INFO;
typedef struct _GR_WSI_WIN_PRESENT_INFO
{
HWND hWndDest;
GR_IMAGE srcImage;
GR_ENUM presentMode; // GR_WSI_WIN_PRESENT_MODE
GR_UINT flipInterval;
GR_FLAGS flags; // GR_WSI_WIN_PRESENT_FLAGS
} GR_WSI_WIN_PRESENT_INFO;
typedef struct _GR_WSI_WIN_DISPLAY_MODE
{
GR_EXTENT2D extent;
GR_FORMAT format;
GR_UINT refreshRate;
GR_BOOL stereo;
GR_BOOL crossDisplayPresent;
} GR_WSI_WIN_DISPLAY_MODE;
GR_RESULT GR_STDCALL grWsiWinGetDisplays(
GR_DEVICE device,
GR_UINT* pDisplayCount,
GR_WSI_WIN_DISPLAY* pDisplayList);
GR_RESULT GR_STDCALL grWsiWinGetDisplayModeList(
GR_WSI_WIN_DISPLAY display,
GR_UINT* pDisplayModeCount,
GR_WSI_WIN_DISPLAY_MODE* pDisplayModeList);
GR_RESULT GR_STDCALL grWsiWinTakeFullscreenOwnership(
GR_WSI_WIN_DISPLAY display,
GR_IMAGE image);
GR_RESULT GR_STDCALL grWsiWinReleaseFullscreenOwnership(
GR_WSI_WIN_DISPLAY display);
GR_RESULT GR_STDCALL grWsiWinSetGammaRamp(
GR_WSI_WIN_DISPLAY display,
const GR_WSI_WIN_GAMMA_RAMP* pGammaRamp);
GR_RESULT GR_STDCALL grWsiWinWaitForVerticalBlank(
GR_WSI_WIN_DISPLAY display);
GR_RESULT GR_STDCALL grWsiWinGetScanLine(
GR_WSI_WIN_DISPLAY display,
GR_INT* pScanLine);
GR_RESULT GR_STDCALL grWsiWinCreatePresentableImage(
GR_DEVICE device,
const GR_WSI_WIN_PRESENTABLE_IMAGE_CREATE_INFO* pCreateInfo,
GR_IMAGE* pImage,
GR_GPU_MEMORY* pMem);
GR_RESULT GR_STDCALL grWsiWinQueuePresent(
GR_QUEUE queue,
const GR_WSI_WIN_PRESENT_INFO* pPresentInfo);
GR_RESULT GR_STDCALL grWsiWinSetMaxQueuedFrames(
GR_DEVICE device,
GR_UINT maxFrames);
#ifdef __cplusplus
}; // extern "C"
#endif // __cplusplus
#endif // __MANTLEWSIWINEXT_H__