On 10/04/2016 06:09 PM, Jason Ekstrand wrote:
On Thu, Sep 29, 2016 at 11:27 PM, Xu,Randy <randy...@intel.com <mailto:randy...@intel.com>> wrote:

    Add the miptree level/slice x/y_offset when count the surface offset
    in brw_emit_surface_state. The surface offset has two parts, one is
    from mt->offset, which should be 32 aligned in width/height for tiled
    buffer; another is from mt->level[current_level].slice[current_slice].
    x/y_offset.

    This fix will solve 12 deqp failure
    dEQP-EGL.functional.image.create.gles2_cubemap_negative_*_texture

    Signed-off-by: Xu,Randy <randy...@intel.com
    <mailto:randy...@intel.com>>
    ---
     src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)

    diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    index 61a4b94..3a5c573 100644
    --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c
    @@ -85,7 +85,8 @@ brw_emit_surface_state(struct brw_context *brw,
                            unsigned read_domains, unsigned write_domains)
     {
        const struct surface_state_info ss_info =
    surface_state_infos[brw->gen];
    -   uint32_t tile_x = 0, tile_y = 0;
    +   uint32_t tile_x = mt->level[0].slice[0].x_offset;
    +   uint32_t tile_y = mt->level[0].slice[0].y_offset;


This isn't correct. First off, there are some fairly strict restrictions on what we can do with tile_x and tile_y and we can't just shove x/y_offset in there. We need to use intel_miptree_get_tile_offsets to get both a byte offset and an intratile offset. Second, we should already be taking slices into account for cube maps via base_array_layer where needed.

Unfortunately, I'm not 100% sure what the correct patch is without a bit more information about what the test is doing that causes a problem.


I did take a brief look and when running the set mentioned above (for example with ./deqp-egl --deqp-case=*EGL.functional.image.create.gles2_cubemap_negative_*_texture) what happens is that we never end up to the part of code calling intel_miptree_get_tile_offsets in that function (because surf.dim_layout != dim_layout condition does not trigger). This is just what I observed, should we just call intel_miptree_get_tile_offsets() unconditionally then?


--Jason

        uint32_t offset = mt->offset;

        struct isl_surf surf;
    --
    2.7.4

    _______________________________________________
    mesa-dev mailing list
    mesa-dev@lists.freedesktop.org <mailto:mesa-dev@lists.freedesktop.org>
    https://lists.freedesktop.org/mailman/listinfo/mesa-dev
    <https://lists.freedesktop.org/mailman/listinfo/mesa-dev>




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


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

Reply via email to