Debugging the amd shader????

This commit is contained in:
sam 2016-12-09 02:12:31 -08:00
parent b72aa83afa
commit 7a97570949
9 changed files with 51 additions and 37 deletions

View file

@ -32,7 +32,7 @@ GLShader::~GLShader() {
// GLSL version
static const std::string glslVersion {
"#version 410 core"
"#version 450 core"
};
// Shader domain

View file

@ -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 {

View file

@ -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;

View file

@ -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) :

View file

@ -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);

View file

@ -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);

View file

@ -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);

View file

@ -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;
}

View file

@ -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);