From 7b80f4587d01740c8b583d72b38f495a93a0acbd Mon Sep 17 00:00:00 2001 From: Kenneth Graunke Date: Thu, 11 Jan 2018 22:18:54 -0800 Subject: [PATCH] iris: sampler states --- src/gallium/drivers/iris/iris_context.h | 2 ++ src/gallium/drivers/iris/iris_pipe.h | 43 +++++++++++++++++++++++++ src/gallium/drivers/iris/iris_screen.c | 15 +-------- src/gallium/drivers/iris/iris_state.c | 25 +++++++++----- 4 files changed, 63 insertions(+), 22 deletions(-) create mode 100644 src/gallium/drivers/iris/iris_pipe.h diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index 7e8d358e39d..d4eaab75f4a 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -78,6 +78,8 @@ struct iris_context { struct pipe_scissor_state scissors[IRIS_MAX_VIEWPORTS]; struct pipe_stencil_ref stencil_ref; struct pipe_framebuffer_state framebuffer; + + struct iris_sampler_state *samplers[MESA_SHADER_STAGES][IRIS_MAX_TEXTURE_SAMPLERS]; } state; }; diff --git a/src/gallium/drivers/iris/iris_pipe.h b/src/gallium/drivers/iris/iris_pipe.h new file mode 100644 index 00000000000..06ff938372e --- /dev/null +++ b/src/gallium/drivers/iris/iris_pipe.h @@ -0,0 +1,43 @@ +/* + * Copyright © 2017 Intel Corporation + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * on the rights to use, copy, modify, merge, publish, distribute, sub + * license, and/or sell copies of the Software, and to permit persons to whom + * the Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL + * THE AUTHOR(S) AND/OR THEIR SUPPLIERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR + * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE + * USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +#ifndef IRIS_PIPE_H +#define IRIS_PIPE_H + +#include "pipe/p_defines.h" +#include "compiler/shader_enums.h" + +static gl_shader_stage +stage_from_pipe(enum pipe_shader_type pstage) +{ + static const gl_shader_stage stages[PIPE_SHADER_TYPES] = { + [PIPE_SHADER_VERTEX] = MESA_SHADER_VERTEX, + [PIPE_SHADER_TESS_CTRL] = MESA_SHADER_TESS_CTRL, + [PIPE_SHADER_TESS_EVAL] = MESA_SHADER_TESS_EVAL, + [PIPE_SHADER_GEOMETRY] = MESA_SHADER_GEOMETRY, + [PIPE_SHADER_FRAGMENT] = MESA_SHADER_FRAGMENT, + [PIPE_SHADER_COMPUTE] = MESA_SHADER_COMPUTE, + }; + return stages[pstage]; +} + +#endif diff --git a/src/gallium/drivers/iris/iris_screen.c b/src/gallium/drivers/iris/iris_screen.c index 9d679848364..d1b4d443363 100644 --- a/src/gallium/drivers/iris/iris_screen.c +++ b/src/gallium/drivers/iris/iris_screen.c @@ -33,6 +33,7 @@ #include "util/ralloc.h" #include "drm-uapi/i915_drm.h" #include "iris_context.h" +#include "iris_pipe.h" #include "iris_resource.h" #include "iris_screen.h" #include "intel/compiler/brw_compiler.h" @@ -422,20 +423,6 @@ iris_query_memory_info(struct pipe_screen *pscreen, { } -static gl_shader_stage -stage_from_pipe(enum pipe_shader_type pstage) -{ - static const gl_shader_stage stages[PIPE_SHADER_TYPES] = { - [PIPE_SHADER_VERTEX] = MESA_SHADER_VERTEX, - [PIPE_SHADER_TESS_CTRL] = MESA_SHADER_TESS_CTRL, - [PIPE_SHADER_TESS_EVAL] = MESA_SHADER_TESS_EVAL, - [PIPE_SHADER_GEOMETRY] = MESA_SHADER_GEOMETRY, - [PIPE_SHADER_FRAGMENT] = MESA_SHADER_FRAGMENT, - [PIPE_SHADER_COMPUTE] = MESA_SHADER_COMPUTE, - }; - return stages[pstage]; -} - static const void * iris_get_compiler_options(struct pipe_screen *pscreen, enum pipe_shader_ir ir, diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 69bdaafc796..5da3e791a53 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -42,6 +42,7 @@ #include "intel/common/gen_sample_positions.h" #include "iris_batch.h" #include "iris_context.h" +#include "iris_pipe.h" #include "iris_resource.h" #define __gen_address_type unsigned @@ -710,6 +711,22 @@ iris_create_sampler_state(struct pipe_context *pctx, return cso; } +static void +iris_bind_sampler_states(struct pipe_context *ctx, + enum pipe_shader_type p_stage, + unsigned start, unsigned count, + void **states) +{ + struct iris_context *ice = (struct iris_context *) ctx; + gl_shader_stage stage = stage_from_pipe(p_stage); + + assert(start + count <= IRIS_MAX_TEXTURE_SAMPLERS); + + for (int i = 0; i < count; i++) { + ice->state.samplers[stage][start + i] = states[i]; + } +} + struct iris_sampler_view { struct pipe_sampler_view pipe; struct isl_view view; @@ -840,14 +857,6 @@ iris_set_sampler_views(struct pipe_context *ctx, { } -static void -iris_bind_sampler_states(struct pipe_context *ctx, - enum pipe_shader_type shader, - unsigned start, unsigned count, - void **states) -{ -} - static void iris_set_clip_state(struct pipe_context *ctx, const struct pipe_clip_state *state) -- 2.30.2