vulkan: correctly deal with custom input attribs

This commit is contained in:
niki
2023-07-08 13:23:13 +02:00
parent 5254417c63
commit 04de1ade9e
2 changed files with 20 additions and 7 deletions
-2
View File
@@ -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)
+20 -5
View File
@@ -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<int>(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;
}
}