| // Copyright 2024 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef MEDIA_BASE_WIN_D3D12_MOCKS_H_ |
| #define MEDIA_BASE_WIN_D3D12_MOCKS_H_ |
| |
| #include <d3d12.h> |
| #include <wrl.h> |
| |
| #include "media/base/win/test_utils.h" |
| |
| namespace media { |
| |
| class D3D12DeviceMock |
| : public Microsoft::WRL::RuntimeClass< |
| Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, |
| ID3D12Device> { |
| public: |
| D3D12DeviceMock(); |
| ~D3D12DeviceMock() override; |
| |
| MOCK_STDCALL_METHOD2(QueryInterface, HRESULT(REFIID riid, void** ppv)); |
| |
| MOCK_STDCALL_METHOD3(GetPrivateData, HRESULT(REFGUID, UINT*, void*)); |
| MOCK_STDCALL_METHOD3(SetPrivateData, HRESULT(REFGUID, UINT, const void*)); |
| MOCK_STDCALL_METHOD2(SetPrivateDataInterface, |
| HRESULT(REFGUID, const IUnknown*)); |
| MOCK_STDCALL_METHOD1(SetName, HRESULT(LPCWSTR)); |
| MOCK_STDCALL_METHOD0(GetNodeCount, UINT(void)); |
| MOCK_STDCALL_METHOD3(CreateCommandQueue, |
| HRESULT(const D3D12_COMMAND_QUEUE_DESC*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD3(CreateCommandAllocator, |
| HRESULT(D3D12_COMMAND_LIST_TYPE, REFIID, void**)); |
| MOCK_STDCALL_METHOD3(CreateGraphicsPipelineState, |
| HRESULT(const D3D12_GRAPHICS_PIPELINE_STATE_DESC*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD3(CreateComputePipelineState, |
| HRESULT(const D3D12_COMPUTE_PIPELINE_STATE_DESC*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD6(CreateCommandList, |
| HRESULT(UINT, |
| D3D12_COMMAND_LIST_TYPE, |
| ID3D12CommandAllocator*, |
| ID3D12PipelineState*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD3(CheckFeatureSupport, |
| HRESULT(D3D12_FEATURE Feature, |
| void* pFeatureSupportData, |
| UINT FeatureSupportDataSize)); |
| MOCK_STDCALL_METHOD3(CreateDescriptorHeap, |
| HRESULT(const D3D12_DESCRIPTOR_HEAP_DESC*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD5(CreateRootSignature, |
| HRESULT(UINT, const void*, SIZE_T, REFIID, void**)); |
| MOCK_STDCALL_METHOD2(CreateConstantBufferView, |
| void(const D3D12_CONSTANT_BUFFER_VIEW_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD3(CreateShaderResourceView, |
| void(ID3D12Resource*, |
| const D3D12_SHADER_RESOURCE_VIEW_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD4(CreateUnorderedAccessView, |
| void(ID3D12Resource*, |
| ID3D12Resource*, |
| const D3D12_UNORDERED_ACCESS_VIEW_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD3(CreateRenderTargetView, |
| void(ID3D12Resource*, |
| const D3D12_RENDER_TARGET_VIEW_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD3(CreateDepthStencilView, |
| void(ID3D12Resource*, |
| const D3D12_DEPTH_STENCIL_VIEW_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD2(CreateSampler, |
| void(const D3D12_SAMPLER_DESC*, |
| D3D12_CPU_DESCRIPTOR_HANDLE)); |
| MOCK_STDCALL_METHOD7(CopyDescriptors, |
| void(UINT, |
| const D3D12_CPU_DESCRIPTOR_HANDLE*, |
| const UINT*, |
| UINT, |
| const D3D12_CPU_DESCRIPTOR_HANDLE*, |
| const UINT*, |
| D3D12_DESCRIPTOR_HEAP_TYPE)); |
| MOCK_STDCALL_METHOD4(CopyDescriptorsSimple, |
| void(UINT, |
| D3D12_CPU_DESCRIPTOR_HANDLE, |
| D3D12_CPU_DESCRIPTOR_HANDLE, |
| D3D12_DESCRIPTOR_HEAP_TYPE)); |
| MOCK_STDCALL_METHOD3( |
| GetResourceAllocationInfo, |
| D3D12_RESOURCE_ALLOCATION_INFO(UINT, UINT, const D3D12_RESOURCE_DESC*)); |
| MOCK_STDCALL_METHOD2(GetCustomHeapProperties, |
| D3D12_HEAP_PROPERTIES(UINT, D3D12_HEAP_TYPE)); |
| MOCK_STDCALL_METHOD7(CreateCommittedResource, |
| HRESULT(const D3D12_HEAP_PROPERTIES*, |
| D3D12_HEAP_FLAGS, |
| const D3D12_RESOURCE_DESC*, |
| D3D12_RESOURCE_STATES, |
| const D3D12_CLEAR_VALUE*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD3(CreateHeap, |
| HRESULT(const D3D12_HEAP_DESC*, REFIID, void**)); |
| MOCK_STDCALL_METHOD7(CreatePlacedResource, |
| HRESULT(ID3D12Heap*, |
| UINT64, |
| const D3D12_RESOURCE_DESC*, |
| D3D12_RESOURCE_STATES, |
| const D3D12_CLEAR_VALUE*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD5(CreateReservedResource, |
| HRESULT(const D3D12_RESOURCE_DESC*, |
| D3D12_RESOURCE_STATES, |
| const D3D12_CLEAR_VALUE*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD5(CreateSharedHandle, |
| HRESULT(ID3D12DeviceChild*, |
| const SECURITY_ATTRIBUTES*, |
| DWORD, |
| LPCWSTR, |
| HANDLE*)); |
| MOCK_STDCALL_METHOD3(OpenSharedHandle, HRESULT(HANDLE, REFIID, void**)); |
| MOCK_STDCALL_METHOD3(OpenSharedHandleByName, |
| HRESULT(LPCWSTR, DWORD, HANDLE*)); |
| MOCK_STDCALL_METHOD2(MakeResident, HRESULT(UINT, ID3D12Pageable* const*)); |
| MOCK_STDCALL_METHOD2(Evict, HRESULT(UINT, ID3D12Pageable* const*)); |
| MOCK_STDCALL_METHOD4(CreateFence, |
| HRESULT(UINT64, D3D12_FENCE_FLAGS, REFIID, void**)); |
| MOCK_STDCALL_METHOD0(GetDeviceRemovedReason, HRESULT()); |
| MOCK_STDCALL_METHOD8(GetCopyableFootprints, |
| void(const D3D12_RESOURCE_DESC*, |
| UINT, |
| UINT, |
| UINT64, |
| D3D12_PLACED_SUBRESOURCE_FOOTPRINT*, |
| UINT*, |
| UINT64*, |
| UINT64*)); |
| MOCK_STDCALL_METHOD3(CreateQueryHeap, |
| HRESULT(const D3D12_QUERY_HEAP_DESC*, REFIID, void**)); |
| MOCK_STDCALL_METHOD1(SetStablePowerState, HRESULT(BOOL)); |
| MOCK_STDCALL_METHOD4(CreateCommandSignature, |
| HRESULT(const D3D12_COMMAND_SIGNATURE_DESC*, |
| ID3D12RootSignature*, |
| REFIID, |
| void**)); |
| MOCK_STDCALL_METHOD7(GetResourceTiling, |
| void(ID3D12Resource*, |
| UINT*, |
| D3D12_PACKED_MIP_INFO*, |
| D3D12_TILE_SHAPE*, |
| UINT*, |
| UINT, |
| D3D12_SUBRESOURCE_TILING*)); |
| MOCK_STDCALL_METHOD0(GetAdapterLuid, LUID(void)); |
| MOCK_STDCALL_METHOD1(GetDescriptorHandleIncrementSize, |
| UINT(D3D12_DESCRIPTOR_HEAP_TYPE)); |
| }; |
| |
| class D3D12ResourceMock |
| : public Microsoft::WRL::RuntimeClass< |
| Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, |
| ID3D12Resource> { |
| public: |
| D3D12ResourceMock(); |
| ~D3D12ResourceMock() override; |
| MOCK_STDCALL_METHOD3(GetPrivateData, HRESULT(REFGUID, UINT*, void*)); |
| MOCK_STDCALL_METHOD3(SetPrivateData, HRESULT(REFGUID, UINT, const void*)); |
| MOCK_STDCALL_METHOD2(SetPrivateDataInterface, |
| HRESULT(REFGUID, const IUnknown*)); |
| MOCK_STDCALL_METHOD1(SetName, HRESULT(LPCWSTR)); |
| MOCK_STDCALL_METHOD2(GetDevice, HRESULT(REFIID, void**)); |
| MOCK_STDCALL_METHOD0(GetDesc, D3D12_RESOURCE_DESC(void)); |
| MOCK_STDCALL_METHOD0(GetGPUVirtualAddress, D3D12_GPU_VIRTUAL_ADDRESS(void)); |
| MOCK_STDCALL_METHOD3(Map, HRESULT(UINT, const D3D12_RANGE*, void**)); |
| MOCK_STDCALL_METHOD2(Unmap, void(UINT, const D3D12_RANGE*)); |
| MOCK_STDCALL_METHOD2(GetHeapProperties, |
| HRESULT(D3D12_HEAP_PROPERTIES*, D3D12_HEAP_FLAGS*)); |
| MOCK_STDCALL_METHOD5( |
| WriteToSubresource, |
| HRESULT(UINT, const D3D12_BOX*, const void*, UINT, UINT)); |
| MOCK_STDCALL_METHOD5(ReadFromSubresource, |
| HRESULT(void*, UINT, UINT, UINT, const D3D12_BOX*)); |
| }; |
| |
| class D3D12GraphicsCommandListMock |
| : public Microsoft::WRL::RuntimeClass< |
| Microsoft::WRL::RuntimeClassFlags<Microsoft::WRL::ClassicCom>, |
| ID3D12GraphicsCommandList> { |
| public: |
| D3D12GraphicsCommandListMock(); |
| ~D3D12GraphicsCommandListMock() override; |
| |
| // Interfaces of ID3D12Object |
| |
| MOCK_STDCALL_METHOD3(GetPrivateData, |
| HRESULT(REFGUID guid, UINT* pDataSize, void* pData)); |
| MOCK_STDCALL_METHOD3(SetPrivateData, |
| HRESULT(REFGUID guid, UINT dataSize, const void* pData)); |
| MOCK_STDCALL_METHOD2(SetPrivateDataInterface, |
| HRESULT(REFGUID guid, const IUnknown* pData)); |
| MOCK_STDCALL_METHOD1(SetName, HRESULT(LPCWSTR Name)); |
| |
| // Interface of ID3D12DeviceChild |
| |
| MOCK_STDCALL_METHOD2(GetDevice, HRESULT(REFIID riid, void** ppvDevice)); |
| |
| // Interface of ID3D12CommandList |
| |
| MOCK_STDCALL_METHOD0(GetType, D3D12_COMMAND_LIST_TYPE()); |
| |
| // Interfaces of ID3D12GraphicsCommandList |
| |
| MOCK_STDCALL_METHOD0(Close, HRESULT()); |
| MOCK_STDCALL_METHOD2(Reset, |
| HRESULT(ID3D12CommandAllocator* pAllocator, |
| ID3D12PipelineState* pInitialState)); |
| MOCK_STDCALL_METHOD1(ClearState, void(ID3D12PipelineState* pPipelineState)); |
| MOCK_STDCALL_METHOD4(DrawInstanced, |
| void(UINT VertexCountPerInstance, |
| UINT InstanceCount, |
| UINT StartVertexLocation, |
| UINT StartInstanceLocation)); |
| MOCK_STDCALL_METHOD5(DrawIndexedInstanced, |
| void(UINT IndexCountPerInstance, |
| UINT InstanceCount, |
| UINT StartIndexLocation, |
| INT BaseVertexLocation, |
| UINT StartInstanceLocation)); |
| MOCK_STDCALL_METHOD3(Dispatch, |
| void(UINT ThreadGroupCountX, |
| UINT ThreadGroupCountY, |
| UINT ThreadGroupCountZ)); |
| MOCK_STDCALL_METHOD5(CopyBufferRegion, |
| void(ID3D12Resource* pDstBuffer, |
| UINT64 DstOffset, |
| ID3D12Resource* pSrcBuffer, |
| UINT64 SrcOffset, |
| UINT64 NumBytes)); |
| MOCK_STDCALL_METHOD6(CopyTextureRegion, |
| void(const D3D12_TEXTURE_COPY_LOCATION* pDst, |
| UINT DstX, |
| UINT DstY, |
| UINT DstZ, |
| const D3D12_TEXTURE_COPY_LOCATION* pSrc, |
| const D3D12_BOX* pSrcBox)); |
| MOCK_STDCALL_METHOD2(CopyResource, |
| void(ID3D12Resource* pDstResource, |
| ID3D12Resource* pSrcResource)); |
| MOCK_STDCALL_METHOD6( |
| CopyTiles, |
| void(ID3D12Resource* pTiledResource, |
| const D3D12_TILED_RESOURCE_COORDINATE* pTileRegionStartCoordinate, |
| const D3D12_TILE_REGION_SIZE* pTileRegionSize, |
| ID3D12Resource* pBuffer, |
| UINT64 BufferStartOffsetInBytes, |
| D3D12_TILE_COPY_FLAGS Flags)); |
| MOCK_STDCALL_METHOD5(ResolveSubresource, |
| void(ID3D12Resource* pDstResource, |
| UINT DstSubresource, |
| ID3D12Resource* pSrcResource, |
| UINT SrcSubresource, |
| DXGI_FORMAT Format)); |
| MOCK_STDCALL_METHOD1(IASetPrimitiveTopology, |
| void(D3D12_PRIMITIVE_TOPOLOGY PrimitiveTopology)); |
| MOCK_STDCALL_METHOD2(RSSetViewports, |
| void(UINT NumViewports, |
| const D3D12_VIEWPORT* pViewports)); |
| MOCK_STDCALL_METHOD2(RSSetScissorRects, |
| void(UINT NumRects, const D3D12_RECT* pRects)); |
| MOCK_STDCALL_METHOD1(OMSetBlendFactor, void(const FLOAT BlendFactor[4])); |
| MOCK_STDCALL_METHOD1(OMSetStencilRef, void(UINT StencilRef)); |
| MOCK_STDCALL_METHOD1(SetPipelineState, |
| void(ID3D12PipelineState* pPipelineState)); |
| MOCK_STDCALL_METHOD2(ResourceBarrier, |
| void(UINT NumBarriers, |
| const D3D12_RESOURCE_BARRIER* pBarriers)); |
| MOCK_STDCALL_METHOD1(ExecuteBundle, |
| void(ID3D12GraphicsCommandList* pCommandList)); |
| MOCK_STDCALL_METHOD2(SetDescriptorHeaps, |
| void(UINT NumDescriptorHeaps, |
| ID3D12DescriptorHeap* const* ppDescriptorHeaps)); |
| MOCK_STDCALL_METHOD1(SetComputeRootSignature, |
| void(ID3D12RootSignature* pRootSignature)); |
| MOCK_STDCALL_METHOD1(SetGraphicsRootSignature, |
| void(ID3D12RootSignature* pRootSignature)); |
| MOCK_STDCALL_METHOD2(SetComputeRootDescriptorTable, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor)); |
| MOCK_STDCALL_METHOD2(SetGraphicsRootDescriptorTable, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_DESCRIPTOR_HANDLE BaseDescriptor)); |
| MOCK_STDCALL_METHOD3(SetComputeRoot32BitConstant, |
| void(UINT RootParameterIndex, |
| UINT SrcData, |
| UINT DestOffsetIn32BitValues)); |
| MOCK_STDCALL_METHOD3(SetGraphicsRoot32BitConstant, |
| void(UINT RootParameterIndex, |
| UINT SrcData, |
| UINT DestOffsetIn32BitValues)); |
| MOCK_STDCALL_METHOD4(SetComputeRoot32BitConstants, |
| void(UINT RootParameterIndex, |
| UINT Num32BitValuesToSet, |
| const void* pSrcData, |
| UINT DestOffsetIn32BitValues)); |
| MOCK_STDCALL_METHOD4(SetGraphicsRoot32BitConstants, |
| void(UINT RootParameterIndex, |
| UINT Num32BitValuesToSet, |
| const void* pSrcData, |
| UINT DestOffsetIn32BitValues)); |
| MOCK_STDCALL_METHOD2(SetComputeRootConstantBufferView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD2(SetGraphicsRootConstantBufferView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD2(SetComputeRootShaderResourceView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD2(SetGraphicsRootShaderResourceView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD2(SetComputeRootUnorderedAccessView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD2(SetGraphicsRootUnorderedAccessView, |
| void(UINT RootParameterIndex, |
| D3D12_GPU_VIRTUAL_ADDRESS BufferLocation)); |
| MOCK_STDCALL_METHOD1(IASetIndexBuffer, |
| void(const D3D12_INDEX_BUFFER_VIEW* pView)); |
| MOCK_STDCALL_METHOD3(IASetVertexBuffers, |
| void(UINT StartSlot, |
| UINT NumViews, |
| const D3D12_VERTEX_BUFFER_VIEW* pViews)); |
| MOCK_STDCALL_METHOD3(SOSetTargets, |
| void(UINT StartSlot, |
| UINT NumViews, |
| const D3D12_STREAM_OUTPUT_BUFFER_VIEW* pViews)); |
| MOCK_STDCALL_METHOD4( |
| OMSetRenderTargets, |
| void(UINT NumRenderTargetDescriptors, |
| const D3D12_CPU_DESCRIPTOR_HANDLE* pRenderTargetDescriptors, |
| BOOL RTsSingleHandleToDescriptorRange, |
| const D3D12_CPU_DESCRIPTOR_HANDLE* pDepthStencilDescriptor)); |
| MOCK_STDCALL_METHOD6(ClearDepthStencilView, |
| void(D3D12_CPU_DESCRIPTOR_HANDLE DepthStencilView, |
| D3D12_CLEAR_FLAGS ClearFlags, |
| FLOAT Depth, |
| UINT8 Stencil, |
| UINT NumRects, |
| const D3D12_RECT* pRects)); |
| MOCK_STDCALL_METHOD4(ClearRenderTargetView, |
| void(D3D12_CPU_DESCRIPTOR_HANDLE RenderTargetView, |
| const FLOAT ColorRGBA[4], |
| UINT NumRects, |
| const D3D12_RECT* pRects)); |
| MOCK_STDCALL_METHOD6( |
| ClearUnorderedAccessViewUint, |
| void(D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, |
| D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, |
| ID3D12Resource* pResource, |
| const UINT Values[4], |
| UINT NumRects, |
| const D3D12_RECT* pRects)); |
| MOCK_STDCALL_METHOD6( |
| ClearUnorderedAccessViewFloat, |
| void(D3D12_GPU_DESCRIPTOR_HANDLE ViewGPUHandleInCurrentHeap, |
| D3D12_CPU_DESCRIPTOR_HANDLE ViewCPUHandle, |
| ID3D12Resource* pResource, |
| const FLOAT Values[4], |
| UINT NumRects, |
| const D3D12_RECT* pRects)); |
| MOCK_STDCALL_METHOD2(DiscardResource, |
| void(ID3D12Resource* pResource, |
| const D3D12_DISCARD_REGION* pRegion)); |
| MOCK_STDCALL_METHOD3(BeginQuery, |
| void(ID3D12QueryHeap* pQueryHeap, |
| D3D12_QUERY_TYPE Type, |
| UINT Index)); |
| MOCK_STDCALL_METHOD3(EndQuery, |
| void(ID3D12QueryHeap* pQueryHeap, |
| D3D12_QUERY_TYPE Type, |
| UINT Index)); |
| MOCK_STDCALL_METHOD6(ResolveQueryData, |
| void(ID3D12QueryHeap* pQueryHeap, |
| D3D12_QUERY_TYPE Type, |
| UINT StartIndex, |
| UINT NumQueries, |
| ID3D12Resource* pDestinationBuffer, |
| UINT64 AlignedDestinationBufferOffset)); |
| MOCK_STDCALL_METHOD3(SetPredication, |
| void(ID3D12Resource* pBuffer, |
| UINT64 AlignedBufferOffset, |
| D3D12_PREDICATION_OP Operation)); |
| MOCK_STDCALL_METHOD3(SetMarker, |
| void(UINT Metadata, const void* pData, UINT Size)); |
| MOCK_STDCALL_METHOD3(BeginEvent, |
| void(UINT Metadata, const void* pData, UINT Size)); |
| MOCK_STDCALL_METHOD0(EndEvent, void()); |
| MOCK_STDCALL_METHOD6(ExecuteIndirect, |
| void(ID3D12CommandSignature* pCommandSignature, |
| UINT MaxCommandCount, |
| ID3D12Resource* pArgumentBuffer, |
| UINT64 ArgumentBufferOffset, |
| ID3D12Resource* pCountBuffer, |
| UINT64 CountBufferOffset)); |
| }; |
| |
| } // namespace media |
| |
| #endif // MEDIA_BASE_WIN_D3D12_MOCKS_H_ |