Mesa (master): st/nine: Bind src not dst in nine_context_box_upload

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 42d672fa6a766363e5703f119607f7c7975918aa
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=42d672fa6a766363e5703f119607f7c7975918aa

Author: Axel Davy 
Date:   Mon Dec  3 21:15:47 2018 +0100

st/nine: Bind src not dst in nine_context_box_upload

nine_context_box_upload uploads a ram buffer (from src)
to a pipe_resource (dst).
We already have a refcount on the pipe_resource,
what needs to be protected from release is the ram buffer,
thus a reference to src.

Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 
Cc: mesa-sta...@lists.freedesktop.org

---

 src/gallium/state_trackers/nine/nine_state.c | 6 +++---
 src/gallium/state_trackers/nine/nine_state.h | 2 +-
 src/gallium/state_trackers/nine/surface9.c   | 2 +-
 src/gallium/state_trackers/nine/volume9.c| 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 273be88e2b..4872e24f43 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -2434,7 +2434,7 @@ CSMT_ITEM_NO_WAIT_WITH_COUNTER(nine_context_range_upload,
 }
 
 CSMT_ITEM_NO_WAIT_WITH_COUNTER(nine_context_box_upload,
-   ARG_BIND_REF(struct NineUnknown, dst),
+   ARG_BIND_REF(struct NineUnknown, src_ref),
ARG_BIND_RES(struct pipe_resource, res),
ARG_VAL(unsigned, level),
ARG_COPY_REF(struct pipe_box, dst_box),
@@ -2449,8 +2449,8 @@ CSMT_ITEM_NO_WAIT_WITH_COUNTER(nine_context_box_upload,
 struct pipe_transfer *transfer = NULL;
 uint8_t *map;
 
-/* We just bind dst for the bind count */
-(void)dst;
+/* Binding src_ref avoids release before upload */
+(void)src_ref;
 
 map = pipe->transfer_map(pipe,
  res,
diff --git a/src/gallium/state_trackers/nine/nine_state.h 
b/src/gallium/state_trackers/nine/nine_state.h
index 51e5e32652..8de9f84a25 100644
--- a/src/gallium/state_trackers/nine/nine_state.h
+++ b/src/gallium/state_trackers/nine/nine_state.h
@@ -568,7 +568,7 @@ nine_context_range_upload(struct NineDevice9 *device,
 void
 nine_context_box_upload(struct NineDevice9 *device,
 unsigned *counter,
-struct NineUnknown *dst,
+struct NineUnknown *src_ref,
 struct pipe_resource *res,
 unsigned level,
 const struct pipe_box *dst_box,
diff --git a/src/gallium/state_trackers/nine/surface9.c 
b/src/gallium/state_trackers/nine/surface9.c
index 5fd662fa04..10518219a0 100644
--- a/src/gallium/state_trackers/nine/surface9.c
+++ b/src/gallium/state_trackers/nine/surface9.c
@@ -660,7 +660,7 @@ NineSurface9_CopyMemToDefault( struct NineSurface9 *This,
 
 nine_context_box_upload(This->base.base.device,
 >pending_uploads_counter,
-(struct NineUnknown *)This,
+(struct NineUnknown *)From,
 r_dst,
 This->level,
 _box,
diff --git a/src/gallium/state_trackers/nine/volume9.c 
b/src/gallium/state_trackers/nine/volume9.c
index ec811aeba1..840f01dae1 100644
--- a/src/gallium/state_trackers/nine/volume9.c
+++ b/src/gallium/state_trackers/nine/volume9.c
@@ -449,7 +449,7 @@ NineVolume9_CopyMemToDefault( struct NineVolume9 *This,
 
 nine_context_box_upload(This->base.device,
 >pending_uploads_counter,
-(struct NineUnknown *)This,
+(struct NineUnknown *)From,
 r_dst,
 This->level,
 _box,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/nine: Fix volumetexture dtor on ctor failure

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: f91f748fabd7fec8f571124df23296c07102a983
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=f91f748fabd7fec8f571124df23296c07102a983

Author: Axel Davy 
Date:   Sun Nov 25 14:37:53 2018 +0100

st/nine: Fix volumetexture dtor on ctor failure

The dtor is called on allocation failure,
thus we must check the volumes are allocated
before trying to release them.

Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 
Cc: mesa-sta...@lists.freedesktop.org

---

 src/gallium/state_trackers/nine/volumetexture9.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/volumetexture9.c 
b/src/gallium/state_trackers/nine/volumetexture9.c
index 5dec484486..c7191bce68 100644
--- a/src/gallium/state_trackers/nine/volumetexture9.c
+++ b/src/gallium/state_trackers/nine/volumetexture9.c
@@ -141,7 +141,8 @@ NineVolumeTexture9_dtor( struct NineVolumeTexture9 *This )
 
 if (This->volumes) {
 for (l = 0; l <= This->base.base.info.last_level; ++l)
-NineUnknown_Destroy(>volumes[l]->base);
+if (This->volumes[l])
+NineUnknown_Destroy(>volumes[l]->base);
 FREE(This->volumes);
 }
 

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/nine: Use helper to release swapchain buffers later

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: c442dd789066104e5e84cc90d98a7ff5cd6296cf
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c442dd789066104e5e84cc90d98a7ff5cd6296cf

Author: Axel Davy 
Date:   Wed Nov 21 22:03:07 2018 +0100

st/nine: Use helper to release swapchain buffers later

This patch introduces a structure to release the
present_handles only when they are fully released
by the server, thus making
"DestroyD3DWindowBuffer" actually release the buffer
right away when called.

Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 

---

 src/gallium/state_trackers/nine/swapchain9.c | 49 +++-
 src/gallium/state_trackers/nine/swapchain9.h |  1 +
 2 files changed, 42 insertions(+), 8 deletions(-)

diff --git a/src/gallium/state_trackers/nine/swapchain9.c 
b/src/gallium/state_trackers/nine/swapchain9.c
index d330c85572..138e8816a0 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -128,6 +128,40 @@ D3DWindowBuffer_create(struct NineSwapChain9 *This,
 return ret;
 }
 
+static void
+D3DWindowBuffer_release(struct NineSwapChain9 *This,
+D3DWindowBuffer *present_handle)
+{
+int i;
+/* Add it to the 'pending release' list */
+for (i = 0; i < D3DPRESENT_BACK_BUFFERS_MAX_EX + 1; i++) {
+if (!This->present_handles_pending_release[i]) {
+This->present_handles_pending_release[i] = present_handle;
+break;
+}
+}
+if (i == (D3DPRESENT_BACK_BUFFERS_MAX_EX + 1)) {
+ERR("Server not releasing buffers...\n");
+assert(false);
+}
+
+/* Destroy elements of the list released by the server */
+for (i = 0; i < D3DPRESENT_BACK_BUFFERS_MAX_EX + 1; i++) {
+if (This->present_handles_pending_release[i] &&
+ID3DPresent_IsBufferReleased(This->present, 
This->present_handles_pending_release[i])) {
+/* WaitBufferReleased also waits the presentation feedback
+ * (which should arrive at about the same time),
+ * while IsBufferReleased doesn't. DestroyD3DWindowBuffer 
unfortunately
+ * checks it to release immediately all data, else the release
+ * is postponed for This->present release. To avoid leaks (we may 
handle
+ * a lot of resize), call WaitBufferReleased. */
+ID3DPresent_WaitBufferReleased(This->present, 
This->present_handles_pending_release[i]);
+ID3DPresent_DestroyD3DWindowBuffer(This->present, 
This->present_handles_pending_release[i]);
+This->present_handles_pending_release[i] = NULL;
+}
+}
+}
+
 static int
 NineSwapChain9_GetBackBufferCountForParams( struct NineSwapChain9 *This,
 D3DPRESENT_PARAMETERS *pParams );
@@ -291,7 +325,7 @@ NineSwapChain9_Resize( struct NineSwapChain9 *This,
 This->enable_threadpool = FALSE;
 
 for (i = 0; i < oldBufferCount; i++) {
-ID3DPresent_DestroyD3DWindowBuffer(This->present, 
This->present_handles[i]);
+D3DWindowBuffer_release(This, This->present_handles[i]);
 This->present_handles[i] = NULL;
 if (This->present_buffers[i])
 pipe_resource_reference(&(This->present_buffers[i]), NULL);
@@ -519,6 +553,11 @@ NineSwapChain9_dtor( struct NineSwapChain9 *This )
 FREE(This->pending_presentation[i]);
 }
 
+for (i = 0; i < D3DPRESENT_BACK_BUFFERS_MAX_EX + 1; i++) {
+if (This->present_handles_pending_release[i])
+ID3DPresent_DestroyD3DWindowBuffer(This->present, 
This->present_handles_pending_release[i]);
+}
+
 for (i = 0; i < This->num_back_buffers; i++) {
 if (This->buffers[i])
 NineUnknown_Detach(NineUnknown(This->buffers[i]));
@@ -738,13 +777,7 @@ present( struct NineSwapChain9 *This,
 create_present_buffer(This, target_width, target_height, 
_resource, _handle);
 /* Switch to the new buffer */
 if (new_handle) {
-/* WaitBufferReleased also waits the presentation feedback,
- * while IsBufferReleased doesn't. DestroyD3DWindowBuffer 
unfortunately
- * checks it to release immediately all data, else the release
- * is postponed for This->present release. To avoid leaks (we 
may handle
- * a lot of resize), call WaitBufferReleased. */
-ID3DPresent_WaitBufferReleased(This->present, 
This->present_handles[0]);
-ID3DPresent_DestroyD3DWindowBuffer(This->present, 
This->present_handles[0]);
+D3DWindowBuffer_release(This, This->present_handles[0]);
 This->present_handles[0] = new_handle;
 pipe_resource_reference(>present_buffers[0], 
new_resource);
 pipe_resource_reference(_resource, NULL);
diff --git a/src/gallium/state_trackers/nine/swapchain9.h 
b/src/gallium/state_trackers/nine/swapchain9.h

Mesa (master): st/nine: Increase the limit of cached ff shaders

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: c6b37e5412f1bdc0bf71a22e3917313278441e2b
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=c6b37e5412f1bdc0bf71a22e3917313278441e2b

Author: Axel Davy 
Date:   Sat Dec  8 20:42:23 2018 +0100

st/nine: Increase the limit of cached ff shaders

100 is too small for some games, which triggers recompilations
every frame. Increase to 1024.

Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 

---

 src/gallium/state_trackers/nine/nine_ff.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/gallium/state_trackers/nine/nine_ff.c 
b/src/gallium/state_trackers/nine/nine_ff.c
index 261be276ad..cb77d6915b 100644
--- a/src/gallium/state_trackers/nine/nine_ff.c
+++ b/src/gallium/state_trackers/nine/nine_ff.c
@@ -2138,7 +2138,7 @@ nine_ff_prune_vs(struct NineDevice9 *device)
 {
 struct nine_context *context = >context;
 
-if (device->ff.num_vs > 100) {
+if (device->ff.num_vs > 1024) {
 /* could destroy the bound one here, so unbind */
 context->pipe->bind_vs_state(context->pipe, NULL);
 util_hash_table_foreach(device->ff.ht_vs, nine_ff_ht_delete_cb, NULL);
@@ -2152,7 +2152,7 @@ nine_ff_prune_ps(struct NineDevice9 *device)
 {
 struct nine_context *context = >context;
 
-if (device->ff.num_ps > 100) {
+if (device->ff.num_ps > 1024) {
 /* could destroy the bound one here, so unbind */
 context->pipe->bind_fs_state(context->pipe, NULL);
 util_hash_table_foreach(device->ff.ht_ps, nine_ff_ht_delete_cb, NULL);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/nine: Switch to presentation buffer if resize is detected

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 1cc8192ad0be52220043d40f2c7ead149d479809
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=1cc8192ad0be52220043d40f2c7ead149d479809

Author: Axel Davy 
Date:   Sun Sep 16 18:06:56 2018 +0200

st/nine: Switch to presentation buffer if resize is detected

This enables to match the window size
on resize on all cases, as it only works
currently with presentation buffers.

Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 

---

 src/gallium/state_trackers/nine/swapchain9.c | 37 +++-
 1 file changed, 36 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/swapchain9.c 
b/src/gallium/state_trackers/nine/swapchain9.c
index 138e8816a0..6c22be24c7 100644
--- a/src/gallium/state_trackers/nine/swapchain9.c
+++ b/src/gallium/state_trackers/nine/swapchain9.c
@@ -715,7 +715,7 @@ present( struct NineSwapChain9 *This,
 struct pipe_fence_handle *fence;
 HRESULT hr;
 struct pipe_blit_info blit;
-int target_width, target_height, target_depth;
+int target_width, target_height, target_depth, i;
 
 DBG("present: This=%p pSourceRect=%p pDestRect=%p "
 "pDirtyRegion=%p hDestWindowOverride=%p"
@@ -753,6 +753,41 @@ present( struct NineSwapChain9 *This,
 ID3DPresent_GetWindowInfo(This->present, hDestWindowOverride, 
_width, _height, _depth);
 (void)target_depth;
 
+/* Switch to using presentation buffers on window resize.
+ * Note: Most apps should resize the d3d back buffers when
+ * a window resize is detected, which will result in a call to
+ * NineSwapChain9_Resize. Thus everything will get released,
+ * and it will switch back to not using separate presentation
+ * buffers. */
+if (!This->present_buffers[0] &&
+(target_width != resource->width0 || target_height != 
resource->height0)) {
+BOOL failure = false;
+struct pipe_resource *new_resource[This->num_back_buffers];
+D3DWindowBuffer *new_handles[This->num_back_buffers];
+for (i = 0; i < This->num_back_buffers; i++) {
+/* Note: if (!new_handles[i]), new_resource[i]
+ * gets released and contains NULL */
+create_present_buffer(This, target_width, target_height, 
_resource[i], _handles[i]);
+if (!new_handles[i])
+failure = true;
+}
+if (failure) {
+for (i = 0; i < This->num_back_buffers; i++) {
+if (new_resource[i])
+pipe_resource_reference(_resource[i], NULL);
+if (new_handles[i])
+D3DWindowBuffer_release(This, new_handles[i]);
+}
+} else {
+for (i = 0; i < This->num_back_buffers; i++) {
+D3DWindowBuffer_release(This, This->present_handles[i]);
+This->present_handles[i] = new_handles[i];
+pipe_resource_reference(>present_buffers[i], 
new_resource[i]);
+pipe_resource_reference(_resource[i], NULL);
+}
+}
+}
+
 pipe = NineDevice9_GetPipe(This->base.device);
 
 if (This->present_buffers[0]) {

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): st/nine: Add src reference to nine_context_range_upload

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 104681c5d528a823a3fdc3f7d9c6f8133c27201c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=104681c5d528a823a3fdc3f7d9c6f8133c27201c

Author: Axel Davy 
Date:   Mon Dec  3 21:24:54 2018 +0100

st/nine: Add src reference to nine_context_range_upload

Just like nine_context_box_upload, nine_context_range_upload
should reference the src, which holds the ram source buffer.

Fixes: https://github.com/iXit/Mesa-3D/issues/327
Signed-off-by: Axel Davy 
Tested-by: Dieter Nützel 
Cc: mesa-sta...@lists.freedesktop.org

---

 src/gallium/state_trackers/nine/buffer9.h| 4 +++-
 src/gallium/state_trackers/nine/nine_state.c | 4 
 src/gallium/state_trackers/nine/nine_state.h | 1 +
 3 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/src/gallium/state_trackers/nine/buffer9.h 
b/src/gallium/state_trackers/nine/buffer9.h
index b04a0a721b..1803d8d640 100644
--- a/src/gallium/state_trackers/nine/buffer9.h
+++ b/src/gallium/state_trackers/nine/buffer9.h
@@ -104,7 +104,9 @@ NineBuffer9_Upload( struct NineBuffer9 *This )
 struct NineDevice9 *device = This->base.base.device;
 
 assert(This->base.pool == D3DPOOL_MANAGED && This->managed.dirty);
-nine_context_range_upload(device, >managed.pending_upload, 
This->base.resource,
+nine_context_range_upload(device, >managed.pending_upload,
+  (struct NineUnknown *)This,
+  This->base.resource,
   This->managed.dirty_box.x,
   This->managed.dirty_box.width,
   (char *)This->managed.data + 
This->managed.dirty_box.x);
diff --git a/src/gallium/state_trackers/nine/nine_state.c 
b/src/gallium/state_trackers/nine/nine_state.c
index 4872e24f43..02673c1f6e 100644
--- a/src/gallium/state_trackers/nine/nine_state.c
+++ b/src/gallium/state_trackers/nine/nine_state.c
@@ -2423,6 +2423,7 @@ CSMT_ITEM_NO_WAIT(nine_context_gen_mipmap,
 }
 
 CSMT_ITEM_NO_WAIT_WITH_COUNTER(nine_context_range_upload,
+   ARG_BIND_REF(struct NineUnknown, src_ref),
ARG_BIND_RES(struct pipe_resource, res),
ARG_VAL(unsigned, offset),
ARG_VAL(unsigned, size),
@@ -2430,6 +2431,9 @@ CSMT_ITEM_NO_WAIT_WITH_COUNTER(nine_context_range_upload,
 {
 struct nine_context *context = >context;
 
+/* Binding src_ref avoids release before upload */
+(void)src_ref;
+
 context->pipe->buffer_subdata(context->pipe, res, 0, offset, size, data);
 }
 
diff --git a/src/gallium/state_trackers/nine/nine_state.h 
b/src/gallium/state_trackers/nine/nine_state.h
index 8de9f84a25..55960007bf 100644
--- a/src/gallium/state_trackers/nine/nine_state.h
+++ b/src/gallium/state_trackers/nine/nine_state.h
@@ -560,6 +560,7 @@ nine_context_gen_mipmap(struct NineDevice9 *device,
 void
 nine_context_range_upload(struct NineDevice9 *device,
   unsigned *counter,
+  struct NineUnknown *src_ref,
   struct pipe_resource *res,
   unsigned offset,
   unsigned size,

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno/a6xx: fix 3d texture layout

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 51a44c3aac7642a4b26dcfb3a80d3dd87892aa6f
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=51a44c3aac7642a4b26dcfb3a80d3dd87892aa6f

Author: Rob Clark 
Date:   Tue Dec 18 10:34:23 2018 -0500

freedreno/a6xx: fix 3d texture layout

Maybe not 100% perfect, but seems to be a pretty good approximation of
that.

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/a6xx/fd6_resource.c  | 14 +-
 src/gallium/drivers/freedreno/a6xx/fd6_texture.c   |  2 +-
 src/gallium/drivers/freedreno/freedreno_resource.h |  2 +-
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
index 4f5ab90266..fb24d230c4 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
@@ -73,7 +73,19 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
pitchalign = tile_alignment[rsc->cpp].pitchalign;
aligned_height = align(aligned_height, heightalign);
} else {
-   pitchalign = 64;
+   if (prsc->target == PIPE_TEXTURE_3D) {
+   unsigned a;
+   if (width >= 64) {
+   a = util_next_power_of_two(MAX2(width, 
height));
+   } else {
+   a = 16;
+   }
+
+   pitchalign = align(a, 64);
+   aligned_height = align(aligned_height, a);
+   } else {
+   pitchalign = 64;
+   }
 
/* The blits used for mem<->gmem work at a granularity 
of
 * 32x32, which can cause faults due to over-fetch on 
the
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_texture.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_texture.c
index 373a7937e4..b9121523b7 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_texture.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_texture.c
@@ -325,12 +325,12 @@ fd6_sampler_view_create(struct pipe_context *pctx, struct 
pipe_resource *prsc,
break;
case PIPE_TEXTURE_3D:
so->texconst3 =
+   
A6XX_TEX_CONST_3_MIN_LAYERSZ(rsc->slices[prsc->last_level].size0) |
A6XX_TEX_CONST_3_ARRAY_PITCH(rsc->slices[lvl].size0);
so->texconst5 =
A6XX_TEX_CONST_5_DEPTH(u_minify(prsc->depth0, lvl));
break;
default:
-   so->texconst3 = 0x;
break;
}
 
diff --git a/src/gallium/drivers/freedreno/freedreno_resource.h 
b/src/gallium/drivers/freedreno/freedreno_resource.h
index 09abb512d7..8370824485 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.h
+++ b/src/gallium/drivers/freedreno/freedreno_resource.h
@@ -41,7 +41,7 @@
  * programmed with the start address of each mipmap level, and hw
  * derives the layer offset within the level.
  *
- * Texture Layout on a4xx:
+ * Texture Layout on a4xx+:
  *
  * For cubemap and 2d array, each layer contains all of it's mipmap
  * levels (layer_first layout).

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno/a6xx: simplify special case for 3d layout

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 2b497fc507af7c048efb52e38e800396bce67fca
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=2b497fc507af7c048efb52e38e800396bce67fca

Author: Rob Clark 
Date:   Tue Dec 18 10:28:57 2018 -0500

freedreno/a6xx: simplify special case for 3d layout

This logic can be re-written as the two cases for 3d (ie. before/after
the miplevel sizes start reducing) vs everything else.  I think it is
easier to read this way.

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/a6xx/fd6_resource.c | 19 ++-
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
index 6f1b745047..2b695e6969 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
@@ -42,7 +42,7 @@ static const struct {
 };
 
 /* NOTE: good way to test this is:  (for example)
- *  piglit/bin/texelFetch fs sampler2D 100x100x1-100x300x1
+ *  piglit/bin/texelFetch fs sampler3D 100x100x8
  */
 static uint32_t
 setup_slices(struct fd_resource *rsc, uint32_t alignment, enum pipe_format 
format)
@@ -96,19 +96,20 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
blocks = util_format_get_nblocks(format, slice->pitch, 
aligned_height);
 
/* 1d array and 2d array textures must all have the same layer 
size
-* for each miplevel on a3xx. 3d textures can have different 
layer
+* for each miplevel on a6xx. 3d textures can have different 
layer
 * sizes for high levels, but the hw auto-sizer is buggy (or at 
least
 * different than what this code does), so as soon as the layer 
size
 * range gets into range, we stop reducing it.
 */
-   if (prsc->target == PIPE_TEXTURE_3D && (
-   level == 1 ||
-   (level > 1 && rsc->slices[level - 
1].size0 > 0xf000)))
-   slice->size0 = align(blocks * rsc->cpp, alignment);
-   else if (level == 0 || rsc->layer_first || alignment == 1)
+   if (prsc->target == PIPE_TEXTURE_3D) {
+   if (level <= 1 || (rsc->slices[level - 1].size0 > 
0xf000)) {
+   slice->size0 = align(blocks * rsc->cpp, 
alignment);
+   } else {
+   slice->size0 = rsc->slices[level - 1].size0;
+   }
+   } else {
slice->size0 = align(blocks * rsc->cpp, alignment);
-   else
-   slice->size0 = rsc->slices[level - 1].size0;
+   }
 
 #if 0
debug_printf("%s: %ux%ux%u@%u: %2u: stride=%4u, size=%7u, 
aligned_height=%3u\n",

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno/a6xx: improve setup_slices() debug msgs

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: be9ec158d7a16890d98c773dcb46ba1622833f6e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=be9ec158d7a16890d98c773dcb46ba1622833f6e

Author: Rob Clark 
Date:   Tue Dec 18 10:33:19 2018 -0500

freedreno/a6xx: improve setup_slices() debug msgs

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/a6xx/fd6_resource.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c 
b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
index 2b695e6969..4f5ab90266 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_resource.c
@@ -111,17 +111,16 @@ setup_slices(struct fd_resource *rsc, uint32_t alignment, 
enum pipe_format forma
slice->size0 = align(blocks * rsc->cpp, alignment);
}
 
+   size += slice->size0 * depth * layers_in_level;
+
 #if 0
-   debug_printf("%s: %ux%ux%u@%u: %2u: stride=%4u, size=%7u, 
aligned_height=%3u\n",
+   debug_printf("%s: %ux%ux%u@%u:\t%2u: stride=%4u, size=%6u,%7u, 
aligned_height=%3u, blocks=%u\n",
util_format_name(prsc->format),
-   prsc->width0, prsc->height0, prsc->depth0, 
rsc->cpp,
+   width, height, depth, rsc->cpp,
level, slice->pitch * rsc->cpp,
-   slice->size0 * depth * layers_in_level,
-   aligned_height);
+   slice->size0, size, aligned_height, blocks);
 #endif
 
-   size += slice->size0 * depth * layers_in_level;
-
width = u_minify(width, 1);
height = u_minify(height, 1);
depth = u_minify(depth, 1);

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno/ir3: don't treat all inputs/outputs as vec4

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 6667dde098c4d9f30720024e76e35963eec2c511
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=6667dde098c4d9f30720024e76e35963eec2c511

Author: Rob Clark 
Date:   Wed Dec  5 15:07:51 2018 -0500

freedreno/ir3: don't treat all inputs/outputs as vec4

This was a hold-over from the early TGSI days, and mostly not needed
with NIR.  This avoids burning an entire 4 consecutive scalar regs
for vec3 outputs, for example.  Which fixes a few places that we were
doing worse that we should on register usage.

Signed-off-by: Rob Clark 

---

 src/freedreno/ir3/ir3_compiler_nir.c | 50 ++--
 src/freedreno/ir3/ir3_ra.c   |  2 ++
 2 files changed, 38 insertions(+), 14 deletions(-)

diff --git a/src/freedreno/ir3/ir3_compiler_nir.c 
b/src/freedreno/ir3/ir3_compiler_nir.c
index 936c3277ff..167d6ae783 100644
--- a/src/freedreno/ir3/ir3_compiler_nir.c
+++ b/src/freedreno/ir3/ir3_compiler_nir.c
@@ -2649,11 +2649,9 @@ setup_input(struct ir3_context *ctx, nir_variable *in)
struct ir3_shader_variant *so = ctx->so;
unsigned ncomp = glsl_get_components(in->type);
unsigned n = in->data.driver_location;
+   unsigned frac = in->data.location_frac;
unsigned slot = in->data.location;
 
-   /* let's pretend things other than vec4 don't exist: */
-   ncomp = MAX2(ncomp, 4);
-
/* skip unread inputs, we could end up with (for example), unsplit
 * matrix/etc inputs in the case they are not read, so just silently
 * skip these.
@@ -2661,17 +2659,15 @@ setup_input(struct ir3_context *ctx, nir_variable *in)
if (ncomp > 4)
return;
 
-   compile_assert(ctx, ncomp == 4);
-
so->inputs[n].slot = slot;
-   so->inputs[n].compmask = (1 << ncomp) - 1;
+   so->inputs[n].compmask = (1 << (ncomp + frac)) - 1;
so->inputs_count = MAX2(so->inputs_count, n + 1);
so->inputs[n].interpolate = in->data.interpolation;
 
if (ctx->so->type == MESA_SHADER_FRAGMENT) {
for (int i = 0; i < ncomp; i++) {
struct ir3_instruction *instr = NULL;
-   unsigned idx = (n * 4) + i;
+   unsigned idx = (n * 4) + i + frac;
 
if (slot == VARYING_SLOT_POS) {
so->inputs[n].bary = false;
@@ -2726,7 +2722,7 @@ setup_input(struct ir3_context *ctx, nir_variable *in)
}
} else if (ctx->so->type == MESA_SHADER_VERTEX) {
for (int i = 0; i < ncomp; i++) {
-   unsigned idx = (n * 4) + i;
+   unsigned idx = (n * 4) + i + frac;
compile_assert(ctx, idx < ctx->ir->ninputs);
ctx->ir->inputs[idx] = create_input(ctx, idx);
}
@@ -2745,13 +2741,10 @@ setup_output(struct ir3_context *ctx, nir_variable *out)
struct ir3_shader_variant *so = ctx->so;
unsigned ncomp = glsl_get_components(out->type);
unsigned n = out->data.driver_location;
+   unsigned frac = out->data.location_frac;
unsigned slot = out->data.location;
unsigned comp = 0;
 
-   /* let's pretend things other than vec4 don't exist: */
-   ncomp = MAX2(ncomp, 4);
-   compile_assert(ctx, ncomp == 4);
-
if (ctx->so->type == MESA_SHADER_FRAGMENT) {
switch (slot) {
case FRAG_RESULT_DEPTH:
@@ -2803,10 +2796,25 @@ setup_output(struct ir3_context *ctx, nir_variable *out)
so->outputs_count = MAX2(so->outputs_count, n + 1);
 
for (int i = 0; i < ncomp; i++) {
-   unsigned idx = (n * 4) + i;
+   unsigned idx = (n * 4) + i + frac;
compile_assert(ctx, idx < ctx->ir->noutputs);
ctx->ir->outputs[idx] = create_immed(ctx->block, fui(0.0));
}
+
+   /* if varying packing doesn't happen, we could end up in a situation
+* with "holes" in the output, and since the per-generation code that
+* sets up varying linkage registers doesn't expect to have more than
+* one varying per vec4 slot, pad the holes.
+*
+* Note that this should probably generate a performance warning of
+* some sort.
+*/
+   for (int i = 0; i < frac; i++) {
+   unsigned idx = (n * 4) + i;
+   if (!ctx->ir->outputs[idx]) {
+   ctx->ir->outputs[idx] = create_immed(ctx->block, 
fui(0.0));
+   }
+   }
 }
 
 static int
@@ -3126,7 +3134,21 @@ ir3_compile_shader_nir(struct ir3_compiler *compiler,
 
/* fixup input/outputs: */
for (i = 0; i < so->outputs_count; i++) {
-   so->outputs[i].regid = ir->outputs[i*4]->regs[0]->num;
+   /* sometimes we get outputs that don't write the .x coord, like:
+*
+*   decl_var shader_out INTERP_MODE_NONE float Color 

Mesa (master): freedreno: combine fd_resource_layer_offset()/fd_resource_offset()

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: d71a50f83146864df097566c413454366a61bb3c
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=d71a50f83146864df097566c413454366a61bb3c

Author: Rob Clark 
Date:   Tue Dec 18 10:27:10 2018 -0500

freedreno: combine fd_resource_layer_offset()/fd_resource_offset()

We really only need this logic in one place.

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/freedreno_resource.c | 15 ++-
 1 file changed, 2 insertions(+), 13 deletions(-)

diff --git a/src/gallium/drivers/freedreno/freedreno_resource.c 
b/src/gallium/drivers/freedreno/freedreno_resource.c
index 06e68af3a8..482ce94959 100644
--- a/src/gallium/drivers/freedreno/freedreno_resource.c
+++ b/src/gallium/drivers/freedreno/freedreno_resource.c
@@ -347,17 +347,6 @@ fd_blit_to_staging(struct fd_context *ctx, struct 
fd_transfer *trans)
do_blit(ctx, , false);
 }
 
-static unsigned
-fd_resource_layer_offset(struct fd_resource *rsc,
-struct fd_resource_slice 
*slice,
-unsigned layer)
-{
-   if (rsc->layer_first)
-   return layer * rsc->layer_size;
-   else
-   return layer * slice->size0;
-}
-
 static void fd_resource_transfer_flush_region(struct pipe_context *pctx,
struct pipe_transfer *ptrans,
const struct pipe_box *box)
@@ -626,10 +615,10 @@ fd_resource_transfer_map(struct pipe_context *pctx,
}
 
buf = fd_bo_map(rsc->bo);
-   offset = slice->offset +
+   offset =
box->y / util_format_get_blockheight(format) * ptrans->stride +
box->x / util_format_get_blockwidth(format) * rsc->cpp +
-   fd_resource_layer_offset(rsc, slice, box->z);
+   fd_resource_offset(rsc, level, box->z);
 
if (usage & PIPE_TRANSFER_WRITE)
rsc->valid = true;

___
mesa-commit mailing list
mesa-commit@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-commit


Mesa (master): freedreno: update generated headers

2018-12-22 Thread GitLab Mirror
Module: Mesa
Branch: master
Commit: 8f60f1381dd5975486af0390fdc397959126fd3e
URL:
http://cgit.freedesktop.org/mesa/mesa/commit/?id=8f60f1381dd5975486af0390fdc397959126fd3e

Author: Rob Clark 
Date:   Fri Dec 21 13:22:37 2018 -0500

freedreno: update generated headers

Signed-off-by: Rob Clark 

---

 src/gallium/drivers/freedreno/a2xx/a2xx.xml.h |  6 +++---
 src/gallium/drivers/freedreno/a3xx/a3xx.xml.h |  6 +++---
 src/gallium/drivers/freedreno/a4xx/a4xx.xml.h |  6 +++---
 src/gallium/drivers/freedreno/a5xx/a5xx.xml.h |  6 +++---
 src/gallium/drivers/freedreno/a6xx/a6xx.xml.h | 13 ++---
 src/gallium/drivers/freedreno/adreno_common.xml.h |  6 +++---
 src/gallium/drivers/freedreno/adreno_pm4.xml.h|  6 +++---
 7 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h 
b/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h
index 38bf83238b..60dbce1d94 100644
--- a/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h
+++ b/src/gallium/drivers/freedreno/a2xx/a2xx.xml.h
@@ -12,11 +12,11 @@ The rules-ng-ng source files this header was generated from 
are:
 - /home/robclark/src/envytools/rnndb/freedreno_copyright.xml  (   1572 bytes, 
from 2018-07-03 19:37:13)
 - /home/robclark/src/envytools/rnndb/adreno/a2xx.xml  (  42463 bytes, 
from 2018-11-19 13:44:03)
 - /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml (  14239 bytes, 
from 2018-12-05 15:25:53)
-- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml(  43052 bytes, 
from 2018-12-11 15:59:02)
+- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml(  43052 bytes, 
from 2018-12-21 18:21:34)
 - /home/robclark/src/envytools/rnndb/adreno/a3xx.xml  (  83840 bytes, 
from 2018-07-03 19:37:13)
 - /home/robclark/src/envytools/rnndb/adreno/a4xx.xml  ( 112086 bytes, 
from 2018-07-03 19:37:13)
-- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml  ( 147240 bytes, 
from 2018-12-11 15:59:02)
-- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml  ( 141834 bytes, 
from 2018-12-11 15:59:02)
+- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml  ( 147240 bytes, 
from 2018-12-21 18:21:34)
+- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml  ( 141895 bytes, 
from 2018-12-21 18:21:34)
 - /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml  (  10431 bytes, 
from 2018-09-14 13:03:07)
 - /home/robclark/src/envytools/rnndb/adreno/ocmem.xml (   1773 bytes, 
from 2018-07-03 19:37:13)
 
diff --git a/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h 
b/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h
index 16f4983512..03be4aab0b 100644
--- a/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h
+++ b/src/gallium/drivers/freedreno/a3xx/a3xx.xml.h
@@ -12,11 +12,11 @@ The rules-ng-ng source files this header was generated from 
are:
 - /home/robclark/src/envytools/rnndb/freedreno_copyright.xml  (   1572 bytes, 
from 2018-07-03 19:37:13)
 - /home/robclark/src/envytools/rnndb/adreno/a2xx.xml  (  42463 bytes, 
from 2018-11-19 13:44:03)
 - /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml (  14239 bytes, 
from 2018-12-05 15:25:53)
-- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml(  43052 bytes, 
from 2018-12-11 15:59:02)
+- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml(  43052 bytes, 
from 2018-12-21 18:21:34)
 - /home/robclark/src/envytools/rnndb/adreno/a3xx.xml  (  83840 bytes, 
from 2018-07-03 19:37:13)
 - /home/robclark/src/envytools/rnndb/adreno/a4xx.xml  ( 112086 bytes, 
from 2018-07-03 19:37:13)
-- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml  ( 147240 bytes, 
from 2018-12-11 15:59:02)
-- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml  ( 141834 bytes, 
from 2018-12-11 15:59:02)
+- /home/robclark/src/envytools/rnndb/adreno/a5xx.xml  ( 147240 bytes, 
from 2018-12-21 18:21:34)
+- /home/robclark/src/envytools/rnndb/adreno/a6xx.xml  ( 141895 bytes, 
from 2018-12-21 18:21:34)
 - /home/robclark/src/envytools/rnndb/adreno/a6xx_gmu.xml  (  10431 bytes, 
from 2018-09-14 13:03:07)
 - /home/robclark/src/envytools/rnndb/adreno/ocmem.xml (   1773 bytes, 
from 2018-07-03 19:37:13)
 
diff --git a/src/gallium/drivers/freedreno/a4xx/a4xx.xml.h 
b/src/gallium/drivers/freedreno/a4xx/a4xx.xml.h
index d850ed5d7b..3dfc03cd2d 100644
--- a/src/gallium/drivers/freedreno/a4xx/a4xx.xml.h
+++ b/src/gallium/drivers/freedreno/a4xx/a4xx.xml.h
@@ -12,11 +12,11 @@ The rules-ng-ng source files this header was generated from 
are:
 - /home/robclark/src/envytools/rnndb/freedreno_copyright.xml  (   1572 bytes, 
from 2018-07-03 19:37:13)
 - /home/robclark/src/envytools/rnndb/adreno/a2xx.xml  (  42463 bytes, 
from 2018-11-19 13:44:03)
 - /home/robclark/src/envytools/rnndb/adreno/adreno_common.xml (  14239 bytes, 
from 2018-12-05 15:25:53)
-- /home/robclark/src/envytools/rnndb/adreno/adreno_pm4.xml(  43052 bytes, 
from 2018-12-11 15:59:02)
+-