Path: blob/21.2-virgl/src/gallium/frontends/d3d10umd/Device.cpp
4565 views
/**************************************************************************1*2* Copyright 2012-2021 VMware, Inc.3* All Rights Reserved.4*5* Permission is hereby granted, free of charge, to any person obtaining a6* copy of this software and associated documentation files (the7* "Software"), to deal in the Software without restriction, including8* without limitation the rights to use, copy, modify, merge, publish,9* distribute, sub license, and/or sell copies of the Software, and to10* permit persons to whom the Software is furnished to do so, subject to11* the following conditions:12*13* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR14* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,15* FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL16* THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,17* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR18* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE19* USE OR OTHER DEALINGS IN THE SOFTWARE.20*21* The above copyright notice and this permission notice (including the22* next paragraph) shall be included in all copies or substantial portions23* of the Software.24*25**************************************************************************/2627/*28* Device.cpp --29* Functions that provide the 3D device functionality.30*/313233#include "Draw.h"34#include "Dxgi.h"35#include "InputAssembly.h"36#include "OutputMerger.h"37#include "Query.h"38#include "Rasterizer.h"39#include "Resource.h"40#include "Shader.h"41#include "State.h"42#include "Format.h"4344#include "Debug.h"4546#include "util/u_sampler.h"474849static void APIENTRY DestroyDevice(D3D10DDI_HDEVICE hDevice);50static void APIENTRY RelocateDeviceFuncs(D3D10DDI_HDEVICE hDevice,51__in struct D3D10DDI_DEVICEFUNCS *pDeviceFunctions);52static void APIENTRY RelocateDeviceFuncs1(D3D10DDI_HDEVICE hDevice,53__in struct D3D10_1DDI_DEVICEFUNCS *pDeviceFunctions);54static void APIENTRY Flush(D3D10DDI_HDEVICE hDevice);55static void APIENTRY CheckFormatSupport(D3D10DDI_HDEVICE hDevice, DXGI_FORMAT Format,56__out UINT *pFormatCaps);57static void APIENTRY CheckMultisampleQualityLevels(D3D10DDI_HDEVICE hDevice,58DXGI_FORMAT Format,59UINT SampleCount,60__out UINT *pNumQualityLevels);61static void APIENTRY SetTextFilterSize(D3D10DDI_HDEVICE hDevice, UINT Width, UINT Height);626364/*65* ----------------------------------------------------------------------66*67* CalcPrivateDeviceSize --68*69* The CalcPrivateDeviceSize function determines the size of a memory70* region that the user-mode display driver requires from the Microsoft71* Direct3D runtime to store frequently-accessed data.72*73* ----------------------------------------------------------------------74*/7576SIZE_T APIENTRY77CalcPrivateDeviceSize(D3D10DDI_HADAPTER hAdapter, // IN78__in const D3D10DDIARG_CALCPRIVATEDEVICESIZE *pData) // IN79{80return sizeof(Device);81}8283/*84* ----------------------------------------------------------------------85*86* CreateDevice --87*88* The CreateDevice function creates a graphics context that is89* referenced in subsequent calls.90*91* ----------------------------------------------------------------------92*/9394HRESULT APIENTRY95CreateDevice(D3D10DDI_HADAPTER hAdapter, // IN96__in D3D10DDIARG_CREATEDEVICE *pCreateData) // IN97{98LOG_ENTRYPOINT();99100if (0) {101DebugPrintf("hAdapter = %p\n", hAdapter);102DebugPrintf("pKTCallbacks = %p\n", pCreateData->pKTCallbacks);103DebugPrintf("p10_1DeviceFuncs = %p\n", pCreateData->p10_1DeviceFuncs);104DebugPrintf("hDrvDevice = %p\n", pCreateData->hDrvDevice);105DebugPrintf("DXGIBaseDDI = %p\n", pCreateData->DXGIBaseDDI);106DebugPrintf("hRTCoreLayer = %p\n", pCreateData->hRTCoreLayer);107DebugPrintf("pUMCallbacks = %p\n", pCreateData->pUMCallbacks);108}109110switch (pCreateData->Interface) {111case D3D10_0_DDI_INTERFACE_VERSION:112case D3D10_0_x_DDI_INTERFACE_VERSION:113case D3D10_0_7_DDI_INTERFACE_VERSION:114#if SUPPORT_D3D10_1115case D3D10_1_DDI_INTERFACE_VERSION:116case D3D10_1_x_DDI_INTERFACE_VERSION:117case D3D10_1_7_DDI_INTERFACE_VERSION:118#endif119break;120default:121DebugPrintf("%s: unsupported interface version 0x%08x\n",122__FUNCTION__, pCreateData->Interface);123return E_FAIL;124}125126Adapter *pAdapter = CastAdapter(hAdapter);127128Device *pDevice = CastDevice(pCreateData->hDrvDevice);129memset(pDevice, 0, sizeof *pDevice);130131struct pipe_screen *screen = pAdapter->screen;132struct pipe_context *pipe = screen->context_create(screen, NULL, 0);133pDevice->pipe = pipe;134135pDevice->empty_vs = CreateEmptyShader(pDevice, PIPE_SHADER_VERTEX);136pDevice->empty_fs = CreateEmptyShader(pDevice, PIPE_SHADER_FRAGMENT);137138pipe->bind_vs_state(pipe, pDevice->empty_vs);139pipe->bind_fs_state(pipe, pDevice->empty_fs);140141pDevice->max_dual_source_render_targets =142screen->get_param(screen, PIPE_CAP_MAX_DUAL_SOURCE_RENDER_TARGETS);143144pDevice->hRTCoreLayer = pCreateData->hRTCoreLayer;145pDevice->hDevice = (HANDLE)pCreateData->hRTDevice.handle;146pDevice->KTCallbacks = *pCreateData->pKTCallbacks;147pDevice->UMCallbacks = *pCreateData->pUMCallbacks;148pDevice->pDXGIBaseCallbacks = pCreateData->DXGIBaseDDI.pDXGIBaseCallbacks;149150pDevice->draw_so_target = NULL;151152if (0) {153DebugPrintf("pDevice = %p\n", pDevice);154}155156st_debug_parse();157158/*159* Fill in the D3D10 DDI functions160*/161D3D10DDI_DEVICEFUNCS *pDeviceFuncs = pCreateData->pDeviceFuncs;162pDeviceFuncs->pfnDefaultConstantBufferUpdateSubresourceUP = ResourceUpdateSubResourceUP;163pDeviceFuncs->pfnVsSetConstantBuffers = VsSetConstantBuffers;164pDeviceFuncs->pfnPsSetShaderResources = PsSetShaderResources;165pDeviceFuncs->pfnPsSetShader = PsSetShader;166pDeviceFuncs->pfnPsSetSamplers = PsSetSamplers;167pDeviceFuncs->pfnVsSetShader = VsSetShader;168pDeviceFuncs->pfnDrawIndexed = DrawIndexed;169pDeviceFuncs->pfnDraw = Draw;170pDeviceFuncs->pfnDynamicIABufferMapNoOverwrite = ResourceMap;171pDeviceFuncs->pfnDynamicIABufferUnmap = ResourceUnmap;172pDeviceFuncs->pfnDynamicConstantBufferMapDiscard = ResourceMap;173pDeviceFuncs->pfnDynamicIABufferMapDiscard = ResourceMap;174pDeviceFuncs->pfnDynamicConstantBufferUnmap = ResourceUnmap;175pDeviceFuncs->pfnPsSetConstantBuffers = PsSetConstantBuffers;176pDeviceFuncs->pfnIaSetInputLayout = IaSetInputLayout;177pDeviceFuncs->pfnIaSetVertexBuffers = IaSetVertexBuffers;178pDeviceFuncs->pfnIaSetIndexBuffer = IaSetIndexBuffer;179pDeviceFuncs->pfnDrawIndexedInstanced = DrawIndexedInstanced;180pDeviceFuncs->pfnDrawInstanced = DrawInstanced;181pDeviceFuncs->pfnDynamicResourceMapDiscard = ResourceMap;182pDeviceFuncs->pfnDynamicResourceUnmap = ResourceUnmap;183pDeviceFuncs->pfnGsSetConstantBuffers = GsSetConstantBuffers;184pDeviceFuncs->pfnGsSetShader = GsSetShader;185pDeviceFuncs->pfnIaSetTopology = IaSetTopology;186pDeviceFuncs->pfnStagingResourceMap = ResourceMap;187pDeviceFuncs->pfnStagingResourceUnmap = ResourceUnmap;188pDeviceFuncs->pfnVsSetShaderResources = VsSetShaderResources;189pDeviceFuncs->pfnVsSetSamplers = VsSetSamplers;190pDeviceFuncs->pfnGsSetShaderResources = GsSetShaderResources;191pDeviceFuncs->pfnGsSetSamplers = GsSetSamplers;192pDeviceFuncs->pfnSetRenderTargets = SetRenderTargets;193pDeviceFuncs->pfnShaderResourceViewReadAfterWriteHazard = ShaderResourceViewReadAfterWriteHazard;194pDeviceFuncs->pfnResourceReadAfterWriteHazard = ResourceReadAfterWriteHazard;195pDeviceFuncs->pfnSetBlendState = SetBlendState;196pDeviceFuncs->pfnSetDepthStencilState = SetDepthStencilState;197pDeviceFuncs->pfnSetRasterizerState = SetRasterizerState;198pDeviceFuncs->pfnQueryEnd = QueryEnd;199pDeviceFuncs->pfnQueryBegin = QueryBegin;200pDeviceFuncs->pfnResourceCopyRegion = ResourceCopyRegion;201pDeviceFuncs->pfnResourceUpdateSubresourceUP = ResourceUpdateSubResourceUP;202pDeviceFuncs->pfnSoSetTargets = SoSetTargets;203pDeviceFuncs->pfnDrawAuto = DrawAuto;204pDeviceFuncs->pfnSetViewports = SetViewports;205pDeviceFuncs->pfnSetScissorRects = SetScissorRects;206pDeviceFuncs->pfnClearRenderTargetView = ClearRenderTargetView;207pDeviceFuncs->pfnClearDepthStencilView = ClearDepthStencilView;208pDeviceFuncs->pfnSetPredication = SetPredication;209pDeviceFuncs->pfnQueryGetData = QueryGetData;210pDeviceFuncs->pfnFlush = Flush;211pDeviceFuncs->pfnGenMips = GenMips;212pDeviceFuncs->pfnResourceCopy = ResourceCopy;213pDeviceFuncs->pfnResourceResolveSubresource = ResourceResolveSubResource;214pDeviceFuncs->pfnResourceMap = ResourceMap;215pDeviceFuncs->pfnResourceUnmap = ResourceUnmap;216pDeviceFuncs->pfnResourceIsStagingBusy = ResourceIsStagingBusy;217pDeviceFuncs->pfnRelocateDeviceFuncs = RelocateDeviceFuncs;218pDeviceFuncs->pfnCalcPrivateResourceSize = CalcPrivateResourceSize;219pDeviceFuncs->pfnCalcPrivateOpenedResourceSize = CalcPrivateOpenedResourceSize;220pDeviceFuncs->pfnCreateResource = CreateResource;221pDeviceFuncs->pfnOpenResource = OpenResource;222pDeviceFuncs->pfnDestroyResource = DestroyResource;223pDeviceFuncs->pfnCalcPrivateShaderResourceViewSize = CalcPrivateShaderResourceViewSize;224pDeviceFuncs->pfnCreateShaderResourceView = CreateShaderResourceView;225pDeviceFuncs->pfnDestroyShaderResourceView = DestroyShaderResourceView;226pDeviceFuncs->pfnCalcPrivateRenderTargetViewSize = CalcPrivateRenderTargetViewSize;227pDeviceFuncs->pfnCreateRenderTargetView = CreateRenderTargetView;228pDeviceFuncs->pfnDestroyRenderTargetView = DestroyRenderTargetView;229pDeviceFuncs->pfnCalcPrivateDepthStencilViewSize = CalcPrivateDepthStencilViewSize;230pDeviceFuncs->pfnCreateDepthStencilView = CreateDepthStencilView;231pDeviceFuncs->pfnDestroyDepthStencilView = DestroyDepthStencilView;232pDeviceFuncs->pfnCalcPrivateElementLayoutSize = CalcPrivateElementLayoutSize;233pDeviceFuncs->pfnCreateElementLayout = CreateElementLayout;234pDeviceFuncs->pfnDestroyElementLayout = DestroyElementLayout;235pDeviceFuncs->pfnCalcPrivateBlendStateSize = CalcPrivateBlendStateSize;236pDeviceFuncs->pfnCreateBlendState = CreateBlendState;237pDeviceFuncs->pfnDestroyBlendState = DestroyBlendState;238pDeviceFuncs->pfnCalcPrivateDepthStencilStateSize = CalcPrivateDepthStencilStateSize;239pDeviceFuncs->pfnCreateDepthStencilState = CreateDepthStencilState;240pDeviceFuncs->pfnDestroyDepthStencilState = DestroyDepthStencilState;241pDeviceFuncs->pfnCalcPrivateRasterizerStateSize = CalcPrivateRasterizerStateSize;242pDeviceFuncs->pfnCreateRasterizerState = CreateRasterizerState;243pDeviceFuncs->pfnDestroyRasterizerState = DestroyRasterizerState;244pDeviceFuncs->pfnCalcPrivateShaderSize = CalcPrivateShaderSize;245pDeviceFuncs->pfnCreateVertexShader = CreateVertexShader;246pDeviceFuncs->pfnCreateGeometryShader = CreateGeometryShader;247pDeviceFuncs->pfnCreatePixelShader = CreatePixelShader;248pDeviceFuncs->pfnCalcPrivateGeometryShaderWithStreamOutput = CalcPrivateGeometryShaderWithStreamOutput;249pDeviceFuncs->pfnCreateGeometryShaderWithStreamOutput = CreateGeometryShaderWithStreamOutput;250pDeviceFuncs->pfnDestroyShader = DestroyShader;251pDeviceFuncs->pfnCalcPrivateSamplerSize = CalcPrivateSamplerSize;252pDeviceFuncs->pfnCreateSampler = CreateSampler;253pDeviceFuncs->pfnDestroySampler = DestroySampler;254pDeviceFuncs->pfnCalcPrivateQuerySize = CalcPrivateQuerySize;255pDeviceFuncs->pfnCreateQuery = CreateQuery;256pDeviceFuncs->pfnDestroyQuery = DestroyQuery;257pDeviceFuncs->pfnCheckFormatSupport = CheckFormatSupport;258pDeviceFuncs->pfnCheckMultisampleQualityLevels = CheckMultisampleQualityLevels;259pDeviceFuncs->pfnCheckCounterInfo = CheckCounterInfo;260pDeviceFuncs->pfnCheckCounter = CheckCounter;261pDeviceFuncs->pfnDestroyDevice = DestroyDevice;262pDeviceFuncs->pfnSetTextFilterSize = SetTextFilterSize;263if (pCreateData->Interface == D3D10_1_DDI_INTERFACE_VERSION ||264pCreateData->Interface == D3D10_1_x_DDI_INTERFACE_VERSION ||265pCreateData->Interface == D3D10_1_7_DDI_INTERFACE_VERSION) {266D3D10_1DDI_DEVICEFUNCS *p10_1DeviceFuncs = pCreateData->p10_1DeviceFuncs;267p10_1DeviceFuncs->pfnRelocateDeviceFuncs = RelocateDeviceFuncs1;268p10_1DeviceFuncs->pfnCalcPrivateShaderResourceViewSize = CalcPrivateShaderResourceViewSize1;269p10_1DeviceFuncs->pfnCreateShaderResourceView = CreateShaderResourceView1;270p10_1DeviceFuncs->pfnCalcPrivateBlendStateSize = CalcPrivateBlendStateSize1;271p10_1DeviceFuncs->pfnCreateBlendState = CreateBlendState1;272p10_1DeviceFuncs->pfnResourceConvert = ResourceCopy;273p10_1DeviceFuncs->pfnResourceConvertRegion = ResourceCopyRegion;274}275276/*277* Fill in DXGI DDI functions278*/279pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnPresent =280_Present;281pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnGetGammaCaps =282_GetGammaCaps;283pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnSetDisplayMode =284_SetDisplayMode;285pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnSetResourcePriority =286_SetResourcePriority;287pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnQueryResourceResidency =288_QueryResourceResidency;289pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnRotateResourceIdentities =290_RotateResourceIdentities;291pCreateData->DXGIBaseDDI.pDXGIDDIBaseFunctions->pfnBlt =292_Blt;293294if (0) {295return S_OK;296} else {297// Tell DXGI to not use the shared resource presentation path when298// communicating with DWM:299// http://msdn.microsoft.com/en-us/library/windows/hardware/ff569887(v=vs.85).aspx300return DXGI_STATUS_NO_REDIRECTION;301}302}303304305/*306* ----------------------------------------------------------------------307*308* DestroyDevice --309*310* The DestroyDevice function destroys a graphics context.311*312* ----------------------------------------------------------------------313*/314315void APIENTRY316DestroyDevice(D3D10DDI_HDEVICE hDevice) // IN317{318unsigned i;319320LOG_ENTRYPOINT();321322Device *pDevice = CastDevice(hDevice);323struct pipe_context *pipe = pDevice->pipe;324325pipe->flush(pipe, NULL, 0);326327for (i = 0; i < PIPE_MAX_SO_BUFFERS; ++i) {328pipe_so_target_reference(&pDevice->so_targets[i], NULL);329}330if (pDevice->draw_so_target) {331pipe_so_target_reference(&pDevice->draw_so_target, NULL);332}333334pipe->bind_fs_state(pipe, NULL);335pipe->bind_vs_state(pipe, NULL);336337DeleteEmptyShader(pDevice, PIPE_SHADER_FRAGMENT, pDevice->empty_fs);338DeleteEmptyShader(pDevice, PIPE_SHADER_VERTEX, pDevice->empty_vs);339340pipe_surface_reference(&pDevice->fb.zsbuf, NULL);341for (i = 0; i < PIPE_MAX_COLOR_BUFS; ++i) {342pipe_surface_reference(&pDevice->fb.cbufs[i], NULL);343}344345for (i = 0; i < PIPE_MAX_ATTRIBS; ++i) {346if (!pDevice->vertex_buffers[i].is_user_buffer) {347pipe_resource_reference(&pDevice->vertex_buffers[i].buffer.resource, NULL);348}349}350351pipe_resource_reference(&pDevice->index_buffer, NULL);352353static struct pipe_sampler_view * sampler_views[PIPE_MAX_SHADER_SAMPLER_VIEWS];354memset(sampler_views, 0, sizeof sampler_views);355pipe->set_sampler_views(pipe, PIPE_SHADER_FRAGMENT, 0,356PIPE_MAX_SHADER_SAMPLER_VIEWS, 0, sampler_views);357pipe->set_sampler_views(pipe, PIPE_SHADER_VERTEX, 0,358PIPE_MAX_SHADER_SAMPLER_VIEWS, 0, sampler_views);359pipe->set_sampler_views(pipe, PIPE_SHADER_GEOMETRY, 0,360PIPE_MAX_SHADER_SAMPLER_VIEWS, 0, sampler_views);361362pipe->destroy(pipe);363}364365366/*367* ----------------------------------------------------------------------368*369* RelocateDeviceFuncs --370*371* The RelocateDeviceFuncs function notifies the user-mode372* display driver about the new location of the driver function table.373*374* ----------------------------------------------------------------------375*/376377void APIENTRY378RelocateDeviceFuncs(D3D10DDI_HDEVICE hDevice, // IN379__in struct D3D10DDI_DEVICEFUNCS *pDeviceFunctions) // IN380{381LOG_ENTRYPOINT();382383/*384* Nothing to do as we don't store a pointer to this entity.385*/386}387388389/*390* ----------------------------------------------------------------------391*392* RelocateDeviceFuncs1 --393*394* The RelocateDeviceFuncs function notifies the user-mode395* display driver about the new location of the driver function table.396*397* ----------------------------------------------------------------------398*/399400void APIENTRY401RelocateDeviceFuncs1(D3D10DDI_HDEVICE hDevice, // IN402__in struct D3D10_1DDI_DEVICEFUNCS *pDeviceFunctions) // IN403{404LOG_ENTRYPOINT();405406/*407* Nothing to do as we don't store a pointer to this entity.408*/409}410411412/*413* ----------------------------------------------------------------------414*415* Flush --416*417* The Flush function submits outstanding hardware commands that418* are in the hardware command buffer to the display miniport driver.419*420* ----------------------------------------------------------------------421*/422423void APIENTRY424Flush(D3D10DDI_HDEVICE hDevice) // IN425{426LOG_ENTRYPOINT();427428struct pipe_context *pipe = CastPipeContext(hDevice);429430pipe->flush(pipe, NULL, 0);431}432433434/*435* ----------------------------------------------------------------------436*437* CheckFormatSupport --438*439* The CheckFormatSupport function retrieves the capabilites that440* the device has with the specified format.441*442* ----------------------------------------------------------------------443*/444445void APIENTRY446CheckFormatSupport(D3D10DDI_HDEVICE hDevice, // IN447DXGI_FORMAT Format, // IN448__out UINT *pFormatCaps) // OUT449{450//LOG_ENTRYPOINT();451452struct pipe_context *pipe = CastPipeContext(hDevice);453struct pipe_screen *screen = pipe->screen;454455*pFormatCaps = 0;456457enum pipe_format format = FormatTranslate(Format, FALSE);458if (format == PIPE_FORMAT_NONE) {459*pFormatCaps = D3D10_DDI_FORMAT_SUPPORT_NOT_SUPPORTED;460return;461}462463if (Format == DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM) {464/*465* We only need to support creation.466* http://msdn.microsoft.com/en-us/library/windows/hardware/ff552818.aspx467*/468return;469}470471if (screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 0, 0,472PIPE_BIND_RENDER_TARGET)) {473*pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_RENDERTARGET;474*pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_BLENDABLE;475476#if SUPPORT_MSAA477if (screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 4, 4,478PIPE_BIND_RENDER_TARGET)) {479*pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_MULTISAMPLE_RENDERTARGET;480}481#endif482}483484if (screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 0, 0,485PIPE_BIND_SAMPLER_VIEW)) {486*pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_SHADER_SAMPLE;487488#if SUPPORT_MSAA489if (screen->is_format_supported(screen, format, PIPE_TEXTURE_2D, 4, 4,490PIPE_BIND_RENDER_TARGET)) {491*pFormatCaps |= D3D10_DDI_FORMAT_SUPPORT_MULTISAMPLE_LOAD;492}493#endif494}495}496497498/*499* ----------------------------------------------------------------------500*501* CheckMultisampleQualityLevels --502*503* The CheckMultisampleQualityLevels function retrieves the number504* of quality levels that the device supports for the specified505* number of samples.506*507* ----------------------------------------------------------------------508*/509510void APIENTRY511CheckMultisampleQualityLevels(D3D10DDI_HDEVICE hDevice, // IN512DXGI_FORMAT Format, // IN513UINT SampleCount, // IN514__out UINT *pNumQualityLevels) // OUT515{516//LOG_ENTRYPOINT();517518/* XXX: Disable MSAA */519*pNumQualityLevels = 0;520}521522523/*524* ----------------------------------------------------------------------525*526* SetTextFilterSize --527*528* The SetTextFilterSize function sets the width and height529* of the monochrome convolution filter.530*531* ----------------------------------------------------------------------532*/533534void APIENTRY535SetTextFilterSize(D3D10DDI_HDEVICE hDevice, // IN536UINT Width, // IN537UINT Height) // IN538{539LOG_ENTRYPOINT();540541LOG_UNSUPPORTED(Width != 1 || Height != 1);542}543544545