Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-20 Thread Marek Olšák
On Tue, Oct 20, 2015 at 9:42 AM, Michel Dänzer  wrote:
> On 17.10.2015 22:09, Marek Olšák wrote:
>> From: Marek Olšák 
>>
>> All tests pass. We don't need to do much - just set CUBE if the view
>> target is CUBE or CUBE_ARRAY, otherwise set the resource target.
>>
>> The reason this is so simple can be that texture instructions
>> have a greater effect on the target than the sampler view.
>
> I think you meant to swap "is" and "can be": "The reason this can be so
> simple is that texture instructions have a greater effect on the target
> than the sampler view."
>
> BTW, is that statement really accurate? Isn't it rather because the
> format and mip level clamping was already handled via the sampler view
> before?

I didn't consider the format and clamping to be anything new here.

The only thing that is new with ARB_texture_view is that the texture
target can be overriden by sampler views. The thing is the hardware
doesn't care much :) setting the correct target in the shader already
had the desired effect for all types except Cube.

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


Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-20 Thread Michel Dänzer
On 17.10.2015 22:09, Marek Olšák wrote:
> From: Marek Olšák 
> 
> All tests pass. We don't need to do much - just set CUBE if the view
> target is CUBE or CUBE_ARRAY, otherwise set the resource target.
> 
> The reason this is so simple can be that texture instructions
> have a greater effect on the target than the sampler view.

I think you meant to swap "is" and "can be": "The reason this can be so
simple is that texture instructions have a greater effect on the target
than the sampler view."

BTW, is that statement really accurate? Isn't it rather because the
format and mip level clamping was already handled via the sampler view
before?


Anyway, if you fix at least the switcheroo above,

Reviewed-by: Michel Dänzer 


-- 
Earthling Michel Dänzer   |   http://www.amd.com
Libre software enthusiast | Mesa and X developer
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-20 Thread Marek Olšák
On Tue, Oct 20, 2015 at 5:26 PM, Ilia Mirkin  wrote:
> On Sat, Oct 17, 2015 at 9:09 AM, Marek Olšák  wrote:
>> +   /* This is not needed if state trackers set last_layer correctly. */
>> +   if (state->target == PIPE_TEXTURE_1D ||
>> +   state->target == PIPE_TEXTURE_2D ||
>> +   state->target == PIPE_TEXTURE_RECT ||
>> +   state->target == PIPE_TEXTURE_CUBE)
>> +   last_layer = state->u.tex.first_layer;
>> +
>
> Did you observe state trackers messing this one up, or just being
> defensive? Also for cube, normally last layer would be first_layer +
> 5...

I'm just being defensive.

The hardware does the right thing if target == CUBE. first_layer ==
last_layer has no effect on cubemaps.

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


Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-20 Thread Ilia Mirkin
On Sat, Oct 17, 2015 at 9:09 AM, Marek Olšák  wrote:
> +   /* This is not needed if state trackers set last_layer correctly. */
> +   if (state->target == PIPE_TEXTURE_1D ||
> +   state->target == PIPE_TEXTURE_2D ||
> +   state->target == PIPE_TEXTURE_RECT ||
> +   state->target == PIPE_TEXTURE_CUBE)
> +   last_layer = state->u.tex.first_layer;
> +

Did you observe state trackers messing this one up, or just being
defensive? Also for cube, normally last layer would be first_layer +
5...

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


Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-17 Thread Laurent Carlier
Le Saturday 17 October 2015, 15:09:13 Marek Olšák a écrit :
> From: Marek Olšák 
> 
> All tests pass. We don't need to do much - just set CUBE if the view
> target is CUBE or CUBE_ARRAY, otherwise set the resource target.
> 
> The reason this is so simple can be that texture instructions
> have a greater effect on the target than the sampler view.
> 
> Thanks Glenn for the piglit test.

gl3.txt update is missing

-- 
Laurent Carlier
http://www.archlinux.org

signature.asc
Description: This is a digitally signed message part.
___
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev


