angle/samples
Olli Etuaho 9b4e8626f8 Redesign samplers in shaders on D3D11
Translation of samplers to HLSL on D3D11 is changed as follows:

Instead of passing around HLSL sampler and HLSL texture references in
shaders, all references to ESSL samplers are converted to constant
indices within the shader body. Each ESSL sampler is identified by an
unique index. In the code generated to implement ESSL texture functions,
these indices are used to index arrays of HLSL samplers and HLSL
textures to get the sampler and texture to use.

HLSL textures and samplers are grouped into arrays by their types. Each
unique combination of a HLSL texture type + HLSL sampler type gets its
own array. To convert a unique sampler index to an index to one of these
arrays, a constant offset is applied. In the most common case of a 2D
texture and a regular (non-comparison) sampler, the index offset is
always zero and is omitted.

The end goal of this refactoring is to make adding extra metadata for
samplers easier. The unique sampler index can be used in follow-up
changes to index an array of metadata passed in uniforms, which can
contain such things as the base level of the texture.

This does not solve the issues with samplers in structs.

The interface from the point of view of libANGLE is still exactly the
same, the only thing that changes is how samplers are handled inside the
shader.

On feature level 9_3, the D3D compiler has a bug where it can report that
the maximum sampler index is exceeded when in fact it is not. This can
happen when an array of samplers is declared in the shader. Because of
this the new approach can't be used on D3D11 feature level 9_3, but it
will continue using the old approach instead.

BUG=angleproject:1261
TEST=angle_end2end_tests,
     dEQP-GLES3.functional.shaders.texture_functions.* (no regressions)
     dEQP-GLES3.functional.texture.units.* (no regressions)

Change-Id: I5fbb0c4280000202dc2795a628b56bd8194ef96f
Reviewed-on: https://chromium-review.googlesource.com/320571
Reviewed-by: Zhenyao Mo <zmo@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Olli Etuaho <oetuaho@nvidia.com>
Commit-Queue: Olli Etuaho <oetuaho@nvidia.com>
Tryjob-Request: Olli Etuaho <oetuaho@nvidia.com>
2016-02-01 21:58:06 +00:00
..
WindowTest Revert "Revert "OSXWindow: fix window size and position computations"" 2016-01-21 15:26:00 +00:00
hello_triangle Fix warning about namespacing of HelloTriangle's constructor 2015-05-04 17:59:02 +00:00
mip_map_2d Make all the samples compile under Linux 2015-05-11 14:51:09 +00:00
multi_texture Rename path_utils to system_utils 2015-05-25 15:07:05 +00:00
multi_window Use std::random functions for test and samples RNG. 2016-01-26 19:37:18 +00:00
multiple_draw_buffers Fix MultipleDrawBuffers sample when GL_OES_texture_npot isn't active 2015-10-19 17:07:14 +00:00
particle_system Fix some override related warnings. 2016-02-01 18:55:56 +00:00
post_sub_buffer Fix remaining size_t conversion warnings. 2015-08-14 15:09:02 +00:00
sample_util Use std::random functions for test and samples RNG. 2016-01-26 19:37:18 +00:00
shader_translator Redesign samplers in shaders on D3D11 2016-02-01 21:58:06 +00:00
simple_instancing Fix remaining size_t conversion warnings. 2015-08-14 15:09:02 +00:00
simple_texture_2d Make all the samples compile under Linux 2015-05-11 14:51:09 +00:00
simple_texture_cubemap Fix remaining size_t conversion warnings. 2015-08-14 15:09:02 +00:00
simple_vertex_shader Fix remaining size_t conversion warnings. 2015-08-14 15:09:02 +00:00
stencil_operations angle: prevent huge allocations when GL_MAX_VERTEX_ATTRIBS fails 2015-10-23 16:36:45 +00:00
tex_redef_microbench Fix more warnings in samples and tests 2015-05-19 14:38:33 +00:00
texture_wrap Make all the samples compile under Linux 2015-05-11 14:51:09 +00:00
tri_fan_microbench Fix more warnings in samples and tests 2015-05-19 14:38:33 +00:00
samples.gyp Move more sample_util sources to util. 2015-09-28 19:00:21 +00:00