blob: 9d4bb751bfc83e962b57f330708fc9440e11beaf [file] [log] [blame]
// Copyright 2021 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef MEDIA_CAPTURE_VIDEO_WIN_D3D_CAPTURE_TEST_UTILS_H_
#define MEDIA_CAPTURE_VIDEO_WIN_D3D_CAPTURE_TEST_UTILS_H_
#include <d3d11_4.h>
#include <wrl.h>
#include "base/memory/ref_counted.h"
#include "media/base/win/test_utils.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace media {
template <class... Interface>
class MockInterface
: public base::RefCountedThreadSafe<MockInterface<Interface...>> {
public:
// IUnknown
IFACEMETHODIMP QueryInterface(REFIID riid, void** object) {
if (riid == __uuidof(IUnknown)) {
this->AddRef();
*object = this;
return S_OK;
}
return E_NOINTERFACE;
}
IFACEMETHODIMP_(ULONG) AddRef() {
base::RefCountedThreadSafe<MockInterface<Interface...>>::AddRef();
return 1U;
}
IFACEMETHODIMP_(ULONG) Release() {
base::RefCountedThreadSafe<MockInterface<Interface...>>::Release();
return 1U;
}
protected:
friend class base::RefCountedThreadSafe<MockInterface<Interface...>>;
virtual ~MockInterface() = default;
};
template <class Interface, class... Interfaces>
class MockInterface<Interface, Interfaces...>
: public MockInterface<Interfaces...>, public Interface {
public:
IFACEMETHODIMP QueryInterface(REFIID riid, void** object) override {
if (riid == __uuidof(Interface)) {
this->AddRef();
*object = static_cast<Interface*>(this);
return S_OK;
}
return MockInterface<Interfaces...>::QueryInterface(riid, object);
}
IFACEMETHODIMP_(ULONG) AddRef() override {
return MockInterface<Interfaces...>::AddRef();
}
IFACEMETHODIMP_(ULONG) Release() override {
return MockInterface<Interfaces...>::Release();
}
};
class MockD3D11DeviceContext final : public MockInterface<ID3D11DeviceContext> {
public:
MockD3D11DeviceContext();
// ID3D11DeviceContext
IFACEMETHODIMP_(void)
VSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers_out) override;
IFACEMETHODIMP_(void)
PSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views_out) override;
IFACEMETHODIMP_(void)
PSSetShader(ID3D11PixelShader* pixel_shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
PSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers_out) override;
IFACEMETHODIMP_(void)
VSSetShader(ID3D11VertexShader* vertex_shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
DrawIndexed(UINT index_count,
UINT start_index_location,
INT base_vertex_location) override;
IFACEMETHODIMP_(void)
Draw(UINT vertex_count, UINT start_vertex_location) override;
MOCK_METHOD5(OnMap,
HRESULT(ID3D11Resource*,
UINT,
D3D11_MAP,
UINT,
D3D11_MAPPED_SUBRESOURCE*));
IFACEMETHODIMP Map(ID3D11Resource* resource,
UINT subresource,
D3D11_MAP MapType,
UINT MapFlags,
D3D11_MAPPED_SUBRESOURCE* mapped_resource) override;
MOCK_METHOD2(OnUnmap, void(ID3D11Resource*, UINT));
IFACEMETHODIMP_(void)
Unmap(ID3D11Resource* resource, UINT subresource) override;
IFACEMETHODIMP_(void)
PSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers) override;
IFACEMETHODIMP_(void)
IASetInputLayout(ID3D11InputLayout* input_layout) override;
IFACEMETHODIMP_(void)
IASetVertexBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* vertex_buffers,
const UINT* strides,
const UINT* offsets) override;
IFACEMETHODIMP_(void)
IASetIndexBuffer(ID3D11Buffer* index_buffer,
DXGI_FORMAT format,
UINT offset) override;
IFACEMETHODIMP_(void)
DrawIndexedInstanced(UINT index_count_per_instance,
UINT instance_count,
UINT start_index_location,
INT base_vertex_location,
UINT start_instance_location) override;
IFACEMETHODIMP_(void)
DrawInstanced(UINT vertex_count_per_instance,
UINT instance_count,
UINT start_vertex_location,
UINT start_instance_location) override;
IFACEMETHODIMP_(void)
GSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers) override;
IFACEMETHODIMP_(void)
GSSetShader(ID3D11GeometryShader* shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY topology) override;
IFACEMETHODIMP_(void)
VSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views) override;
IFACEMETHODIMP_(void)
VSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers) override;
IFACEMETHODIMP_(void) Begin(ID3D11Asynchronous* async) override;
IFACEMETHODIMP_(void) End(ID3D11Asynchronous* async) override;
IFACEMETHODIMP GetData(ID3D11Asynchronous* async,
void* data,
UINT data_size,
UINT get_data_flags) override;
IFACEMETHODIMP_(void)
SetPredication(ID3D11Predicate* pPredicate, BOOL PredicateValue) override;
IFACEMETHODIMP_(void)
GSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views) override;
IFACEMETHODIMP_(void)
GSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers) override;
IFACEMETHODIMP_(void)
OMSetRenderTargets(UINT num_views,
ID3D11RenderTargetView* const* render_target_views,
ID3D11DepthStencilView* depth_stencil_view) override;
IFACEMETHODIMP_(void)
OMSetRenderTargetsAndUnorderedAccessViews(
UINT num_rtvs,
ID3D11RenderTargetView* const* render_target_views,
ID3D11DepthStencilView* depth_stencil_view,
UINT uav_start_slot,
UINT num_uavs,
ID3D11UnorderedAccessView* const* unordered_access_views,
const UINT* uav_initial_counts) override;
IFACEMETHODIMP_(void)
OMSetBlendState(ID3D11BlendState* blend_state,
const FLOAT blend_factor[4],
UINT sample_mask) override;
IFACEMETHODIMP_(void)
OMSetDepthStencilState(ID3D11DepthStencilState* depth_stencil_state,
UINT stencil_ref) override;
IFACEMETHODIMP_(void)
SOSetTargets(UINT num_buffers,
ID3D11Buffer* const* so_targets,
const UINT* offsets) override;
IFACEMETHODIMP_(void) DrawAuto() override;
IFACEMETHODIMP_(void)
DrawIndexedInstancedIndirect(ID3D11Buffer* buffer_for_args,
UINT aligned_byte_offset_for_args) override;
IFACEMETHODIMP_(void)
DrawInstancedIndirect(ID3D11Buffer* buffer_for_args,
UINT aligned_byte_offset_for_args) override;
IFACEMETHODIMP_(void)
Dispatch(UINT thread_group_count_x,
UINT thread_group_count_y,
UINT thread_group_count_z) override;
IFACEMETHODIMP_(void)
DispatchIndirect(ID3D11Buffer* buffer_for_args,
UINT aligned_byte_offset_for_args) override;
IFACEMETHODIMP_(void)
RSSetState(ID3D11RasterizerState* rasterizer_state) override;
IFACEMETHODIMP_(void)
RSSetViewports(UINT num_viewports, const D3D11_VIEWPORT* viewports) override;
IFACEMETHODIMP_(void)
RSSetScissorRects(UINT num_rects, const D3D11_RECT* rects) override;
IFACEMETHODIMP_(void)
CopySubresourceRegion(ID3D11Resource* dest_resource,
UINT dest_subresource,
UINT dest_x,
UINT dest_y,
UINT dest_z,
ID3D11Resource* source_resource,
UINT source_subresource,
const D3D11_BOX* source_box) override;
MOCK_METHOD8(OnCopySubresourceRegion,
void(ID3D11Resource*,
UINT,
UINT,
UINT,
UINT,
ID3D11Resource*,
UINT,
const D3D11_BOX*));
IFACEMETHODIMP_(void)
CopyResource(ID3D11Resource* dest_resource,
ID3D11Resource* source_resource) override;
IFACEMETHODIMP_(void)
UpdateSubresource(ID3D11Resource* dest_resource,
UINT dest_subresource,
const D3D11_BOX* dest_box,
const void* source_data,
UINT source_row_pitch,
UINT source_depth_pitch) override;
IFACEMETHODIMP_(void)
CopyStructureCount(ID3D11Buffer* dest_buffer,
UINT dest_aligned_byte_offset,
ID3D11UnorderedAccessView* source_view) override;
IFACEMETHODIMP_(void)
ClearRenderTargetView(ID3D11RenderTargetView* render_target_view,
const FLOAT color_rgba[4]) override;
IFACEMETHODIMP_(void)
ClearUnorderedAccessViewUint(ID3D11UnorderedAccessView* unordered_access_view,
const UINT values[4]) override;
IFACEMETHODIMP_(void)
ClearUnorderedAccessViewFloat(
ID3D11UnorderedAccessView* unordered_access_view,
const FLOAT values[4]) override;
IFACEMETHODIMP_(void)
ClearDepthStencilView(ID3D11DepthStencilView* depth_stencil_view,
UINT clear_flags,
FLOAT depth,
UINT8 stencil) override;
IFACEMETHODIMP_(void)
GenerateMips(ID3D11ShaderResourceView* shader_resource_view) override;
IFACEMETHODIMP_(void)
SetResourceMinLOD(ID3D11Resource* resource, FLOAT min_lod) override;
IFACEMETHODIMP_(FLOAT) GetResourceMinLOD(ID3D11Resource* resource) override;
IFACEMETHODIMP_(void)
ResolveSubresource(ID3D11Resource* dest_resource,
UINT dest_subresource,
ID3D11Resource* source_resource,
UINT source_subresource,
DXGI_FORMAT format) override;
IFACEMETHODIMP_(void)
ExecuteCommandList(ID3D11CommandList* command_list,
BOOL restore_context_state) override;
IFACEMETHODIMP_(void)
HSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views) override;
IFACEMETHODIMP_(void)
HSSetShader(ID3D11HullShader* hull_shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
HSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers) override;
IFACEMETHODIMP_(void)
HSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers) override;
IFACEMETHODIMP_(void)
DSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views) override;
IFACEMETHODIMP_(void)
DSSetShader(ID3D11DomainShader* domain_shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
DSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers) override;
IFACEMETHODIMP_(void)
DSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers) override;
IFACEMETHODIMP_(void)
CSSetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView* const* shader_resource_views) override;
IFACEMETHODIMP_(void)
CSSetUnorderedAccessViews(
UINT start_slot,
UINT num_uavs,
ID3D11UnorderedAccessView* const* unordered_access_views,
const UINT* uav_initial_counts) override;
IFACEMETHODIMP_(void)
CSSetShader(ID3D11ComputeShader* computer_shader,
ID3D11ClassInstance* const* class_instances,
UINT num_class_instances) override;
IFACEMETHODIMP_(void)
CSSetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState* const* samplers) override;
IFACEMETHODIMP_(void)
CSSetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer* const* constant_buffers) override;
IFACEMETHODIMP_(void)
VSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void)
PSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
PSGetShader(ID3D11PixelShader** pixel_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
PSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
VSGetShader(ID3D11VertexShader** vertex_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
PSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void)
IAGetInputLayout(ID3D11InputLayout** input_layout) override;
IFACEMETHODIMP_(void)
IAGetVertexBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** vertex_buffers,
UINT* strides,
UINT* offsets) override;
IFACEMETHODIMP_(void)
IAGetIndexBuffer(ID3D11Buffer** index_buffer,
DXGI_FORMAT* format,
UINT* offset) override;
IFACEMETHODIMP_(void)
GSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void)
GSGetShader(ID3D11GeometryShader** geometry_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
IAGetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY* topology) override;
IFACEMETHODIMP_(void)
VSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
VSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
GetPredication(ID3D11Predicate** predicate, BOOL* predicate_value) override;
IFACEMETHODIMP_(void)
GSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
GSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
OMGetRenderTargets(UINT num_views,
ID3D11RenderTargetView** render_target_views,
ID3D11DepthStencilView** depth_stencil_view) override;
IFACEMETHODIMP_(void)
OMGetRenderTargetsAndUnorderedAccessViews(
UINT num_rtvs,
ID3D11RenderTargetView** render_target_views,
ID3D11DepthStencilView** depth_stencil_view,
UINT uav_start_slot,
UINT num_uavs,
ID3D11UnorderedAccessView** unordered_access_views) override;
IFACEMETHODIMP_(void)
OMGetBlendState(ID3D11BlendState** blend_state,
FLOAT blend_factor[4],
UINT* sample_mask) override;
IFACEMETHODIMP_(void)
OMGetDepthStencilState(ID3D11DepthStencilState** depth_stencil_state,
UINT* stencil_ref) override;
IFACEMETHODIMP_(void)
SOGetTargets(UINT num_buffers, ID3D11Buffer** so_targets) override;
IFACEMETHODIMP_(void)
RSGetState(ID3D11RasterizerState** rasterizer_state) override;
IFACEMETHODIMP_(void)
RSGetViewports(UINT* num_viewports, D3D11_VIEWPORT* viewports) override;
IFACEMETHODIMP_(void)
RSGetScissorRects(UINT* num_rects, D3D11_RECT* rects) override;
IFACEMETHODIMP_(void)
HSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
HSGetShader(ID3D11HullShader** hull_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
HSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
HSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void)
DSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
DSGetShader(ID3D11DomainShader** domain_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
DSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
DSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void)
CSGetShaderResources(
UINT start_slot,
UINT num_views,
ID3D11ShaderResourceView** shader_resource_views) override;
IFACEMETHODIMP_(void)
CSGetUnorderedAccessViews(
UINT start_slot,
UINT num_uavs,
ID3D11UnorderedAccessView** unordered_access_views) override;
IFACEMETHODIMP_(void)
CSGetShader(ID3D11ComputeShader** pcomputer_shader,
ID3D11ClassInstance** class_instances,
UINT* num_class_instances) override;
IFACEMETHODIMP_(void)
CSGetSamplers(UINT start_slot,
UINT num_samplers,
ID3D11SamplerState** samplers) override;
IFACEMETHODIMP_(void)
CSGetConstantBuffers(UINT start_slot,
UINT num_buffers,
ID3D11Buffer** constant_buffers) override;
IFACEMETHODIMP_(void) ClearState() override;
IFACEMETHODIMP_(void) Flush() override;
IFACEMETHODIMP_(D3D11_DEVICE_CONTEXT_TYPE) GetType() override;
IFACEMETHODIMP_(UINT) GetContextFlags() override;
IFACEMETHODIMP FinishCommandList(BOOL restore_deferred_context_state,
ID3D11CommandList** command_list) override;
// ID3D11DeviceChild
IFACEMETHODIMP_(void) GetDevice(ID3D11Device** device) override;
IFACEMETHODIMP GetPrivateData(REFGUID guid,
UINT* data_size,
void* data) override;
IFACEMETHODIMP SetPrivateData(REFGUID guid,
UINT data_size,
const void* data) override;
IFACEMETHODIMP SetPrivateDataInterface(REFGUID guid,
const IUnknown* data) override;
private:
~MockD3D11DeviceContext() override;
};
class MockD3D11Device final : public MockInterface<ID3D11Device1> {
public:
MockD3D11Device();
IFACEMETHODIMP QueryInterface(REFIID riid, void** object) override {
if (riid == __uuidof(ID3D11Device)) {
this->AddRef();
*object = static_cast<ID3D11Device*>(this);
return S_OK;
}
return MockInterface::QueryInterface(riid, object);
}
// ID3D11Device
IFACEMETHODIMP CreateBuffer(const D3D11_BUFFER_DESC* desc,
const D3D11_SUBRESOURCE_DATA* initial_data,
ID3D11Buffer** ppBuffer);
IFACEMETHODIMP CreateTexture1D(const D3D11_TEXTURE1D_DESC* desc,
const D3D11_SUBRESOURCE_DATA* initial_data,
ID3D11Texture1D** texture1D);
IFACEMETHODIMP CreateTexture2D(const D3D11_TEXTURE2D_DESC* desc,
const D3D11_SUBRESOURCE_DATA* initial_data,
ID3D11Texture2D** texture2D);
MOCK_METHOD3(OnCreateTexture2D,
HRESULT(const D3D11_TEXTURE2D_DESC*,
const D3D11_SUBRESOURCE_DATA*,
ID3D11Texture2D**));
IFACEMETHODIMP CreateTexture3D(const D3D11_TEXTURE3D_DESC* desc,
const D3D11_SUBRESOURCE_DATA* initial_data,
ID3D11Texture3D** texture2D);
IFACEMETHODIMP CreateShaderResourceView(
ID3D11Resource* resource,
const D3D11_SHADER_RESOURCE_VIEW_DESC* desc,
ID3D11ShaderResourceView** srv);
IFACEMETHODIMP CreateUnorderedAccessView(
ID3D11Resource* resource,
const D3D11_UNORDERED_ACCESS_VIEW_DESC* desc,
ID3D11UnorderedAccessView** uaview);
IFACEMETHODIMP CreateRenderTargetView(
ID3D11Resource* resource,
const D3D11_RENDER_TARGET_VIEW_DESC* desc,
ID3D11RenderTargetView** rtv);
IFACEMETHODIMP CreateDepthStencilView(
ID3D11Resource* resource,
const D3D11_DEPTH_STENCIL_VIEW_DESC* desc,
ID3D11DepthStencilView** depth_stencil_view);
IFACEMETHODIMP CreateInputLayout(
const D3D11_INPUT_ELEMENT_DESC* input_element_descs,
UINT num_elements,
const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11InputLayout** input_layout);
IFACEMETHODIMP CreateVertexShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11VertexShader** vertex_shader);
IFACEMETHODIMP CreateGeometryShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11GeometryShader** geometry_shader);
IFACEMETHODIMP CreateGeometryShaderWithStreamOutput(
const void* shader_bytecode,
SIZE_T bytecode_length,
const D3D11_SO_DECLARATION_ENTRY* so_declaration,
UINT num_entries,
const UINT* buffer_strides,
UINT num_strides,
UINT rasterized_stream,
ID3D11ClassLinkage* class_linkage,
ID3D11GeometryShader** geometry_shader);
IFACEMETHODIMP CreatePixelShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11PixelShader** pixel_shader);
IFACEMETHODIMP CreateHullShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11HullShader** hull_shader);
IFACEMETHODIMP CreateDomainShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11DomainShader** domain_shader);
IFACEMETHODIMP CreateComputeShader(const void* shader_bytecode,
SIZE_T bytecode_length,
ID3D11ClassLinkage* class_linkage,
ID3D11ComputeShader** compute_shader);
IFACEMETHODIMP CreateClassLinkage(ID3D11ClassLinkage** linkage);
IFACEMETHODIMP CreateBlendState(const D3D11_BLEND_DESC* blend_state_desc,
ID3D11BlendState** blend_state);
IFACEMETHODIMP CreateDepthStencilState(
const D3D11_DEPTH_STENCIL_DESC* depth_stencil_desc,
ID3D11DepthStencilState** depth_stencil_state);
IFACEMETHODIMP CreateRasterizerState(
const D3D11_RASTERIZER_DESC* rasterizer_desc,
ID3D11RasterizerState** rasterizer_state);
IFACEMETHODIMP CreateSamplerState(const D3D11_SAMPLER_DESC* sampler_desc,
ID3D11SamplerState** sampler_state);
IFACEMETHODIMP CreateQuery(const D3D11_QUERY_DESC* query_desc,
ID3D11Query** query);
IFACEMETHODIMP CreatePredicate(const D3D11_QUERY_DESC* predicate_desc,
ID3D11Predicate** predicate);
IFACEMETHODIMP CreateCounter(const D3D11_COUNTER_DESC* counter_desc,
ID3D11Counter** counter);
IFACEMETHODIMP CreateDeferredContext(UINT context_flags,
ID3D11DeviceContext** deferred_context);
IFACEMETHODIMP OpenSharedResource(HANDLE resource,
REFIID returned_interface,
void** resource_out);
IFACEMETHODIMP CheckFormatSupport(DXGI_FORMAT format, UINT* format_support);
IFACEMETHODIMP CheckMultisampleQualityLevels(DXGI_FORMAT format,
UINT sample_count,
UINT* num_quality_levels);
IFACEMETHODIMP_(void) CheckCounterInfo(D3D11_COUNTER_INFO* counter_info);
IFACEMETHODIMP CheckCounter(const D3D11_COUNTER_DESC* desc,
D3D11_COUNTER_TYPE* type,
UINT* active_counters,
LPSTR name,
UINT* name_length,
LPSTR units,
UINT* units_length,
LPSTR description,
UINT* description_length);
IFACEMETHODIMP CheckFeatureSupport(D3D11_FEATURE feature,
void* feature_support_data,
UINT feature_support_data_size);
IFACEMETHODIMP GetPrivateData(REFGUID guid, UINT* data_size, void* data);
IFACEMETHODIMP SetPrivateData(REFGUID guid, UINT data_size, const void* data);
IFACEMETHODIMP SetPrivateDataInterface(REFGUID guid, const IUnknown* data);
IFACEMETHODIMP_(D3D_FEATURE_LEVEL) GetFeatureLevel();
IFACEMETHODIMP_(UINT) GetCreationFlags();
IFACEMETHODIMP GetDeviceRemovedReason();
MOCK_METHOD0(OnGetDeviceRemovedReason, HRESULT());
IFACEMETHODIMP_(void)
GetImmediateContext(ID3D11DeviceContext** immediate_context);
IFACEMETHODIMP SetExceptionMode(UINT raise_flags);
IFACEMETHODIMP_(UINT) GetExceptionMode();
// ID3D11Device1
IFACEMETHODIMP_(void)
GetImmediateContext1(ID3D11DeviceContext1** immediate_context);
IFACEMETHODIMP CreateDeferredContext1(
UINT context_flags,
ID3D11DeviceContext1** deferred_context);
IFACEMETHODIMP CreateBlendState1(const D3D11_BLEND_DESC1* blend_state_desc,
ID3D11BlendState1** blend_state);
IFACEMETHODIMP CreateRasterizerState1(
const D3D11_RASTERIZER_DESC1* rasterizer_desc,
ID3D11RasterizerState1** rasterizer_state);
IFACEMETHODIMP CreateDeviceContextState(
UINT flags,
const D3D_FEATURE_LEVEL* feature_levels,
UINT feature_level_count,
UINT sdk_version,
REFIID emulated_interface,
D3D_FEATURE_LEVEL* chosen_feature_level,
ID3DDeviceContextState** context_state);
IFACEMETHODIMP OpenSharedResource1(HANDLE resource,
REFIID returned_interface,
void** resource_out);
MOCK_METHOD3(DoOpenSharedResource1, HRESULT(HANDLE, REFIID, void**));
IFACEMETHODIMP OpenSharedResourceByName(LPCWSTR name,
DWORD desired_access,
REFIID returned_interface,
void** resource_out);
void SetupDefaultMocks();
Microsoft::WRL::ComPtr<MockD3D11DeviceContext> mock_immediate_context_;
private:
~MockD3D11Device();
};
class MockDXGIResource final
: public MockInterface<IDXGIResource1, IDXGIKeyedMutex> {
public:
// IDXGIResource1
IFACEMETHODIMP CreateSubresourceSurface(UINT index, IDXGISurface2** surface);
IFACEMETHODIMP CreateSharedHandle(const SECURITY_ATTRIBUTES* attributes,
DWORD access,
LPCWSTR name,
HANDLE* handle);
// IDXGIResource
IFACEMETHODIMP GetSharedHandle(HANDLE* shared_handle);
IFACEMETHODIMP GetUsage(DXGI_USAGE* usage);
IFACEMETHODIMP SetEvictionPriority(UINT eviction_priority);
IFACEMETHODIMP GetEvictionPriority(UINT* eviction_priority);
// IDXGIDeviceSubObject
IFACEMETHODIMP GetDevice(REFIID riid, void** device);
// IDXGIObject
IFACEMETHODIMP SetPrivateData(REFGUID name, UINT data_size, const void* data);
IFACEMETHODIMP SetPrivateDataInterface(REFGUID name, const IUnknown* unknown);
IFACEMETHODIMP GetPrivateData(REFGUID name, UINT* data_size, void* data);
IFACEMETHODIMP GetParent(REFIID riid, void** parent);
// IDXGIKeyedMutex
IFACEMETHODIMP AcquireSync(UINT64 key, DWORD milliseconds) override;
IFACEMETHODIMP ReleaseSync(UINT64 key) override;
private:
~MockDXGIResource() override;
};
class MockD3D11Texture2D final : public MockInterface<ID3D11Texture2D> {
public:
MockD3D11Texture2D(D3D11_TEXTURE2D_DESC desc, ID3D11Device* device);
MockD3D11Texture2D();
// IUnknown
IFACEMETHODIMP QueryInterface(REFIID riid, void** object) override;
// ID3D11Texture2D
IFACEMETHODIMP_(void) GetDesc(D3D11_TEXTURE2D_DESC* desc);
// ID3D11Resource
IFACEMETHODIMP_(void) GetType(D3D11_RESOURCE_DIMENSION* resource_dimension);
IFACEMETHODIMP_(void) SetEvictionPriority(UINT eviction_priority);
IFACEMETHODIMP_(UINT) GetEvictionPriority();
// ID3D11DeviceChild
IFACEMETHODIMP_(void) GetDevice(ID3D11Device** device);
IFACEMETHODIMP GetPrivateData(REFGUID guid, UINT* data_size, void* data);
MOCK_STDCALL_METHOD3(SetPrivateData,
HRESULT(REFGUID guid, UINT data_size, const void* data));
IFACEMETHODIMP SetPrivateDataInterface(REFGUID guid, const IUnknown* data);
void SetupDefaultMocks();
Microsoft::WRL::ComPtr<MockDXGIResource> mock_resource_;
private:
~MockD3D11Texture2D() override;
D3D11_TEXTURE2D_DESC desc_ = {};
Microsoft::WRL::ComPtr<ID3D11Device> device_;
};
} // namespace media
#endif // MEDIA_CAPTURE_VIDEO_WIN_D3D_CAPTURE_TEST_UTILS_H_