Fix #106672: MacOS/OpenGL doesn't draw anything Eevee related. #106887

Merged
Jeroen Bakker merged 2 commits from Sergey/blender:eevee-legacy-mac-ati-b into main 2023-04-13 10:18:55 +02:00
5 changed files with 145 additions and 117 deletions
Showing only changes of commit 9e1ccdf9b4 - Show all commits

View File

@ -25,49 +25,49 @@ typedef struct CommonUniformBlock CommonUniformBlock;
#endif #endif
struct CommonUniformBlock { struct CommonUniformBlock {
mat4 _pastViewProjectionMatrix; mat4 pastViewProjectionMatrix;
vec4 _hizUvScale; /* To correct mip level texel misalignment */ vec4 hizUvScale; /* To correct mip level texel misalignment */
/* Ambient Occlusion */ /* Ambient Occlusion */
vec4 _aoParameters[2]; vec4 aoParameters[2];
/* Volumetric */ /* Volumetric */
ivec4 _volTexSize; ivec4 volTexSize;
vec4 _volDepthParameters; /* Parameters to the volume Z equation */ vec4 volDepthParameters; /* Parameters to the volume Z equation */
vec4 _volInvTexSize; vec4 volInvTexSize;
vec4 _volJitter; vec4 volJitter;
vec4 _volCoordScale; /* To convert volume uvs to screen uvs */ vec4 volCoordScale; /* To convert volume uvs to screen uvs */
float _volHistoryAlpha; float volHistoryAlpha;
float _volShadowSteps; float volShadowSteps;
bool _volUseLights; bool volUseLights;
bool _volUseSoftShadows; bool volUseSoftShadows;
/* Screen Space Reflections */ /* Screen Space Reflections */
vec4 _ssrParameters; vec4 ssrParameters;
float _ssrBorderFac; float ssrBorderFac;
float _ssrMaxRoughness; float ssrMaxRoughness;
float _ssrFireflyFac; float ssrFireflyFac;
float _ssrBrdfBias; float ssrBrdfBias;
bool _ssrToggle; bool ssrToggle;
bool _ssrefractToggle; bool ssrefractToggle;
/* SubSurface Scattering */ /* SubSurface Scattering */
float _sssJitterThreshold; float sssJitterThreshold;
bool _sssToggle; bool sssToggle;
/* Specular */ /* Specular */
bool _specToggle; bool specToggle;
/* Lights */ /* Lights */
int _laNumLight; int laNumLight;
/* Probes */ /* Probes */
int _prbNumPlanar; int prbNumPlanar;
int _prbNumRenderCube; int prbNumRenderCube;
int _prbNumRenderGrid; int prbNumRenderGrid;
int _prbIrradianceVisSize; int prbIrradianceVisSize;
float _prbIrradianceSmooth; float prbIrradianceSmooth;
float _prbLodCubeMax; float prbLodCubeMax;
/* Misc */ /* Misc */
int _rayType; int rayType;
float _rayDepth; float rayDepth;
float _alphaHashOffset; float alphaHashOffset;
float _alphaHashScale; float alphaHashScale;
vec4 _cameraUvScaleBias; vec4 cameraUvScaleBias;
vec4 _planarClipPlane; vec4 planarClipPlane;
}; };
BLI_STATIC_ASSERT_ALIGN(CommonUniformBlock, 16) BLI_STATIC_ASSERT_ALIGN(CommonUniformBlock, 16)
@ -102,17 +102,17 @@ struct GridData {
BLI_STATIC_ASSERT_ALIGN(GridData, 16) BLI_STATIC_ASSERT_ALIGN(GridData, 16)
struct ProbeBlock { struct ProbeBlock {
CubeData _probes_data[MAX_PROBE]; CubeData probes_data[MAX_PROBE];
}; };
BLI_STATIC_ASSERT_ALIGN(ProbeBlock, 16) BLI_STATIC_ASSERT_ALIGN(ProbeBlock, 16)
struct GridBlock { struct GridBlock {
GridData _grids_data[MAX_GRID]; GridData grids_data[MAX_GRID];
}; };
BLI_STATIC_ASSERT_ALIGN(GridBlock, 16) BLI_STATIC_ASSERT_ALIGN(GridBlock, 16)
struct PlanarBlock { struct PlanarBlock {
PlanarData _planars_data[MAX_PLANAR]; PlanarData planars_data[MAX_PLANAR];
}; };
BLI_STATIC_ASSERT_ALIGN(PlanarBlock, 16) BLI_STATIC_ASSERT_ALIGN(PlanarBlock, 16)
@ -141,9 +141,9 @@ struct ShadowCascadeData {
BLI_STATIC_ASSERT_ALIGN(ShadowCascadeData, 16) BLI_STATIC_ASSERT_ALIGN(ShadowCascadeData, 16)
struct ShadowBlock { struct ShadowBlock {
ShadowData _shadows_data[MAX_SHADOW]; ShadowData shadows_data[MAX_SHADOW];
ShadowCubeData _shadows_cube_data[MAX_SHADOW_CUBE]; ShadowCubeData shadows_cube_data[MAX_SHADOW_CUBE];
ShadowCascadeData _shadows_cascade_data[MAX_SHADOW_CASCADE]; ShadowCascadeData shadows_cascade_data[MAX_SHADOW_CASCADE];
}; };
BLI_STATIC_ASSERT_ALIGN(ShadowBlock, 16) BLI_STATIC_ASSERT_ALIGN(ShadowBlock, 16)
@ -159,20 +159,20 @@ struct LightData {
BLI_STATIC_ASSERT_ALIGN(LightData, 16) BLI_STATIC_ASSERT_ALIGN(LightData, 16)
struct LightBlock { struct LightBlock {
LightData _lights_data[MAX_LIGHT]; LightData lights_data[MAX_LIGHT];
}; };
BLI_STATIC_ASSERT_ALIGN(LightBlock, 16) BLI_STATIC_ASSERT_ALIGN(LightBlock, 16)
struct RenderpassBlock { struct RenderpassBlock {
bool _renderPassDiffuse; bool renderPassDiffuse;
bool _renderPassDiffuseLight; bool renderPassDiffuseLight;
bool _renderPassGlossy; bool renderPassGlossy;
bool _renderPassGlossyLight; bool renderPassGlossyLight;
bool _renderPassEmit; bool renderPassEmit;
bool _renderPassSSSColor; bool renderPassSSSColor;
bool _renderPassEnvironment; bool renderPassEnvironment;
bool _renderPassAOV; bool renderPassAOV;
uint _renderPassAOVActive; uint renderPassAOVActive;
}; };
BLI_STATIC_ASSERT_ALIGN(RenderpassBlock, 16) BLI_STATIC_ASSERT_ALIGN(RenderpassBlock, 16)
@ -182,10 +182,10 @@ BLI_STATIC_ASSERT_ALIGN(RenderpassBlock, 16)
#define SSS_LUT_BIAS (0.5 / float(SSS_LUT_SIZE)) #define SSS_LUT_BIAS (0.5 / float(SSS_LUT_SIZE))
struct SSSProfileBlock { struct SSSProfileBlock {
vec4 _sss_kernel[MAX_SSS_SAMPLES]; vec4 sss_kernel[MAX_SSS_SAMPLES];
vec4 _radii_max_radius; vec4 radii_max_radius;
float _avg_inv_radius; float avg_inv_radius;
int _sss_samples; int sss_samples;
}; };
BLI_STATIC_ASSERT_ALIGN(SSSProfileBlock, 16) BLI_STATIC_ASSERT_ALIGN(SSSProfileBlock, 16)
@ -194,75 +194,75 @@ BLI_STATIC_ASSERT_ALIGN(SSSProfileBlock, 16)
# if defined(USE_GPU_SHADER_CREATE_INFO) # if defined(USE_GPU_SHADER_CREATE_INFO)
/* Keep compatibility_with old global scope syntax. */ /* Keep compatibility_with old global scope syntax. */
# define pastViewProjectionMatrix common_block._pastViewProjectionMatrix # define pastViewProjectionMatrix common_block.pastViewProjectionMatrix
# define hizUvScale common_block._hizUvScale # define hizUvScale common_block.hizUvScale
# define aoParameters common_block._aoParameters # define aoParameters common_block.aoParameters
# define volTexSize common_block._volTexSize # define volTexSize common_block.volTexSize
# define volDepthParameters common_block._volDepthParameters # define volDepthParameters common_block.volDepthParameters
# define volInvTexSize common_block._volInvTexSize # define volInvTexSize common_block.volInvTexSize
# define volJitter common_block._volJitter # define volJitter common_block.volJitter
# define volCoordScale common_block._volCoordScale # define volCoordScale common_block.volCoordScale
# define volHistoryAlpha common_block._volHistoryAlpha # define volHistoryAlpha common_block.volHistoryAlpha
# define volShadowSteps common_block._volShadowSteps # define volShadowSteps common_block.volShadowSteps
# define volUseLights common_block._volUseLights # define volUseLights common_block.volUseLights
# define volUseSoftShadows common_block._volUseSoftShadows # define volUseSoftShadows common_block.volUseSoftShadows
# define ssrParameters common_block._ssrParameters # define ssrParameters common_block.ssrParameters
# define ssrBorderFac common_block._ssrBorderFac # define ssrBorderFac common_block.ssrBorderFac
# define ssrMaxRoughness common_block._ssrMaxRoughness # define ssrMaxRoughness common_block.ssrMaxRoughness
# define ssrFireflyFac common_block._ssrFireflyFac # define ssrFireflyFac common_block.ssrFireflyFac
# define ssrBrdfBias common_block._ssrBrdfBias # define ssrBrdfBias common_block.ssrBrdfBias
# define ssrToggle common_block._ssrToggle # define ssrToggle common_block.ssrToggle
# define ssrefractToggle common_block._ssrefractToggle # define ssrefractToggle common_block.ssrefractToggle
# define sssJitterThreshold common_block._sssJitterThreshold # define sssJitterThreshold common_block.sssJitterThreshold
# define sssToggle common_block._sssToggle # define sssToggle common_block.sssToggle
# define specToggle common_block._specToggle # define specToggle common_block.specToggle
# define laNumLight common_block._laNumLight # define laNumLight common_block.laNumLight
# define prbNumPlanar common_block._prbNumPlanar # define prbNumPlanar common_block.prbNumPlanar
# define prbNumRenderCube common_block._prbNumRenderCube # define prbNumRenderCube common_block.prbNumRenderCube
# define prbNumRenderGrid common_block._prbNumRenderGrid # define prbNumRenderGrid common_block.prbNumRenderGrid
# define prbIrradianceVisSize common_block._prbIrradianceVisSize # define prbIrradianceVisSize common_block.prbIrradianceVisSize
# define prbIrradianceSmooth common_block._prbIrradianceSmooth # define prbIrradianceSmooth common_block.prbIrradianceSmooth
# define prbLodCubeMax common_block._prbLodCubeMax # define prbLodCubeMax common_block.prbLodCubeMax
# define rayType common_block._rayType # define rayType common_block.rayType
# define rayDepth common_block._rayDepth # define rayDepth common_block.rayDepth
# define alphaHashOffset common_block._alphaHashOffset # define alphaHashOffset common_block.alphaHashOffset
# define alphaHashScale common_block._alphaHashScale # define alphaHashScale common_block.alphaHashScale
# define cameraUvScaleBias common_block._cameraUvScaleBias # define cameraUvScaleBias common_block.cameraUvScaleBias
# define planarClipPlane common_block._planarClipPlane # define planarClipPlane common_block.planarClipPlane
/* ProbeBlock */ /* ProbeBlock */
# define probes_data probe_block._probes_data # define probes_data probe_block.probes_data
/* GridBlock */ /* GridBlock */
# define grids_data grid_block._grids_data # define grids_data grid_block.grids_data
/* PlanarBlock */ /* PlanarBlock */
# define planars_data planar_block._planars_data # define planars_data planar_block.planars_data
/* ShadowBlock */ /* ShadowBlock */
# define shadows_data shadow_block._shadows_data # define shadows_data shadow_block.shadows_data
# define shadows_cube_data shadow_block._shadows_cube_data # define shadows_cube_data shadow_block.shadows_cube_data
# define shadows_cascade_data shadow_block._shadows_cascade_data # define shadows_cascade_data shadow_block.shadows_cascade_data
/* LightBlock */ /* LightBlock */
# define lights_data light_block._lights_data # define lights_data light_block.lights_data
/* RenderpassBlock */ /* RenderpassBlock */
# define renderPassDiffuse renderpass_block._renderPassDiffuse # define renderPassDiffuse renderpass_block.renderPassDiffuse
# define renderPassDiffuseLight renderpass_block._renderPassDiffuseLight # define renderPassDiffuseLight renderpass_block.renderPassDiffuseLight
# define renderPassGlossy renderpass_block._renderPassGlossy # define renderPassGlossy renderpass_block.renderPassGlossy
# define renderPassGlossyLight renderpass_block._renderPassGlossyLight # define renderPassGlossyLight renderpass_block.renderPassGlossyLight
# define renderPassEmit renderpass_block._renderPassEmit # define renderPassEmit renderpass_block.renderPassEmit
# define renderPassSSSColor renderpass_block._renderPassSSSColor # define renderPassSSSColor renderpass_block.renderPassSSSColor
# define renderPassEnvironment renderpass_block._renderPassEnvironment # define renderPassEnvironment renderpass_block.renderPassEnvironment
# define renderPassAOV renderpass_block._renderPassAOV # define renderPassAOV renderpass_block.renderPassAOV
# define renderPassAOVActive renderpass_block._renderPassAOVActive # define renderPassAOVActive renderpass_block.renderPassAOVActive
/* SSSProfileBlock */ /* SSSProfileBlock */
# define sss_kernel sssProfile._sss_kernel # define sss_kernel sssProfile.sss_kernel
# define radii_max_radius sssProfile._radii_max_radius # define radii_max_radius sssProfile.radii_max_radius
# define avg_inv_radius sssProfile._avg_inv_radius # define avg_inv_radius sssProfile.avg_inv_radius
# define sss_samples sssProfile._sss_samples # define sss_samples sssProfile.sss_samples
# endif /* USE_GPU_SHADER_CREATE_INFO */ # endif /* USE_GPU_SHADER_CREATE_INFO */

View File

@ -53,7 +53,7 @@ uniform usamplerBuffer hairStrandSegBuffer; /* R16UI */
// uniform samplerBuffer hairColBuffer; /* RGBA16 linear color */ // uniform samplerBuffer hairColBuffer; /* RGBA16 linear color */
# else # else
# ifndef DRW_HAIR_INFO # ifndef DRW_HAIR_INFO
# error Ensure createInfo includes draw_hair for general use or eevee_legacy_hair_lib for EEVEE. # error Ensure createInfo includes `draw_hair` for general use or `eevee_legacy_hair_lib` for EEVEE.
# endif # endif
# endif /* !USE_GPU_SHADER_CREATE_INFO */ # endif /* !USE_GPU_SHADER_CREATE_INFO */

View File

@ -17,7 +17,7 @@ in vec3 nor;
# endif # endif
# else # else
# ifndef DRW_POINTCLOUD_INFO # ifndef DRW_POINTCLOUD_INFO
# error Ensure createInfo includes draw_pointcloud. # error Ensure createInfo includes `draw_pointcloud`.
# endif # endif
# endif /* !USE_GPU_SHADER_CREATE_INFO */ # endif /* !USE_GPU_SHADER_CREATE_INFO */

View File

@ -405,7 +405,7 @@ static void print_resource(std::ostream &os,
array_offset = res.uniformbuf.name.find_first_of("["); array_offset = res.uniformbuf.name.find_first_of("[");
name_no_array = (array_offset == -1) ? res.uniformbuf.name : name_no_array = (array_offset == -1) ? res.uniformbuf.name :
StringRef(res.uniformbuf.name.c_str(), array_offset); StringRef(res.uniformbuf.name.c_str(), array_offset);
os << "uniform _" << name_no_array << " { " << res.uniformbuf.type_name << " " os << "uniform " << name_no_array << " { " << res.uniformbuf.type_name << " _"
<< res.uniformbuf.name << "; };\n"; << res.uniformbuf.name << "; };\n";
break; break;
case ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER: case ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER:
@ -413,13 +413,36 @@ static void print_resource(std::ostream &os,
name_no_array = (array_offset == -1) ? res.storagebuf.name : name_no_array = (array_offset == -1) ? res.storagebuf.name :
StringRef(res.storagebuf.name.c_str(), array_offset); StringRef(res.storagebuf.name.c_str(), array_offset);
print_qualifier(os, res.storagebuf.qualifiers); print_qualifier(os, res.storagebuf.qualifiers);
os << "buffer _"; os << "buffer ";
os << name_no_array << " { " << res.storagebuf.type_name << " " << res.storagebuf.name os << name_no_array << " { " << res.storagebuf.type_name << " _" << res.storagebuf.name
<< "; };\n"; << "; };\n";
break; break;
} }
} }
static void print_resource_alias(std::ostream &os, const ShaderCreateInfo::Resource &res)
{
int64_t array_offset;
StringRef name_no_array;
switch (res.bind_type) {
case ShaderCreateInfo::Resource::BindType::UNIFORM_BUFFER:
array_offset = res.uniformbuf.name.find_first_of("[");
name_no_array = (array_offset == -1) ? res.uniformbuf.name :
StringRef(res.uniformbuf.name.c_str(), array_offset);
os << "#define " << name_no_array << " (_" << name_no_array << ")\n";
break;
case ShaderCreateInfo::Resource::BindType::STORAGE_BUFFER:
array_offset = res.storagebuf.name.find_first_of("[");
name_no_array = (array_offset == -1) ? res.storagebuf.name :
StringRef(res.storagebuf.name.c_str(), array_offset);
os << "#define " << name_no_array << " (_" << name_no_array << ")\n";
break;
default:
break;
}
}
static void print_interface(std::ostream &os, static void print_interface(std::ostream &os,
const StringRefNull &prefix, const StringRefNull &prefix,
const StageInterfaceInfo &iface, const StageInterfaceInfo &iface,
@ -452,10 +475,16 @@ std::string GLShader::resources_declare(const ShaderCreateInfo &info) const
for (const ShaderCreateInfo::Resource &res : info.pass_resources_) { for (const ShaderCreateInfo::Resource &res : info.pass_resources_) {
print_resource(ss, res, info.auto_resource_location_); print_resource(ss, res, info.auto_resource_location_);
} }
for (const ShaderCreateInfo::Resource &res : info.pass_resources_) {
print_resource_alias(ss, res);
}
ss << "\n/* Batch Resources. */\n"; ss << "\n/* Batch Resources. */\n";
for (const ShaderCreateInfo::Resource &res : info.batch_resources_) { for (const ShaderCreateInfo::Resource &res : info.batch_resources_) {
print_resource(ss, res, info.auto_resource_location_); print_resource(ss, res, info.auto_resource_location_);
} }
for (const ShaderCreateInfo::Resource &res : info.batch_resources_) {
print_resource_alias(ss, res);
}
ss << "\n/* Push Constants. */\n"; ss << "\n/* Push Constants. */\n";
for (const ShaderCreateInfo::PushConst &uniform : info.push_constants_) { for (const ShaderCreateInfo::PushConst &uniform : info.push_constants_) {
ss << "uniform " << to_string(uniform.type) << " " << uniform.name; ss << "uniform " << to_string(uniform.type) << " " << uniform.name;

View File

@ -469,8 +469,7 @@ GLShaderInterface::GLShaderInterface(GLuint program, const shader::ShaderCreateI
if (res.bind_type == ShaderCreateInfo::Resource::BindType::UNIFORM_BUFFER) { if (res.bind_type == ShaderCreateInfo::Resource::BindType::UNIFORM_BUFFER) {
copy_input_name(input, res.uniformbuf.name, name_buffer_, name_buffer_offset); copy_input_name(input, res.uniformbuf.name, name_buffer_, name_buffer_offset);
if (true || !GLContext::explicit_location_support) { if (true || !GLContext::explicit_location_support) {
std::string prefixed_name = "_" + res.uniformbuf.name; input->location = glGetUniformBlockIndex(program, name_buffer_ + input->name_offset);
input->location = glGetUniformBlockIndex(program, prefixed_name.c_str());
glUniformBlockBinding(program, input->location, res.slot); glUniformBlockBinding(program, input->location, res.slot);
} }
input->binding = res.slot; input->binding = res.slot;