From 4c3d70b612830b0ae30a0ce143d94ce538982f6c Mon Sep 17 00:00:00 2001 From: baldurk Date: Mon, 10 Dec 2018 12:01:11 +0000 Subject: [PATCH] Add D3D11 helper for making sampler objects --- util/test/demos/d3d11/d3d11_helpers.cpp | 26 ++++++++++ util/test/demos/d3d11/d3d11_helpers.h | 60 ++++++++++++++++++++++ util/test/demos/d3d11/d3d11_mip_gen_rt.cpp | 4 +- util/test/demos/d3d11/d3d11_test.h | 1 + util/test/demos/d3d11/d3d11_texture_3d.cpp | 4 +- 5 files changed, 89 insertions(+), 6 deletions(-) diff --git a/util/test/demos/d3d11/d3d11_helpers.cpp b/util/test/demos/d3d11/d3d11_helpers.cpp index 3ae1b8416..4317c753f 100644 --- a/util/test/demos/d3d11/d3d11_helpers.cpp +++ b/util/test/demos/d3d11/d3d11_helpers.cpp @@ -815,3 +815,29 @@ D3D11ViewCreator::operator ID3D11DepthStencilViewPtr() CHECK_HR(m_Test->dev->CreateDepthStencilView(m_Res, &desc.dsv, &dsv)); return dsv; } + +D3D11SamplerCreator::D3D11SamplerCreator(D3D11GraphicsTest *test) +{ + m_Test = test; + + m_Desc.Filter = D3D11_FILTER_MIN_MAG_MIP_LINEAR; + m_Desc.AddressU = D3D11_TEXTURE_ADDRESS_CLAMP; + m_Desc.AddressV = D3D11_TEXTURE_ADDRESS_CLAMP; + m_Desc.AddressW = D3D11_TEXTURE_ADDRESS_CLAMP; + m_Desc.MipLODBias = 0.0f; + m_Desc.MaxAnisotropy = 1; + m_Desc.ComparisonFunc = D3D11_COMPARISON_NEVER; + m_Desc.BorderColor[0] = 1.0f; + m_Desc.BorderColor[1] = 1.0f; + m_Desc.BorderColor[2] = 1.0f; + m_Desc.BorderColor[3] = 1.0f; + m_Desc.MinLOD = -FLT_MAX; + m_Desc.MaxLOD = FLT_MAX; +} + +D3D11SamplerCreator::operator ID3D11SamplerStatePtr() const +{ + ID3D11SamplerStatePtr samp; + CHECK_HR(m_Test->dev->CreateSamplerState(&m_Desc, &samp)); + return samp; +} \ No newline at end of file diff --git a/util/test/demos/d3d11/d3d11_helpers.h b/util/test/demos/d3d11/d3d11_helpers.h index 1dce1afc6..879d192b1 100644 --- a/util/test/demos/d3d11/d3d11_helpers.h +++ b/util/test/demos/d3d11/d3d11_helpers.h @@ -159,6 +159,66 @@ protected: UINT MiscFlags = 0; }; +class D3D11SamplerCreator +{ +public: + D3D11SamplerCreator(D3D11GraphicsTest *test); + + D3D11SamplerCreator &AddressU(D3D11_TEXTURE_ADDRESS_MODE addr) + { + m_Desc.AddressU = addr; + return *this; + } + + D3D11SamplerCreator &AddressV(D3D11_TEXTURE_ADDRESS_MODE addr) + { + m_Desc.AddressV = addr; + return *this; + } + + D3D11SamplerCreator &AddressW(D3D11_TEXTURE_ADDRESS_MODE addr) + { + m_Desc.AddressW = addr; + return *this; + } + + D3D11SamplerCreator &Address(D3D11_TEXTURE_ADDRESS_MODE addr) + { + return AddressU(addr).AddressV(addr).AddressW(addr); + } + + D3D11SamplerCreator &Filter(D3D11_FILTER filter) + { + m_Desc.Filter = filter; + return *this; + } + + D3D11SamplerCreator &LODBias(float bias) + { + m_Desc.MipLODBias = bias; + return *this; + } + + D3D11SamplerCreator &Aniso(UINT aniso) + { + m_Desc.MaxAnisotropy = aniso; + return *this; + } + + D3D11SamplerCreator &Aniso(D3D11_COMPARISON_FUNC comp) + { + m_Desc.ComparisonFunc = comp; + return *this; + } + + operator ID3D11SamplerStatePtr() const; + +protected: + D3D11GraphicsTest *m_Test; + + D3D11_SAMPLER_DESC m_Desc; +}; + enum class ResourceType { Buffer, diff --git a/util/test/demos/d3d11/d3d11_mip_gen_rt.cpp b/util/test/demos/d3d11/d3d11_mip_gen_rt.cpp index 4d71bdc4c..0300948fb 100644 --- a/util/test/demos/d3d11/d3d11_mip_gen_rt.cpp +++ b/util/test/demos/d3d11/d3d11_mip_gen_rt.cpp @@ -91,9 +91,7 @@ float4 main(v2f IN) : SV_Target0 ID3D11RenderTargetViewPtr rtv[NumMips]; ID3D11ShaderResourceViewPtr srv[NumMips]; - CD3D11_SAMPLER_DESC sampdesc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT()); - ID3D11SamplerStatePtr samp; - CHECK_HR(dev->CreateSamplerState(&sampdesc, &samp)); + ID3D11SamplerStatePtr samp = MakeSampler(); D3D11_VIEWPORT views[NumMips]; diff --git a/util/test/demos/d3d11/d3d11_test.h b/util/test/demos/d3d11/d3d11_test.h index 96689a83a..6764e2b94 100644 --- a/util/test/demos/d3d11/d3d11_test.h +++ b/util/test/demos/d3d11/d3d11_test.h @@ -98,6 +98,7 @@ struct D3D11GraphicsTest : public GraphicsTest return D3D11TextureCreator(this, format, width, height, depth); } + D3D11SamplerCreator MakeSampler() { return D3D11SamplerCreator(this); } template D3D11ViewCreator MakeSRV(T res) { diff --git a/util/test/demos/d3d11/d3d11_texture_3d.cpp b/util/test/demos/d3d11/d3d11_texture_3d.cpp index 7aa06d990..7b6e1384a 100644 --- a/util/test/demos/d3d11/d3d11_texture_3d.cpp +++ b/util/test/demos/d3d11/d3d11_texture_3d.cpp @@ -74,9 +74,7 @@ float4 main(v2f IN) : SV_Target0 ID3D11VertexShaderPtr vs = CreateVS(vsblob); ID3D11PixelShaderPtr ps = CreatePS(psblob); - CD3D11_SAMPLER_DESC sampdesc = CD3D11_SAMPLER_DESC(CD3D11_DEFAULT()); - ID3D11SamplerStatePtr samp; - CHECK_HR(dev->CreateSamplerState(&sampdesc, &samp)); + ID3D11SamplerStatePtr samp = MakeSampler(); ID3D11Texture3DPtr tex = MakeTexture(DXGI_FORMAT_R8_UNORM, 128, 128, 1024).Mips(8).SRV();