1
1
#version 430 core
2
2
3
+ #line 4 // so we get good line numbers for errors
3
4
#include "common.glsl"
4
5
layout (local_size_x = SHADING_WG_SIZE_X, local_size_y = SHADING_WG_SIZE_Y) in;
5
6
6
7
#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
7
14
#include <nbl/builtin/glsl/virtual_texturing/descriptors.glsl>
8
15
layout (set = 0, binding = 2, std430) restrict readonly buffer PrecomputedStuffSSBO
9
16
{
@@ -13,7 +20,7 @@ layout (set = 0, binding = 2, std430) restrict readonly buffer PrecomputedStuffS
13
20
uint layer_to_sampler_ix[_NBL_VT_MAX_PAGE_TABLE_LAYERS];
14
21
} precomputed;
15
22
16
- layout(set = 3, binding = 0) uniform sampler2D vBuffer;
23
+ layout(set = 3, binding = 0) uniform usampler2D vBuffer;
17
24
layout(set = 3, binding = 1, rgba8) uniform image2D frameBuffer;
18
25
19
26
#include <nbl/builtin/glsl/loader/mtl/common.glsl>
@@ -51,21 +58,22 @@ float nbl_glsl_VT_getVTexSzRcp()
51
58
return precomputed.vtex_sz_rcp;
52
59
}
53
60
#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>
54
65
55
66
67
+ #define _NBL_FRAG_SET3_BINDINGS_DEFINED_
68
+ #define _NBL_FRAG_PUSH_CONSTANTS_DEFINED_
56
69
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_
69
77
70
78
71
79
mat2x3 dPdBary;
@@ -80,7 +88,14 @@ mat2 nbl_glsl_perturbNormal_dUVdSomething()
80
88
}
81
89
#define _NBL_BUILTIN_GLSL_BUMP_MAPPING_DERIVATIVES_DECLARED_
82
90
91
+
83
92
#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
+
84
99
void main()
85
100
{
86
101
const ivec2 fragCoord = ivec2(gl_GlobalInvocationID);
@@ -89,19 +104,20 @@ void main()
89
104
90
105
const uvec4 triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2 = texelFetch(vBuffer,fragCoord,0);
91
106
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);
94
110
const vec2 bary = unpackUnorm2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[1]);
95
111
const mat2 dBary = mat2(
96
112
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[2]),
97
113
unpackHalf2x16(triangleIDdrawID_unorm16Bary_dBarydScreenHalf2x2[3])
98
114
);
99
115
100
- gBatchInstance = batchInstanceData[drawID ];
116
+ gBatchInstance = batchInstanceData[drawGUID ];
101
117
uvec3 vertexIDs;
102
118
const uint baseTriangleVertex = triangleID*3u+gBatchInstance.firstIndex;
103
119
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);
105
121
106
122
vec3 pos,normal;
107
123
vec2 uv;
@@ -130,12 +146,17 @@ void main()
130
146
const float lastBary = 1.f-bary.x-bary.y;
131
147
132
148
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;
136
152
}
137
153
138
154
vec4 color; // TODO: shading
139
155
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
+
140
161
imageStore(frameBuffer,fragCoord,vec4(nbl_glsl_oetf_sRGB(color.rgb),color.a));
141
162
}
0 commit comments