Skip to content

Commit

Permalink
Fixed overwriting materials storage buffer
Browse files Browse the repository at this point in the history
  • Loading branch information
corporateshark committed Sep 21, 2024
1 parent 2057c3c commit b2c9ba1
Showing 1 changed file with 16 additions and 10 deletions.
26 changes: 16 additions & 10 deletions samples/Tiny_MeshLarge.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -476,6 +476,8 @@ FramesPerSecondCounter fps_;

constexpr uint32_t kNumBufferedFrames = 3;

uint32_t mtlBufIndex = 0;

std::unique_ptr<lvk::IContext> ctx_;
lvk::Framebuffer fbMain_; // swapchain
lvk::Framebuffer fbOffscreen_;
Expand All @@ -502,7 +504,7 @@ lvk::Holder<lvk::RenderPipelineHandle> renderPipelineState_Shadow_;
lvk::Holder<lvk::RenderPipelineHandle> renderPipelineState_Skybox_;
lvk::Holder<lvk::RenderPipelineHandle> renderPipelineState_Fullscreen_;
lvk::Holder<lvk::BufferHandle> vb0_, ib0_; // buffers for vertices and indices
lvk::Holder<lvk::BufferHandle> sbMaterials_; // storage buffer for materials
std::vector<lvk::Holder<lvk::BufferHandle>> sbMaterials_; // storage buffer for materials
std::vector<lvk::Holder<lvk::BufferHandle>> ubPerFrame_, ubPerFrameShadow_, ubPerObject_;
lvk::Holder<lvk::SamplerHandle> sampler_;
lvk::Holder<lvk::SamplerHandle> samplerShadow_;
Expand Down Expand Up @@ -775,7 +777,7 @@ void destroy() {

vb0_ = nullptr;
ib0_ = nullptr;
sbMaterials_ = nullptr;
sbMaterials_.clear();
ubPerFrame_.clear();
ubPerFrameShadow_.clear();
ubPerObject_.clear();
Expand Down Expand Up @@ -1001,12 +1003,15 @@ bool initModel() {
textureDummyWhite_.index(),
textureDummyWhite_.index()});
}
sbMaterials_ = ctx_->createBuffer({.usage = lvk::BufferUsageBits_Storage,
.storage = lvk::StorageType_Device,
.size = sizeof(GPUMaterial) * materials_.size(),
.data = materials_.data(),
.debugName = "Buffer: materials"},
nullptr);

for (uint32_t i = 0; i != kNumBufferedFrames; i++) {
sbMaterials_.push_back(ctx_->createBuffer({.usage = lvk::BufferUsageBits_Storage,
.storage = lvk::StorageType_Device,
.size = sizeof(GPUMaterial) * materials_.size(),
.data = materials_.data(),
.debugName = "Buffer: materials"},
nullptr));
}

vb0_ = ctx_->createBuffer({.usage = lvk::BufferUsageBits_Vertex,
.storage = lvk::StorageType_Device,
Expand Down Expand Up @@ -1374,7 +1379,7 @@ void render(double delta, uint32_t frameIndex) {
} bindings = {
.perFrame = ctx_->gpuAddress(ubPerFrame_[frameIndex]),
.perObject = ctx_->gpuAddress(ubPerObject_[frameIndex]),
.materials = ctx_->gpuAddress(sbMaterials_),
.materials = ctx_->gpuAddress(sbMaterials_[mtlBufIndex]),
};
buffer.cmdPushConstants(bindings);
buffer.cmdBindIndexBuffer(ib0_, lvk::IndexFormat_UI32);
Expand Down Expand Up @@ -1938,7 +1943,8 @@ void processLoadedMaterials() {
LVK_ASSERT(materials_[mtl.idx].texAmbient >= 0);
LVK_ASSERT(materials_[mtl.idx].texDiffuse >= 0);
LVK_ASSERT(materials_[mtl.idx].texAlpha >= 0);
ctx_->upload(sbMaterials_, materials_.data(), sizeof(GPUMaterial) * materials_.size());
mtlBufIndex = (mtlBufIndex + 1) % sbMaterials_.size();
ctx_->upload(sbMaterials_[mtlBufIndex], materials_.data(), sizeof(GPUMaterial) * materials_.size());
}

inline ImVec4 toVec4(const vec4& c) {
Expand Down

0 comments on commit b2c9ba1

Please sign in to comment.