[Mesa-dev] [PATCH 10/41] intel: Refactor intel_miptree_copy_teximage()
Chad Versace
chad.versace at linux.intel.com
Fri Nov 18 16:04:05 PST 2011
On 11/18/2011 03:42 PM, Kenneth Graunke wrote:
> On 11/17/2011 07:58 PM, Chad Versace wrote:
>> Extract the body of the inner loop into a new function,
>> intel_miptree_copy_slice().
>>
>> This is in preparation for adding support for separate stencil and HiZ to
>> intel_miptree_copy_teximage(). When copying a slice of a depthstencil
>> miptree that uses separate stencil, we will also need to copy the
>> corresponding slice of the stencil miptree. The easiest way to do this
>> will be to call intel_miptree_copy_slice() recursively. Analogous
>> reasoning applies to copying a slice of a depth miptree with HiZ.
>>
>> Signed-off-by: Chad Versace <chad.versace at linux.intel.com>
>> ---
>> src/mesa/drivers/dri/intel/intel_mipmap_tree.c | 122 +++++++++++++-----------
>> 1 files changed, 66 insertions(+), 56 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> index 7f9e606..8f10101 100644
>> --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.c
>> @@ -354,6 +354,69 @@ intel_miptree_get_image_offset(struct intel_mipmap_tree *mt,
>> }
>> }
>>
>> +static void
>> +intel_miptree_copy_slice(struct intel_context *intel,
>> + struct intel_mipmap_tree *dst_mt,
>> + struct intel_mipmap_tree *src_mt,
>> + int level,
>> + int face,
>> + int depth)
>> +
>> +{
>> + gl_format format = src_mt->format;
>> + uint32_t width = src_mt->level[level].width;
>> + uint32_t height = src_mt->level[level].height;
>> +
>> + assert(depth < src_mt->level[level].depth);
>> +
>> + if (dst_mt->compressed) {
>> + uint32_t align_w, align_h;
>> + intel_get_texture_alignment_unit(format,
>> + &align_w, &align_h);
>> + height = ALIGN(height, align_h) / align_h;
>> + width = ALIGN(width, align_w);
>> + }
>
> This wasn't originally inside the loop; you've effectively moved it
> there. Since intel_get_texture_alignment_unit actually does some work
> these days, I'm wondering if this could be a performance hit.
Patch 36/41 "Store miptree alignment units in the miptree" remove this call
intel_get_texture_alignment_unit(). Does that solve your performance fear?
> At any rate, it doesn't seem necessary...I'd probably just add
> height/width function parameters and move this hunk back.
It feels really strange to me to pass width and height parameters
into intel_miptree_copy_slice(). I imagine someone in the future
encountering the function and being puzzled: "The slice specifier
(level, face, depth) is already passed into intel_miptree_copy_slice().
The width and height are determined by the slice, so why are width and height
also passed? Are we perhaps not copying the entire slice?" I'd rather not
make a potentially confusing design choice for the sake of a potential
performance penalty that will be rendered moot in a future commit.
----
Chad Versace
chad.versace at linux.intel.com
More information about the mesa-dev
mailing list