Re: [Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-17 Thread Marek Olšák
On Sat, Oct 17, 2015 at 6:45 PM, Laurent Carlier  wrote:
> Le Saturday 17 October 2015, 15:09:13 Marek Olšák a écrit :
>> From: Marek Olšák 
>>
>> All tests pass. We don't need to do much - just set CUBE if the view
>> target is CUBE or CUBE_ARRAY, otherwise set the resource target.
>>
>> The reason this is so simple can be that texture instructions
>> have a greater effect on the target than the sampler view.
>>
>> Thanks Glenn for the piglit test.
>
> gl3.txt update is missing

Yes, I'll update it before pushing.

Thanks.

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


[Mesa-dev] [PATCH] radeonsi: add support for ARB_texture_view

2015-10-17 Thread Marek Olšák
From: Marek Olšák 

All tests pass. We don't need to do much - just set CUBE if the view
target is CUBE or CUBE_ARRAY, otherwise set the resource target.

The reason this is so simple can be that texture instructions
have a greater effect on the target than the sampler view.

Thanks Glenn for the piglit test.
---
 src/gallium/drivers/radeonsi/si_pipe.c  |  2 +-
 src/gallium/drivers/radeonsi/si_state.c | 27 +--
 2 files changed, 22 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
b/src/gallium/drivers/radeonsi/si_pipe.c
index a0283b7..9faba69 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -292,6 +292,7 @@ static int si_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_TEXTURE_FLOAT_LINEAR:
case PIPE_CAP_TEXTURE_HALF_FLOAT_LINEAR:
case PIPE_CAP_DEPTH_BOUNDS_TEST:
+   case PIPE_CAP_SAMPLER_VIEW_TARGET:
case PIPE_CAP_TEXTURE_QUERY_LOD:
case PIPE_CAP_TEXTURE_GATHER_SM5:
case PIPE_CAP_TGSI_TXQS:
@@ -335,7 +336,6 @@ static int si_get_param(struct pipe_screen* pscreen, enum 
pipe_cap param)
case PIPE_CAP_USER_VERTEX_BUFFERS:
case PIPE_CAP_FAKE_SW_MSAA:
case PIPE_CAP_TEXTURE_GATHER_OFFSETS:
-   case PIPE_CAP_SAMPLER_VIEW_TARGET:
case PIPE_CAP_VERTEXID_NOBASE:
return 0;
 
diff --git a/src/gallium/drivers/radeonsi/si_state.c 
b/src/gallium/drivers/radeonsi/si_state.c
index 00d4bc1..95ac183 100644
--- a/src/gallium/drivers/radeonsi/si_state.c
+++ b/src/gallium/drivers/radeonsi/si_state.c
@@ -1533,9 +1533,14 @@ static unsigned si_tex_compare(unsigned compare)
}
 }
 
-static unsigned si_tex_dim(unsigned dim, unsigned nr_samples)
+static unsigned si_tex_dim(unsigned res_target, unsigned view_target,
+  unsigned nr_samples)
 {
-   switch (dim) {
+   if (view_target == PIPE_TEXTURE_CUBE ||
+   view_target == PIPE_TEXTURE_CUBE_ARRAY)
+   res_target = view_target;
+
+   switch (res_target) {
default:
case PIPE_TEXTURE_1D:
return V_008F1C_SQ_RSRC_IMG_1D;
@@ -2389,6 +2394,7 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
struct radeon_surf_level *surflevel;
int first_non_void;
uint64_t va;
+   unsigned last_layer = state->u.tex.last_layer;
 
if (view == NULL)
return NULL;
@@ -2594,6 +2600,13 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
} else if (texture->target == PIPE_TEXTURE_CUBE_ARRAY)
depth = texture->array_size / 6;
 
+   /* This is not needed if state trackers set last_layer correctly. */
+   if (state->target == PIPE_TEXTURE_1D ||
+   state->target == PIPE_TEXTURE_2D ||
+   state->target == PIPE_TEXTURE_RECT ||
+   state->target == PIPE_TEXTURE_CUBE)
+   last_layer = state->u.tex.first_layer;
+
va = tmp->resource.gpu_address + surflevel[base_level].offset;
 
view->state[0] = va >> 8;
@@ -2613,10 +2626,11 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
  last_level) |
  S_008F1C_TILING_INDEX(si_tile_mode_index(tmp, 
base_level, false)) |
  S_008F1C_POW2_PAD(texture->last_level > 0) |
- S_008F1C_TYPE(si_tex_dim(texture->target, 
texture->nr_samples)));
+ S_008F1C_TYPE(si_tex_dim(texture->target, 
state->target,
+  texture->nr_samples)));
view->state[4] = (S_008F20_DEPTH(depth - 1) | S_008F20_PITCH(pitch - 
1));
view->state[5] = (S_008F24_BASE_ARRAY(state->u.tex.first_layer) |
- S_008F24_LAST_ARRAY(state->u.tex.last_layer));
+ S_008F24_LAST_ARRAY(last_layer));
view->state[6] = 0;
view->state[7] = 0;
 
@@ -2651,11 +2665,12 @@ si_create_sampler_view_custom(struct pipe_context *ctx,
   S_008F1C_DST_SEL_Z(V_008F1C_SQ_SEL_X) |
   S_008F1C_DST_SEL_W(V_008F1C_SQ_SEL_X) |
   
S_008F1C_TILING_INDEX(tmp->fmask.tile_mode_index) |
-  
S_008F1C_TYPE(si_tex_dim(texture->target, 0));
+  S_008F1C_TYPE(si_tex_dim(texture->target,
+   state->target, 
0));
view->fmask_state[4] = S_008F20_DEPTH(depth - 1) |
   S_008F20_PITCH(tmp->fmask.pitch - 1);
view->fmask_state[5] = 
S_008F24_BASE_ARRAY(state->u.tex.first_layer) |
-  
S_008F24_LAST_ARRAY(state->u.tex.last_layer);
+