On Tue, Jan 19, 2016 at 05:41:40PM +0100, Eduardo Lima Mitev wrote: > Hello, > > This is an RFC series adding support for the ARB_internalformat-query2 > extension: > > https://www.opengl.org/registry/specs/ARB/internalformat_query2.txt > > The corresponding bug is being tracked at: > > https://bugs.freedesktop.org/show_bug.cgi?id=92687 > > Why is this an RFC series instead of a formal merge-able patch-set? > > Two reasons. Firstly, we are still polishing rough edges in some patches. > However, the support is complete to the best of our knowledge. Most of the > final changes we are making are improvements to particular query answers, > thus contained inside specific blocks, so they don't affect the structure of > the code. > Secondly, we have been trying to get general feedback, and answers to some > doubts we posted on bugzilla, without much success. So maybe an explicit RFC > in the mailing list would bring more eyes to it. > This is a rather large extension, with a long spec wording, certainly > difficult to review. So we totally appreciate the effort and brain cycles of > whoever takes on this. > > > The patch-set is structured as follows: > > * Patches 01 to 10 sets up the stage to query2. It will add a new, generic > driver hook that obsoletes QuerySamplesForFormat, which is removed. But it > doesn't introduce anything related with query2 yet. > > * Patches 11 to 61 implement the different individual queries from query2 > extension in the frontend (mesa/main), adding validation and helper functions > as needed.
There are a number of patches in this block that access the ctx->Extensions member directly. The new and safer way to check for extension support is to use the auto-generated helper functions defined in main/extensions.h. Given the extension you're interested in with Name String, GL_<name_str>, you can see if it is enabled in the given context by using the function, _mesa_has_<name_str>(ctx) (e.g. GL_ARB_shader_image_load_store -> _mesa_has_ARB_shader_image_load_store(ctx)). This does all the context checking required to determine extensions support (desktop GL vs GLES, driver support, and API version requirement). Regards, Nanley > > * Patches 62 to 63 activates the extension on i965. Only the queries where > the driver has something to return other than default value returned by the > frontend, are explicitly added. > > > Some implementation notes: > > * All the extension's frontend code is in main/formatquery.c, as it was > before for query1. Only that it also handles query2 now. > > * As commented above, a new driver hook 'QueryInternalFormat' was added, > replacing the previous one 'QuerySamplesForFormat'. > > * A fallback, generic function _mesa_query_internal_format_default() provides > generic implementation and sensible defaults for all queries, for drivers not > implementing query2. Backends that only care about answering some queries, > can call back this function for the other queries where a generic answer is > ok. > > * For all pnames, the frontend code will do generic validation as per the > spec: check GL profile, version, extensions. > - If the frontend fails basic validation, it will give the corresponding > negative answer, depending on the pname, without going to the driver. > - If the frontend is fully qualified to provide an answer, it will (i.e, > MAX_WIDTH, COLOR_COMPONENTS, etc). Otherwise it will call the driver hook > (i.e, INTERNALFORMAT_PREFERRED). > - For the cases where the query must return full support, caveat support, > or no support; Mesa/main will always call the driver to decide between full > or caveat support (and only answer directly in the case of no-support). > > * The last patches in the branch enable support for this extension in i965 > backend (drivers/dri/i965/brw_formatquery.c). The backend code only handle > queries where the answer is affected by driver-specific stuff. But by > default, it calls back the frontend function with the default implementations. > > * The 64 bits version of the query introduced by this extension > (GetInternalformati64v), was implemented as a wrapper around the 32 bits > version. Since only one query really requires the 64 bits API > (MAX_COMBINED_DIMENSIONS), we handle that pname as a special case. For the > rest of queries, we just forward the call to the default, 32 bits version. > > > A git tree of the series can be found at: > > https://github.com/Igalia/mesa/tree/internalformat-query2-rfc > > > There is also a branch containing piglit tests for the extension, which my > colleague Alejando will send to the piglit mailing list for feedback/review. > > > cheers, > Eduardo (on behalf of the team that worked on this) > > > Alejandro PiƱeiro (9): > mesa: Add dispatch and extension XML for GL_ARB_internalformat_query2 > mesa/main: not fill mesa_error on > _mesa_legal_texture_base_format_for_target > mesa/formatquery: initial implementation for GetInternalformati64v > mesa/formatquery: handle unmodified buffer for SAMPLES on the 64-bit > query > mesa/formatquery: support for IMAGE_FORMAT_COMPATIBILITY_TYPE > main/formatquery: support for MAX_{WIDTH/HEIGHT/DEPTH/LAYERS} > mesa/formatquery: support for MAX_COMBINED_DIMENSIONS > mesa/texparam: make public target_allows_setting_sampler_parameters > mesa/formatquery: added FILTER pname support > > Antia Puentes (36): > mesa/main: Add extension tracking bit for ARB_internalformat_query2 > mesa/formatquery: Added function to validate parameters > mesa/formatquery: Added function to set 'unsupported' responses > mesa/formatquery: Added a func to check if the <target> is supported > mesa/formatquery: Added boilerplate code to extend GetInternalformativ > mesa/main: Added empty skeleton of glGetInternalformati64v > mesa/teximage: make public is_renderable_texture_format > mesa/teximage: Make _mesa_format_no_online_compression public > mesa/formatquery: Added func to check if the 'resource' is supported > mesa/formatquery: Added a func to check <internalformat> supported > mesa/formatquery: Added the INTERNALFORMAT_SUPPORTED <pname> query > mesa/main: Make legal_get_tex_level_parameter_target public > mesa/main: Extend _mesa_base_format_has_channel to accept new pnames > mesa/main: Extend _mesa_get_format_bits to accept new pnames > mesa/formatquery: Added INTERNALFORMAT_{X}_{SIZE,TYPE} <pname> queries > mesa/formatquery: Added {COLOR,DEPTH,STENCIL}_COMPONENTS <pname> > queries > mesa/formatquery: Added {COLOR,DEPTH,STENCIL}_RENDERABLE <pname> > queries > mesa/genmipmap: Added a function to check if the target is valid > mesa/genmipmap: Added a function to validate the internalformat > mesa/formatquery: Added mipmap related <pname> queries > mesa/formatquery: Added COLOR_ENCODING <pname> query. > mesa/formatquery: Added SRGB_{READ,WRITE} <pname> queries > mesa/formatquery: Added SRGB_DECODE_ARB <pname> query > mesa/formatquery: Added queries related to texture sampling in shaders > mesa/shaderimage: Make is_image_format_supported public > mesa/formatquery: Added SHADER_IMAGE_{LOAD,STORE,ATOMIC} <pname> > queries > mesa/shaderimage: Added func to get the GL_IMAGE_CLASS from the format > mesa/formatquery: Added queries related to image textures > mesa/formatquery: Added simultaneous texture and depth/stencil queries > mesa/formatquery: Added compressed texture related queries > mesa/formatquery: Added CLEAR_BUFFER <pname> query > mesa/textureview: Make _lookup_view_class public > mesa/formatquery: Added texture view related queries > mesa/formatquery: Added texture gather/shadow related queries > mesa/formatquery: Added framebuffer renderability related queries > i965: Enable the ARB_internalformat_query2 extension > > Eduardo Lima Mitev (18): > mesa: Add QueryInternalFormat to device driver virtual table > mesa: Add a default QueryInternalFormat() function for drivers > i965: Add boilerplate function for QueryInternalFormat driver hook > i965: Move brw_query_samples_for_format() to brw_queryformat.c > i965/formatquery: Respond queries SAMPLES and NUM_SAMPLE_COUNTS > st/format: Replace QuerySamplesForFormat by new QueryInternalFormat > hook > mesa/multisample: Check sample count using the new driver hook > mesa/formatquery: Remove tracking of number of elements in the > response > mesa/formatquery: Use new driver hook QueryInternalFormat > mesa: Completely remove QuerySamplesForFormat from driver func table > mesa/formatquery: Added INTERNALFORMAT_PREFERRED pname > mesa/teximage: add _mesa_is_cube_map_texture utility method > mesa/formatquery: Add support for READ_PIXELS query > mesa/formatquery: Add READ_PIXELS_FORMAT pname > mesa/formatquery: Add READ_PIXELS_TYPE pname > mesa/formatquery: Add (GET_)TEXTURE_IMAGE_FORMAT pnames > mesa/formatquery: Add (GET_)TEXTURE_IMAGE_TYPE pnames > i965/formatquery: Add support for INTERNALFORMAT_PREFERRED query > > src/mapi/glapi/gen/ARB_internalformat_query2.xml | 119 ++ > src/mapi/glapi/gen/gl_API.xml | 2 +- > src/mesa/drivers/common/driverfuncs.c | 2 +- > src/mesa/drivers/dri/i965/Makefile.sources | 1 + > src/mesa/drivers/dri/i965/brw_context.c | 40 +- > src/mesa/drivers/dri/i965/brw_context.h | 5 + > src/mesa/drivers/dri/i965/brw_formatquery.c | 131 ++ > src/mesa/drivers/dri/i965/intel_extensions.c | 1 + > src/mesa/main/dd.h | 26 +- > src/mesa/main/extensions_table.h | 1 + > src/mesa/main/formatquery.c | 1521 > ++++++++++++++++++++-- > src/mesa/main/formatquery.h | 9 + > src/mesa/main/formats.c | 6 + > src/mesa/main/genmipmap.c | 50 +- > src/mesa/main/genmipmap.h | 6 + > src/mesa/main/glformats.c | 12 + > src/mesa/main/mtypes.h | 1 + > src/mesa/main/multisample.c | 10 +- > src/mesa/main/shaderimage.c | 58 +- > src/mesa/main/shaderimage.h | 14 + > src/mesa/main/tests/dispatch_sanity.cpp | 4 + > src/mesa/main/teximage.c | 44 +- > src/mesa/main/teximage.h | 14 +- > src/mesa/main/texparam.c | 40 +- > src/mesa/main/texparam.h | 7 + > src/mesa/main/texstorage.c | 8 +- > src/mesa/main/textureview.c | 12 +- > src/mesa/main/textureview.h | 8 + > src/mesa/state_tracker/st_cb_texture.c | 2 +- > src/mesa/state_tracker/st_format.c | 38 +- > src/mesa/state_tracker/st_format.h | 8 +- > 31 files changed, 1961 insertions(+), 239 deletions(-) > create mode 100644 src/mapi/glapi/gen/ARB_internalformat_query2.xml > create mode 100644 src/mesa/drivers/dri/i965/brw_formatquery.c > > -- > 2.5.3 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev