95 lines
2.3 KiB
HLSL
95 lines
2.3 KiB
HLSL
#ifndef XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|
|
#define XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|
|
|
|
cbuffer xe_system_cbuffer : register(b0) {
|
|
uint xe_flags;
|
|
float2 xe_tessellation_factor_range;
|
|
uint xe_line_loop_closing_index;
|
|
|
|
uint xe_vertex_index_endian;
|
|
uint xe_vertex_index_offset;
|
|
uint2 xe_vertex_index_min_max;
|
|
|
|
float4 xe_user_clip_planes[6];
|
|
|
|
float3 xe_ndc_scale;
|
|
float xe_point_size_x;
|
|
|
|
float3 xe_ndc_offset;
|
|
float xe_point_size_y;
|
|
|
|
float2 xe_point_size_min_max;
|
|
float2 xe_point_screen_to_ndc;
|
|
|
|
uint xe_interpolator_sampling_pattern;
|
|
uint xe_ps_param_gen;
|
|
uint2 xe_sample_count_log2;
|
|
|
|
uint4 xe_texture_swizzled_signs[2];
|
|
|
|
uint xe_textures_resolved;
|
|
float xe_alpha_test_reference;
|
|
uint xe_alpha_to_mask;
|
|
uint xe_edram_32bpp_tile_pitch_dwords_scaled;
|
|
|
|
float4 xe_color_exp_bias;
|
|
|
|
float2 xe_edram_poly_offset_front;
|
|
float2 xe_edram_poly_offset_back;
|
|
|
|
uint xe_edram_depth_base_dwords_scaled;
|
|
|
|
uint4 xe_edram_stencil[2];
|
|
|
|
uint4 xe_edram_rt_base_dwords_scaled;
|
|
|
|
uint4 xe_edram_rt_format_flags;
|
|
|
|
float4 xe_edram_rt_clamp[4];
|
|
|
|
uint4 xe_edram_rt_keep_mask[2];
|
|
|
|
uint4 xe_edram_rt_blend_factors_ops;
|
|
|
|
float4 xe_edram_blend_constant;
|
|
};
|
|
|
|
struct XeHSControlPointInputIndexed {
|
|
float index : XEVERTEXID;
|
|
};
|
|
|
|
struct XeHSControlPointInputAdaptive {
|
|
// 1.0 added in the vertex shader to convert to Direct3D 11+, and clamped to
|
|
// the factor range in the vertex shader.
|
|
float edge_factor : XETESSFACTOR;
|
|
};
|
|
|
|
struct XeHSControlPointOutput {
|
|
float index : XEVERTEXID;
|
|
};
|
|
|
|
struct XeVertexPrePS {
|
|
float4 interpolators[16] : TEXCOORD0;
|
|
float3 point_params : TEXCOORD16;
|
|
};
|
|
|
|
struct XeVertexPostGS {
|
|
XeVertexPrePS pre_ps;
|
|
// Precise needed to preserve NaN - guest primitives may be converted to more
|
|
// than 1 triangle, so need to kill them entirely manually in GS if any vertex
|
|
// is NaN.
|
|
precise float4 position : SV_Position;
|
|
float4 clip_distance_0123 : SV_ClipDistance0;
|
|
float2 clip_distance_45 : SV_ClipDistance1;
|
|
};
|
|
|
|
struct XeVertexPreGS {
|
|
XeVertexPostGS post_gs;
|
|
// Guest primitives may be converted to more than 1 triangle, so need to kill
|
|
// them entirely manually in GS - must kill if all guest primitive vertices
|
|
// have negative cull distance.
|
|
float cull_distance : SV_CullDistance;
|
|
};
|
|
|
|
#endif // XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|