mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-07-24 14:49:42 -06:00
ShaderGen: Use u8 as uid storage base type. Fixes an off-by-one error introduced in revision bdc28106ee
that caused some lighting issues.
This commit is contained in:
@ -537,7 +537,7 @@ static void GeneratePixelShader(T& out, DSTALPHA_MODE dstAlphaMode, API_TYPE Api
|
|||||||
|
|
||||||
#define MY_STRUCT_OFFSET(str,elem) ((u32)((u64)&(str).elem-(u64)&(str)))
|
#define MY_STRUCT_OFFSET(str,elem) ((u32)((u64)&(str).elem-(u64)&(str)))
|
||||||
bool enable_pl = g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting;
|
bool enable_pl = g_ActiveConfig.bEnablePixelLighting && g_ActiveConfig.backend_info.bSupportsPixelLighting;
|
||||||
uid_data.num_values = (enable_pl) ? sizeof(uid_data)/sizeof(32) : MY_STRUCT_OFFSET(uid_data,stagehash[numStages])/sizeof(u32);
|
uid_data.num_values = (enable_pl) ? sizeof(uid_data) : MY_STRUCT_OFFSET(uid_data,stagehash[numStages]);
|
||||||
|
|
||||||
|
|
||||||
if (numStages)
|
if (numStages)
|
||||||
|
@ -120,7 +120,7 @@ private:
|
|||||||
union
|
union
|
||||||
{
|
{
|
||||||
uid_data data;
|
uid_data data;
|
||||||
u32 values[sizeof(uid_data) / sizeof(u32)];
|
u8 values[sizeof(uid_data)];
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ struct LightingUidData
|
|||||||
u32 attnfunc : 8; // 4x2 bits
|
u32 attnfunc : 8; // 4x2 bits
|
||||||
u32 light_mask : 32; // 4x8 bits
|
u32 light_mask : 32; // 4x8 bits
|
||||||
|
|
||||||
u32 NumValues() const { return sizeof(LightingUidData) / sizeof(u32); }
|
u32 NumValues() const { return sizeof(LightingUidData); }
|
||||||
};
|
};
|
||||||
#pragma pack()
|
#pragma pack()
|
||||||
|
|
||||||
|
@ -74,8 +74,6 @@ static void GenerateVertexShader(T& out, u32 components, API_TYPE api_type)
|
|||||||
vertex_shader_uid_data& uid_data = (&out.template GetUidData<vertex_shader_uid_data>() != NULL)
|
vertex_shader_uid_data& uid_data = (&out.template GetUidData<vertex_shader_uid_data>() != NULL)
|
||||||
? out.template GetUidData<vertex_shader_uid_data>() : dummy_data;
|
? out.template GetUidData<vertex_shader_uid_data>() : dummy_data;
|
||||||
|
|
||||||
uid_data.num_values = sizeof(uid_data)/sizeof(u32);
|
|
||||||
|
|
||||||
out.SetBuffer(text);
|
out.SetBuffer(text);
|
||||||
#ifndef ANDROID
|
#ifndef ANDROID
|
||||||
locale_t locale;
|
locale_t locale;
|
||||||
|
@ -67,11 +67,9 @@ const s_svar VSVar_Loc[] = { {I_POSNORMALMATRIX, C_POSNORMALMATRIX, 6 },
|
|||||||
|
|
||||||
struct vertex_shader_uid_data
|
struct vertex_shader_uid_data
|
||||||
{
|
{
|
||||||
|
u32 NumValues() const { return sizeof(vertex_shader_uid_data); }
|
||||||
u32 NumValues() const { return num_values; }
|
|
||||||
|
|
||||||
u32 components;
|
u32 components;
|
||||||
u32 num_values : 16; // TODO: u8 might be enough, actually
|
|
||||||
u32 numColorChans : 2;
|
u32 numColorChans : 2;
|
||||||
u32 numTexGens : 4;
|
u32 numTexGens : 4;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user