Skip to content

Commit a959789

Browse files
committed
- Dev: all attachments can be downloaded as textures and mipmapped
1 parent 03fdcab commit a959789

File tree

11 files changed

+75
-86
lines changed

11 files changed

+75
-86
lines changed

include/engine/common.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ typedef enum ColorFormatTypeFlagBits
333333
DEPTH_16F = VK_FORMAT_D16_UNORM,
334334
DEPTH_32F = VK_FORMAT_D32_SFLOAT,
335335
RGB10A2 = VK_FORMAT_A2B10G10R10_UNORM_PACK32,
336+
RG11B10_UFLOAT = 111,
336337
} ColorFormatType;
337338
typedef enum MipmapModeFlagsBits
338339
{

resources/shaders/deferred/composition.glsl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ void main() {
112112
g_pos = viewPos.xyz;
113113

114114
g_normal = normalize(texture(normalBuffer, v_uv).rgb);
115+
// g_normal = normalize(g_normal);
115116
vec4 colorData = texture(colorBuffer, v_uv);
116117
g_albedo = colorData.rgb;
117118
g_opacity = colorData.w;

src/core/passes/TAA_pass.cpp

Lines changed: 18 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,21 @@
33
VULKAN_ENGINE_NAMESPACE_BEGIN
44
using namespace Graphics;
55
namespace Core {
6-
void TAAPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& attachments,
7-
std::vector<Graphics::SubPassDependency>& dependencies) {
6+
void TAAPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& attachments, std::vector<Graphics::SubPassDependency>& dependencies) {
87
attachments.resize(1);
98

10-
attachments[0] = Graphics::AttachmentConfig(
11-
m_colorFormat,
12-
1,
13-
LAYOUT_TRANSFER_SRC_OPTIMAL,
14-
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
15-
this->m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_TRANSFER_SRC
16-
: IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC,
17-
COLOR_ATTACHMENT,
18-
ASPECT_COLOR,
19-
TEXTURE_2D,
20-
FILTER_LINEAR,
21-
ADDRESS_MODE_CLAMP_TO_EDGE);
9+
attachments[0] =
10+
Graphics::AttachmentConfig(m_colorFormat,
11+
1,
12+
LAYOUT_TRANSFER_SRC_OPTIMAL,
13+
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
14+
this->m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT
15+
: IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
16+
COLOR_ATTACHMENT,
17+
ASPECT_COLOR,
18+
TEXTURE_2D,
19+
FILTER_LINEAR,
20+
ADDRESS_MODE_CLAMP_TO_EDGE);
2221

2322
attachments[0].isDefault = this->m_isDefault ? true : false;
2423

@@ -27,12 +26,10 @@ void TAAPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& at
2726
{
2827
dependencies.resize(2);
2928

30-
dependencies[0] = Graphics::SubPassDependency(
31-
STAGE_FRAGMENT_SHADER, STAGE_COLOR_ATTACHMENT_OUTPUT, ACCESS_COLOR_ATTACHMENT_WRITE);
29+
dependencies[0] = Graphics::SubPassDependency(STAGE_FRAGMENT_SHADER, STAGE_COLOR_ATTACHMENT_OUTPUT, ACCESS_COLOR_ATTACHMENT_WRITE);
3230
dependencies[0].srcAccessMask = ACCESS_SHADER_READ;
3331
dependencies[0].dependencyFlags = SUBPASS_DEPENDENCY_NONE;
34-
dependencies[1] =
35-
Graphics::SubPassDependency(STAGE_COLOR_ATTACHMENT_OUTPUT, STAGE_FRAGMENT_SHADER, ACCESS_SHADER_READ);
32+
dependencies[1] = Graphics::SubPassDependency(STAGE_COLOR_ATTACHMENT_OUTPUT, STAGE_FRAGMENT_SHADER, ACCESS_SHADER_READ);
3633
dependencies[1].srcAccessMask = ACCESS_COLOR_ATTACHMENT_WRITE;
3734
dependencies[1].srcSubpass = 0;
3835
dependencies[1].dstSubpass = VK_SUBPASS_EXTERNAL;
@@ -42,8 +39,7 @@ void TAAPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& at
4239
dependencies.resize(1);
4340

4441
// dependencies[0].dstAccessMask = VK_ACCESS_COLOR_ATTACHMENT_WRITE_BIT | VK_ACCESS_COLOR_ATTACHMENT_READ_BIT;
45-
dependencies[0] = Graphics::SubPassDependency(
46-
STAGE_COLOR_ATTACHMENT_OUTPUT, STAGE_COLOR_ATTACHMENT_OUTPUT, ACCESS_COLOR_ATTACHMENT_WRITE);
42+
dependencies[0] = Graphics::SubPassDependency(STAGE_COLOR_ATTACHMENT_OUTPUT, STAGE_COLOR_ATTACHMENT_OUTPUT, ACCESS_COLOR_ATTACHMENT_WRITE);
4743
dependencies[0].dependencyFlags = SUBPASS_DEPENDENCY_NONE;
4844
}
4945
}
@@ -67,22 +63,19 @@ void TAAPass::create_framebuffer() {
6763
ImageConfig prevImgConfig = {};
6864
prevImgConfig.format = m_colorFormat;
6965
prevImgConfig.usageFlags = IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_DST | IMAGE_USAGE_TRANSFER_SRC;
70-
m_interAttachments[0] = m_device->create_image({m_imageExtent.width, m_imageExtent.height, 1}, prevImgConfig);
66+
m_interAttachments[0] = m_device->create_image({m_imageExtent.width, m_imageExtent.height, 1}, prevImgConfig);
7167
m_interAttachments[0].create_view(prevImgConfig);
7268

7369
SamplerConfig samplerConfig = {};
7470
samplerConfig.samplerAddressMode = ADDRESS_MODE_CLAMP_TO_EDGE;
7571
m_interAttachments[0].create_sampler(samplerConfig);
7672

77-
78-
7973
PostProcessPass::create_framebuffer();
8074
}
8175

8276
void TAAPass::link_input_attachments() {
8377
PostProcessPass::link_input_attachments();
84-
this->m_imageDescriptorSet.update(
85-
&m_interAttachments[0], LAYOUT_SHADER_READ_ONLY_OPTIMAL, 2);
78+
this->m_imageDescriptorSet.update(&m_interAttachments[0], LAYOUT_SHADER_READ_ONLY_OPTIMAL, 2);
8679
}
8780

8881
void TAAPass::execute(Graphics::Frame& currentFrame, Scene* const scene, uint32_t presentImageIndex) {
@@ -130,7 +123,6 @@ void TAAPass::execute(Graphics::Frame& currentFrame, Scene* const scene, uint32_
130123
ACCESS_SHADER_READ,
131124
STAGE_TRANSFER,
132125
STAGE_FRAGMENT_SHADER);
133-
134126
}
135127
} // namespace Core
136128
VULKAN_ENGINE_NAMESPACE_END

src/core/passes/bloom_pass.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ void BloomPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& a
1313
1,
1414
m_isDefault ? LAYOUT_PRESENT : LAYOUT_SHADER_READ_ONLY_OPTIMAL,
1515
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
16-
m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT : IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
16+
m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST
17+
: IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
1718
COLOR_ATTACHMENT,
1819
ASPECT_COLOR,
1920
TEXTURE_2D,

src/core/passes/composition_pass.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ void CompositionPass::setup_out_attachments(std::vector<Graphics::AttachmentConf
1313
1,
1414
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
1515
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
16-
m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT : IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
16+
m_isDefault ? IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST : IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
1717
COLOR_ATTACHMENT,
1818
ASPECT_COLOR,
1919
TEXTURE_2D,
@@ -27,7 +27,7 @@ void CompositionPass::setup_out_attachments(std::vector<Graphics::AttachmentConf
2727
1,
2828
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
2929
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
30-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
30+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
3131
COLOR_ATTACHMENT,
3232
ASPECT_COLOR,
3333
TEXTURE_2D,

src/core/passes/enviroment_pass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ void EnviromentPass::setup_out_attachments(std::vector<Graphics::AttachmentConfi
1212
1,
1313
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
1414
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
15-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
15+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
1616
COLOR_ATTACHMENT,
1717
ASPECT_COLOR,
1818
TEXTURE_CUBE,

src/core/passes/forward_pass.cpp

Lines changed: 31 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,18 @@ void ForwardPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>&
1111

1212
attachments.resize(multisampled ? 4 : 2);
1313

14-
attachments[0] = Graphics::AttachmentConfig(
15-
m_colorFormat,
16-
samples,
17-
m_isDefault ? (multisampled ? LAYOUT_COLOR_ATTACHMENT_OPTIMAL : LAYOUT_PRESENT) : LAYOUT_SHADER_READ_ONLY_OPTIMAL,
18-
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
19-
!m_isDefault ? IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED : IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT,
20-
COLOR_ATTACHMENT,
21-
ASPECT_COLOR,
22-
TEXTURE_2D,
23-
FILTER_LINEAR,
24-
ADDRESS_MODE_CLAMP_TO_EDGE);
14+
attachments[0] =
15+
Graphics::AttachmentConfig(m_colorFormat,
16+
samples,
17+
m_isDefault ? (multisampled ? LAYOUT_COLOR_ATTACHMENT_OPTIMAL : LAYOUT_PRESENT) : LAYOUT_SHADER_READ_ONLY_OPTIMAL,
18+
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
19+
!m_isDefault ? IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST
20+
: IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT,
21+
COLOR_ATTACHMENT,
22+
ASPECT_COLOR,
23+
TEXTURE_2D,
24+
FILTER_LINEAR,
25+
ADDRESS_MODE_CLAMP_TO_EDGE);
2526

2627
attachments[0].isDefault = m_isDefault ? (multisampled ? false : true) : false;
2728

@@ -41,15 +42,16 @@ void ForwardPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>&
4142
if (multisampled)
4243
{
4344
m_interAttachments.resize(2);
44-
attachments[2] = Graphics::AttachmentConfig(
45-
m_colorFormat,
46-
1,
47-
m_isDefault ? LAYOUT_PRESENT : LAYOUT_SHADER_READ_ONLY_OPTIMAL,
48-
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
49-
!m_isDefault ? IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED : IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT,
50-
RESOLVE_ATTACHMENT,
51-
ASPECT_COLOR,
52-
TEXTURE_2D);
45+
attachments[2] =
46+
Graphics::AttachmentConfig(m_colorFormat,
47+
1,
48+
m_isDefault ? LAYOUT_PRESENT : LAYOUT_SHADER_READ_ONLY_OPTIMAL,
49+
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
50+
!m_isDefault ? IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST
51+
: IMAGE_USAGE_TRANSIENT_ATTACHMENT | IMAGE_USAGE_COLOR_ATTACHMENT,
52+
RESOLVE_ATTACHMENT,
53+
ASPECT_COLOR,
54+
TEXTURE_2D);
5355
attachments[2].isDefault = m_isDefault ? true : false;
5456

5557
attachments[3] = Graphics::AttachmentConfig(m_colorFormat,
@@ -141,24 +143,20 @@ void ForwardPass::setup_uniforms(std::vector<Graphics::Frame>& frames) {
141143
// m_descriptors[i].globalDescritor.update(
142144
// get_image(ResourceManager::FALLBACK_TEXTURE), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 3);
143145

144-
m_descriptors[i].globalDescritor.update(
145-
get_image(ResourceManager::textureResources[0]), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 6);
146+
m_descriptors[i].globalDescritor.update(get_image(ResourceManager::textureResources[0]), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 6);
146147

147148
// Per-object
148149
m_descriptorPool.allocate_descriptor_set(OBJECT_LAYOUT, &m_descriptors[i].objectDescritor);
149-
m_descriptors[i].objectDescritor.update(
150-
&frames[i].uniformBuffers[OBJECT_LAYOUT], sizeof(ObjectUniforms), 0,UNIFORM_DYNAMIC_BUFFER, 0);
150+
m_descriptors[i].objectDescritor.update(&frames[i].uniformBuffers[OBJECT_LAYOUT], sizeof(ObjectUniforms), 0, UNIFORM_DYNAMIC_BUFFER, 0);
151151
m_descriptors[i].objectDescritor.update(&frames[i].uniformBuffers[OBJECT_LAYOUT],
152-
sizeof(MaterialUniforms),
153-
m_device->pad_uniform_buffer_size(sizeof(MaterialUniforms)),
154-
155-
UNIFORM_DYNAMIC_BUFFER,
156-
1);
152+
sizeof(MaterialUniforms),
153+
m_device->pad_uniform_buffer_size(sizeof(MaterialUniforms)),
154+
155+
UNIFORM_DYNAMIC_BUFFER,
156+
1);
157157
// Set up enviroment fallback texture
158-
m_descriptors[i].globalDescritor.update(
159-
get_image(ResourceManager::FALLBACK_CUBEMAP), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 3);
160-
m_descriptors[i].globalDescritor.update(
161-
get_image(ResourceManager::FALLBACK_CUBEMAP), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 4);
158+
m_descriptors[i].globalDescritor.update(get_image(ResourceManager::FALLBACK_CUBEMAP), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 3);
159+
m_descriptors[i].globalDescritor.update(get_image(ResourceManager::FALLBACK_CUBEMAP), LAYOUT_SHADER_READ_ONLY_OPTIMAL, 4);
162160
}
163161
}
164162
void ForwardPass::setup_shader_passes() {

src/core/passes/geometry_pass.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,32 @@ void GeometryPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>
1515
1,
1616
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
1717
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
18-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC);
18+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST);
1919
// Albedo + Opacity
2020
attachments[1] = Graphics::AttachmentConfig(RGBA_8U,
2121
1,
2222
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
2323
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
24-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC);
24+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST);
2525
// Material + ID
2626
attachments[2] = Graphics::AttachmentConfig(RGBA_8U,
2727
1,
2828
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
2929
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
30-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC);
30+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST);
3131
// Velocity + Emissive strength
3232
attachments[3] = Graphics::AttachmentConfig(m_floatFormat,
3333
1,
3434
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
3535
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
36-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC);
36+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST);
3737

