Hello,
I want to load .dds DXT1/3/5 async, but I am unable to do it, as DXT1 2048x2048 takes 2-5ms to upload to gpu. Tried everything, googled all pages… Read tons of threads here, and still no idea. Maybe Dark Photon will help me
My mapping/unmapping/loading multithreaded code works on uncompressed PNG fine, pbo->texture takes 0ms for 2048x2048 (measured using std::chrono)
So what I am doing:
int texWidth = 2048;
int texHeight = 2048;
int blockSize = 8; //or 16 dxt3 or dxt5
int dxtSize = ((texWidth+3)/4) * ((texHeight+3)/4) * blockSize;
glBufferData(GL_PIXEL_UNPACK_BUFFER, dxtSize, nullptr, GL_STREAM_DRAW);
PBOptr = glMapBuffer(GL_PIXEL_UNPACK_BUFFER, GL_WRITE_ONLY)
memcpy(PBOptr, imagePtr, dxtSize);
and once loading thread is done, in the main thread I unmap and dump content from PBO to texture
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, PBO);
glUnmapBuffer(GL_PIXEL_UNPACK_BUFFER);
glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGBA_S3TC_DXT1_EXT, texWidth, texHeight, 0, dxtSize, nullptr); //takes 2-5ms
glBindBuffer(GL_PIXEL_UNPACK_BUFFER, 0);
Tried DXT5 aswell, different compressing tools, mipmap/nomipmapped, texture loads correctly, but takes lot of time. Tried glTexStorage2D+glCompressedTexSubImage2D, even preallocate glCompressedTexImage2D with nullptr or mix everything with glTexImage2D (hah). Still it takes >1ms. Where is the problem? It looks like glCompressed(Sub)TexImage2D has to do internally some memcpy which takes time.
Maybe this helps:
OpenGL renderer string: Mesa DRI Intel(R) Ivybridge Mobile
OpenGL core profile version string: 4.2 (Core Profile) Mesa 18.1.8
OpenGL core profile shading language version string: 4.20
EDIT:
Using Intel HD4000
EDIT2:
$ glxinfo | grep EXT_texture
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GLX_EXT_import_context, GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info,
GLX_EXT_texture_from_pixmap, GLX_EXT_visual_info, GLX_EXT_visual_rating,
GL_EXT_texture_array, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_compression_rgtc, GL_EXT_texture_compression_s3tc,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer,
GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_decode,
GL_EXT_texture_shared_exponent, GL_EXT_texture_snorm,
GL_EXT_texture_swizzle, GL_EXT_timer_query, GL_EXT_transform_feedback,
GL_EXT_texture, GL_EXT_texture3D, GL_EXT_texture_array,
GL_EXT_texture_compression_dxt1, GL_EXT_texture_compression_rgtc,
GL_EXT_texture_compression_s3tc, GL_EXT_texture_cube_map,
GL_EXT_texture_edge_clamp, GL_EXT_texture_env_add,
GL_EXT_texture_env_combine, GL_EXT_texture_env_dot3,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_integer,
GL_EXT_texture_lod_bias, GL_EXT_texture_object, GL_EXT_texture_rectangle,
GL_EXT_texture_sRGB, GL_EXT_texture_sRGB_decode,
GL_EXT_texture_shared_exponent, GL_EXT_texture_snorm,
GL_EXT_texture_swizzle, GL_EXT_timer_query, GL_EXT_transform_feedback,
GL_EXT_texture_border_clamp, GL_EXT_texture_compression_dxt1,
GL_EXT_texture_filter_anisotropic, GL_EXT_texture_format_BGRA8888,
GL_EXT_texture_rg, GL_EXT_texture_sRGB_decode,
GL_EXT_texture_type_2_10_10_10_REV, GL_EXT_unpack_subimage,