/* * All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or * its licensors. * * For complete copyright and license terms please see the LICENSE at the root of this * distribution (the "License"). All use of this software is governed by the License, * or, if provided, by the license below or the license accompanying this file. Do not * remove or modify any license notices. This file is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * */ // Original file Copyright Crytek GMBH or its affiliates, used under license. #pragma once #ifndef __CCRYDX12DEVICE__ #define __CCRYDX12DEVICE__ #include "DX12/CCryDX12Object.hpp" #include "DX12/API/DX12Device.hpp" class CCryDX12Device : public CCryDX12Object { public: DX12_OBJECT(CCryDX12Device, CCryDX12Object); static CCryDX12Device* Create(IDXGIAdapter* pAdapter, D3D_FEATURE_LEVEL* pFeatureLevel); CCryDX12Device(DX12::Device* device); virtual ~CCryDX12Device(); DX12::Device* GetDX12Device() const { return m_pDevice; } ID3D12Device* GetD3D12Device() const { return m_pDevice->GetD3D12Device(); } CCryDX12DeviceContext* GetDeviceContext() const { return m_pContext; } #pragma region /* ID3D11Device implementation */ virtual HRESULT STDMETHODCALLTYPE CreateBuffer( _In_ const D3D11_BUFFER_DESC* pDesc, _In_opt_ const D3D11_SUBRESOURCE_DATA* pInitialData, _Out_opt_ ID3D11Buffer** ppBuffer) final; virtual HRESULT STDMETHODCALLTYPE CreateTexture1D( _In_ const D3D11_TEXTURE1D_DESC * pDesc, _In_reads_opt_(_Inexpressible_(pDesc->MipLevels * pDesc->ArraySize)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture1D * *ppTexture1D) final; virtual HRESULT STDMETHODCALLTYPE CreateTexture2D( _In_ const D3D11_TEXTURE2D_DESC * pDesc, _In_reads_opt_(_Inexpressible_(pDesc->MipLevels * pDesc->ArraySize)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture2D * *ppTexture2D) final; virtual HRESULT STDMETHODCALLTYPE CreateTexture3D( _In_ const D3D11_TEXTURE3D_DESC * pDesc, _In_reads_opt_(_Inexpressible_(pDesc->MipLevels)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture3D * *ppTexture3D) final; virtual HRESULT STDMETHODCALLTYPE CreateShaderResourceView( _In_ ID3D11Resource* pResource, _In_opt_ const D3D11_SHADER_RESOURCE_VIEW_DESC* pDesc, _Out_opt_ ID3D11ShaderResourceView** ppSRView) final; virtual HRESULT STDMETHODCALLTYPE CreateUnorderedAccessView( _In_ ID3D11Resource* pResource, _In_opt_ const D3D11_UNORDERED_ACCESS_VIEW_DESC* pDesc, _Out_opt_ ID3D11UnorderedAccessView** ppUAView) final; virtual HRESULT STDMETHODCALLTYPE CreateRenderTargetView( _In_ ID3D11Resource* pResource, _In_opt_ const D3D11_RENDER_TARGET_VIEW_DESC* pDesc, _Out_opt_ ID3D11RenderTargetView** ppRTView) final; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilView( _In_ ID3D11Resource* pResource, _In_opt_ const D3D11_DEPTH_STENCIL_VIEW_DESC* pDesc, _Out_opt_ ID3D11DepthStencilView** ppDepthStencilView) final; virtual HRESULT STDMETHODCALLTYPE CreateInputLayout( _In_reads_(NumElements) const D3D11_INPUT_ELEMENT_DESC * pInputElementDescs, _In_range_(0, D3D11_IA_VERTEX_INPUT_STRUCTURE_ELEMENT_COUNT) UINT NumElements, _In_ const void* pShaderBytecodeWithInputSignature, _In_ SIZE_T BytecodeLength, _Out_opt_ ID3D11InputLayout * *ppInputLayout) final; virtual HRESULT STDMETHODCALLTYPE CreateVertexShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11VertexShader** ppVertexShader) final; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11GeometryShader** ppGeometryShader) final; virtual HRESULT STDMETHODCALLTYPE CreateGeometryShaderWithStreamOutput( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_reads_opt_(NumEntries) const D3D11_SO_DECLARATION_ENTRY * pSODeclaration, _In_range_(0, D3D11_SO_STREAM_COUNT * D3D11_SO_OUTPUT_COMPONENT_COUNT) UINT NumEntries, _In_reads_opt_(NumStrides) const UINT * pBufferStrides, _In_range_(0, D3D11_SO_BUFFER_SLOT_COUNT) UINT NumStrides, _In_ UINT RasterizedStream, _In_opt_ ID3D11ClassLinkage * pClassLinkage, _Out_opt_ ID3D11GeometryShader * *ppGeometryShader) final; virtual HRESULT STDMETHODCALLTYPE CreatePixelShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11PixelShader** ppPixelShader) final; virtual HRESULT STDMETHODCALLTYPE CreateHullShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11HullShader** ppHullShader) final; virtual HRESULT STDMETHODCALLTYPE CreateDomainShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11DomainShader** ppDomainShader) final; virtual HRESULT STDMETHODCALLTYPE CreateComputeShader( _In_ const void* pShaderBytecode, _In_ SIZE_T BytecodeLength, _In_opt_ ID3D11ClassLinkage* pClassLinkage, _Out_opt_ ID3D11ComputeShader** ppComputeShader) final; virtual HRESULT STDMETHODCALLTYPE CreateClassLinkage( _Out_ ID3D11ClassLinkage** ppLinkage) final; virtual HRESULT STDMETHODCALLTYPE CreateBlendState( _In_ const D3D11_BLEND_DESC* pBlendStateDesc, _Out_opt_ ID3D11BlendState** ppBlendState) final; virtual HRESULT STDMETHODCALLTYPE CreateDepthStencilState( _In_ const D3D11_DEPTH_STENCIL_DESC* pDepthStencilDesc, _Out_opt_ ID3D11DepthStencilState** ppDepthStencilState) final; virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState( _In_ const D3D11_RASTERIZER_DESC* pRasterizerDesc, _Out_opt_ ID3D11RasterizerState** ppRasterizerState) final; virtual HRESULT STDMETHODCALLTYPE CreateSamplerState( _In_ const D3D11_SAMPLER_DESC* pSamplerDesc, _Out_opt_ ID3D11SamplerState** ppSamplerState) final; virtual HRESULT STDMETHODCALLTYPE CreateQuery( _In_ const D3D11_QUERY_DESC* pQueryDesc, _Out_opt_ ID3D11Query** ppQuery) final; virtual HRESULT STDMETHODCALLTYPE CreatePredicate( _In_ const D3D11_QUERY_DESC* pPredicateDesc, _Out_opt_ ID3D11Predicate** ppPredicate) final; virtual HRESULT STDMETHODCALLTYPE CreateCounter( _In_ const D3D11_COUNTER_DESC* pCounterDesc, _Out_opt_ ID3D11Counter** ppCounter) final; virtual HRESULT STDMETHODCALLTYPE CreateDeferredContext( UINT ContextFlags, _Out_opt_ ID3D11DeviceContext** ppDeferredContext) final; virtual HRESULT STDMETHODCALLTYPE OpenSharedResource( _In_ HANDLE hResource, _In_ REFIID ReturnedInterface, _Out_opt_ void** ppResource) final; virtual HRESULT STDMETHODCALLTYPE CheckFormatSupport( _In_ DXGI_FORMAT Format, _Out_ UINT* pFormatSupport) final; virtual HRESULT STDMETHODCALLTYPE CheckMultisampleQualityLevels( _In_ DXGI_FORMAT Format, _In_ UINT SampleCount, _Out_ UINT* pNumQualityLevels) final; virtual void STDMETHODCALLTYPE CheckCounterInfo( _Out_ D3D11_COUNTER_INFO* pCounterInfo) final; virtual HRESULT STDMETHODCALLTYPE CheckCounter( _In_ const D3D11_COUNTER_DESC* pDesc, _Out_ D3D11_COUNTER_TYPE* pType, _Out_ UINT* pActiveCounters, _Out_writes_opt_(*pNameLength) LPSTR szName, _Inout_opt_ UINT* pNameLength, _Out_writes_opt_(*pUnitsLength) LPSTR szUnits, _Inout_opt_ UINT* pUnitsLength, _Out_writes_opt_(*pDescriptionLength) LPSTR szDescription, _Inout_opt_ UINT* pDescriptionLength) final; virtual HRESULT STDMETHODCALLTYPE CheckFeatureSupport( D3D11_FEATURE Feature, _Out_writes_bytes_(FeatureSupportDataSize) void* pFeatureSupportData, UINT FeatureSupportDataSize) final; virtual HRESULT STDMETHODCALLTYPE GetPrivateData( _In_ REFGUID guid, _Inout_ UINT* pDataSize, _Out_writes_bytes_opt_(*pDataSize) void* pData) final; virtual HRESULT STDMETHODCALLTYPE SetPrivateData( _In_ REFGUID guid, _In_ UINT DataSize, _In_reads_bytes_opt_(DataSize) const void* pData) final; virtual HRESULT STDMETHODCALLTYPE SetPrivateDataInterface( _In_ REFGUID guid, _In_opt_ const IUnknown* pData) final; virtual D3D_FEATURE_LEVEL STDMETHODCALLTYPE GetFeatureLevel() final; virtual UINT STDMETHODCALLTYPE GetCreationFlags() final; virtual HRESULT STDMETHODCALLTYPE GetDeviceRemovedReason() final; virtual void STDMETHODCALLTYPE GetImmediateContext( _Out_ ID3D11DeviceContext** ppImmediateContext) final; virtual HRESULT STDMETHODCALLTYPE SetExceptionMode( UINT RaiseFlags) final; virtual UINT STDMETHODCALLTYPE GetExceptionMode() final; #pragma endregion #pragma region /* ID3D11Device1 implementation */ virtual void STDMETHODCALLTYPE GetImmediateContext1( /* [annotation] */ _Outptr_ ID3D11DeviceContext1** ppImmediateContext) final; virtual HRESULT STDMETHODCALLTYPE CreateDeferredContext1( UINT ContextFlags, /* [annotation] */ _COM_Outptr_opt_ ID3D11DeviceContext1** ppDeferredContext) final; virtual HRESULT STDMETHODCALLTYPE CreateBlendState1( /* [annotation] */ _In_ const D3D11_BLEND_DESC1* pBlendStateDesc, /* [annotation] */ _COM_Outptr_opt_ ID3D11BlendState1** ppBlendState) final; virtual HRESULT STDMETHODCALLTYPE CreateRasterizerState1( /* [annotation] */ _In_ const D3D11_RASTERIZER_DESC1* pRasterizerDesc, /* [annotation] */ _COM_Outptr_opt_ ID3D11RasterizerState1** ppRasterizerState) final; virtual HRESULT STDMETHODCALLTYPE CreateDeviceContextState( UINT Flags, /* [annotation] */ _In_reads_(FeatureLevels) const D3D_FEATURE_LEVEL * pFeatureLevels, UINT FeatureLevels, UINT SDKVersion, REFIID EmulatedInterface, /* [annotation] */ _Out_opt_ D3D_FEATURE_LEVEL * pChosenFeatureLevel, /* [annotation] */ _Out_opt_ ID3DDeviceContextState * *ppContextState) final; virtual HRESULT STDMETHODCALLTYPE OpenSharedResource1( /* [annotation] */ _In_ HANDLE hResource, /* [annotation] */ _In_ REFIID returnedInterface, /* [annotation] */ _COM_Outptr_ void** ppResource) final; virtual HRESULT STDMETHODCALLTYPE OpenSharedResourceByName( /* [annotation] */ _In_ LPCWSTR lpName, /* [annotation] */ _In_ DWORD dwDesiredAccess, /* [annotation] */ _In_ REFIID returnedInterface, /* [annotation] */ _COM_Outptr_ void** ppResource) final; #pragma endregion HRESULT STDMETHODCALLTYPE CreateTexture1D( _In_ const D3D11_TEXTURE1D_DESC * pDesc, _In_ const FLOAT cClearValue[4], _In_reads_opt_(_Inexpressible_(pDesc->MipLevels * pDesc->ArraySize)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture1D * *ppTexture1D); HRESULT STDMETHODCALLTYPE CreateTexture2D( _In_ const D3D11_TEXTURE2D_DESC * pDesc, _In_ const FLOAT cClearValue[4], _In_reads_opt_(_Inexpressible_(pDesc->MipLevels * pDesc->ArraySize)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture2D * *ppTexture2D); HRESULT STDMETHODCALLTYPE CreateTexture3D( _In_ const D3D11_TEXTURE3D_DESC * pDesc, _In_ const FLOAT cClearValue[4], _In_reads_opt_(_Inexpressible_(pDesc->MipLevels)) const D3D11_SUBRESOURCE_DATA * pInitialData, _Out_opt_ ID3D11Texture3D * *ppTexture3D); HRESULT STDMETHODCALLTYPE CreateStagingResource( _In_ ID3D11Resource* pInputResource, _Out_ ID3D11Resource** ppStagingResource, _In_ BOOL Upload); HRESULT STDMETHODCALLTYPE ReleaseStagingResource( _In_ ID3D11Resource* pStagingResource); private: DX12::SmartPtr m_pDevice; DX12::SmartPtr m_pContext; }; #endif // __CCRYDX12DEVICE__