On Thu, Nov 8, 2012 at 11:01 PM, Marek Olšák <mar...@gmail.com> wrote: > On Tue, Nov 6, 2012 at 11:16 PM, Dave Airlie <airl...@gmail.com> wrote: >> This contains the evergreen support. >> >> Support is possible on rv670 upwards and the code in here >> should work, but it doesn't and I haven't debugged it to >> figure out why. >> >> Beyond just adding support for the cube map array sampling, >> r600 resinfo isn't conformant with the GL specification, >> which states the number of layers should be returned for >> the textureSize, so we have to track in an external >> constant buffer the layers for each sampler if we need >> them in the shader. >> >> Signed-off-by: Dave Airlie <airl...@redhat.com> >> --- >> src/gallium/drivers/r600/evergreen_state.c | 4 +- >> src/gallium/drivers/r600/r600_blit.c | 1 + >> src/gallium/drivers/r600/r600_pipe.c | 1 + >> src/gallium/drivers/r600/r600_pipe.h | 6 +- >> src/gallium/drivers/r600/r600_shader.c | 198 >> +++++++++++++++++++++++++-- >> src/gallium/drivers/r600/r600_shader.h | 1 + >> src/gallium/drivers/r600/r600_state.c | 4 +- >> src/gallium/drivers/r600/r600_state_common.c | 33 +++++ >> src/gallium/drivers/r600/r600_texture.c | 1 + >> 9 files changed, 235 insertions(+), 14 deletions(-) >> >> diff --git a/src/gallium/drivers/r600/evergreen_state.c >> b/src/gallium/drivers/r600/evergreen_state.c >> index c105e55..5f87cdb 100644 >> --- a/src/gallium/drivers/r600/evergreen_state.c >> +++ b/src/gallium/drivers/r600/evergreen_state.c >> @@ -174,6 +174,7 @@ static unsigned r600_tex_dim(unsigned dim, unsigned >> nr_samples) >> case PIPE_TEXTURE_3D: >> return V_030000_SQ_TEX_DIM_3D; >> case PIPE_TEXTURE_CUBE: >> + case PIPE_TEXTURE_CUBE_ARRAY: >> return V_030000_SQ_TEX_DIM_CUBEMAP; >> } >> } >> @@ -1073,7 +1074,8 @@ evergreen_create_sampler_view_custom(struct >> pipe_context *ctx, >> depth = texture->array_size; >> } else if (texture->target == PIPE_TEXTURE_2D_ARRAY) { >> depth = texture->array_size; >> - } >> + } else if (texture->target == PIPE_TEXTURE_CUBE_ARRAY) >> + depth = (texture->array_size + 1) / 6; > > Why "+ 1"?
pointless rounding, I think I fed a fair few values in figuring it out! will drop it. >> >> + if (rctx->ps_shader && >> rctx->ps_shader->current->shader.has_txq_cube_array_z_comp) >> + r600_setup_txq_cube_array_constants(rctx, >> PIPE_SHADER_FRAGMENT); >> + if (rctx->vs_shader && >> rctx->vs_shader->current->shader.has_txq_cube_array_z_comp) >> + r600_setup_txq_cube_array_constants(rctx, >> PIPE_SHADER_VERTEX); >> + > > I would prefer if the constant buffers were updated only if the > sampler views were updated as well, so that it's not updated in every > draw command that has a shader querying the array size. probably makes sense, I was mostly thinking that nobody would use this that often, and having it work for the sake of compliance :-), but yeah makes sense to only update in that case. > > So what does GET_TEXTURE_RESINFO return in this case? 6? 1? seems to return 0, and the DX10 opcode doesn't define a value in this case, it leaves it as undefined. Dave. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev