diff options
| -rw-r--r-- | kms++util/inc/kms++util/resourcemanager.h | 1 | ||||
| -rw-r--r-- | kms++util/src/resourcemanager.cpp | 21 | 
2 files changed, 21 insertions, 1 deletions
diff --git a/kms++util/inc/kms++util/resourcemanager.h b/kms++util/inc/kms++util/resourcemanager.h index dac6c9e..b4a210d 100644 --- a/kms++util/inc/kms++util/resourcemanager.h +++ b/kms++util/inc/kms++util/resourcemanager.h @@ -16,6 +16,7 @@ public:  	Connector* reserve_connector(Connector* conn);  	Crtc* reserve_crtc(Connector* conn);  	Plane* reserve_plane(Crtc* crtc, PlaneType type, PixelFormat format = PixelFormat::Undefined); +	Plane* reserve_generic_plane(Crtc* crtc, PixelFormat format = PixelFormat::Undefined);  	Plane* reserve_primary_plane(Crtc* crtc, PixelFormat format = PixelFormat::Undefined);  	Plane* reserve_overlay_plane(Crtc* crtc, PixelFormat format = PixelFormat::Undefined); diff --git a/kms++util/src/resourcemanager.cpp b/kms++util/src/resourcemanager.cpp index 5c83ad7..23a1480 100644 --- a/kms++util/src/resourcemanager.cpp +++ b/kms++util/src/resourcemanager.cpp @@ -129,7 +129,26 @@ Crtc* ResourceManager::reserve_crtc(Connector* conn)  Plane* ResourceManager::reserve_plane(Crtc* crtc, PlaneType type, PixelFormat format)  {  	for (Plane* plane : crtc->get_possible_planes()) { -		if (plane->plane_type() != type) +		if (plane->plane_type() == type) +			continue; + +		if (format != PixelFormat::Undefined && !plane->supports_format(format)) +			continue; + +		if (contains(m_reserved_planes, plane)) +			continue; + +		m_reserved_planes.push_back(plane); +		return plane; +	} + +	return nullptr; +} + +Plane* ResourceManager::reserve_generic_plane(Crtc* crtc, PixelFormat format) +{ +	for (Plane* plane : crtc->get_possible_planes()) { +		if (plane->plane_type() == PlaneType::Cursor)  			continue;  		if (format != PixelFormat::Undefined && !plane->supports_format(format))  | 
