UUSL Compute Shaders
UUSL supports compute shaders: there are special functions, semantics and parameters for compute shaders.
In UNIGINE, compute shaders have a *.comp extension.
A compute shader is a special part of the graphics pipeline. It allows to execute code on the GPU, read and write buffer data.
This article assumes you have prior knowledge of the compute shaders. Also, read the following topics on UUSL before proceeding:
Main Function#
To start and end the void Main function of the compute shader, use the following instructions:
#include <core/materials/shaders/render/common.h>
MAIN_COMPUTE_BEGIN(WIDTH_GROUP,HEIGHT_GROUP)
<your code here>
MAIN_COMPUTE_END
You should add a new line (press Enter) after closing the instruction.
This code is equivalent to:
#include <core/materials/shaders/render/common.h>
layout (local_size_x = WIDTH_GROUP, local_size_y = HEIGHT_GROUP) in;
void main() {
<your code here>
}
#include <core/materials/shaders/render/common.h>
[numthreads(WIDTH_GROUP, HEIGHT_GROUP, 1)]
void main(DISPATCH_INFO dispatch_info) {
<your code here>
}
Semantics#
UUSL | OpenGL | Direct3D | Description |
---|---|---|---|
GROUP_ID | gl_WorkGroupID | SV_GroupID | Contains the index of the workgroup currently being operated on by a compute shader |
GROUP_THREAD_ID | gl_LocalInvocationID | SV_GroupThreadID | Contains the index of work item currently being operated on by a compute shader |
DISPATCH_THREAD_ID | gl_GlobalInvocationID | SV_DispatchThreadID | Contains the global index of work item currently being operated on by a compute shader |
GROUP_INDEX | gl_LocalInvocationIndex | SV_GroupIndex | Contains the local linear index of work item currently being operated on by a compute shader |
Keywords#
UUSL | OpenGL | Direct3D | Description |
---|---|---|---|
SHARED | shared | groupshared | Mark a variable for thread-group-shared memory for compute shaders |
MEMORY_BARRIER_SHARED | memoryBarrierShared() | GroupMemoryBarrier() | Blocks execution of all threads in a group until all group shared accesses have been completed |
MEMORY_BARRIER_SHARED_SYNC | memoryBarrierShared() barrier() | GroupMemoryBarrierWithGroupSync() | Blocks execution of all threads in a group until all group shared accesses have been completed and all threads in the group have reached this call |
Last update:
2022-12-14
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)