Skip to content

Commit ea32b30

Browse files
switched from combined image to sampled image and sampler
1 parent b7a3161 commit ea32b30

23 files changed

Lines changed: 1118 additions & 744 deletions

Resources/Shaders/fragment_common.glsl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ layout(std140, set = 0, binding = 5) readonly buffer MatSB
6161
}
6262
MaterialDataBuffer;
6363

64-
layout(set = 1, binding = 0) uniform Texture2D TextureArray[];
64+
layout(set = 1, binding = 0) uniform texture2D TextureArray[];
6565
layout(set = 1, binding = 1) uniform sampler LinearWrapSampler;
6666

6767
MaterialData FetchMaterial(uint dataIndex)

Resources/Shaders/g_buffer.frag

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,18 +24,18 @@ void main()
2424
if (material.AlbedoMap < INVALID_MAP_HANDLE)
2525
{
2626
uint texId = uint(material.AlbedoMap);
27-
OutAlbedo = texture(TextureArray[nonuniformEXT(texId)], TexCoord);
27+
OutAlbedo = texture(sampler2D(TextureArray[nonuniformEXT(texId)], LinearWrapSampler), TexCoord);
2828
}
2929

3030
if (material.SpecularMap < INVALID_MAP_HANDLE)
3131
{
3232
uint texId = uint(material.SpecularMap);
33-
OutSpecular = texture(TextureArray[nonuniformEXT(texId)], TexCoord);
33+
OutSpecular = texture(sampler2D(TextureArray[nonuniformEXT(texId)], LinearWrapSampler), TexCoord);
3434
}
3535

3636
if (material.NormalMap < INVALID_MAP_HANDLE)
3737
{
3838
uint texId = uint(material.NormalMap);
39-
OutNormal = texture(TextureArray[nonuniformEXT(texId)], TexCoord).rgb;
39+
OutNormal = texture(sampler2D(TextureArray[nonuniformEXT(texId)], LinearWrapSampler), TexCoord).rgb;
4040
}
41-
}
41+
}

Resources/Shaders/imgui.frag

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,9 @@
22
#extension GL_EXT_nonuniform_qualifier : require
33

44
layout(location = 0) out vec4 fColor;
5-
layout(set = 0, binding = 0) uniform sampler2D _unused;
6-
layout(set = 1, binding = 0) uniform sampler2D TextureArray[];
5+
layout(set = 0, binding = 0) uniform sampler _unused;
6+
layout(set = 1, binding = 0) uniform texture2D TextureArray[];
7+
layout(set = 1, binding = 1) uniform sampler LinearWrapSampler;
78

89
layout(location = 0) in struct
910
{
@@ -14,6 +15,6 @@ layout(location = 0) in struct
1415
void main()
1516
{
1617
uint texId = uint(floor(In.TexData.z + 0.5));
17-
vec4 texVal = texture(TextureArray[nonuniformEXT(texId)], In.TexData.xy);
18+
vec4 texVal = texture(sampler2D(TextureArray[nonuniformEXT(texId)], LinearWrapSampler), In.TexData.xy);
1819
fColor = In.Color * texVal;
1920
}

Resources/Shaders/skybox.frag

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
layout(location = 0) in vec3 dir;
33
layout(location = 0) out vec4 outColor;
44

5-
layout(set = 0, binding = 1) uniform samplerCube EnvMap;
5+
layout(set = 0, binding = 1) uniform textureCube EnvMap;
6+
layout(set = 1, binding = 1) uniform sampler LinearWrapSampler;
67

78
void main()
89
{
9-
outColor = texture(EnvMap, dir);
10+
outColor = texture(samplerCube(EnvMap, LinearWrapSampler), dir);
1011
}

ZEngine/ZEngine/Applications/AppRenderPipeline.cpp

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ namespace ZEngine::Applications
5858
// {
5959
// auto thread_idx = render_worker_thread_idx + worker_thread_idx;
6060
// }
61-
CurrentCmdBuf = Device->CommandBufferMgr->GetCommandBuffer(swpachain->CurrentFrame->Index, RenderMainThreadIndex, 0, true);
61+
CurrentCmdBuf = Device->CommandBufferMgr->GetCommandBuffer(Rendering::QueueType::GRAPHIC_QUEUE, swpachain->CurrentFrame->Index, RenderMainThreadIndex, 0, true);
6262
}
6363

6464
void AppRenderPipeline::EndFrame()
@@ -69,6 +69,10 @@ namespace ZEngine::Applications
6969

