Skip to content

Commit 5f4918d

Browse files
everything works, made a nice mode for debugging cluster groups for @Przemog1
1 parent d0edd2b commit 5f4918d

File tree

2 files changed

+49
-33
lines changed

2 files changed

+49
-33
lines changed

examples_tests/41.VisibilityBuffer/main.cpp

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,9 @@ using namespace nbl::video;
2020
//vt stuff
2121
using STextureData = asset::ICPUVirtualTexture::SMasterTextureData;
2222

23-
constexpr uint32_t PAGE_SZ_LOG2 = 7u;
2423
constexpr uint32_t TILES_PER_DIM_LOG2 = 4u;
25-
constexpr uint32_t PAGE_PADDING = 8u;
2624
constexpr uint32_t MAX_ALLOCATABLE_TEX_SZ_LOG2 = 12u; //4096
2725

28-
constexpr uint32_t PGTAB_BINDING = 0u;
29-
constexpr uint32_t PHYSICAL_STORAGE_VIEWS_BINDING = 1u;
30-
3126
struct commit_t
3227
{
3328
STextureData addr;
@@ -567,7 +562,7 @@ int main()
567562
auto binding_and_sampler_count = gpuvt->getDSlayoutBindings(nullptr,nullptr);
568563
core::vector<IGPUDescriptorSetLayout::SBinding> vtBindings(binding_and_sampler_count.first);
569564
core::vector<smart_refctd_ptr<IGPUSampler>> vtSamplers(binding_and_sampler_count.second);
570-
gpuvt->getDSlayoutBindings(vtBindings.data(),vtSamplers.data(),PGTAB_BINDING,PHYSICAL_STORAGE_VIEWS_BINDING);
565+
gpuvt->getDSlayoutBindings(vtBindings.data(),vtSamplers.data(),_NBL_VT_PAGE_TABLE_BINDING,_NBL_VT_FLOAT_VIEWS_BINDING);
571566
auto& precomputedBinding = vtBindings.emplace_back();
572567
precomputedBinding.binding = 2u;
573568
precomputedBinding.type = EDT_STORAGE_BUFFER;
@@ -584,7 +579,7 @@ int main()
584579
const auto sizesVT = gpuvt->getDescriptorSetWrites(nullptr,nullptr,nullptr);
585580
core::vector<video::IGPUDescriptorSet::SWriteDescriptorSet> writesVT(sizesVT.first+1u);
586581
core::vector<video::IGPUDescriptorSet::SDescriptorInfo> infoVT(sizesVT.second+1u);
587-
gpuvt->getDescriptorSetWrites(writesVT.data(),infoVT.data(),sceneData.vtDS.get(),PGTAB_BINDING,PHYSICAL_STORAGE_VIEWS_BINDING);
582+
gpuvt->getDescriptorSetWrites(writesVT.data(),infoVT.data(),sceneData.vtDS.get(),_NBL_VT_PAGE_TABLE_BINDING,_NBL_VT_FLOAT_VIEWS_BINDING);
588583

589584
auto& precomp = gpuvt->getPrecomputedData();
590585
infoVT.back().desc = driver->createFilledDeviceLocalGPUBufferOnDedMem(sizeof(precomp),&precomp);
@@ -674,8 +669,7 @@ int main()
674669
}
675670
driver->updateDescriptorSets(writeCount,writesVG.data(),0u,nullptr);
676671
}(tmp);
677-
// TODO: sprintf(fragPrelude.data(), FRAGMENT_SHADER_OVERRIDES, sceneData.vt->getFloatViews().size(), sceneData.vt->getGLSLFunctionsIncludePath().c_str());
678-
auto overrideShaderJustAfterVersionDirective = [am,driver,extraCode](const char* path)
672+
auto overrideShaderJustAfterVersionDirective = [am,driver,&extraCode](const char* path)
679673
{
680674
asset::IAssetLoader::SAssetLoadParams lp;
681675
auto _specShader = IAsset::castDown<ICPUSpecializedShader>(*am->getAsset(path,lp).getContents().begin());
@@ -722,8 +716,10 @@ int main()
722716
SRasterizationParams{}
723717
);
724718
}
725-
#if 0
726719
{
720+
extraCode += "#define _NBL_VT_FLOAT_VIEWS_COUNT "+std::to_string(gpuvt->getFloatViews().size())+"\n";
721+
std::cout << gpuvt->getGLSLFunctionsIncludePath().c_str() << std::endl;
722+
727723
SPushConstantRange pcRange;
728724
pcRange.size = sizeof(core::vectorSIMDf); // TODO: send camera data
729725
pcRange.offset = 0u;
@@ -734,7 +730,6 @@ int main()
734730
overrideShaderJustAfterVersionDirective("../shadeVBuffer.comp")
735731
);
736732
}
737-
#endif
738733
}
739734

