gsg: Use DSA for extracting shader buffer data

This commit is contained in:
rdb 2025-12-31 21:22:12 +01:00
parent 86b1304588
commit af498ff286
2 changed files with 12 additions and 6 deletions

View File

@ -2834,6 +2834,9 @@ reset() {
get_extension_func("glMapNamedBufferRange");
}
_glGetNamedBufferSubData = (PFNGLGETNAMEDBUFFERSUBDATAPROC)
get_extension_func("glGetNamedBufferSubData");
_supports_dsa = true;
} else {
_supports_dsa = false;
@ -7786,12 +7789,14 @@ extract_shader_buffer_data(ShaderBuffer *buffer, vector_uchar &data,
_glMemoryBarrier(GL_BUFFER_UPDATE_BARRIER_BIT);
}
_glBindBuffer(GL_SHADER_STORAGE_BUFFER, gbc->_index);
_glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, start, data.size(), &data[0]);
_glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
_current_sbuffer_index = 0;
if (_supports_dsa) {
_glGetNamedBufferSubData(gbc->_index, start, data.size(), &data[0]);
} else {
_glBindBuffer(GL_SHADER_STORAGE_BUFFER, gbc->_index);
_glGetBufferSubData(GL_SHADER_STORAGE_BUFFER, start, data.size(), &data[0]);
_glBindBuffer(GL_SHADER_STORAGE_BUFFER, 0);
_current_sbuffer_index = 0;
}
report_my_gl_errors();
return true;

View File

@ -1019,6 +1019,7 @@ public:
PFNGLGENERATETEXTUREMIPMAPPROC _glGenerateTextureMipmap;
PFNGLBINDTEXTUREUNITPROC _glBindTextureUnit;
PFNGLMAPNAMEDBUFFERRANGEPROC _glMapNamedBufferRange;
PFNGLGETNAMEDBUFFERSUBDATAPROC _glGetNamedBufferSubData;
#endif
#ifndef OPENGLES_1