mirror of
https://github.com/elwrcl/intel-hard-graphics.git
synced 2026-11-01 03:18:02 +03:00
init
This commit is contained in:
12511 files changed
+6156641
No files matched your search
@@ -0,0 +1,262 @@
|
||||
/**************************************************************************
|
||||
*
|
||||
* Copyright 2012-2021 VMware, Inc.
|
||||
* All Rights Reserved.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the
|
||||
* "Software"), to deal in the Software without restriction, including
|
||||
* without limitation the rights to use, copy, modify, merge, publish,
|
||||
* distribute, sub license, and/or sell copies of the Software, and to
|
||||
* permit persons to whom the Software is furnished to do so, subject to
|
||||
* the following conditions:
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
|
||||
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
|
||||
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
|
||||
* USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* The above copyright notice and this permission notice (including the
|
||||
* next paragraph) shall be included in all copies or substantial portions
|
||||
* of the Software.
|
||||
*
|
||||
**************************************************************************/
|
||||
|
||||
/*
|
||||
* DxgiFns.cpp --
|
||||
* DXGI related functions.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "DxgiFns.h"
|
||||
#include "Format.h"
|
||||
#include "State.h"
|
||||
|
||||
#include "Debug.h"
|
||||
|
||||
#include "util/format/u_format.h"
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _Present --
|
||||
*
|
||||
* This is turned into kernel callbacks rather than directly emitted
|
||||
* as fifo packets.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_Present(DXGI_DDI_ARG_PRESENT *pPresentData)
|
||||
{
|
||||
|
||||
LOG_ENTRYPOINT();
|
||||
|
||||
struct Device *device = CastDevice(pPresentData->hDevice);
|
||||
Resource *pSrcResource = CastResource(pPresentData->hSurfaceToPresent);
|
||||
|
||||
device->pipe->flush(device->pipe, NULL, 0);
|
||||
device->pipe->screen->flush_frontbuffer(device->pipe->screen, device->pipe,
|
||||
pSrcResource->resource, 0, 0, pPresentData->pDXGIContext, 0, NULL);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _GetGammaCaps --
|
||||
*
|
||||
* Return gamma capabilities.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_GetGammaCaps( DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *GetCaps )
|
||||
{
|
||||
LOG_ENTRYPOINT();
|
||||
|
||||
DXGI_GAMMA_CONTROL_CAPABILITIES *pCaps;
|
||||
|
||||
pCaps = GetCaps->pGammaCapabilities;
|
||||
|
||||
pCaps->ScaleAndOffsetSupported = false;
|
||||
pCaps->MinConvertedValue = 0.0;
|
||||
pCaps->MaxConvertedValue = 1.0;
|
||||
pCaps->NumGammaControlPoints = 17;
|
||||
|
||||
for (UINT i = 0; i < pCaps->NumGammaControlPoints; i++) {
|
||||
pCaps->ControlPointPositions[i] = (float)i / (float)(pCaps->NumGammaControlPoints - 1);
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _SetDisplayMode --
|
||||
*
|
||||
* Set the resource that is used to scan out to the display.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_SetDisplayMode( DXGI_DDI_ARG_SETDISPLAYMODE *SetDisplayMode )
|
||||
{
|
||||
LOG_UNSUPPORTED_ENTRYPOINT();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _SetResourcePriority --
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_SetResourcePriority( DXGI_DDI_ARG_SETRESOURCEPRIORITY *SetResourcePriority )
|
||||
{
|
||||
LOG_ENTRYPOINT();
|
||||
|
||||
/* ignore */
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _QueryResourceResidency --
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_QueryResourceResidency( DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *QueryResourceResidency )
|
||||
{
|
||||
LOG_ENTRYPOINT();
|
||||
|
||||
for (UINT i = 0; i < QueryResourceResidency->Resources; ++i) {
|
||||
QueryResourceResidency->pStatus[i] = DXGI_DDI_RESIDENCY_FULLY_RESIDENT;
|
||||
}
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _RotateResourceIdentities --
|
||||
*
|
||||
* Rotate a list of resources by recreating their views with
|
||||
* the updated rotations.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_RotateResourceIdentities( DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *RotateResourceIdentities )
|
||||
{
|
||||
LOG_ENTRYPOINT();
|
||||
|
||||
if (RotateResourceIdentities->Resources <= 1) {
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
struct pipe_context *pipe = CastPipeDevice(RotateResourceIdentities->hDevice);
|
||||
struct pipe_screen *screen = pipe->screen;
|
||||
|
||||
struct pipe_resource *resource0 = CastPipeResource(RotateResourceIdentities->pResources[0]);
|
||||
|
||||
assert(resource0);
|
||||
LOG_UNSUPPORTED(resource0->last_level);
|
||||
|
||||
/*
|
||||
* XXX: Copying is not very efficient, but it is much simpler than the
|
||||
* alternative of recreating all views.
|
||||
*/
|
||||
|
||||
struct pipe_resource *temp_resource;
|
||||
temp_resource = screen->resource_create(screen, resource0);
|
||||
assert(temp_resource);
|
||||
if (!temp_resource) {
|
||||
return E_OUTOFMEMORY;
|
||||
}
|
||||
|
||||
struct pipe_box src_box;
|
||||
src_box.x = 0;
|
||||
src_box.y = 0;
|
||||
src_box.z = 0;
|
||||
src_box.width = resource0->width0;
|
||||
src_box.height = resource0->height0;
|
||||
src_box.depth = resource0->depth0;
|
||||
|
||||
for (UINT i = 0; i < RotateResourceIdentities->Resources + 1; ++i) {
|
||||
struct pipe_resource *src_resource;
|
||||
struct pipe_resource *dst_resource;
|
||||
|
||||
if (i < RotateResourceIdentities->Resources) {
|
||||
src_resource = CastPipeResource(RotateResourceIdentities->pResources[i]);
|
||||
} else {
|
||||
src_resource = temp_resource;
|
||||
}
|
||||
|
||||
if (i > 0) {
|
||||
dst_resource = CastPipeResource(RotateResourceIdentities->pResources[i - 1]);
|
||||
} else {
|
||||
dst_resource = temp_resource;
|
||||
}
|
||||
|
||||
assert(dst_resource);
|
||||
assert(src_resource);
|
||||
|
||||
pipe->resource_copy_region(pipe,
|
||||
dst_resource,
|
||||
0, // dst_level
|
||||
0, 0, 0, // dst_x,y,z
|
||||
src_resource,
|
||||
0, // src_level
|
||||
&src_box);
|
||||
}
|
||||
|
||||
pipe_resource_reference(&temp_resource, NULL);
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* ----------------------------------------------------------------------
|
||||
*
|
||||
* _Blt --
|
||||
*
|
||||
* Do a blt between two subresources. Apply MSAA resolve, format
|
||||
* conversion and stretching.
|
||||
*
|
||||
* ----------------------------------------------------------------------
|
||||
*/
|
||||
|
||||
HRESULT APIENTRY
|
||||
_Blt(DXGI_DDI_ARG_BLT *Blt)
|
||||
{
|
||||
LOG_UNSUPPORTED_ENTRYPOINT();
|
||||
|
||||
return S_OK;
|
||||
}
|
||||
Reference in new issue
Block a user