diff --git a/src/modules/graphics/vulkan/Graphics.cpp b/src/modules/graphics/vulkan/Graphics.cpp index 00ac0db69..21b1afd4a 100644 --- a/src/modules/graphics/vulkan/Graphics.cpp +++ b/src/modules/graphics/vulkan/Graphics.cpp @@ -2410,8 +2410,6 @@ void Graphics::setDefaultRenderPass() void Graphics::setRenderPass(const RenderTargets &rts, int pixelw, int pixelh, bool hasSRGBtexture) { - auto currentCommandBuffer = commandBuffers.at(currentFrame); - // fixme: hasSRGBtexture RenderPassConfiguration renderPassConfiguration{}; for (const auto &color : rts.colors) diff --git a/src/modules/graphics/vulkan/Shader.cpp b/src/modules/graphics/vulkan/Shader.cpp index adae93550..9d02a950a 100644 --- a/src/modules/graphics/vulkan/Shader.cpp +++ b/src/modules/graphics/vulkan/Shader.cpp @@ -18,6 +18,7 @@ * 3. This notice may not be removed or altered from any source distribution. **/ +#include "graphics/vertex.h" #include "Shader.h" #include "Graphics.h" @@ -824,8 +825,8 @@ void Shader::compileShaders() if (resource.name == "gl_DefaultUniformBlock") { const auto& type = comp.get_type(resource.base_type_id); - size_t uniformBufferObjectSize = comp.get_declared_struct_size(type); - auto defaultUniformBlockSize = comp.get_declared_struct_size(type); + size_t defaultUniformBlockSize = comp.get_declared_struct_size(type); + localUniformStagingData.resize(defaultUniformBlockSize); localUniformData.resize(defaultUniformBlockSize); localUniformLocation = bindingMapper(comp, spirv, resource.name, resource.id); @@ -961,11 +962,25 @@ void Shader::compileShaders() if (shaderStage == SHADERSTAGE_VERTEX) { + int nextAttributeIndex = ATTRIB_MAX_ENUM; + for (const auto &r : shaderResources.stage_inputs) { - const auto &name = r.name; - const int attributeLocation = static_cast(comp.get_decoration(r.id, spv::DecorationLocation)); - attributes[name] = attributeLocation; + int index; + + BuiltinVertexAttribute builtinAttribute; + if (graphics::getConstant(r.name.c_str(), builtinAttribute)) + index = (int)builtinAttribute; + else + index = nextAttributeIndex++; + + uint32_t locationOffset; + if (!comp.get_binary_offset_for_decoration(r.id, spv::DecorationLocation, locationOffset)) + throw love::Exception("could not get binary offset for location"); + + spirv[locationOffset] = (uint32_t)index; + + attributes[r.name] = index; } }