740735
//! we want to move around the scene and view it from different angles
@@ -786,13 +781,13 @@ int main()
786781
sizeof(DrawElementsIndirectCommand_t)
787782
);
788783
}
789-
#if 0
784+
790785
// shade
791786
driver->bindDescriptorSets(video::EPBP_COMPUTE,sceneData.shadeVBufferPpln->getLayout(),0u,4u,ds,nullptr);
792787
driver->bindComputePipeline(sceneData.shadeVBufferPpln.get());
793788
driver->dispatch((params.WindowSize.Width-1u)/SHADING_WG_SIZE_X+1u,(params.WindowSize.Height-1u)/SHADING_WG_SIZE_Y+1u,1u);
794789
COpenGLExtensionHandler::extGlMemoryBarrier(GL_FRAMEBUFFER_BARRIER_BIT);
795-
#endif
790+
796791
// blit
797792
driver->blitRenderTargets(fb,0);
798793
driver->endScene();

examples_tests/41.VisibilityBuffer/shadeVBuffer.comp

Lines changed: 41 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
#version 430 core
22

3+
#line 4 // so we get good line numbers for errors
34
#include "common.glsl"
45
layout (local_size_x = SHADING_WG_SIZE_X, local_size_y = SHADING_WG_SIZE_Y) in;
56

67
#include <nbl/builtin/glsl/virtual_texturing/extensions.glsl>
8+
#define _NBL_VT_DESCRIPTOR_SET 0
9+
#define _NBL_VT_FLOAT_VIEWS
10+
#define _NBL_VT_INT_VIEWS_COUNT 0
11+
#define _NBL_VT_INT_VIEWS
12+
#define _NBL_VT_UINT_VIEWS_COUNT 0
13+
#define _NBL_VT_UINT_VIEWS
714
#include <nbl/builtin/glsl/virtual_texturing/descriptors.glsl>
815
layout (set = 0, binding = 2, std430) restrict readonly buffer PrecomputedStuffSSBO
916
{
@@ -13,7 +20,7 @@ layout (set = 0, binding = 2, std430) restrict readonly buffer PrecomputedStuffS
1320
uint layer_to_sampler_ix[_NBL_VT_MAX_PAGE_TABLE_LAYERS];
1421
} precomputed;
1522

16-
layout(set = 3, binding = 0) uniform sampler2D vBuffer;
23+
layout(set = 3, binding = 0) uniform usampler2D vBuffer;
1724
layout(set = 3, binding = 1, rgba8) uniform image2D frameBuffer;
1825

1926
#include <nbl/builtin/glsl/loader/mtl/common.glsl>
@@ -51,21 +58,22 @@ float nbl_glsl_VT_getVTexSzRcp()
5158
return precomputed.vtex_sz_rcp;
5259
}
5360
#define _NBL_USER_PROVIDED_VIRTUAL_TEXTURING_FUNCTIONS_
61+
#if PAGE_SZ_LOG2!=7||PAGE_PADDING!=8
62+
#error "Adjust the include path for the VT functions!"
63+
#endif
64+
#include <nbl/builtin/glsl/virtual_texturing/functions.glsl/7/8>
5465

5566

67+
#define _NBL_FRAG_SET3_BINDINGS_DEFINED_
68+
#define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
5669

