[D3D12] Point sprites and color exponent bias
This commit is contained in:
29
src/xenia/gpu/d3d12/shaders/primitive_point_list.gs.hlsl
Normal file
29
src/xenia/gpu/d3d12/shaders/primitive_point_list.gs.hlsl
Normal file
@@ -0,0 +1,29 @@
|
||||
#include "xenos_draw.hlsli"
|
||||
|
||||
[maxvertexcount(4)]
|
||||
void main(point XeVertex xe_in[1], inout TriangleStream<XeVertex> xe_stream) {
|
||||
XeVertex xe_out;
|
||||
xe_out.interpolators = xe_in[0].interpolators;
|
||||
xe_out.position.zw = xe_in[0].position.zw;
|
||||
xe_out.point_size = xe_in[0].point_size;
|
||||
|
||||
// Shader header writes -1.0f to point_size by default, so any positive value
|
||||
// means that it was overwritten by the translated vertex shader.
|
||||
float2 point_size =
|
||||
(xe_in[0].point_size > 0.0f ? xe_in[0].point_size.xx : xe_point_size) *
|
||||
xe_ndc_scale.xy;
|
||||
|
||||
xe_out.point_coord = float2(0.0, 1.0);
|
||||
xe_out.position.xy = xe_in[0].position.xy + float2(-1.0, 1.0) * point_size;
|
||||
xe_stream.Append(xe_out);
|
||||
xe_out.point_coord = float2(1.0, 1.0);
|
||||
xe_out.position.xy = xe_in[0].position.xy + point_size;
|
||||
xe_stream.Append(xe_out);
|
||||
xe_out.point_coord = float2(0.0, 0.0);
|
||||
xe_out.position.xy = xe_in[0].position.xy - point_size;
|
||||
xe_stream.Append(xe_out);
|
||||
xe_out.point_coord = float2(1.0, 0.0);
|
||||
xe_out.position.xy = xe_in[0].position.xy + float2(1.0, -1.0) * point_size;
|
||||
xe_stream.Append(xe_out);
|
||||
xe_stream.RestartStrip();
|
||||
}
|
||||
@@ -1,12 +1,7 @@
|
||||
struct XeVertex {
|
||||
float4 interpolators[16] : TEXCOORD;
|
||||
float4 position : SV_Position;
|
||||
float point_size : PSIZE;
|
||||
};
|
||||
#include "xenos_draw.hlsli"
|
||||
|
||||
[maxvertexcount(4)]
|
||||
void main(lineadj XeVertex xe_in[4],
|
||||
inout TriangleStream<XeVertex> xe_stream) {
|
||||
void main(lineadj XeVertex xe_in[4], inout TriangleStream<XeVertex> xe_stream) {
|
||||
xe_stream.Append(xe_in[0]);
|
||||
xe_stream.Append(xe_in[1]);
|
||||
xe_stream.Append(xe_in[3]);
|
||||
|
||||
@@ -1,8 +1,4 @@
|
||||
struct XeVertex {
|
||||
float4 interpolators[16] : TEXCOORD;
|
||||
float4 position : SV_Position;
|
||||
float point_size : PSIZE;
|
||||
};
|
||||
#include "xenos_draw.hlsli"
|
||||
|
||||
[maxvertexcount(6)]
|
||||
void main(triangle XeVertex xe_in[3],
|
||||
@@ -37,6 +33,9 @@ void main(triangle XeVertex xe_in[3],
|
||||
xe_in[0].interpolators[i] +
|
||||
xe_in[2].interpolators[i];
|
||||
}
|
||||
xe_out.point_coord = xe_in[1].point_coord +
|
||||
xe_in[0].point_coord -
|
||||
xe_in[2].point_coord;
|
||||
xe_out.position = float4(xe_in[1].position.xy -
|
||||
xe_in[0].position.xy +
|
||||
xe_in[2].position.xy,
|
||||
@@ -54,6 +53,9 @@ void main(triangle XeVertex xe_in[3],
|
||||
xe_in[1].interpolators[i] +
|
||||
xe_in[2].interpolators[i];
|
||||
}
|
||||
xe_out.point_coord = xe_in[0].point_coord +
|
||||
xe_in[1].point_coord -
|
||||
xe_in[2].point_coord;
|
||||
xe_out.position = float4(xe_in[0].position.xy -
|
||||
xe_in[1].position.xy +
|
||||
xe_in[2].position.xy,
|
||||
|
||||
34
src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli
Normal file
34
src/xenia/gpu/d3d12/shaders/xenos_draw.hlsli
Normal file
@@ -0,0 +1,34 @@
|
||||
#ifndef XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|
||||
#define XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|
||||
|
||||
cbuffer XeSystemConstants : register(b0) {
|
||||
// vec4 0
|
||||
float3 xe_mul_rcp_w;
|
||||
uint xe_vertex_base_index;
|
||||
// vec4 1
|
||||
float3 xe_ndc_scale;
|
||||
uint xe_vertex_index_endian;
|
||||
// vec4 2
|
||||
float3 xe_ndc_offset;
|
||||
float xe_pixel_half_pixel_offset;
|
||||
// vec4 3
|
||||
float2 xe_point_size;
|
||||
float2 xe_ssaa_inv_scale;
|
||||
// vec4 4
|
||||
uint xe_pixel_pos_reg;
|
||||
int xe_alpha_test;
|
||||
float2 xe_alpha_test_range;
|
||||
// vec4 5
|
||||
float4 xe_color_exp_bias;
|
||||
// vec4 6
|
||||
uint4 xe_color_output_map;
|
||||
};
|
||||
|
||||
struct XeVertex {
|
||||
float4 interpolators[16] : TEXCOORD0;
|
||||
float2 point_coord : TEXCOORD16;
|
||||
float4 position : SV_Position;
|
||||
float point_size : PSIZE;
|
||||
};
|
||||
|
||||
#endif // XENIA_GPU_D3D12_SHADERS_XENOS_DRAW_HLSLI_
|
||||
Reference in New Issue
Block a user