Remove flippable bit from g_emptyTex

This causes a KMS import failure on Intel. A 1x1 buffer never seems
to be flippable there.

Closes: https://github.com/Plagman/gamescope/issues/217
This commit is contained in:
Simon Ser 2021-08-02 11:09:40 +02:00
parent bedef21474
commit 15b4eb04ec
3 changed files with 15 additions and 10 deletions

View file

@ -410,6 +410,7 @@ bool CVulkanTexture::BInit( uint32_t width, uint32_t height, VkFormat format, cr
modifiers.push_back( modifier );
}
fprintf(stderr, "format: 0x%x, size: %dx%d\n", drmFormat, width, height);
assert( modifiers.size() > 0 );
modifierListInfo.sType = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT;
@ -1692,8 +1693,9 @@ bool vulkan_init(void)
return false;
}
CVulkanTexture::createFlags texCreateFlags;
uint32_t bits = 0;
g_emptyTex = vulkan_create_texture_from_bits( 1, 1, VK_FORMAT_R8G8B8A8_UNORM, &bits );
g_emptyTex = vulkan_create_texture_from_bits( 1, 1, VK_FORMAT_R8G8B8A8_UNORM, texCreateFlags, &bits );
if ( g_emptyTex == 0 )
{
@ -1830,15 +1832,12 @@ VulkanTexture_t vulkan_create_texture_from_dmabuf( struct wlr_dmabuf_attributes
return ret;
}
VulkanTexture_t vulkan_create_texture_from_bits( uint32_t width, uint32_t height, VkFormat format, void *bits )
VulkanTexture_t vulkan_create_texture_from_bits( uint32_t width, uint32_t height, VkFormat format, CVulkanTexture::createFlags texCreateFlags, void *bits )
{
VulkanTexture_t ret = 0;
CVulkanTexture *pTex = new CVulkanTexture();
CVulkanTexture::createFlags texCreateFlags;
texCreateFlags.bFlippable = BIsNested() == false;
texCreateFlags.bLinear = true; // cursor buffer needs to be linear
texCreateFlags.bTextureable = true;
texCreateFlags.bTransferDst = true;

View file

@ -133,7 +133,7 @@ extern dev_t g_vulkanDrmDevId;
bool vulkan_init(void);
VulkanTexture_t vulkan_create_texture_from_dmabuf( struct wlr_dmabuf_attributes *pDMA );
VulkanTexture_t vulkan_create_texture_from_bits( uint32_t width, uint32_t height, VkFormat format, void *bits );
VulkanTexture_t vulkan_create_texture_from_bits( uint32_t width, uint32_t height, VkFormat format, CVulkanTexture::createFlags texCreateFlags, void *bits );
uint32_t vulkan_texture_get_fbid( VulkanTexture_t vulkanTex );

View file

@ -847,9 +847,15 @@ bool MouseCursor::getTexture()
return false;
}
CVulkanTexture::createFlags texCreateFlags;
if ( BIsNested() == false )
{
texCreateFlags.bFlippable = true;
texCreateFlags.bLinear = true; // cursor buffer needs to be linear
// TODO: choose format & modifiers from cursor plane
m_texture = vulkan_create_texture_from_bits(m_width, m_height, VK_FORMAT_R8G8B8A8_UNORM,
cursorBuffer.data());
}
m_texture = vulkan_create_texture_from_bits(m_width, m_height, VK_FORMAT_R8G8B8A8_UNORM, texCreateFlags, cursorBuffer.data());
assert(m_texture);
XFree(image);
m_dirty = false;