Эх сурвалжийг харах

drm/vc4: Add support for rendering with ETC1 textures.

The validation for it ends up being quite simple, but I hadn't got
around to it before merging the driver.  For backwards compatibility,
we also need to add a flag so that the userspace GL driver can easily
tell if the kernel will allow ETC1 textures (on an old kernel, it will
continue to convert to RGBA8)

Signed-off-by: Eric Anholt <eric@anholt.net>
Eric Anholt 8 жил өмнө
parent
commit
7154d76fed

+ 1 - 0
drivers/gpu/drm/vc4/vc4_drv.c

@@ -78,6 +78,7 @@ static int vc4_get_param_ioctl(struct drm_device *dev, void *data,
 		pm_runtime_put(&vc4->v3d->pdev->dev);
 		pm_runtime_put(&vc4->v3d->pdev->dev);
 		break;
 		break;
 	case DRM_VC4_PARAM_SUPPORTS_BRANCHES:
 	case DRM_VC4_PARAM_SUPPORTS_BRANCHES:
+	case DRM_VC4_PARAM_SUPPORTS_ETC1:
 		args->value = true;
 		args->value = true;
 		break;
 		break;
 	default:
 	default:

+ 7 - 0
drivers/gpu/drm/vc4/vc4_validate.c

@@ -644,6 +644,13 @@ reloc_tex(struct vc4_exec_info *exec,
 		cpp = 1;
 		cpp = 1;
 		break;
 		break;
 	case VC4_TEXTURE_TYPE_ETC1:
 	case VC4_TEXTURE_TYPE_ETC1:
+		/* ETC1 is arranged as 64-bit blocks, where each block is 4x4
+		 * pixels.
+		 */
+		cpp = 8;
+		width = (width + 3) >> 2;
+		height = (height + 3) >> 2;
+		break;
 	case VC4_TEXTURE_TYPE_BW1:
 	case VC4_TEXTURE_TYPE_BW1:
 	case VC4_TEXTURE_TYPE_A4:
 	case VC4_TEXTURE_TYPE_A4:
 	case VC4_TEXTURE_TYPE_A1:
 	case VC4_TEXTURE_TYPE_A1:

+ 1 - 0
include/uapi/drm/vc4_drm.h

@@ -286,6 +286,7 @@ struct drm_vc4_get_hang_state {
 #define DRM_VC4_PARAM_V3D_IDENT1		1
 #define DRM_VC4_PARAM_V3D_IDENT1		1
 #define DRM_VC4_PARAM_V3D_IDENT2		2
 #define DRM_VC4_PARAM_V3D_IDENT2		2
 #define DRM_VC4_PARAM_SUPPORTS_BRANCHES		3
 #define DRM_VC4_PARAM_SUPPORTS_BRANCHES		3
+#define DRM_VC4_PARAM_SUPPORTS_ETC1		4
 
 
 struct drm_vc4_get_param {
 struct drm_vc4_get_param {
 	__u32 param;
 	__u32 param;