AMD GPU - not great quality

So, I’m relatively new to how AMD GPU driver works in Linux, in Fedora specifically. With a fresh install of Fedora (KDE Plasma), what driver is being used and how do I query that specifically from CLI?

My past experience has been exclusive to NVIDIA and have recently switched to NVIDIA.

The reason I ask is because I have noticed in the past month or so that the video and picture quality is horrendous. Even as basic as looking at a picture with dark areas, those black areas are horrible quality, not clear at all.

Here is the AMD GPU I am using:

Radeon RX 6800/6800 XT / 6900 XT

NOTE: There is also an onboard GPU but I am pretty sure it is disable. I’m definitely not plugged into it.

EDIT: It also just occurred to me that it may be a monitor issue.

We use the AMD GPU driver that comes in the kernel, straight from the tap.

Thanks for the response.

So, AMD provides the driver to the kernel developers which are then are baked into the kernel and included when we complete updates?

Is there a way to query that specific driver information?

Do you mean like this?

leigh@mpd-pc:~/Documents/rpmfusion$ for p in /sys/module/amdgpu/parameters/*; do
    printf "%-40s %s\n" "$(basename $p)" "$(cat $p 2>/dev/null)"
done
abmlevel                                 -1
agp                                      -1
aspm                                     -1
async_gfx_ring                           1
audio                                    -1
backlight                                -1
bad_page_threshold                       -1
bapm                                     -1
cg_mask                                  18446744073709551615
cik_support                              -1
compute_multipipe                        -1
cwsr_enable                              1
damageclips                              -1
dc                                       -1
dcdebugmask                              0
dcfeaturemask                            2
debug_evictions                          N
debug_mask                               0
deep_color                               0
disable_cu                               (null)
discovery                                -1
disp_priority                            0
dpm                                      -1
emu_mode                                 0
enforce_isolation                        -1
exp_hw_support                           0
force_asic_type                          -1
forcelongtraining                        0
freesync_video                           0
fw_load_type                             -1
gartsize                                 
gpu_recovery                             -1
gttsize                                  
halt_if_hws_hang                         0
hdmi_hpd_debounce_delay_ms               0
hw_i2c                                   0
hws_gws_support                          N
hws_max_conc_proc                        -1
ip_block_mask                            4294967295
lbpw                                     -1
lockup_timeout                           
max_num_of_queues_per_device             4096
mcbp                                     -1
mes                                      0
mes_kiq                                  0
mes_log_enable                           0
modeset                                  -1
moverate                                 
msi                                      -1
mtype_local                              0
no_queue_eviction_on_vm_fault            0
noretry                                  -1
no_system_mem_limit                      N
num_kcq                                  -1
pcie_gen2                                -1
pcie_gen_cap                             0
pcie_lane_cap                            0
pg_mask                                  4294967295
ppfeaturemask                            0xfff7bfff
queue_preemption_timeout_ms              9000
ras_enable                               -1
ras_mask                                 4294967295
rebar                                    -1
reset_method                             -1
runpm                                    -1
sched_hw_submission                      2
sched_jobs                               32
sched_policy                             0
sdma_phase_quantum                       32
seamless                                 -1
send_sigterm                             0
sg_display                               -1
si_support                               -1
smu_memory_pool_size                     0
smu_pptable_id                           -1
svm_default_granularity                  9
timeout_fatal_disable                    N
timeout_period                           0
tmz                                      -1
umsch_mm                                 0
umsch_mm_fwlog                           0
uni_mes                                  1
user_partt_mode                          4294967294
user_queue                               -1
use_xgmi_p2p                             1
vcnfw_log                                0
virtual_display                          (null)
visualconfirm                            0
vis_vramlimit                            0
vm_block_size                            -1
vm_fault_stop                            0
vm_fragment_size                         -1
vm_size                                  -1
vm_update_mode                           -1
vramlimit                                
wbrf                                     -1
leigh@mpd-pc:~/Documents/rpmfusion$ modinfo amdgpu | grep -E '^parm:'
parm:           vramlimit:Restrict VRAM for testing, in megabytes (int)
parm:           vis_vramlimit:Restrict visible VRAM for testing, in megabytes (int)
parm:           gartsize:Size of kernel GART to setup in megabytes (32, 64, etc., -1=auto) (uint)
parm:           gttsize:Size of the GTT userspace domain in megabytes (-1 = auto) (int)
parm:           moverate:Maximum buffer migration rate in MB/s. (32, 64, etc., -1=auto, 0=1=disabled) (int)
parm:           audio:HDMI/DP Audio enable for non DC displays (-1 = auto, 0 = disable, 1 = enable) (int)
parm:           disp_priority:Display Priority (0 = auto, 1 = normal, 2 = high) (int)
parm:           hw_i2c:hw i2c engine enable (0 = disable) (int)
parm:           pcie_gen2:PCIE Gen2 mode (-1 = auto, 0 = disable, 1 = enable) (int)
parm:           msi:MSI support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           svm_default_granularity:SVM's default granularity in log(2^Pages), default 9 = 2^9 = 2 MiB (uint)
parm:           lockup_timeout:GPU lockup timeout in ms (default: 2000. 0: keep default value. negative: infinity timeout), format: [single value for all] or [GFX,Compute,SDMA,Video]. (string)
parm:           dpm:DPM support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           fw_load_type:firmware loading type (3 = rlc backdoor autoload if supported, 2 = smu load if supported, 1 = psp load, 0 = force direct if supported, -1 = auto) (int)
parm:           aspm:ASPM support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           runpm:PX runtime pm (2 = force enable with BAMACO, 1 = force enable with BACO, 0 = disable, -1 = auto, -2 = auto with displays) (int)
parm:           ip_block_mask:IP Block Mask (all blocks enabled (default)) (uint)
parm:           bapm:BAPM support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           deep_color:Deep Color support (1 = enable, 0 = disable (default)) (int)
parm:           vm_size:VM address space size in gigabytes (default 64GB) (int)
parm:           vm_fragment_size:VM fragment size in bits (4, 5, etc. 4 = 64K (default), Max 9 = 2M) (int)
parm:           vm_block_size:VM page table size in bits (default depending on vm_size) (int)
parm:           vm_fault_stop:Stop on VM fault (0 = never (default), 1 = print first, 2 = always) (int)
parm:           vm_update_mode:VM update using CPU (0 = never (default except for large BAR(LB)), 1 = Graphics only, 2 = Compute only (default for LB), 3 = Both (int)
parm:           exp_hw_support:experimental hw support (1 = enable, 0 = disable (default)) (int)
parm:           dc:Display Core driver (1 = enable, 0 = disable, -1 = auto (default)) (int)
parm:           sched_jobs:the max number of jobs supported in the sw queue (default 32) (int)
parm:           sched_hw_submission:the max number of HW submissions (default 2) (int)
parm:           ppfeaturemask:all power features enabled (default)) (hexint)
parm:           forcelongtraining:force memory long training (uint)
parm:           pcie_gen_cap:PCIE Gen Caps (0: autodetect (default)) (uint)
parm:           pcie_lane_cap:PCIE Lane Caps (0: autodetect (default)) (uint)
parm:           cg_mask:Clockgating flags mask (0 = disable clock gating) (ullong)
parm:           pg_mask:Powergating flags mask (0 = disable power gating) (uint)
parm:           sdma_phase_quantum:SDMA context switch phase quantum (x 1K GPU clock cycles, 0 = no change (default 32)) (uint)
parm:           disable_cu:Disable CUs (se.sh.cu,...) (charp)
parm:           virtual_display:Enable virtual display feature (the virtual_display will be set like xxxx:xx:xx.x,x;xxxx:xx:xx.x,x) (charp)
parm:           lbpw:Load Balancing Per Watt (LBPW) support (1 = enable, 0 = disable, -1 = auto) (int)
parm:           compute_multipipe:Force compute queues to be spread across pipes (1 = enable, 0 = disable, -1 = auto) (int)
parm:           gpu_recovery:Enable GPU recovery mechanism, (1 = enable, 0 = disable, -1 = auto) (int)
parm:           emu_mode:Emulation mode, (1 = enable, 0 = disable) (int)
parm:           ras_enable:Enable RAS features on the GPU (0 = disable, 1 = enable, -1 = auto (default)) (int)
parm:           ras_mask:Mask of RAS features to enable (default 0xffffffff), only valid when ras_enable == 1 (uint)
parm:           timeout_fatal_disable:disable watchdog timeout fatal error (false = default) (bool)
parm:           timeout_period:watchdog timeout period (0 = timeout disabled, 1 ~ 0x23 = timeout maxcycles = (1 << period) (uint)
parm:           si_support:SI support (1 = enabled, 0 = disabled, -1 = default) (int)
parm:           cik_support:CIK support  (1 = enabled, 0 = disabled, -1 = default) (int)
parm:           smu_memory_pool_size:reserve gtt for smu debug usage, 0 = disable,0x1 = 256Mbyte, 0x2 = 512Mbyte, 0x4 = 1 Gbyte, 0x8 = 2GByte (uint)
parm:           async_gfx_ring:Asynchronous GFX rings that could be configured with either different priorities (HP3D ring and LP3D ring), or equal priorities (0 = disabled, 1 = enabled (default)) (int)
parm:           mcbp:Enable Mid-command buffer preemption (0 = disabled, 1 = enabled), -1 = auto (default) (int)
parm:           discovery:Allow driver to discover hardware IPs from IP Discovery table at the top of VRAM (int)
parm:           mes:Enable Micro Engine Scheduler (0 = disabled (default), 1 = enabled) (int)
parm:           mes_log_enable:Enable Micro Engine Scheduler log (0 = disabled (default), 1 = enabled) (int)
parm:           mes_kiq:Enable Micro Engine Scheduler KIQ (0 = disabled (default), 1 = enabled) (int)
parm:           uni_mes:Enable Unified Micro Engine Scheduler (0 = disabled, 1 = enabled(default) (int)
parm:           noretry:Disable retry faults (0 = retry enabled, 1 = retry disabled, -1 auto (default)) (int)
parm:           force_asic_type:A non negative value used to specify the asic type for all supported GPUs (int)
parm:           use_xgmi_p2p:Enable XGMI P2P interface (0 = disable; 1 = enable (default)) (int)
parm:           sched_policy:Scheduling policy (0 = HWS (Default), 1 = HWS without over-subscription, 2 = Non-HWS (Used for debugging only) (int)
parm:           hws_max_conc_proc:Max # processes HWS can execute concurrently when sched_policy=0 (0 = no concurrency, #VMIDs for KFD = Maximum(default)) (int)
parm:           cwsr_enable:CWSR enable (0 = Off, 1 = On (Default)) (int)
parm:           max_num_of_queues_per_device:Maximum number of supported queues per device (1 = Minimum, 4096 = default) (int)
parm:           send_sigterm:Send sigterm to HSA process on unhandled exception (0 = disable, 1 = enable) (int)
parm:           halt_if_hws_hang:Halt if HWS hang is detected (0 = off (default), 1 = on) (int)
parm:           hws_gws_support:Assume MEC2 FW supports GWS barriers (false = rely on FW version check (Default), true = force supported) (bool)
parm:           queue_preemption_timeout_ms:queue preemption timeout in ms (1 = Minimum, 9000 = default) (int)
parm:           debug_evictions:enable eviction debug messages (false = default) (bool)
parm:           no_system_mem_limit:disable system memory limit (false = default) (bool)
parm:           no_queue_eviction_on_vm_fault:No queue eviction on VM fault (0 = queue eviction, 1 = no queue eviction) (int)
parm:           mtype_local:MTYPE for local memory (0 = MTYPE_RW (default), 1 = MTYPE_NC, 2 = MTYPE_CC) (int)
parm:           dcfeaturemask:all stable DC features enabled (default)) (uint)
parm:           dcdebugmask:all debug options disabled (default)) (uint)
parm:           visualconfirm:Visual confirm (0 = off (default), 1 = MPO, 5 = PSR) (uint)
parm:           abmlevel:ABM level (0 = off, 1-4 = backlight reduction level, -1 auto (default)) (int)
parm:           backlight:Backlight control (0 = pwm, 1 = aux, -1 auto (default)) (bint)
parm:           damageclips:Damage clips support (0 = disable, 1 = enable, -1 auto (default)) (int)
parm:           tmz:Enable TMZ feature (-1 = auto (default), 0 = off, 1 = on) (int)
parm:           freesync_video:Adds additional modes via VRR for refresh changes without a full modeset (0 = off (default), 1 = on) (uint)
parm:           reset_method:GPU reset method (-1 = auto (default), 0 = legacy, 1 = mode0, 2 = mode1, 3 = mode2, 4 = baco/bamaco) (int)
parm:           bad_page_threshold:Bad page threshold(-1 = ignore threshold (default value), 0 = disable bad page retirement, -2 = threshold determined by a formula, 0 < threshold < max records, user-defined threshold) (int)
parm:           num_kcq:number of kernel compute queue user want to setup (8 if set to greater than 8 or less than 0, only affect gfx 8+) (int)
parm:           vcnfw_log:Enable vcnfw log(0 = disable (default value), 1 = enable) (int)
parm:           sg_display:S/G Display (-1 = auto (default), 0 = disable) (int)
parm:           umsch_mm:Enable Multi Media User Mode Scheduler (0 = disabled (default), 1 = enabled) (int)
parm:           umsch_mm_fwlog:Enable umschfw log(0 = disable (default value), 1 = enable) (int)
parm:           smu_pptable_id:specify pptable id to be used (-1 = auto(default) value, 0 = use pptable from vbios, > 0 = soft pptable id) (int)
parm:           user_partt_mode:specify partition mode to be used (-2 = AMDGPU_AUTO_COMPUTE_PARTITION_MODE(default value) 						0 = AMDGPU_SPX_PARTITION_MODE, 			1 = AMDGPU_DPX_PARTITION_MODE, 						2 = AMDGPU_TPX_PARTITION_MODE, 						3 = AMDGPU_QPX_PARTITION_MODE, 						4 = AMDGPU_CPX_PARTITION_MODE) (uint)
parm:           enforce_isolation:enforce process isolation between graphics and compute. (-1 = auto, 0 = disable, 1 = enable, 2 = enable legacy mode, 3 = enable without cleaner shader) (int)
parm:           modeset:Override nomodeset (1 = enable, -1 = auto) (int)
parm:           seamless:Seamless boot (-1 = auto (default), 0 = disable, 1 = enable) (int)
parm:           debug_mask:debug options for amdgpu, disabled by default (uint)
parm:           agp:AGP (-1 = auto (default), 0 = disable, 1 = enable) (int)
parm:           wbrf:Enable Wifi RFI interference mitigation (0 = disabled, 1 = enabled, -1 = auto(default) (int)
parm:           rebar:Resizable BAR (-1 = auto (default), 0 = disable, 1 = enable) (int)
parm:           user_queue:Enable user queues (-1 = auto (default), 0 = disable, 1 = enable, 2 = enable UQs and disable KQs) (int)
parm:           hdmi_hpd_debounce_delay_ms:HDMI HPD disconnect debounce delay in milliseconds (0 to disable (by default), 1500 is common) (uint)

I think this may be it? Maybe? Does the output below look correct for driver version?

$  glxinfo | grep -E "OpenGL vendor|OpenGL renderer|OpenGL version"
OpenGL vendor string: AMD
OpenGL renderer string: AMD Radeon RX 6800 (radeonsi, navi21, ACO, DRM 3.64, 7.0.12-201.fc44.x86_64)
OpenGL version string: 4.6 (Compatibility Profile) Mesa 26.0.8

Mesa driver 26.0.8?

If so, according to AMD’s site, it’s a few revisions behind. Which, I guess, is to be expected.

Mesa is getting a update soon.

Install inxi and run inxi -Gzxx. This shows you the driver(s) and connected ports in a text format that is familiar to many linux users.

I wonder if your dark areas looking bad isn’t the classic RGB range mismatch between what the GPU sends and what the monitor expects, something like full 0–255 versus limited 16–235 range. As I understand it, that’s the kind of thing that can suddenly appear after a kernel, Mesa, or Plasma update changing a default.

It might be worth running rpm -qa --last | head -40 to see what updated around when your issue started.

You can also check your current range setting with kscreen-doctor -o and look for your connected output’s name, which is usually something like HDMI-A-1 or DP-1, and find the RgbRange line.

Very useful information. Thanks.

I’ve just been completing all types of troubleshooting. Looking at images on a different monitor, looking at images in a different operating system (I dual boot Windows 11 so that I can play Minecraft with my daughter), looking at images in a browser, looking at images in separate browsers, looking at images external to a browser, etc, etc. And what I think I found is that Vivaldi browser has hardware acceleration enabled that was causing the issue. I removed the checkbox and images look so much better.

That used to be the case when driving a TV from a computer.
Is that still a thing with modern TVs and monitors.

Good question and I’m honestly not sure, but RGB and resolution mismatches have always been at the root of my issues…

@t3kg33k Not sure if interesting for you, but you could very well play normal Minecraft (not Windows edition) natively on Linux.
Minecraft is a Java application, thus natively supported on Linux.

Thanks. Yeah, I’m familiar and have played that with her. However, she prefers the Bedrock edition.