From patch 1/4:
+ for (unsigned int level = 0; level < params->level_count; ++level) + { + resource_data[level].pSysMem = params->data + buffer_offset; + resource_data[level].SysMemPitch = (params->width >> level) * params->texel_size; + resource_data[level].SysMemSlicePitch = (params->height >> level) * resource_data[level].SysMemPitch; + buffer_offset += resource_data[level].SysMemSlicePitch; + }
That works for square textures like in the associated tests, but note that you can end up with levels with 0 width/height for non-square textures this way. See also e.g. wined3d_texture_get_level_width(). We may want to introduce common helpers for these level width/height/pitch calculations in shader_runner.h.
(Incidentally, I have a slight preference for "¶ms->data[buffer_offset]" over "params->data + buffer_offset", but I don't particularly feel like imposing that.)