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

View File

@ -53,7 +53,7 @@ uniform usamplerBuffer hairStrandSegBuffer; /* R16UI */
// uniform samplerBuffer hairColBuffer; /* RGBA16 linear color */
# else
# 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 /* !USE_GPU_SHADER_CREATE_INFO */

View File

@ -17,7 +17,7 @@ in vec3 nor;
# endif
# else
# ifndef DRW_POINTCLOUD_INFO
# error Ensure createInfo includes draw_pointcloud.
# error Ensure createInfo includes `draw_pointcloud`.
# endif
# 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("[");
name_no_array = (array_offset == -1) ? res.uniformbuf.name :
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";
break;
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 :
StringRef(res.storagebuf.name.c_str(), array_offset);
print_qualifier(os, res.storagebuf.qualifiers);
os << "buffer _";
os << name_no_array << " { " << res.storagebuf.type_name << " " << res.storagebuf.name
os << "buffer ";
os << name_no_array << " { " << res.storagebuf.type_name << " _" << res.storagebuf.name
<< "; };\n";
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,
const StringRefNull &prefix,
const StageInterfaceInfo &iface,
@ -452,10 +475,16 @@ std::string GLShader::resources_declare(const ShaderCreateInfo &info) const
for (const ShaderCreateInfo::Resource &res : info.pass_resources_) {
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";
for (const ShaderCreateInfo::Resource &res : info.batch_resources_) {
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";
for (const ShaderCreateInfo::PushConst &uniform : info.push_constants_) {
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) {
copy_input_name(input, res.uniformbuf.name, name_buffer_, name_buffer_offset);
if (true || !GLContext::explicit_location_support) {
std::string prefixed_name = "_" + res.uniformbuf.name;
input->location = glGetUniformBlockIndex(program, prefixed_name.c_str());
input->location = glGetUniformBlockIndex(program, name_buffer_ + input->name_offset);
glUniformBlockBinding(program, input->location, res.slot);
}
input->binding = res.slot;