]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/finalize.cpp
Add basic Vulkan support to the shader compiler
[libs/gl.git] / source / glsl / finalize.cpp
index 1a8f75422effd8368b1c9e2d2bee0b1b76cd77a6..e89aa4942ad768bb32318dad10cde682de7c78f8 100644 (file)
@@ -71,7 +71,9 @@ void LocationAllocator::apply(Module &module, const Features &features)
 {
        for(Stage &s: module.stages)
                apply(s);
-       allocate_locations("uniform");
+
+       if(features.target_api!=VULKAN)
+               allocate_locations("uniform");
 
        for(InterfaceBlock *b: unbound_blocks)
                bind_uniform(b->layout, b->block_name, features.uniform_binding_range);
@@ -386,7 +388,9 @@ bool StructuralFeatureConverter::supports_stage(Stage::Type st) const
 {
        if(st==Stage::GEOMETRY)
        {
-               if(features.target_api==OPENGL_ES)
+               if(features.target_api==VULKAN)
+                       return true;
+               else if(features.target_api==OPENGL_ES)
                        return check_version(Version(3, 20));
                else
                        return check_version(Version(1, 50));
@@ -397,7 +401,9 @@ bool StructuralFeatureConverter::supports_stage(Stage::Type st) const
 
 bool StructuralFeatureConverter::supports_unified_interface_syntax() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 0));
        else
                return check_version(Version(1, 30));
@@ -438,7 +444,9 @@ void StructuralFeatureConverter::visit(Assignment &assign)
 
 bool StructuralFeatureConverter::supports_unified_sampling_functions() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 0));
        else
                return check_version(Version(1, 30));
@@ -495,7 +503,9 @@ void StructuralFeatureConverter::visit(VariableDeclaration &var)
 
 bool StructuralFeatureConverter::supports_interface_blocks(const string &iface) const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
        {
                if(iface=="uniform")
                        return check_version(Version(3, 0));
@@ -519,7 +529,7 @@ void StructuralFeatureConverter::visit(InterfaceBlock &iface)
                push_constant = (i!=iface.layout->qualifiers.end());
        }
 
-       if((!supports_interface_blocks(iface.interface) || push_constant) && iface.type_declaration)
+       if((!supports_interface_blocks(iface.interface) || (push_constant && features.target_api!=VULKAN)) && iface.type_declaration)
        {
                if(!iface.instance_name.empty())
                        unsupported("ARB_uniform_buffer_object required for interface block instances");
@@ -547,7 +557,9 @@ void QualifierConverter::apply()
 
 bool QualifierConverter::supports_interface_layouts() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 0));
        else if(check_version(Version(3, 30)))
                return true;
@@ -559,7 +571,9 @@ bool QualifierConverter::supports_interface_layouts() const
 
 bool QualifierConverter::supports_stage_interface_layouts() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 10));
        else if(check_version(Version(4, 10)))
                return true;
@@ -569,7 +583,9 @@ bool QualifierConverter::supports_stage_interface_layouts() const
 
 bool QualifierConverter::supports_centroid_sampling() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 0));
        else if(check_version(Version(1, 20)))
                return true;
@@ -579,7 +595,9 @@ bool QualifierConverter::supports_centroid_sampling() const
 
 bool QualifierConverter::supports_sample_sampling() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 20));
        else if(check_version(Version(4, 0)))
                return true;
@@ -589,7 +607,9 @@ bool QualifierConverter::supports_sample_sampling() const
 
 bool QualifierConverter::supports_uniform_location() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 10));
        else if(check_version(Version(4, 30)))
                return true;
@@ -599,7 +619,9 @@ bool QualifierConverter::supports_uniform_location() const
 
 bool QualifierConverter::supports_binding() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 10));
        else
                return check_version(Version(4, 20));
@@ -681,7 +703,9 @@ void QualifierConverter::visit(VariableDeclaration &var)
 
 bool QualifierConverter::supports_interface_block_location() const
 {
-       if(features.target_api==OPENGL_ES)
+       if(features.target_api==VULKAN)
+               return true;
+       else if(features.target_api==OPENGL_ES)
                return check_version(Version(3, 20));
        else if(check_version(Version(4, 40)))
                return true;