mirror of
https://github.com/overte-org/overte.git
synced 2025-08-17 01:57:19 +02:00
Debugging the amd shader????
This commit is contained in:
parent
b72aa83afa
commit
7a97570949
9 changed files with 51 additions and 37 deletions
|
@ -32,7 +32,7 @@ GLShader::~GLShader() {
|
|||
|
||||
// GLSL version
|
||||
static const std::string glslVersion {
|
||||
"#version 410 core"
|
||||
"#version 450 core"
|
||||
};
|
||||
|
||||
// Shader domain
|
||||
|
|
|
@ -13,15 +13,15 @@
|
|||
|
||||
|
||||
struct FrustumGrid {
|
||||
mat4 eyeToGridProj;
|
||||
mat4 worldToEyeMat;
|
||||
mat4 eyeToWorldMat;
|
||||
float frustumNear;
|
||||
float rangeNear;
|
||||
float rangeFar;
|
||||
float frustumFar;
|
||||
ivec3 dims;
|
||||
float spare;
|
||||
mat4 eyeToGridProj;
|
||||
mat4 worldToEyeMat;
|
||||
mat4 eyeToWorldMat;
|
||||
vec4 dims;
|
||||
// float spare;
|
||||
};
|
||||
|
||||
uniform frustumGridBuffer {
|
||||
|
|
|
@ -73,14 +73,14 @@ vec3 frustumGrid_eyeToVolume(vec3 epos, mat4 projection, float rangeNear, float
|
|||
|
||||
|
||||
int frustumGrid_numClusters() {
|
||||
return frustumGrid.dims.x * frustumGrid.dims.y * (frustumGrid.dims.z + 1);
|
||||
return int(frustumGrid.dims.x) * int(frustumGrid.dims.y) * (int(frustumGrid.dims.z) + 1);
|
||||
}
|
||||
|
||||
int frustumGrid_clusterToIndex(ivec3 pos) {
|
||||
return pos.x + (pos.y + pos.z * frustumGrid.dims.y) * frustumGrid.dims.x;
|
||||
return int(pos.x + (pos.y + pos.z * int(frustumGrid.dims.y)) * int(frustumGrid.dims.x));
|
||||
}
|
||||
ivec3 frustumGrid_indexToCluster(int index) {
|
||||
ivec3 summedDims = ivec3(frustumGrid.dims.x * frustumGrid.dims.y, frustumGrid.dims.x, 1);
|
||||
ivec3 summedDims = ivec3(int(frustumGrid.dims.x) * int(frustumGrid.dims.y), int(frustumGrid.dims.x), 1);
|
||||
int layer = index / summedDims.x;
|
||||
int offsetInLayer = index % summedDims.x;
|
||||
ivec3 clusterPos = ivec3(offsetInLayer % summedDims.y, offsetInLayer / summedDims.y, layer);
|
||||
|
@ -92,7 +92,7 @@ vec3 frustumGrid_clusterPosToEye(vec3 clusterPos) {
|
|||
vec3 cvpos = clusterPos;
|
||||
|
||||
|
||||
vec3 volumePos = frustumGrid_gridToVolume(cvpos, frustumGrid.dims);
|
||||
vec3 volumePos = frustumGrid_gridToVolume(cvpos, ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z));
|
||||
|
||||
vec3 eyePos = frustumGrid_volumeToEye(volumePos, frustumGrid.eyeToGridProj, frustumGrid.rangeNear, frustumGrid.rangeFar);
|
||||
|
||||
|
@ -115,7 +115,7 @@ int frustumGrid_eyeDepthToClusterLayer(float eyeZ) {
|
|||
|
||||
float volumeZ = frustumGrid_eyeToVolumeDepth(eyeZ, frustumGrid.rangeNear, frustumGrid.rangeFar);
|
||||
|
||||
float gridZ = frustumGrid_volumeToGridDepth(volumeZ, frustumGrid.dims);
|
||||
float gridZ = frustumGrid_volumeToGridDepth(volumeZ, ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z));
|
||||
|
||||
if (gridZ >= frustumGrid.dims.z) {
|
||||
gridZ = frustumGrid.dims.z;
|
||||
|
@ -137,7 +137,7 @@ ivec3 frustumGrid_eyeToClusterPos(vec3 eyePos) {
|
|||
vec3 volumePos = frustumGrid_eyeToVolume(eyePos, frustumGrid.eyeToGridProj, frustumGrid.rangeNear, frustumGrid.rangeFar);
|
||||
|
||||
|
||||
vec3 gridPos = frustumGrid_volumeToGrid(volumePos, frustumGrid.dims);
|
||||
vec3 gridPos = frustumGrid_volumeToGrid(volumePos, ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z));
|
||||
|
||||
if (gridPos.z >= frustumGrid.dims.z) {
|
||||
gridPos.z = frustumGrid.dims.z;
|
||||
|
@ -149,7 +149,7 @@ ivec3 frustumGrid_eyeToClusterPos(vec3 eyePos) {
|
|||
|
||||
int frustumGrid_eyeToClusterDirH(vec3 eyeDir) {
|
||||
if (eyeDir.z >= 0.0f) {
|
||||
return (eyeDir.x > 0 ? frustumGrid.dims.x : -1);
|
||||
return (eyeDir.x > 0 ? int(frustumGrid.dims.x) : -1);
|
||||
}
|
||||
|
||||
float eyeDepth = -eyeDir.z;
|
||||
|
@ -163,7 +163,7 @@ int frustumGrid_eyeToClusterDirH(vec3 eyeDir) {
|
|||
|
||||
int frustumGrid_eyeToClusterDirV(vec3 eyeDir) {
|
||||
if (eyeDir.z >= 0.0f) {
|
||||
return (eyeDir.y > 0 ? frustumGrid.dims.y : -1);
|
||||
return (eyeDir.y > 0 ? int(frustumGrid.dims.y) : -1);
|
||||
}
|
||||
|
||||
float eyeDepth = -eyeDir.z;
|
||||
|
|
|
@ -27,21 +27,21 @@
|
|||
|
||||
enum LightClusterGridShader_MapSlot {
|
||||
DEFERRED_BUFFER_LINEAR_DEPTH_UNIT = 0,
|
||||
DEFERRED_BUFFER_COLOR_UNIT,
|
||||
DEFERRED_BUFFER_NORMAL_UNIT,
|
||||
DEFERRED_BUFFER_EMISSIVE_UNIT,
|
||||
DEFERRED_BUFFER_DEPTH_UNIT,
|
||||
DEFERRED_BUFFER_COLOR_UNIT = 1,
|
||||
DEFERRED_BUFFER_NORMAL_UNIT = 2,
|
||||
DEFERRED_BUFFER_EMISSIVE_UNIT = 3,
|
||||
DEFERRED_BUFFER_DEPTH_UNIT = 4,
|
||||
};
|
||||
|
||||
enum LightClusterGridShader_BufferSlot {
|
||||
LIGHT_CLUSTER_GRID_FRUSTUM_GRID_SLOT = 0,
|
||||
DEFERRED_FRAME_TRANSFORM_BUFFER_SLOT,
|
||||
CAMERA_CORRECTION_BUFFER_SLOT,
|
||||
DEFERRED_FRAME_TRANSFORM_BUFFER_SLOT =1,
|
||||
CAMERA_CORRECTION_BUFFER_SLOT = 2,
|
||||
LIGHT_GPU_SLOT = render::ShapePipeline::Slot::LIGHT,
|
||||
LIGHT_INDEX_GPU_SLOT,
|
||||
LIGHT_INDEX_GPU_SLOT = 5,
|
||||
|
||||
LIGHT_CLUSTER_GRID_CLUSTER_GRID_SLOT,
|
||||
LIGHT_CLUSTER_GRID_CLUSTER_CONTENT_SLOT,
|
||||
LIGHT_CLUSTER_GRID_CLUSTER_GRID_SLOT = 6,
|
||||
LIGHT_CLUSTER_GRID_CLUSTER_CONTENT_SLOT = 7,
|
||||
};
|
||||
|
||||
FrustumGrid::FrustumGrid(const FrustumGrid& source) :
|
||||
|
|
|
@ -21,18 +21,21 @@
|
|||
|
||||
class FrustumGrid {
|
||||
public:
|
||||
float frustumNear { 0.1f };
|
||||
float rangeNear { 0.1f };
|
||||
float rangeFar { 200.0f };
|
||||
float frustumFar { 10000.0f };
|
||||
|
||||
glm::ivec3 dims { 1, 1, 1 };
|
||||
float spare;
|
||||
|
||||
glm::mat4 eyeToGridProj;
|
||||
glm::mat4 worldToEyeMat;
|
||||
glm::mat4 eyeToWorldMat;
|
||||
|
||||
float frustumNear { 0.1f };
|
||||
float rangeNear { 0.1f };
|
||||
float rangeFar { 200.0f };
|
||||
float frustumFar { 10000.0f };
|
||||
// glm::ivec4 dims { 1, 1, 1, 1 };
|
||||
|
||||
glm::ivec3 dims { 1, 1, 1 };
|
||||
float spare;
|
||||
|
||||
|
||||
FrustumGrid() = default;
|
||||
FrustumGrid(const FrustumGrid& source);
|
||||
|
||||
|
|
|
@ -46,7 +46,7 @@ void main(void) {
|
|||
|
||||
int clusterOffset = cluster.z;
|
||||
|
||||
ivec3 dims = frustumGrid.dims.xyz;
|
||||
ivec3 dims = ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z);
|
||||
dims.z +=1;
|
||||
ivec3 summedDims = ivec3(dims.x * dims.y, dims.x, 1);
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ void main(void) {
|
|||
float numLightsScale = clamp(numLights * 0.05, 0.01, 1.0);
|
||||
|
||||
|
||||
ivec3 dims = frustumGrid.dims.xyz;
|
||||
ivec3 dims = ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z);
|
||||
dims.z +=1;
|
||||
ivec3 summedDims = ivec3(dims.x * dims.y, dims.x, 1);
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ void main(void) {
|
|||
}
|
||||
int lightClusterOffset = cluster.z;
|
||||
|
||||
ivec3 dims = frustumGrid.dims.xyz;
|
||||
ivec3 dims = ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z);
|
||||
if (clusterPos.x < 0 || clusterPos.x >= dims.x) {
|
||||
discard;
|
||||
}
|
||||
|
|
|
@ -34,7 +34,6 @@ in vec2 _texCoord0;
|
|||
out vec4 _fragColor;
|
||||
|
||||
void main(void) {
|
||||
|
||||
// Grab the fragment data from the uv
|
||||
vec2 texCoord = _texCoord0.st;
|
||||
|
||||
|
@ -49,19 +48,31 @@ void main(void) {
|
|||
// Frag pos in world
|
||||
mat4 invViewMat = getViewInverse();
|
||||
vec4 fragPos = invViewMat * fragPosition;
|
||||
|
||||
|
||||
// From frag world pos find the cluster
|
||||
vec4 clusterEyePos = frustumGrid_worldToEye(fragPos);
|
||||
ivec3 clusterPos = frustumGrid_eyeToClusterPos(clusterEyePos.xyz);
|
||||
|
||||
vec3 volumePos = frustumGrid_eyeToVolume(clusterEyePos.xyz, frustumGrid.eyeToGridProj, frustumGrid.rangeNear, frustumGrid.rangeFar);
|
||||
ivec3 dims = ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z);
|
||||
|
||||
vec3 gridPos = frustumGrid_volumeToGrid(volumePos, dims);
|
||||
|
||||
_fragColor = vec4(fract(volumePos.xyz), 1.0);
|
||||
// _fragColor = vec4(fract(gridPos / vec3(dims)), 1.0);
|
||||
|
||||
return;
|
||||
|
||||
ivec3 cluster = clusterGrid_getCluster(frustumGrid_clusterToIndex(clusterPos));
|
||||
|
||||
int numLights = cluster.x + cluster.y;
|
||||
if (numLights <= 0) {
|
||||
discard;
|
||||
}
|
||||
int lightClusterOffset = cluster.z;
|
||||
// ivec3 dims = ivec3(frustumGrid.dims.x, frustumGrid.dims.y, frustumGrid.dims.z);
|
||||
//ivec3 dims = frustumGrid.dims.xyz;
|
||||
|
||||
ivec3 dims = frustumGrid.dims.xyz;
|
||||
if (clusterPos.x < 0 || clusterPos.x >= dims.x) {
|
||||
discard;
|
||||
}
|
||||
|
@ -84,7 +95,7 @@ void main(void) {
|
|||
vec4 fragEyeVector = invViewMat * vec4(-frag.position.xyz, 0.0);
|
||||
vec3 fragEyeDir = normalize(fragEyeVector.xyz);
|
||||
|
||||
// COmpute the rougness into gloss2 once:
|
||||
// Compute the rougness into gloss2 once:
|
||||
float fragGloss2 = pow(frag.roughness + 0.001, 4.0);
|
||||
bool withScattering = (frag.scattering * isScatteringEnabled() > 0.0);
|
||||
|
||||
|
|
Loading…
Reference in a new issue