KhronosGroup / OpenXR-CTS

Conformance test suite for OpenXR

Home Page:https://www.khronos.org/conformance/adopters/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

case “SourceAlphaBlending”, Error to get the color.

xingchen0085 opened this issue · comments

commented

When I test TEST_CASE("SourceAlphaBlending", "[composition][interactive][no_auto]"), the Runtime used Monado, and the resulting graphic results were as follows:
mmexport1691658512931
I found that the colors of the three rectangles are not exactly the same. It is easy to see that the blue color of the middle rectangle is bluer.
And in my runtime, the pipeline's color blend config is:

VkBlendFactor blend_factor = premultiplied_alpha ? VK_BLEND_FACTOR_ONE : VK_BLEND_FACTOR_SRC_ALPHA;
// final_color.rgb   = (new_color.rgb * srcColorBlendFactor) [colorBlendOp] (old_color.rgb * dstColorBlendFactor)
// final_color.alpha = (new_color.a * srcAlphaBlendFactor) [alphaBlendOp] (old_color.a * dstAlphaBlendFactor)
&(VkPipelineColorBlendAttachmentState){
    .blendEnable = VK_TRUE,
    .colorWriteMask = VK_COLOR_COMPONENT_R_BIT | VK_COLOR_COMPONENT_G_BIT | VK_COLOR_COMPONENT_B_BIT | VK_COLOR_COMPONENT_A_BIT,
    .srcColorBlendFactor = blend_factor,
    .dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
    .colorBlendOp = VK_BLEND_OP_ADD,
    .srcAlphaBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA,
    .dstAlphaBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA,
    .alphaBlendOp = VK_BLEND_OP_ADD,
}

Is this correct? Hope to get your reply very much, thank you!

An issue (number 2095) has been filed to correspond to this issue in the internal Khronos GitLab (Khronos members only: KHR:openxr/openxr#2095 ), to facilitate working group processes.

This GitHub issue will continue to be the main site of discussion.

This looks fine for me, what version of Monado are you using?

I recently ran into this problem implementing this piece of composition. The issue is the CTS test is calculating colors in gamma space and then (implicitly) submitting layers on non-linear (i.e. sRGB) swapchains. Calculating premultiplied-alpha colors and calculating the expected result (the middle square) using gamma-encoded colors is not correct.

A simple solution would be to allocate linear-color swapchains.