Implement proxied MSAA texture contents on OpenGL

This commit is contained in:
baldurk committed 2018-08-01 17:29:39 +01:00
1 parent 05a9318dc9
commit a82c7a10d3
8 files changed
+435 -35

No files matched your search

+11 -11
View File
@@ -35,23 +35,23 @@ layout(binding = 2) writeonly uniform uimage2DMSArray dstMS;
layout(push_constant) uniform multisamplePush
{
int numMultiSamples;
int currentSample;
int currentSlice;
int sampleOffset;
int sliceOffset;
uint currentStencil;
} mscopy;
#define numMultiSamples (mscopy.numMultiSamples)
#define currentSample (mscopy.currentSample)
#define currentSlice (mscopy.currentSlice)
#define sampleOffset (mscopy.sampleOffset)
#define sliceOffset (mscopy.sliceOffset)
#define currentStencil (mscopy.currentStencil)
#else
uniform uvec4 mscopy;
uniform ivec4 mscopy;
#define numMultiSamples (int(mscopy.x))
#define currentSample (mscopy.y)
#define currentSlice (mscopy.z)
#define numMultiSamples (mscopy.x)
#define sampleOffset (mscopy.y)
#define sliceOffset (mscopy.z)
#define currentStencil (mscopy.w)
#endif
@@ -60,10 +60,10 @@ void main()
{
uvec3 id = gl_GlobalInvocationID;
int slice = int(id.z / numMultiSamples);
int sampleIdx = int(id.z % numMultiSamples);
int slice = sliceOffset + int(id.z / numMultiSamples);
int sampleIdx = sampleOffset + int(id.z % numMultiSamples);
uvec4 data = texelFetch(srcArray, ivec3(int(id.x), int(id.y), int(id.z)), 0);
uvec4 data = texelFetch(srcArray, ivec3(int(id.x), int(id.y), slice * numMultiSamples + sampleIdx), 0);
imageStore(dstMS, ivec3(int(id.x), int(id.y), slice), sampleIdx, data);
}
+6 -4
View File
@@ -22,6 +22,8 @@
* THE SOFTWARE.
******************************************************************************/
//#extension_nongles GL_ARB_sample_shading : require
layout(binding = 0) uniform sampler2DArray srcDepthArray;
layout(binding = 1) uniform usampler2DArray srcStencilArray;
// binding = 2 used as an image in the colour copy compute shaders
@@ -43,12 +45,12 @@ layout(push_constant) uniform multisamplePush
#else
uniform uvec4 mscopy;
uniform ivec4 mscopy;
#define numMultiSamples (int(mscopy.x))
#define numMultiSamples (mscopy.x)
#define currentSample (mscopy.y)
#define currentSlice (mscopy.z)
#define currentStencil (mscopy.w)
#define currentStencil (uint(mscopy.w))
#endif
@@ -56,7 +58,7 @@ void main()
{
ivec3 srcCoord = ivec3(int(gl_FragCoord.x), int(gl_FragCoord.y), currentSlice*numMultiSamples + gl_SampleID);
if(currentStencil < 256)
if(currentStencil < 256u)
{
uint stencil = texelFetch(srcStencilArray, srcCoord, 0).x;
+6 -4
View File
@@ -21,6 +21,8 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
******************************************************************************/
//#extension_nongles GL_ARB_sample_shading : require
layout(binding = 0) uniform sampler2DMSArray srcDepthMS;
layout(binding = 1) uniform usampler2DMSArray srcStencilMS;
@@ -43,12 +45,12 @@ layout(push_constant) uniform multisamplePush
#else
uniform uvec4 mscopy;
uniform ivec4 mscopy;
#define numMultiSamples (int(mscopy.x))
#define numMultiSamples (mscopy.x)
#define currentSample (mscopy.y)
#define currentSlice (mscopy.z)
#define currentStencil (mscopy.w)
#define currentStencil (uint(mscopy.w))
#endif
@@ -56,7 +58,7 @@ void main()
{
ivec3 srcCoord = ivec3(int(gl_FragCoord.x), int(gl_FragCoord.y), currentSlice);
if(currentStencil < 256)
if(currentStencil < 256u)
{
uint stencil = texelFetch(srcStencilMS, srcCoord, currentSample).x;
+2 -2
View File
@@ -48,9 +48,9 @@ layout(push_constant) uniform multisamplePush
#else
uniform uvec4 mscopy;
uniform ivec4 mscopy;
#define numMultiSamples (int(mscopy.x))
#define numMultiSamples (mscopy.x)
#define currentSample (mscopy.y)
#define currentSlice (mscopy.z)
#define currentStencil (mscopy.w)