Skip to content

Commit 78a7212

Browse files
committed
Improve uniform compatibility in case of no bound buffer
1 parent d029353 commit 78a7212

File tree

5 files changed

+19
-7
lines changed

5 files changed

+19
-7
lines changed

src/main/java/net/vulkanmod/mixin/render/CompositeRenderTypeM.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import net.minecraft.client.renderer.RenderType;
1414
import net.vulkanmod.render.engine.*;
1515
import net.vulkanmod.vulkan.Renderer;
16+
import net.vulkanmod.vulkan.VRenderSystem;
1617
import net.vulkanmod.vulkan.texture.VTextureSelector;
1718
import org.joml.Vector3f;
1819
import org.joml.Vector4f;
@@ -94,6 +95,9 @@ public void draw(MeshData meshData) {
9495
}
9596
}
9697

98+
VRenderSystem.applyModelViewMatrix(RenderSystem.getModelViewMatrix());
99+
VRenderSystem.calculateMVP();
100+
97101
renderPass.setIndexBuffer(gpuBuffer2, indexType);
98102

99103
VkCommandEncoder commandEncoder = (VkCommandEncoder) RenderSystem.getDevice().createCommandEncoder();

src/main/java/net/vulkanmod/render/engine/VkCommandEncoder.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -793,10 +793,10 @@ public void setupUniforms(VkRenderPass renderPass) {
793793

794794
GpuBufferSlice gpuBufferSlice = renderPass.uniforms.get(uniformName);
795795

796-
// In case uniform buffer is not set, ignore it
796+
// In case uniform buffer is not set, fallback to global buffer
797797
if (gpuBufferSlice == null) {
798798
ubo.setUseGlobalBuffer(true);
799-
ubo.setUpdate(false);
799+
ubo.setUpdate(true);
800800
continue;
801801
}
802802

src/main/java/net/vulkanmod/vulkan/shader/DescriptorSets.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public class DescriptorSets {
4848
}
4949
}
5050

51-
protected void bindSets(VkCommandBuffer commandBuffer, UniformBuffer uniformBuffer, int bindPoint) {
51+
public void bindSets(VkCommandBuffer commandBuffer, UniformBuffer uniformBuffer, int bindPoint) {
5252
try (MemoryStack stack = stackPush()) {
5353

5454
this.updateUniforms(uniformBuffer);
@@ -62,6 +62,12 @@ protected void bindSets(VkCommandBuffer commandBuffer, UniformBuffer uniformBuff
6262
private void updateUniforms(UniformBuffer globalUB) {
6363
int i = 0;
6464
for (UBO ubo : pipeline.getBuffers()) {
65+
// Prevent NPE in case UBO has no bound buffer slice
66+
if (ubo.getBufferSlice().getBuffer() == null) {
67+
ubo.setUseGlobalBuffer(true);
68+
ubo.setUpdate(true);
69+
}
70+
6571
boolean useOwnUB = !ubo.useGlobalBuffer();
6672

6773
int offset;

src/main/java/net/vulkanmod/vulkan/shader/Pipeline.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -163,7 +163,7 @@ public void scheduleCleanUp() {
163163

164164
public abstract void cleanUp();
165165

166-
void destroyDescriptorSets() {
166+
protected void destroyDescriptorSets() {
167167
for (DescriptorSets descriptorSets : this.descriptorSets) {
168168
descriptorSets.cleanUp();
169169
}
@@ -240,10 +240,8 @@ public void bindDescriptorSets(VkCommandBuffer commandBuffer, UniformBuffer unif
240240
this.descriptorSets[frame].bindSets(commandBuffer, uniformBuffer, VK_PIPELINE_BIND_POINT_GRAPHICS);
241241
}
242242

243-
static long createShaderModule(ByteBuffer spirvCode) {
244-
243+
protected static long createShaderModule(ByteBuffer spirvCode) {
245244
try (MemoryStack stack = stackPush()) {
246-
247245
VkShaderModuleCreateInfo createInfo = VkShaderModuleCreateInfo.calloc(stack);
248246

249247
createInfo.sType(VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO);

src/main/java/net/vulkanmod/vulkan/shader/layout/Uniform.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public String getName() {
3434
}
3535

3636
void update(long ptr) {
37+
if (this.values == null) {
38+
return;
39+
}
40+
3741
MappedBuffer src = values.get();
3842

3943
MemoryUtil.memCopy(src.ptr, ptr + this.offset, this.size);

0 commit comments

Comments
 (0)