diff --git a/src/dxvk/hud/dxvk_hud_item.cpp b/src/dxvk/hud/dxvk_hud_item.cpp index 2beb7c9b9..fb572d7c3 100644 --- a/src/dxvk/hud/dxvk_hud_item.cpp +++ b/src/dxvk/hud/dxvk_hud_item.cpp @@ -1122,8 +1122,11 @@ namespace dxvk::hud { draw.w = size.x; draw.h = size.y; draw.pageMask = chunk.pageMaskOffset; - draw.pageCount = chunk.pageCount; + draw.pageCountAndActiveBit = chunk.pageCount; draw.color = color; + + if (chunk.active) + draw.pageCountAndActiveBit |= 1u << 15; } diff --git a/src/dxvk/hud/dxvk_hud_item.h b/src/dxvk/hud/dxvk_hud_item.h index 96bd52e53..238991fa8 100644 --- a/src/dxvk/hud/dxvk_hud_item.h +++ b/src/dxvk/hud/dxvk_hud_item.h @@ -540,7 +540,7 @@ namespace dxvk::hud { int16_t w; int16_t h; uint16_t pageMask; - uint16_t pageCount; + uint16_t pageCountAndActiveBit; uint32_t color; }; diff --git a/src/dxvk/hud/shaders/hud_chunk_frag_background.frag b/src/dxvk/hud/shaders/hud_chunk_frag_background.frag index 4748abec3..a2f1cb40a 100644 --- a/src/dxvk/hud/shaders/hud_chunk_frag_background.frag +++ b/src/dxvk/hud/shaders/hud_chunk_frag_background.frag @@ -11,10 +11,20 @@ uniform push_data_t { float scale; }; +layout(location = 0) flat in uint v_active; + layout(location = 0) out vec4 o_color; void main() { o_color = vec4(0.0f, 0.0f, 0.0f, 0.75f); + + if (v_active == 0u) { + uvec2 pos = uvec2(gl_FragCoord.xy); + + if (((pos.x + pos.y) & 7u) < 2u) + o_color.xyz = vec3(0.25f); + } + o_color.a *= opacity; o_color = linear_to_output(o_color); } diff --git a/src/dxvk/hud/shaders/hud_chunk_vert_background.vert b/src/dxvk/hud/shaders/hud_chunk_vert_background.vert index 381c42475..aaeacb019 100644 --- a/src/dxvk/hud/shaders/hud_chunk_vert_background.vert +++ b/src/dxvk/hud/shaders/hud_chunk_vert_background.vert @@ -26,6 +26,8 @@ vec2 unpack_u16(uint v) { return vec2(float(lo >> 16), float(hi >> 16)); } +layout(location = 0) out uint o_active; + void main() { draw_info_t draw = draw_infos[gl_InstanceIndex]; @@ -43,5 +45,6 @@ void main() { vec2 pixel_pos = pos + size * coord + (2.0f * coord - 1.0f); vec2 scaled_pos = 2.0f * (pixel_pos / surface_size_f) - 1.0f; + o_active = bitfieldExtract(draw.packed_range, 31, 1); gl_Position = vec4(scaled_pos, 0.0f, 1.0f); } diff --git a/src/dxvk/hud/shaders/hud_chunk_vert_visualize.vert b/src/dxvk/hud/shaders/hud_chunk_vert_visualize.vert index f17fdc7bd..1ab223546 100644 --- a/src/dxvk/hud/shaders/hud_chunk_vert_visualize.vert +++ b/src/dxvk/hud/shaders/hud_chunk_vert_visualize.vert @@ -42,7 +42,7 @@ void main() { o_coord = coord; o_color = draw.color; o_mask_index = bitfieldExtract(draw.packed_range, 0, 16); - o_page_count = bitfieldExtract(draw.packed_range, 16, 16); + o_page_count = bitfieldExtract(draw.packed_range, 16, 15); vec2 surface_size_f = vec2(surface_size) / scale;