vkd3d-shader/ir: Allow controlling fog through parameters.

Fog requires several parameters to even implement the most basic of
functionality correctly, so this commit is relatively large.
This commit is contained in:
Elizabeth Figura
2024-10-05 10:26:20 -05:00
committed by Henri Verbeet
parent a1de406de4
commit f86d1e72a4
Notes: Henri Verbeet 2024-12-02 17:19:05 +01:00
Approved-by: Henri Verbeet (@hverbeet)
Merge-Request: https://gitlab.winehq.org/wine/vkd3d/-/merge_requests/1265
8 changed files with 504 additions and 29 deletions

View File

@@ -141,6 +141,7 @@ enum shader_cap
SHADER_CAP_CLIP_PLANES,
SHADER_CAP_DEPTH_BOUNDS,
SHADER_CAP_FLOAT64,
SHADER_CAP_FOG,
SHADER_CAP_GEOMETRY_SHADER,
SHADER_CAP_INT64,
SHADER_CAP_POINT_SIZE,
@@ -173,6 +174,15 @@ static inline unsigned int shader_runner_caps_get_feature_flags(const struct sha
return flags;
}
enum fog_mode
{
FOG_MODE_NONE = 0,
FOG_MODE_EXP = 1,
FOG_MODE_EXP2 = 2,
FOG_MODE_LINEAR = 3,
FOG_MODE_DISABLE,
};
struct shader_runner
{
const struct shader_runner_ops *ops;
@@ -222,6 +232,8 @@ struct shader_runner
struct vec4 clip_planes[8];
float point_size, point_size_min, point_size_max;
bool point_sprite;
struct vec4 fog_colour;
enum fog_mode fog_mode;
};
struct shader_runner_ops