On 05/02/2013 12:08 AM, Topi Pohjolainen wrote:
No functional change in preparation for supporting multiple planes
per image each having its own region.

Signed-off-by: Topi Pohjolainen <topi.pohjolai...@intel.com>
---
  src/mesa/drivers/dri/intel/intel_fbo.c       |  6 +--
  src/mesa/drivers/dri/intel/intel_regions.h   |  7 ++-
  src/mesa/drivers/dri/intel/intel_screen.c    | 69 ++++++++++++++--------------
  src/mesa/drivers/dri/intel/intel_tex_image.c |  2 +-
  4 files changed, 45 insertions(+), 39 deletions(-)

[snip]

diff --git a/src/mesa/drivers/dri/intel/intel_regions.h 
b/src/mesa/drivers/dri/intel/intel_regions.h
index 1fb6b27..e610f6b 100644
--- a/src/mesa/drivers/dri/intel/intel_regions.h
+++ b/src/mesa/drivers/dri/intel/intel_regions.h
@@ -129,8 +129,13 @@ struct intel_image_format {
     } planes[3];
  };

+/**
+ * An image representing multiple planes may come in two flavours:
+ *  - all planes in single region but in different offsets or
+ *  - each plane in its own region.
+ */


In case (1), does image->regions contain a single image, or does
it contain 3 pointers to the same image?

More importantly, I don't understand a key point here. By examining a given 
instance
of __DRIimageRec, how can I determine if the image falls under case (1)
or case (2)?

Here is a concrete instance of the problem I don't know how to solve.
Suppose that I have an instance of __DRIimageRec and that I've determined
so far that its contents are as below, where image->planar_format was obtained
by a lookup in the intel_screen.c:intel_image_formats table.

  image = {
    // ...
    .planar_format = {
       .fourcc = __DRI_IMAGE_FOURCC_YUV422,
       .components = __DRI_IMAGE_COMPONENTS_Y_U_V,
       .nplanes = 3,
       . planes = {
         [0] = {
           .buffer_index = 0,
            .dri_format = __DRI_IMAGE_FORMAT_R8,
            // ...
          },
         [1] = {
           .buffer_index = 1,
           .dri_format = __DRI_IMAGE_FORMAT_R8,
           // ...
         },
         [2] = {
           .buffer_index = 2,
           .dri_format = __DRI_IMAGE_FORMAT_R8,
           // ...
          },
    };

With this information, how can I know if dereferencing image->regions[1]
will segfault or not? That is, how can I know if this image have one or
three images?

  struct __DRIimageRec {
-   struct intel_region *region;
+   struct intel_region *regions[3];
     GLenum internal_format;
     uint32_t dri_format;
     GLuint format;

[snip]

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to