mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-23 14:19:46 -06:00
PixelShaderGen: Move header generation to seperate function
This commit is contained in:
@ -333,33 +333,8 @@ PixelShaderUid GetPixelShaderUid()
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void WriteStage(ShaderCode& out, const pixel_shader_uid_data* uid_data, int n,
|
void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, bool bounding_box)
|
||||||
APIType ApiType, bool stereo);
|
|
||||||
static void WriteTevRegular(ShaderCode& out, const char* components, int bias, int op, int clamp,
|
|
||||||
int shift, bool alpha);
|
|
||||||
static void SampleTexture(ShaderCode& out, const char* texcoords, const char* texswap, int texmap,
|
|
||||||
bool stereo, APIType ApiType);
|
|
||||||
static void WriteAlphaTest(ShaderCode& out, const pixel_shader_uid_data* uid_data, APIType ApiType,
|
|
||||||
bool per_pixel_depth, bool use_dual_source);
|
|
||||||
static void WriteFog(ShaderCode& out, const pixel_shader_uid_data* uid_data);
|
|
||||||
static void WriteColor(ShaderCode& out, const pixel_shader_uid_data* uid_data,
|
|
||||||
bool use_dual_source);
|
|
||||||
|
|
||||||
ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host_config,
|
|
||||||
const pixel_shader_uid_data* uid_data)
|
|
||||||
{
|
{
|
||||||
ShaderCode out;
|
|
||||||
|
|
||||||
const bool per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
|
||||||
const bool msaa = host_config.msaa;
|
|
||||||
const bool ssaa = host_config.ssaa;
|
|
||||||
const bool stereo = host_config.stereo;
|
|
||||||
const u32 numStages = uid_data->genMode_numtevstages + 1;
|
|
||||||
|
|
||||||
out.Write("//Pixel Shader for TEV stages\n");
|
|
||||||
out.Write("//%i TEV stages, %i texgens, %i IND stages\n", numStages, uid_data->genMode_numtexgens,
|
|
||||||
uid_data->genMode_numindstages);
|
|
||||||
|
|
||||||
// dot product for integer vectors
|
// dot product for integer vectors
|
||||||
out.Write("int idot(int3 x, int3 y)\n"
|
out.Write("int idot(int3 x, int3 y)\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
@ -422,20 +397,7 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host
|
|||||||
"\tfloat4 " I_EFBSCALE ";\n"
|
"\tfloat4 " I_EFBSCALE ";\n"
|
||||||
"};\n");
|
"};\n");
|
||||||
|
|
||||||
if (per_pixel_lighting)
|
if (bounding_box)
|
||||||
{
|
|
||||||
out.Write("%s", s_lighting_struct);
|
|
||||||
|
|
||||||
if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)
|
|
||||||
out.Write("UBO_BINDING(std140, 2) uniform VSBlock {\n");
|
|
||||||
else
|
|
||||||
out.Write("cbuffer VSBlock : register(b1) {\n");
|
|
||||||
|
|
||||||
out.Write(s_shader_uniforms);
|
|
||||||
out.Write("};\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (uid_data->bounding_box)
|
|
||||||
{
|
{
|
||||||
if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)
|
if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)
|
||||||
{
|
{
|
||||||
@ -448,6 +410,50 @@ ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host
|
|||||||
out.Write("globallycoherent RWBuffer<int> bbox_data : register(u2);\n");
|
out.Write("globallycoherent RWBuffer<int> bbox_data : register(u2);\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void WriteStage(ShaderCode& out, const pixel_shader_uid_data* uid_data, int n,
|
||||||
|
APIType ApiType, bool stereo);
|
||||||
|
static void WriteTevRegular(ShaderCode& out, const char* components, int bias, int op, int clamp,
|
||||||
|
int shift, bool alpha);
|
||||||
|
static void SampleTexture(ShaderCode& out, const char* texcoords, const char* texswap, int texmap,
|
||||||
|
bool stereo, APIType ApiType);
|
||||||
|
static void WriteAlphaTest(ShaderCode& out, const pixel_shader_uid_data* uid_data, APIType ApiType,
|
||||||
|
bool per_pixel_depth, bool use_dual_source);
|
||||||
|
static void WriteFog(ShaderCode& out, const pixel_shader_uid_data* uid_data);
|
||||||
|
static void WriteColor(ShaderCode& out, const pixel_shader_uid_data* uid_data,
|
||||||
|
bool use_dual_source);
|
||||||
|
|
||||||
|
ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host_config,
|
||||||
|
const pixel_shader_uid_data* uid_data)
|
||||||
|
{
|
||||||
|
ShaderCode out;
|
||||||
|
|
||||||
|
const bool per_pixel_lighting = g_ActiveConfig.bEnablePixelLighting;
|
||||||
|
const bool msaa = host_config.msaa;
|
||||||
|
const bool ssaa = host_config.ssaa;
|
||||||
|
const bool stereo = host_config.stereo;
|
||||||
|
const u32 numStages = uid_data->genMode_numtevstages + 1;
|
||||||
|
|
||||||
|
out.Write("//Pixel Shader for TEV stages\n");
|
||||||
|
out.Write("//%i TEV stages, %i texgens, %i IND stages\n", numStages, uid_data->genMode_numtexgens,
|
||||||
|
uid_data->genMode_numindstages);
|
||||||
|
|
||||||
|
// Stuff that is shared between ubershaders and pixelgen.
|
||||||
|
WritePixelShaderCommonHeader(out, ApiType, uid_data->bounding_box);
|
||||||
|
|
||||||
|
if (per_pixel_lighting)
|
||||||
|
{
|
||||||
|
out.Write("%s", s_lighting_struct);
|
||||||
|
|
||||||
|
if (ApiType == APIType::OpenGL || ApiType == APIType::Vulkan)
|
||||||
|
out.Write("UBO_BINDING(std140, 2) uniform VSBlock {\n");
|
||||||
|
else
|
||||||
|
out.Write("cbuffer VSBlock : register(b2) {\n");
|
||||||
|
|
||||||
|
out.Write(s_shader_uniforms);
|
||||||
|
out.Write("};\n");
|
||||||
|
}
|
||||||
|
|
||||||
out.Write("struct VS_OUTPUT {\n");
|
out.Write("struct VS_OUTPUT {\n");
|
||||||
GenerateVSOutputMembers(out, ApiType, uid_data->genMode_numtexgens, per_pixel_lighting, "");
|
GenerateVSOutputMembers(out, ApiType, uid_data->genMode_numtexgens, per_pixel_lighting, "");
|
||||||
|
@ -159,4 +159,6 @@ typedef ShaderUid<pixel_shader_uid_data> PixelShaderUid;
|
|||||||
|
|
||||||
ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host_config,
|
ShaderCode GeneratePixelShaderCode(APIType ApiType, const ShaderHostConfig& host_config,
|
||||||
const pixel_shader_uid_data* uid_data);
|
const pixel_shader_uid_data* uid_data);
|
||||||
|
void WritePixelShaderCommonHeader(ShaderCode& out, APIType ApiType, bool bounding_box);
|
||||||
|
ShaderCode GeneratePixelShaderCode(APIType ApiType, const pixel_shader_uid_data* uid_data);
|
||||||
PixelShaderUid GetPixelShaderUid();
|
PixelShaderUid GetPixelShaderUid();
|
||||||
|
Reference in New Issue
Block a user