History

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)

Eric Anholt committed 10 years ago

Commit 7154d761 parent 457e67a3 files · +9 −0Browse files

Unified · Split

3 files
  1. drivers/gpu/drm/vc4/vc4_drv.c +1 −0
  2. drivers/gpu/drm/vc4/vc4_validate.c +7 −0
  3. include/uapi/drm/vc4_drm.h +1 −0
drivers/gpu/drm/vc4/vc4_drv.c+1−0
@@ -78,6 +78,7 @@ static int vc4_get_param_ioctl(struct drm_device *dev, void *data, · 77 unmodified lines
78 pm_runtime_put(&vc4->v3d->pdev->dev);78 pm_runtime_put(&vc4->v3d->pdev->dev);
79 break;79 break;
80 case DRM_VC4_PARAM_SUPPORTS_BRANCHES:80 case DRM_VC4_PARAM_SUPPORTS_BRANCHES:
81 case DRM_VC4_PARAM_SUPPORTS_ETC1:
81 args->value = true;82 args->value = true;
82 break;83 break;
83 default:84 default:
drivers/gpu/drm/vc4/vc4_validate.c+7−0
@@ -644,6 +644,13 @@ reloc_tex(struct vc4_exec_info *exec, · 643 unmodified lines
644 cpp = 1;644 cpp = 1;
645 break;645 break;
646 case VC4_TEXTURE_TYPE_ETC1:646 case VC4_TEXTURE_TYPE_ETC1:
647 /* ETC1 is arranged as 64-bit blocks, where each block is 4x4
648 * pixels.
649 */
650 cpp = 8;
651 width = (width + 3) >> 2;
652 height = (height + 3) >> 2;
653 break;
647 case VC4_TEXTURE_TYPE_BW1:654 case VC4_TEXTURE_TYPE_BW1:
648 case VC4_TEXTURE_TYPE_A4:655 case VC4_TEXTURE_TYPE_A4:
649 case VC4_TEXTURE_TYPE_A1:656 case VC4_TEXTURE_TYPE_A1:
include/uapi/drm/vc4_drm.h+1−0
@@ -286,6 +286,7 @@ struct drm_vc4_get_hang_state { · 285 unmodified lines
286#define DRM_VC4_PARAM_V3D_IDENT1 1286#define DRM_VC4_PARAM_V3D_IDENT1 1
287#define DRM_VC4_PARAM_V3D_IDENT2 2287#define DRM_VC4_PARAM_V3D_IDENT2 2
288#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3288#define DRM_VC4_PARAM_SUPPORTS_BRANCHES 3
289#define DRM_VC4_PARAM_SUPPORTS_ETC1 4
289 290
290struct drm_vc4_get_param {291struct drm_vc4_get_param {
291 __u32 param;292 __u32 param;