Skip to content

Commit

Permalink
gi/cgpu: use uniform buffers for light data
Browse files Browse the repository at this point in the history
  • Loading branch information
pablode committed Jul 27, 2024
1 parent 3500e9a commit f2ef21c
Show file tree
Hide file tree
Showing 8 changed files with 26 additions and 10 deletions.
19 changes: 14 additions & 5 deletions src/cgpu/impl/Cgpu.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1587,7 +1587,8 @@ namespace gtl
CGPU_RETURN_ERROR("failed to create descriptor set layout");
}

uint32_t bufferCount = 0;
uint32_t uniformBufferCount = 0;
uint32_t storageBufferCount = 0;
uint32_t storageImageCount = 0;
uint32_t sampledImageCount = 0;
uint32_t samplerCount = 0;
Expand All @@ -1599,7 +1600,8 @@ namespace gtl

switch (binding->descriptorType)
{
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: bufferCount += binding->count; break;
case VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER: storageBufferCount += binding->count; break;
case VK_DESCRIPTOR_TYPE_STORAGE_BUFFER: uniformBufferCount += binding->count; break;
case VK_DESCRIPTOR_TYPE_STORAGE_IMAGE: storageImageCount += binding->count; break;
case VK_DESCRIPTOR_TYPE_SAMPLED_IMAGE: sampledImageCount += binding->count; break;
case VK_DESCRIPTOR_TYPE_SAMPLER: samplerCount += binding->count; break;
Expand All @@ -1618,10 +1620,16 @@ namespace gtl
uint32_t poolSizeCount = 0;
VkDescriptorPoolSize poolSizes[16];

if (bufferCount > 0)
if (uniformBufferCount > 0)
{
poolSizes[poolSizeCount].type = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER;
poolSizes[poolSizeCount].descriptorCount = uniformBufferCount;
poolSizeCount++;
}
if (storageBufferCount > 0)
{
poolSizes[poolSizeCount].type = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER;
poolSizes[poolSizeCount].descriptorCount = bufferCount;
poolSizes[poolSizeCount].descriptorCount = storageBufferCount;
poolSizeCount++;
}
if (storageImageCount > 0)
Expand Down Expand Up @@ -2667,7 +2675,8 @@ namespace gtl
{
bool slotHandled = false;

if (layoutBinding->descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
if (layoutBinding->descriptorType == VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER ||
layoutBinding->descriptorType == VK_DESCRIPTOR_TYPE_STORAGE_BUFFER)
{
for (uint32_t k = 0; k < bindings->bufferCount; ++k)
{
Expand Down
2 changes: 1 addition & 1 deletion src/ggpu/gtl/ggpu/SyncBuffer.h
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ namespace gtl
GgpuDelayedResourceDestroyer& delayedResourceDestroyer,
uint64_t elementSize,
UpdateStrategy updateStrategy = UpdateStrategy::OptimalStaging,
CgpuBufferUsageFlags bufferUsage = CGPU_BUFFER_USAGE_FLAG_STORAGE_BUFFER);
CgpuBufferUsageFlags bufferUsage = CGPU_BUFFER_USAGE_FLAG_UNIFORM_BUFFER);

~GgpuSyncBuffer();

Expand Down
1 change: 1 addition & 0 deletions src/gi/shaders/rp_main.ahit
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#extension GL_EXT_nonuniform_qualifier: require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_buffer_reference: require
#extension GL_EXT_scalar_block_layout: require

#include "colormap.glsl"

Expand Down
1 change: 1 addition & 0 deletions src/gi/shaders/rp_main.chit
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
#extension GL_EXT_nonuniform_qualifier: require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_buffer_reference: require
#extension GL_EXT_scalar_block_layout: require

#include "mdl_types.glsl"
#include "rp_main_descriptors.glsl"
Expand Down
1 change: 1 addition & 0 deletions src/gi/shaders/rp_main.miss
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
#extension GL_EXT_nonuniform_qualifier: require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_buffer_reference: require
#extension GL_EXT_scalar_block_layout: require

#include "rp_main_payload.glsl"
#include "rp_main_descriptors.glsl"
Expand Down
1 change: 1 addition & 0 deletions src/gi/shaders/rp_main.rgen
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
#ifdef REORDER_INVOCATIONS
#extension GL_NV_shader_invocation_reorder: require
#endif
#extension GL_EXT_scalar_block_layout: require

#include "rp_main_payload.glsl"
#include "rp_main_descriptors.glsl"
Expand Down
10 changes: 6 additions & 4 deletions src/gi/shaders/rp_main_descriptors.glsl
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
#include "interface/rp_main.h"
#include "common.glsl"

#define MAX_LIGHT_COUNT 50000

layout(binding = BINDING_INDEX_OUT_PIXELS, std430) buffer Framebuffer { vec4 pixels[]; };

#if SPHERE_LIGHT_COUNT > 0
layout(binding = BINDING_INDEX_SPHERE_LIGHTS, std430) readonly buffer SphereLightBuffer { SphereLight sphereLights[]; };
layout(binding = BINDING_INDEX_SPHERE_LIGHTS, std430) uniform SphereLightBuffer { SphereLight sphereLights[MAX_LIGHT_COUNT]; };
#endif

#if DISTANT_LIGHT_COUNT > 0
layout(binding = BINDING_INDEX_DISTANT_LIGHTS, std430) readonly buffer DistantLightBuffer { DistantLight distantLights[]; };
layout(binding = BINDING_INDEX_DISTANT_LIGHTS, std430) uniform DistantLightBuffer { DistantLight distantLights[MAX_LIGHT_COUNT]; };
#endif

#if RECT_LIGHT_COUNT > 0
layout(binding = BINDING_INDEX_RECT_LIGHTS, std430) readonly buffer RectLightBuffer { RectLight rectLights[]; };
layout(binding = BINDING_INDEX_RECT_LIGHTS, std430) uniform RectLightBuffer { RectLight rectLights[MAX_LIGHT_COUNT]; };
#endif

#if DISK_LIGHT_COUNT > 0
layout(binding = BINDING_INDEX_DISK_LIGHTS, std430) readonly buffer DiskLightBuffer { DiskLight diskLights[]; };
layout(binding = BINDING_INDEX_DISK_LIGHTS, std430) uniform DiskLightBuffer { DiskLight diskLights[MAX_LIGHT_COUNT]; };
#endif

#if (TEXTURE_COUNT_2D > 0) || (TEXTURE_COUNT_3D > 0)
Expand Down
1 change: 1 addition & 0 deletions src/gi/shaders/rp_main_shadow.miss
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#extension GL_EXT_shader_explicit_arithmetic_types_int16: require
#extension GL_EXT_shader_explicit_arithmetic_types_int64: require
#extension GL_EXT_buffer_reference: require
#extension GL_EXT_scalar_block_layout: require

#include "rp_main_payload.glsl"
#include "rp_main_descriptors.glsl"
Expand Down

0 comments on commit f2ef21c

Please sign in to comment.