diff options
-rw-r--r-- | src/mesa/Makefile.sources | 2 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.c | 53 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_cb_texture.h | 6 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_context.c | 5 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_pbo.c | 90 | ||||
-rw-r--r-- | src/mesa/state_tracker/st_pbo.h | 35 |
6 files changed, 130 insertions, 61 deletions
diff --git a/src/mesa/Makefile.sources b/src/mesa/Makefile.sources index 84db5a807fe..a49ad953c04 100644 --- a/src/mesa/Makefile.sources +++ b/src/mesa/Makefile.sources @@ -501,6 +501,8 @@ STATETRACKER_FILES = \ state_tracker/st_mesa_to_tgsi.h \ state_tracker/st_nir.h \ state_tracker/st_nir_lower_builtin.c \ + state_tracker/st_pbo.c \ + state_tracker/st_pbo.h \ state_tracker/st_program.c \ state_tracker/st_program.h \ state_tracker/st_texture.c \ diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c index 446a6d96041..048240d6708 100644 --- a/src/mesa/state_tracker/st_cb_texture.c +++ b/src/mesa/state_tracker/st_cb_texture.c @@ -690,59 +690,6 @@ st_get_blit_mask(GLenum srcFormat, GLenum dstFormat) } } -void -st_init_pbo_upload(struct st_context *st) -{ - struct pipe_context *pipe = st->pipe; - struct pipe_screen *screen = pipe->screen; - - st->pbo_upload.enabled = - screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS) && - screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT) >= 1 && - screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_INTEGERS); - if (!st->pbo_upload.enabled) - return; - - st->pbo_upload.rgba_only = - screen->get_param(screen, PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY); - - if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) { - if (screen->get_param(screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT)) { - st->pbo_upload.upload_layers = true; - } else if (screen->get_param(screen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES) >= 3) { - st->pbo_upload.upload_layers = true; - st->pbo_upload.use_gs = true; - } - } - - /* Blend state */ - memset(&st->pbo_upload.blend, 0, sizeof(struct pipe_blend_state)); - st->pbo_upload.blend.rt[0].colormask = PIPE_MASK_RGBA; - - /* Rasterizer state */ - memset(&st->pbo_upload.raster, 0, sizeof(struct pipe_rasterizer_state)); - st->pbo_upload.raster.half_pixel_center = 1; -} - -void -st_destroy_pbo_upload(struct st_context *st) -{ - if (st->pbo_upload.fs) { - cso_delete_fragment_shader(st->cso_context, st->pbo_upload.fs); - st->pbo_upload.fs = NULL; - } - - if (st->pbo_upload.gs) { - cso_delete_geometry_shader(st->cso_context, st->pbo_upload.gs); - st->pbo_upload.gs = NULL; - } - - if (st->pbo_upload.vs) { - cso_delete_vertex_shader(st->cso_context, st->pbo_upload.vs); - st->pbo_upload.vs = NULL; - } -} - /** * Converts format to a format with the same components, types * and sizes, but with the components in RGBA order. diff --git a/src/mesa/state_tracker/st_cb_texture.h b/src/mesa/state_tracker/st_cb_texture.h index 55c86c401e2..415d59ffe98 100644 --- a/src/mesa/state_tracker/st_cb_texture.h +++ b/src/mesa/state_tracker/st_cb_texture.h @@ -53,10 +53,4 @@ st_finalize_texture(struct gl_context *ctx, extern void st_init_texture_functions(struct dd_function_table *functions); -extern void -st_init_pbo_upload(struct st_context *st); - -extern void -st_destroy_pbo_upload(struct st_context *st); - #endif /* ST_CB_TEXTURE_H */ diff --git a/src/mesa/state_tracker/st_context.c b/src/mesa/state_tracker/st_context.c index 2484a06bc0e..1ee0aec7541 100644 --- a/src/mesa/state_tracker/st_context.c +++ b/src/mesa/state_tracker/st_context.c @@ -68,6 +68,7 @@ #include "st_draw.h" #include "st_extensions.h" #include "st_gen_mipmap.h" +#include "st_pbo.h" #include "st_program.h" #include "st_vdpau.h" #include "st_texture.h" @@ -162,7 +163,7 @@ st_destroy_context_priv(struct st_context *st) st_destroy_drawpix(st); st_destroy_drawtex(st); st_destroy_perfmon(st); - st_destroy_pbo_upload(st); + st_destroy_pbo_helpers(st); for (shader = 0; shader < ARRAY_SIZE(st->state.sampler_views); shader++) { for (i = 0; i < ARRAY_SIZE(st->state.sampler_views[0]); i++) { @@ -237,7 +238,7 @@ st_create_context_priv( struct gl_context *ctx, struct pipe_context *pipe, st_init_atoms( st ); st_init_clear(st); st_init_draw( st ); - st_init_pbo_upload(st); + st_init_pbo_helpers(st); /* Choose texture target for glDrawPixels, glBitmap, renderbuffers */ if (pipe->screen->get_param(pipe->screen, PIPE_CAP_NPOT_TEXTURES)) diff --git a/src/mesa/state_tracker/st_pbo.c b/src/mesa/state_tracker/st_pbo.c new file mode 100644 index 00000000000..2e6d2361497 --- /dev/null +++ b/src/mesa/state_tracker/st_pbo.c @@ -0,0 +1,90 @@ +/* + * Copyright 2007 VMware, Inc. + * Copyright 2016 Advanced Micro Devices, Inc. + * + * 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. + */ + +/** + * \file + * + * Common helper functions for PBO up- and downloads. + */ + +#include "state_tracker/st_context.h" +#include "state_tracker/st_pbo.h" + +#include "pipe/p_context.h" +#include "pipe/p_defines.h" +#include "pipe/p_screen.h" +#include "cso_cache/cso_context.h" + +void +st_init_pbo_helpers(struct st_context *st) +{ + struct pipe_context *pipe = st->pipe; + struct pipe_screen *screen = pipe->screen; + + st->pbo_upload.enabled = + screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OBJECTS) && + screen->get_param(screen, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT) >= 1 && + screen->get_shader_param(screen, PIPE_SHADER_FRAGMENT, PIPE_SHADER_CAP_INTEGERS); + if (!st->pbo_upload.enabled) + return; + + st->pbo_upload.rgba_only = + screen->get_param(screen, PIPE_CAP_BUFFER_SAMPLER_VIEW_RGBA_ONLY); + + if (screen->get_param(screen, PIPE_CAP_TGSI_INSTANCEID)) { + if (screen->get_param(screen, PIPE_CAP_TGSI_VS_LAYER_VIEWPORT)) { + st->pbo_upload.upload_layers = true; + } else if (screen->get_param(screen, PIPE_CAP_MAX_GEOMETRY_OUTPUT_VERTICES) >= 3) { + st->pbo_upload.upload_layers = true; + st->pbo_upload.use_gs = true; + } + } + + /* Blend state */ + memset(&st->pbo_upload.blend, 0, sizeof(struct pipe_blend_state)); + st->pbo_upload.blend.rt[0].colormask = PIPE_MASK_RGBA; + + /* Rasterizer state */ + memset(&st->pbo_upload.raster, 0, sizeof(struct pipe_rasterizer_state)); + st->pbo_upload.raster.half_pixel_center = 1; +} + +void +st_destroy_pbo_helpers(struct st_context *st) +{ + if (st->pbo_upload.fs) { + cso_delete_fragment_shader(st->cso_context, st->pbo_upload.fs); + st->pbo_upload.fs = NULL; + } + + if (st->pbo_upload.gs) { + cso_delete_geometry_shader(st->cso_context, st->pbo_upload.gs); + st->pbo_upload.gs = NULL; + } + + if (st->pbo_upload.vs) { + cso_delete_vertex_shader(st->cso_context, st->pbo_upload.vs); + st->pbo_upload.vs = NULL; + } +} diff --git a/src/mesa/state_tracker/st_pbo.h b/src/mesa/state_tracker/st_pbo.h new file mode 100644 index 00000000000..0ce30958410 --- /dev/null +++ b/src/mesa/state_tracker/st_pbo.h @@ -0,0 +1,35 @@ +/* + * Copyright 2016 Advanced Micro Devices, Inc. + * + * 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 ST_PBO_H +#define ST_PBO_H + +struct st_context; + +extern void +st_init_pbo_helpers(struct st_context *st); + +extern void +st_destroy_pbo_helpers(struct st_context *st); + +#endif /* ST_PBO_H */ |