summaryrefslogtreecommitdiffstats
path: root/src/intel/isl/isl_surface_state.c
diff options
context:
space:
mode:
authorJason Ekstrand <[email protected]>2017-02-08 17:21:54 -0800
committerJason Ekstrand <[email protected]>2018-05-09 11:16:33 -0700
commitdad67cc24576622ef989a9bb66a5b13cc275cfae (patch)
tree0cefa044709d415b71bb360643a21f585089a42e /src/intel/isl/isl_surface_state.c
parent23d703de1fb140bb2ed4da247961d89a69f27140 (diff)
intel/isl: Add an isl_swizzle_supports_rendering helper
This helper encodes more details, specifically about Haswell, than the previous asserts in isl_surface_state.c. Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/intel/isl/isl_surface_state.c')
-rw-r--r--src/intel/isl/isl_surface_state.c37
1 files changed, 5 insertions, 32 deletions
diff --git a/src/intel/isl/isl_surface_state.c b/src/intel/isl/isl_surface_state.c
index bff9693f02d..f181c3dfb2f 100644
--- a/src/intel/isl/isl_surface_state.c
+++ b/src/intel/isl/isl_surface_state.c
@@ -470,42 +470,15 @@ isl_genX(surf_fill_state_s)(const struct isl_device *dev, void *state,
#endif
#if (GEN_GEN >= 8 || GEN_IS_HASWELL)
- if (info->view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT) {
- /* From the Sky Lake PRM Vol. 2d,
- * RENDER_SURFACE_STATE::Shader Channel Select Red
- *
- * "For Render Target, Red, Green and Blue Shader Channel Selects
- * MUST be such that only valid components can be swapped i.e. only
- * change the order of components in the pixel. Any other values for
- * these Shader Channel Select fields are not valid for Render
- * Targets. This also means that there MUST not be multiple shader
- * channels mapped to the same RT channel."
- */
- assert(info->view->swizzle.r == ISL_CHANNEL_SELECT_RED ||
- info->view->swizzle.r == ISL_CHANNEL_SELECT_GREEN ||
- info->view->swizzle.r == ISL_CHANNEL_SELECT_BLUE);
- assert(info->view->swizzle.g == ISL_CHANNEL_SELECT_RED ||
- info->view->swizzle.g == ISL_CHANNEL_SELECT_GREEN ||
- info->view->swizzle.g == ISL_CHANNEL_SELECT_BLUE);
- assert(info->view->swizzle.b == ISL_CHANNEL_SELECT_RED ||
- info->view->swizzle.b == ISL_CHANNEL_SELECT_GREEN ||
- info->view->swizzle.b == ISL_CHANNEL_SELECT_BLUE);
- assert(info->view->swizzle.r != info->view->swizzle.g);
- assert(info->view->swizzle.r != info->view->swizzle.b);
- assert(info->view->swizzle.g != info->view->swizzle.b);
-
- /* From the Sky Lake PRM Vol. 2d,
- * RENDER_SURFACE_STATE::Shader Channel Select Alpha
- *
- * "For Render Target, this field MUST be programmed to
- * value = SCS_ALPHA."
- */
- assert(info->view->swizzle.a == ISL_CHANNEL_SELECT_ALPHA);
- }
+ if (info->view->usage & ISL_SURF_USAGE_RENDER_TARGET_BIT)
+ assert(isl_swizzle_supports_rendering(dev->info, info->view->swizzle));
+
s.ShaderChannelSelectRed = (enum GENX(ShaderChannelSelect)) info->view->swizzle.r;
s.ShaderChannelSelectGreen = (enum GENX(ShaderChannelSelect)) info->view->swizzle.g;
s.ShaderChannelSelectBlue = (enum GENX(ShaderChannelSelect)) info->view->swizzle.b;
s.ShaderChannelSelectAlpha = (enum GENX(ShaderChannelSelect)) info->view->swizzle.a;
+#else
+ assert(isl_swizzle_is_identity(info->view->swizzle));
#endif
s.SurfaceBaseAddress = info->address;