Skip to content

Commit

Permalink
vulkan: don't try to enable blending with integer canvases.
Browse files Browse the repository at this point in the history
  • Loading branch information
slime73 committed Aug 15, 2024
1 parent 9d5828a commit 654585c
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 0 deletions.
15 changes: 15 additions & 0 deletions src/modules/graphics/vulkan/Graphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2346,6 +2346,7 @@ void Graphics::prepareDraw(const VertexAttributes &attributes, const BufferBindi
configuration.colorChannelMask = states.back().colorMask;
configuration.msaaSamples = renderPassState.msaa;
configuration.numColorAttachments = renderPassState.numColorAttachments;
configuration.packedColorAttachmentFormats = renderPassState.packedColorAttachmentFormats;
configuration.primitiveType = primitiveType;

if (optionalDeviceExtensions.extendedDynamicState)
Expand Down Expand Up @@ -2415,6 +2416,7 @@ void Graphics::setDefaultRenderPass()
renderPassState.height = static_cast<float>(swapChainExtent.height);
renderPassState.msaa = msaaSamples;
renderPassState.numColorAttachments = 1;
renderPassState.packedColorAttachmentFormats = (uint8)swapChainPixelFormat;
renderPassState.transitionImages.clear();

RenderPassConfiguration renderPassConfiguration{};
Expand Down Expand Up @@ -2542,6 +2544,9 @@ void Graphics::setRenderPass(const RenderTargets &rts, int pixelw, int pixelh, b
renderPassState.height = static_cast<float>(pixelh);
renderPassState.msaa = VK_SAMPLE_COUNT_1_BIT;
renderPassState.numColorAttachments = static_cast<uint32_t>(rts.colors.size());
renderPassState.packedColorAttachmentFormats = 0;
for (size_t i = 0; i < rts.colors.size(); i++)
renderPassState.packedColorAttachmentFormats |= ((uint64)rts.colors[i].texture->getPixelFormat()) << (i * 8ull);
renderPassState.transitionImages = std::move(transitionImages);
}

Expand Down Expand Up @@ -2783,6 +2788,16 @@ VkPipeline Graphics::createGraphicsPipeline(Shader *shader, const GraphicsPipeli

std::vector<VkPipelineColorBlendAttachmentState> colorBlendAttachments(configuration.numColorAttachments, colorBlendAttachment);

if (configuration.blendState.enable)
{
for (uint32 i = 0; i < configuration.numColorAttachments; i++)
{
PixelFormat format = (PixelFormat)((configuration.packedColorAttachmentFormats >> (i * 8ull)) & 0xFF);
if (!isPixelFormatSupported(format, PIXELFORMATUSAGEFLAGS_BLEND))
colorBlendAttachments[i].blendEnable = false;
}
}

VkPipelineColorBlendStateCreateInfo colorBlending{};
colorBlending.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
colorBlending.logicOpEnable = VK_FALSE;
Expand Down
1 change: 1 addition & 0 deletions src/modules/graphics/vulkan/Graphics.h
Original file line number Diff line number Diff line change
Expand Up @@ -198,6 +198,7 @@ struct RenderpassState
VkPipeline pipeline = VK_NULL_HANDLE;
std::vector<std::tuple<VkImage, PixelFormat, VkImageLayout, VkImageLayout, int, int>> transitionImages;
uint32_t numColorAttachments = 0;
uint64 packedColorAttachmentFormats = 0;
float width = 0.0f;
float height = 0.0f;
VkSampleCountFlagBits msaa = VK_SAMPLE_COUNT_1_BIT;
Expand Down
1 change: 1 addition & 0 deletions src/modules/graphics/vulkan/Shader.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ struct GraphicsPipelineConfiguration
VkSampleCountFlagBits msaaSamples;
uint32_t numColorAttachments;
PrimitiveType primitiveType;
uint64 packedColorAttachmentFormats;

struct DynamicState
{
Expand Down

0 comments on commit 654585c

Please sign in to comment.