Diligent Engine
v.2.4.g
Graphics
GraphicsEngineVulkan
include
GenerateMipsVkHelper.hpp
Go to the documentation of this file.
1
/*
2
* Copyright 2019-2021 Diligent Graphics LLC
3
* Copyright 2015-2019 Egor Yusov
4
*
5
* Licensed under the Apache License, Version 2.0 (the "License");
6
* you may not use this file except in compliance with the License.
7
* You may obtain a copy of the License at
8
*
9
* http://www.apache.org/licenses/LICENSE-2.0
10
*
11
* Unless required by applicable law or agreed to in writing, software
12
* distributed under the License is distributed on an "AS IS" BASIS,
13
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
* See the License for the specific language governing permissions and
15
* limitations under the License.
16
*
17
* In no event and under no legal theory, whether in tort (including negligence),
18
* contract, or otherwise, unless required by applicable law (such as deliberate
19
* and grossly negligent acts) or agreed to in writing, shall any Contributor be
20
* liable for any damages, including any direct, indirect, special, incidental,
21
* or consequential damages of any character arising as a result of this License or
22
* out of the use or inability to use the software (including but not limited to damages
23
* for loss of goodwill, work stoppage, computer failure or malfunction, or any and
24
* all other commercial damages or losses), even if such Contributor has been advised
25
* of the possibility of such damages.
26
*/
27
28
#pragma once
29
32
33
#include <array>
34
#include <unordered_map>
35
36
#include "
VulkanUtilities/VulkanLogicalDevice.hpp
"
37
#include "
VulkanUtilities/VulkanCommandBuffer.hpp
"
38
39
namespace
Diligent
40
{
41
42
class
RenderDeviceVkImpl;
43
class
TextureViewVkImpl;
44
class
DeviceContextVkImpl;
45
46
class
GenerateMipsVkHelper
47
{
48
public
:
49
GenerateMipsVkHelper
(
RenderDeviceVkImpl
& DeviceVkImpl);
50
51
// clang-format off
52
GenerateMipsVkHelper
(
const
GenerateMipsVkHelper
&) =
delete
;
53
GenerateMipsVkHelper
(
GenerateMipsVkHelper
&&) =
delete
;
54
GenerateMipsVkHelper
&
operator =
(
const
GenerateMipsVkHelper
&) =
delete
;
55
GenerateMipsVkHelper
&
operator =
(
GenerateMipsVkHelper
&&) =
delete
;
56
// clang-format on
57
58
void
GenerateMips
(
TextureViewVkImpl
& TexView,
DeviceContextVkImpl
& Ctx,
IShaderResourceBinding
* pSRB);
59
void
CreateSRB
(
IShaderResourceBinding
** ppSRB);
60
void
WarmUpCache
(
TEXTURE_FORMAT
Fmt);
61
62
private
:
63
std::array<RefCntAutoPtr<IPipelineState>, 4> CreatePSOs(
TEXTURE_FORMAT
Fmt);
64
std::array<RefCntAutoPtr<IPipelineState>, 4>& FindPSOs(
TEXTURE_FORMAT
Fmt);
65
66
VkImageLayout GenerateMipsCS(
TextureViewVkImpl
& TexView,
DeviceContextVkImpl
& Ctx,
IShaderResourceBinding
&
SRB
, VkImageSubresourceRange& SubresRange);
67
VkImageLayout GenerateMipsBlit(
TextureViewVkImpl
& TexView,
DeviceContextVkImpl
& Ctx, VkImageSubresourceRange& SubresRange)
const
;
68
69
RenderDeviceVkImpl
& m_DeviceVkImpl;
70
71
std::mutex m_PSOMutex;
72
std::unordered_map<TEXTURE_FORMAT, std::array<RefCntAutoPtr<IPipelineState>, 4>> m_PSOHash;
73
74
static
void
GetGlImageFormat(
const
TextureFormatAttribs
& FmtAttribs, std::array<char, 16>& GlFmt);
75
76
RefCntAutoPtr<IBuffer>
m_ConstantsCB;
77
};
78
79
}
// namespace Diligent
Diligent::GenerateMipsVkHelper::GenerateMips
void GenerateMips(TextureViewVkImpl &TexView, DeviceContextVkImpl &Ctx, IShaderResourceBinding *pSRB)
Definition:
GenerateMipsVkHelper.cpp:226
VulkanLogicalDevice.hpp
Diligent::RenderDeviceVkImpl
Render device implementation in Vulkan backend.
Definition:
RenderDeviceVkImpl.hpp:58
Diligent::IShaderResourceBinding
Shader resource binding interface.
Definition:
ShaderResourceBinding.h:58
Diligent::TextureViewVkImpl
Texture view implementation in Vulkan backend.
Definition:
TextureViewVkImpl.hpp:41
Diligent::GenerateMipsVkHelper::CreateSRB
void CreateSRB(IShaderResourceBinding **ppSRB)
Definition:
GenerateMipsVkHelper.cpp:202
Diligent::GenerateMipsVkHelper
Definition:
GenerateMipsVkHelper.hpp:46
Diligent::GenerateMipsVkHelper::operator=
GenerateMipsVkHelper & operator=(const GenerateMipsVkHelper &)=delete
Diligent::RefCntAutoPtr
Template class that implements reference counting.
Definition:
RefCntAutoPtr.hpp:73
Diligent::DeviceContextVkImpl
Device context implementation in Vulkan backend.
Definition:
DeviceContextVkImpl.hpp:67
Diligent::ResourceCacheContentType::SRB
@ SRB
Resources of a shader resource binding.
Diligent::TEXTURE_FORMAT
TEXTURE_FORMAT
Texture formats.
Definition:
GraphicsTypes.h:328
Diligent::TextureFormatAttribs
Describes invariant texture format attributes. These attributes are intrinsic to the texture format i...
Definition:
GraphicsTypes.h:2483
VulkanCommandBuffer.hpp
Diligent::GenerateMipsVkHelper::GenerateMipsVkHelper
GenerateMipsVkHelper(RenderDeviceVkImpl &DeviceVkImpl)
Definition:
GenerateMipsVkHelper.cpp:185
Diligent::GenerateMipsVkHelper::WarmUpCache
void WarmUpCache(TEXTURE_FORMAT Fmt)
Definition:
GenerateMipsVkHelper.cpp:221
Diligent
The library uses Direct3D-style math:
Definition:
AdvancedMath.hpp:37
Generated by
1.8.17