Expose time, date, mouse, ideally CPU / GPU / memory utilization to custom HLSL shaders #12998

Open
opened 2026-01-31 03:31:01 +00:00 by claunia · 2 comments
Owner

Originally created by @nincode on GitHub (Mar 12, 2021).

Description of the new feature/enhancement

Custom shaders rock, but they would rock even more if they were interactive. They simply don't know what's happening outside of the shader. I would love to have my shaders respond to what's happening on the system: for example, have them change color by time of day, or have them act up and be all energetic when CPU utilization is high, and calm down when CPU utilization is low. That would be a totally sweet command prompt.

Proposed technical implementation details (optional)

On the HLSL side, expose additional state in the cbuffer. I don't think this would break existing shaders if we just add items to the end of the cbuffer, but even if it does, hey, it's an experimental feature as someone said. :)

cbuffer PixelShaderSettings {
  float  Time;
  float  Scale;
  float2 Resolution;
  float4 Background;

  // Additional proposed constants

  float4 TimeOfDay;        // .x = hours; .y = minutes; .z = seconds; .w = msecs
  float4 Date;             // .x = year;  .y = month;   .z = day
  float  CpuUtilization;
  float  MemoryUtilization;
  float  GpuUtilization;   // ok, may be a long shot, but would be nice to have
  float2 Mouse;            // Mouse coordinates if mouse is over the window! Interactive pixel shader backgrounds! :)
};

Minor tech note: if fetching cpu / memory / gpu utilization is costly, it's ok to do them every 500ms or so. They don't need to be per-frame.


maintainer notes:

#15837 is another feature that might be a good thing to plumb through here. Consider: swapchainPosition, so that you can use the offset relative to the desktop origin. (we would of course have to plumb the desktop image into the shader, ala #14073)

Originally created by @nincode on GitHub (Mar 12, 2021). # Description of the new feature/enhancement Custom shaders rock, but they would rock even more if they were interactive. They simply don't know what's happening outside of the shader. I would love to have my shaders respond to what's happening on the system: for example, have them change color by time of day, or have them act up and be all energetic when CPU utilization is high, and calm down when CPU utilization is low. That would be a totally sweet command prompt. # Proposed technical implementation details (optional) On the HLSL side, expose additional state in the cbuffer. I don't think this would break existing shaders if we just add items to the end of the cbuffer, but even if it does, hey, it's an experimental feature as someone said. :) ``` cbuffer PixelShaderSettings { float Time; float Scale; float2 Resolution; float4 Background; // Additional proposed constants float4 TimeOfDay; // .x = hours; .y = minutes; .z = seconds; .w = msecs float4 Date; // .x = year; .y = month; .z = day float CpuUtilization; float MemoryUtilization; float GpuUtilization; // ok, may be a long shot, but would be nice to have float2 Mouse; // Mouse coordinates if mouse is over the window! Interactive pixel shader backgrounds! :) }; ``` Minor tech note: if fetching cpu / memory / gpu utilization is costly, it's ok to do them every 500ms or so. They don't need to be per-frame. ---- _maintainer notes:_ #15837 is another feature that might be a good thing to plumb through here. Consider: swapchainPosition, so that you can use the offset relative to the desktop origin. (we would of course have to plumb the desktop image into the shader, ala #14073)
claunia added the Issue-FeatureArea-RenderingProduct-Terminal labels 2026-01-31 03:31:02 +00:00
Author
Owner

@skyline75489 commented on GitHub (Mar 16, 2021):

Funny that, even though not quite related, the first thought I had about this is #3459, which also requires time, date, etc.

@skyline75489 commented on GitHub (Mar 16, 2021): Funny that, even though not quite related, the first thought I had about this is #3459, which also requires time, date, etc.
Author
Owner

@groutoutlook commented on GitHub (Jun 3, 2025):

bump... maybe? Would love to see this so I can some arbitrary data to shader for cool visual effect.

@groutoutlook commented on GitHub (Jun 3, 2025): bump... maybe? Would love to see this so I can some arbitrary data to shader for cool visual effect.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/terminal#12998