Browse Source

Some GL fixes

Panagiotis Christopoulos Charitos 7 years ago
parent
commit
c5641e28e9

+ 13 - 12
src/anki/gr/ShaderCompiler.cpp

@@ -35,20 +35,20 @@ static const char* SHADER_HEADER = R"(#version 450 core
 #define ANKI_%s_SHADER 1
 
 #if defined(ANKI_BACKEND_GL) 
-#	define ANKI_UBO_BINDING(set_, binding_) binding = (set_) * %u + (binding_)
-#	define ANKI_SS_BINDING(set_, binding_) binding = (set_) * %u + (binding_)
-#	define ANKI_TEX_BINDING(set_, binding_) binding = (set_) * %u + (binding_)
-#	define ANKI_IMAGE_BINDING(set_, binding_) binding = (set_) * %u + (binding_)
+#	define ANKI_UBO_BINDING(set_, binding_) binding = (set_) * (%u) + (binding_)
+#	define ANKI_SS_BINDING(set_, binding_) binding = (set_) * (%u) + (binding_)
+#	define ANKI_TEX_BINDING(set_, binding_) location = (set_) * (%u) + (binding_)
+#	define ANKI_IMAGE_BINDING(set_, binding_) location = (set_) * (%u) + (binding_) + (%u)
 #	define ANKI_SPEC_CONST(binding_, type_, name_) const type_ name_ = _anki_spec_const_ ## binding_
-#	define ANKI_PUSH_CONSTANTS(struct_, name_) layout(location = %u) uniform struct_ name_
+#	define ANKI_PUSH_CONSTANTS(struct_, name_) layout(location = (%u)) uniform struct_ name_
 #else
 #	define gl_VertexID gl_VertexIndex
 #	define gl_InstanceID gl_InstanceIndex
-#	define ANKI_TEX_BINDING(set_, binding_) set = set_, binding = %u + binding_
-#	define ANKI_UBO_BINDING(set_, binding_) set = set_, binding = %u + binding_
-#	define ANKI_SS_BINDING(set_, binding_) set = set_, binding = %u + binding_
-#	define ANKI_IMAGE_BINDING(set_, binding_) set = set_, binding = %u + binding_
-#	define ANKI_SPEC_CONST(binding_, type_, name_) layout(constant_id = binding_) const type_ name_ = type_(0)
+#	define ANKI_TEX_BINDING(set_, binding_) set = (set_), binding = (%u) + (binding_)
+#	define ANKI_UBO_BINDING(set_, binding_) set = (set_), binding = (%u) + (binding_)
+#	define ANKI_SS_BINDING(set_, binding_) set = (set_), binding = (%u) + (binding_)
+#	define ANKI_IMAGE_BINDING(set_, binding_) set = (set_), binding = (%u) + (binding_)
+#	define ANKI_SPEC_CONST(binding_, type_, name_) layout(constant_id = (binding_)) const type_ name_ = type_(0)
 #	define ANKI_PUSH_CONSTANTS(struct_, name_) layout(push_constant, row_major, std140) \
 		uniform pushConst_ {struct_ name_;}
 #endif
@@ -295,8 +295,9 @@ Error ShaderCompiler::compile(CString source, const ShaderCompilerOptions& optio
 		MAX_UNIFORM_BUFFER_BINDINGS,
 		MAX_STORAGE_BUFFER_BINDINGS,
 		MAX_TEXTURE_BINDINGS,
-		MAX_IMAGE_BINDINGS,
-		MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS, // Push constant location
+		MAX_IMAGE_BINDINGS, // Images
+		MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS, // Images offset
+		(MAX_TEXTURE_BINDINGS + MAX_IMAGE_BINDINGS) * MAX_DESCRIPTOR_SETS, // Push constant location
 		// VK bindings
 		0,
 		MAX_TEXTURE_BINDINGS,

+ 1 - 1
src/anki/gr/gl/CommandBuffer.cpp

@@ -757,7 +757,7 @@ void CommandBuffer::bindImage(U32 set, U32 binding, TextureViewPtr img)
 
 	if(self.m_state.bindImage(set, binding, img))
 	{
-		binding = binding + set * MAX_IMAGE_BINDINGS;
+		binding = binding + set * MAX_IMAGE_BINDINGS + MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS;
 		self.pushBackNewCommand<Cmd>(binding, img);
 	}
 }

+ 1 - 1
src/anki/gr/gl/ShaderProgramImpl.cpp

@@ -123,7 +123,7 @@ const ShaderProgramImplReflection& ShaderProgramImpl::getReflection()
 			}
 
 			GLint location = glGetUniformLocation(getGlName(), &name[0]);
-			if(location < I(MAX_TEXTURE_BINDINGS * MAX_DESCRIPTOR_SETS))
+			if(location < I((MAX_TEXTURE_BINDINGS + MAX_IMAGE_BINDINGS) * MAX_DESCRIPTOR_SETS))
 			{
 				// It must be a sampled image, skip it
 				continue;