【发布时间】:2022-12-05 07:18:52
【问题描述】:
给定以下 glsl 声明(这只是一个示例):
struct S{
f16vec3 a;
float16_t b;
f16vec3_t c;
float16_t d;
};
shared float16_t my_float_array[100];
shared S my_S_array[100];
我有以下问题:
- 给定的声明将使用多少共享内存,例如在上面的示例中?
- 共享内存中的变量使用哪种内存布局? std140、std430 还是其他?
- 这对银行冲突有何影响?
我能够使用程序获得所需的总共享内存glGetProgramBinary并跳到以“!!NV”开头的行指示的文本部分的开头:
...
!!NVcp5.0
OPTION NV_shader_buffer_load;
OPTION NV_internal;
OPTION NV_gpu_program_fp64;
OPTION NV_shader_storage_buffer;
OPTION NV_bindless_texture;
OPTION NV_gpu_program5_mem_extended;
GROUP_SIZE 4 4 4;
SHARED_MEMORY 4480;
SHARED shared_mem[] = { program.sharedmem };
...
虽然这是相当间接的,但并没有说明对齐/打包规则。
【问题讨论】:
标签: opengl