]> git.tdb.fi Git - libs/gl.git/blobdiff - source/backends/vulkan/pipelinestate_backend.cpp
Add support for alpha to coverage
[libs/gl.git] / source / backends / vulkan / pipelinestate_backend.cpp
index 7af36eedf82ceadced50b3f576b103ceeff584f8..9c695b3d1a5d281abda8ccc0d8a2df4b1e60b775 100644 (file)
@@ -48,7 +48,7 @@ void VulkanPipelineState::update() const
                push_const_compat = hash_update<32>(push_const_compat, self.shprog->get_push_constants_size());
        }
 
-       constexpr unsigned graphics_mask = PipelineState::VERTEX_SETUP|PipelineState::FACE_CULL|
+       constexpr unsigned graphics_mask = PipelineState::FRAMEBUFFER|PipelineState::VERTEX_SETUP|PipelineState::FACE_CULL|
                PipelineState::DEPTH_TEST|PipelineState::STENCIL_TEST|PipelineState::BLEND|PipelineState::PRIMITIVE_TYPE;
        unsigned pipeline_mask = PipelineState::SHPROG;
        if(!self.shprog->is_compute())
@@ -118,6 +118,8 @@ uint64_t VulkanPipelineState::compute_hash() const
                }
 
                result = hash_round<64>(result, format.get_samples());
+               if(format.get_samples()>1)
+                       result = hash_round<64>(result, self.blend.alpha_to_coverage);
 
                if(self.depth_test.enabled)
                {
@@ -216,7 +218,7 @@ void VulkanPipelineState::fill_graphics_creation_info(vector<char> &buffer) cons
        multisample_info->sampleShadingEnable = VK_FALSE;
        multisample_info->minSampleShading = 1.0f;
        multisample_info->pSampleMask = 0;
-       multisample_info->alphaToCoverageEnable = VK_FALSE;
+       multisample_info->alphaToCoverageEnable = (format.get_samples()>1 && self.blend.alpha_to_coverage ? VK_TRUE : VK_FALSE);
        multisample_info->alphaToOneEnable = VK_FALSE;
 
        depth_stencil_info->sType = VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO;
@@ -433,7 +435,7 @@ unsigned VulkanPipelineState::fill_descriptor_writes(unsigned index, unsigned fr
        return n_writes;
 }
 
-void VulkanPipelineState::synchronize_resources(bool discard_fb_contents) const
+void VulkanPipelineState::synchronize_resources() const
 {
        const PipelineState &self = *static_cast<const PipelineState *>(this);