3838
// Depth
3939
attachments[4] = Graphics::AttachmentConfig(m_depthFormat,
4040
1,
4141
LAYOUT_DEPTH_STENCIL_READ_ONLY_OPTIMAL,
4242
LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL,
43-
IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC,
43+
IMAGE_USAGE_DEPTH_STENCIL_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
4444
DEPTH_ATTACHMENT,
4545
ASPECT_DEPTH);
4646
attachments[4].imageConfig.clearValue.depthStencil.depth = 0.0f; // Inverse Z

src/core/passes/precomposition_pass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ void PreCompositionPass::setup_out_attachments(std::vector<Graphics::AttachmentC
4040
1,
4141
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
4242
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
43-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
43+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
4444
COLOR_ATTACHMENT,
4545
ASPECT_COLOR,
4646
TEXTURE_2D,

src/core/passes/sky_pass.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ void SkyPass::setup_out_attachments(std::vector<Graphics::AttachmentConfig>& att
1212
1,
1313
LAYOUT_SHADER_READ_ONLY_OPTIMAL,
1414
LAYOUT_COLOR_ATTACHMENT_OPTIMAL,
15-
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED,
15+
IMAGE_USAGE_COLOR_ATTACHMENT | IMAGE_USAGE_SAMPLED | IMAGE_USAGE_TRANSFER_SRC | IMAGE_USAGE_TRANSFER_DST,
1616
COLOR_ATTACHMENT,
1717
ASPECT_COLOR,
1818
TEXTURE_2D,

0 commit comments

Comments
 (0)