[Mesa-dev] [PATCH 20/27] i965: Pretend that CCS modified images are two planes

Ben Widawsky ben at bwidawsk.net
Sun Jan 1 22:16:34 UTC 2017


On 16-12-10 16:05:12, Pohjolainen, Topi wrote:
>On Thu, Dec 01, 2016 at 02:10:01PM -0800, Ben Widawsky wrote:
>> From: Ben Widawsky <ben at bwidawsk.net>
>>
>> Signed-off-by: Ben Widawsky <ben at bwidawsk.net>
>> ---
>>  src/mesa/drivers/dri/i965/intel_screen.c | 20 +++++++++++++++-----
>>  1 file changed, 15 insertions(+), 5 deletions(-)
>>
>> diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
>> index 91eb7ec..f40761a 100644
>> --- a/src/mesa/drivers/dri/i965/intel_screen.c
>> +++ b/src/mesa/drivers/dri/i965/intel_screen.c
>> @@ -747,7 +747,7 @@ intel_query_image(__DRIimage *image, int attrib, int *value)
>>     case __DRI_IMAGE_ATTRIB_FOURCC:
>>        return intel_lookup_fourcc(image->dri_format, value);
>>     case __DRI_IMAGE_ATTRIB_NUM_PLANES:
>> -      *value = 1;
>> +      *value = image->aux_offset ? 2: 1;
>>        return true;
>>     case __DRI_IMAGE_ATTRIB_OFFSET:
>>        *value = image->offset;
>> @@ -956,9 +956,17 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
>>      int width, height, offset, stride, dri_format, index;
>>      struct intel_image_format *f;
>>      __DRIimage *image;
>> -
>> -    if (parent == NULL || parent->planar_format == NULL)
>> -        return NULL;
>> +    bool is_aux = parent->aux_offset && plane == 1;
>> +
>> +    if (parent == NULL || parent->planar_format == NULL) {
>> +       if (is_aux) {
>> +          offset = parent->aux_offset;
>> +          stride = ALIGN(parent->pitch / 32, 128);
>> +          dri_format = parent->dri_format;
>> +          goto done;
>> +       }
>> +       return NULL;
>> +    }
>>
>>      f = parent->planar_format;
>>
>> @@ -972,11 +980,13 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
>>      offset = parent->offsets[index];
>>      stride = parent->strides[index];
>>
>> +done:
>>      image = intel_allocate_image(parent->screen, dri_format, loaderPrivate);
>>      if (image == NULL)
>>         return NULL;
>>
>> -    if (offset + height * stride > parent->bo->size) {
>> +    if (!is_aux &&
>> +        offset + height * stride > parent->bo->size) {
>
>This means that parent->bo->size is set to the size of the color region and
>not to the full size of color+aux. I don't think I saw yet logic in this
>series doing this...
>
>Anyway, small comment would probably prevent other people wondering about the
>same thing. What do you think?
>

No. You caught a bug. parent->bo->size should be the full size (it's allocated
in create_image_with_modifier). Originally I had height defined as well so I
could keep the assertion. I think I should go back and set height and keep the
assertion as it was.

diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c
index 49adb1d2ff..501520bbf0 100644
--- a/src/mesa/drivers/dri/i965/intel_screen.c
+++ b/src/mesa/drivers/dri/i965/intel_screen.c
@@ -975,6 +975,7 @@ intel_from_planar(__DRIimage *parent, int plane, void *loaderPrivate)
        if (is_aux) {
           offset = parent->aux_offset;
           stride = ALIGN(parent->pitch / 32, 128);
+          height = ALIGN(DIV_ROUND_UP(parent->height, 16), 32);
           dri_format = parent->dri_format;
           goto done;
        }
@@ -998,8 +999,7 @@ done:
     if (image == NULL)
        return NULL;
 
-    if (!is_aux &&
-        offset + height * stride > parent->bo->size) {
+    if (offset + height * stride > parent->bo->size) {
        _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds");
        free(image);
        return NULL;

>>         _mesa_warning(NULL, "intel_create_sub_image: subimage out of bounds");
>>         free(image);
>>         return NULL;
>> --
>> 2.10.2
>>
>> _______________________________________________
>> mesa-dev mailing list
>> mesa-dev at lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list