package drm
//go:generate ./fourcc.py
import (
"fmt"
"strings"
)
type Format uint32
func (f Format) Name() string {
if name := f.str(); name != "" {
return name
}
return "unknown"
}
func (f Format) String() string {
return fmt.Sprintf("%s (0x%X)", f.Name(), uint32(f))
}
type ModifierVendor uint8
func (vendor ModifierVendor) String() string {
if name := vendor.str(); name != "" {
return name
}
return "unknown"
}
type Modifier uint64
func (mod Modifier) Vendor() ModifierVendor {
return ModifierVendor(mod >> 56)
}
func (mod Modifier) Name() string {
var name string
switch mod.Vendor() {
case ModifierVendorNVIDIA:
name = modifierNameNVIDIA(uint64(mod))
}
if name != "" {
return name
}
if name := mod.str(); name != "" {
return name
}
if vendor := mod.Vendor().str(); vendor != "" {
return fmt.Sprintf("%s(unknown)", strings.ToUpper(vendor))
}
return "unknown"
}
func (mod Modifier) String() string {
return fmt.Sprintf("%s (0x%X)", mod.Name(), uint64(mod))
}
func modifierNameNVIDIA(mod uint64) string {
if mod & 0x10 == 0 {
return ""
}
h := mod & 0xF
k := (mod >> 12) & 0xFF
g := (mod >> 20) & 0x3
s := (mod >> 22) & 0x1
c := (mod >> 23) & 0x7
return fmt.Sprintf("NVIDIA_BLOCK_LINEAR_2D(h=%v, k=%v, g=%v, s=%v, c=%v)", h, k, g, s, c)
}