57-
vec4 nbl_sample_Ka(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_Ka_data, uv, dUV); }
58-
59-
vec4 nbl_sample_Kd(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_Kd_data, uv, dUV); }
60-
61-
vec4 nbl_sample_Ks(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_Ks_data, uv, dUV); }
62-
63-
vec4 nbl_sample_Ns(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_Ns_data, uv, dUV); }
64-
65-
vec4 nbl_sample_d(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_d_data, uv, dUV); }
66-
67-
vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(materialData[drawGUID].map_bump_data, uv, dUV); }
68-
70+
vec4 nbl_sample_Ka(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Ka_data, uv, dUV); }
71+
vec4 nbl_sample_Kd(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Kd_data, uv, dUV); }
72+
vec4 nbl_sample_Ks(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Ks_data, uv, dUV); }
73+
vec4 nbl_sample_Ns(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_Ns_data, uv, dUV); }
74+
vec4 nbl_sample_d(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_d_data, uv, dUV); }
75+
vec4 nbl_sample_bump(in vec2 uv, in mat2 dUV) { return nbl_glsl_vTextureGrad(gBatchInstance.map_bump_data, uv, dUV); }
76+
#define _NBL_TEXTURE_SAMPLE_FUNCTIONS_DEFINED_
6977

7078

7179
mat2x3 dPdBary;
@@ -80,7 +88,14 @@ mat2 nbl_glsl_perturbNormal_dUVdSomething()
8088
}
8189
#define _NBL_BUILTIN_GLSL_BUMP_MAPPING_DERIVATIVES_DECLARED_
8290

91+
8392
#include <nbl/builtin/glsl/colorspace/OETF.glsl>
93+
94+
vec3 uintIDToColor(uint id)
95+
{
96+
return vec3(bitfieldExtract(id,0,4),bitfieldExtract(id,4,4),bitfieldExtract(id,8,4))/15.0;
97+
}
98+
8499
void main()
85100
{
86101
const ivec2 fragCoord = ivec2(gl_GlobalInvocationID);
@@ -89,19 +104,20 @@ void main()
89104

90105
const uvec4 triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2 = texelFetch(vBuffer,fragCoord,0);
91106

92-
const uint drawGUID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],MAX_TRIANGLES_IN_BATCH,32-MAX_TRIANGLES_IN_BATCH);
93-
const uint triangleID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],0,MAX_TRIANGLES_IN_BATCH);
107+
const int triangleIDBitcount = findMSB(MAX_TRIANGLES_IN_BATCH-1)+1;
108+
const uint drawGUID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],triangleIDBitcount,32-triangleIDBitcount);
109+
const uint triangleID = bitfieldExtract(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[0],0,triangleIDBitcount);
94110
const vec2 bary = unpackUnorm2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[1]);
95111
const mat2 dBary = mat2(
96112
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[2]),
97113
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[3])
98114
);
99115

100-
gBatchInstance = batchInstanceData[drawID];
116+
gBatchInstance = batchInstanceData[drawGUID];
101117
uvec3 vertexIDs;
102118
const uint baseTriangleVertex = triangleID*3u+gBatchInstance.firstIndex;
103119
for (uint i=0u; i<3u; i++)
104-
vertexIDs[i] = nbl_glsl_VG_fetchTriangleVertexIndex(baseTriangleVertex,i)
120+
vertexIDs[i] = nbl_glsl_VG_fetchTriangleVertexIndex(baseTriangleVertex,i);
105121

106122
vec3 pos,normal;
107123
vec2 uv;
@@ -130,12 +146,17 @@ void main()
130146
const float lastBary = 1.f-bary.x-bary.y;
131147

132148

133-
normal = nbl_glsl_fetchVtxNormal(vertices[0],drawGUID)*bary.x;
134-
normal += nbl_glsl_fetchVtxNormal(vertices[1],drawGUID)*bary.y;
135-
normal += nbl_glsl_fetchVtxNormal(vertices[2],drawGUID)*lastBary;
149+
normal = nbl_glsl_fetchVtxNormal(vertexIDs[0],drawGUID)*bary.x;
150+
normal += nbl_glsl_fetchVtxNormal(vertexIDs[1],drawGUID)*bary.y;
151+
normal += nbl_glsl_fetchVtxNormal(vertexIDs[2],drawGUID)*lastBary;
136152
}
137153

138154
vec4 color; // TODO: shading
139155

156+
color = vec4(0,0,0,1);
157+
color.rgb = uintIDToColor(drawGUID);
158+
//color.rgb = 0.5*normal+vec3(0.5);
159+
//color.rgb = ;
160+
140161
imageStore(frameBuffer,fragCoord,vec4(nbl_glsl_oetf_sRGB(color.rgb),color.a));
141162
}

0 commit comments

Comments
 (0)