7070
void AppRenderPipeline::RenderScene(Rendering::Cameras::CameraPtr camera, Rendering::Scenes::RenderScenePtr scene)
7171
{
72+
auto swpachain = Device->SwapchainPtr;
73+
auto frame_index = swpachain->CurrentFrame->Index;
74+
auto thread_index = RenderMainThreadIndex;
75+
7276
if (scene->TransformBufferDirty[Device->SwapchainPtr->CurrentFrame->Index].load(std::memory_order_acquire) || scene->MeshAllocationDirty[Device->SwapchainPtr->CurrentFrame->Index].load(std::memory_order_acquire))
7377
{
7478
auto gpu_scene_data = SceneRenderer->RenderSceneData;
@@ -91,7 +95,7 @@ namespace ZEngine::Applications
9195
if (scene->TransformBufferDirty[Device->SwapchainPtr->CurrentFrame->Index].exchange(false, std::memory_order_acquire))
9296
{
9397
auto transform_data_view = ArrayView{scene->GlobalTransforms};
94-
transform_buffer->Write(transform_data_view);
98+
transform_buffer->Write(frame_index, thread_index, transform_data_view);
9599
}
96100

97101
if (scene->MeshAllocationDirty[Device->SwapchainPtr->CurrentFrame->Index].exchange(false, std::memory_order_acquire))
@@ -124,20 +128,20 @@ namespace ZEngine::Applications
124128
auto sub_mesh_alloc_view = ArrayView{SubMeshAllocations};
125129
auto indirect_commands_view = ArrayView{DrawIndirectCommands};
126130

127-
vtx_buffer->Write(vertex_data_view);
128-
idx_buffer->Write(index_data_view);
131+
vtx_buffer->Write(frame_index, thread_index, vertex_data_view);
132+
idx_buffer->Write(frame_index, thread_index, index_data_view);
129133

130-
rd_buffer->Write(sub_mesh_alloc_view);
134+
rd_buffer->Write(frame_index, thread_index, sub_mesh_alloc_view);
131135

132-
indirect_buffer->Write(indirect_commands_view);
136+
indirect_buffer->Write(frame_index, thread_index, indirect_commands_view);
133137

134138
ZReleaseScratch(scratch);
135139
}
136140
}
137141

138142
// Todo (Kernel) : When we'll start considering multithreaded support
139143
// we might want to renderer->EnqueueAsync({command_buffer, {camera, frame_data} })
140-
SceneRenderer->DrawScene(CurrentCmdBuf, camera);
144+
SceneRenderer->DrawScene(frame_index, thread_index, CurrentCmdBuf, camera);
141145
}
142146

143147
void AppRenderPipeline::BeginOverlayFrame()
@@ -157,6 +161,10 @@ namespace ZEngine::Applications
157161
return;
158162
}
159163

164+
auto swpachain = Device->SwapchainPtr;
165+
auto frame_index = swpachain->CurrentFrame->Index;
166+
auto thread_index = RenderMainThreadIndex;
167+
160168
auto current_framebuffer = Device->SwapchainPtr->SwapchainFramebuffers[Device->SwapchainPtr->CurrentFrame->ImageIndex];
161169

162170
CurrentCmdBuf->BeginRenderPass(ImguiRenderer->UIPass, current_framebuffer, true);
@@ -170,10 +178,10 @@ namespace ZEngine::Applications
170178
auto vertex_buffer = vertex_buffer_set->At(Device->SwapchainPtr->CurrentFrame->Index);
171179
auto index_buffer = index_buffer_set->At(Device->SwapchainPtr->CurrentFrame->Index);
172180

173-
vertex_buffer->Write(vtx_data_view);
174-
index_buffer->Write(idx_data_view);
181+
vertex_buffer->Write(frame_index, thread_index, vtx_data_view);
182+
index_buffer->Write(frame_index, thread_index, idx_data_view);
175183

176-
auto ui_second_cb = Device->CommandBufferMgr->GetCommandBuffer(Device->SwapchainPtr->CurrentFrame->Index, RenderMainThreadIndex, UICommandBufferIndex, false);
184+
auto ui_second_cb = Device->CommandBufferMgr->GetCommandBuffer(Rendering::QueueType::GRAPHIC_QUEUE, Device->SwapchainPtr->CurrentFrame->Index, RenderMainThreadIndex, UICommandBufferIndex, false);
177185
ui_second_cb->ResetState();
178186
ui_second_cb->BeginSecondary(ImguiRenderer->UIPass, current_framebuffer);
179187
ui_second_cb->SetViewport(ImguiRenderer->UIPass->GetRenderAreaWidth(), ImguiRenderer->UIPass->GetRenderAreaHeight());

ZEngine/ZEngine/Applications/AppRenderPipeline.h

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22
#include <Hardwares/VulkanDevice.h>
33
#include <Rendering/Renderers/GraphicRenderer.h>
44
#include <Rendering/Renderers/ImGUIRenderer.h>
5+
#include <new>
56

67
namespace ZEngine::Applications
78
{
8-
struct alignas(std::hardware_destructive_interference_size) PaddedAtomicInt
9+
#ifdef __cpp_lib_hardware_interference_size
10+
constexpr auto CACHE_LINE_SIZE = std::hardware_destructive_interference_size;
11+
#else
12+
constexpr auto CACHE_LINE_SIZE = 64;
13+
#endif
14+
15+
struct alignas(CACHE_LINE_SIZE) PaddedAtomicInt
916
{
1017
std::atomic_uint32_t value = 0;
1118
};

0 commit comments

Comments
 (0)