mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-02 16:00:09 +01:00
i965: Document conventions for counting layers in 2D multisample buffers.
The "layer" parameters used in blorp, and the intel_renderbuffer::mt_layer field, represent a physical layer rather than a logical layer. This is important for 2D multisample arrays on Gen7+ because the UMS and CMS multisample layouts use N physical layers to represent each logical layer, where N is the number of samples. Also add an assertion to blorp to help catch bugs if we fail to follow these conventions. Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
parent
3a2925bfa9
commit
b5fe413b4d
4 changed files with 27 additions and 0 deletions
|
|
@ -54,6 +54,15 @@ void
|
|||
brw_blorp_mip_info::set(struct intel_mipmap_tree *mt,
|
||||
unsigned int level, unsigned int layer)
|
||||
{
|
||||
/* Layer is a physical layer, so if this is a 2D multisample array texture
|
||||
* using INTEL_MSAA_LAYOUT_UMS or INTEL_MSAA_LAYOUT_CMS, then it had better
|
||||
* be a multiple of num_samples.
|
||||
*/
|
||||
if (mt->msaa_layout == INTEL_MSAA_LAYOUT_UMS ||
|
||||
mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) {
|
||||
assert(layer % mt->num_samples == 0);
|
||||
}
|
||||
|
||||
intel_miptree_check_level_layer(mt, level, layer);
|
||||
|
||||
this->mt = mt;
|
||||
|
|
|
|||
|
|
@ -85,6 +85,11 @@ public:
|
|||
/**
|
||||
* The 2D layer within the miplevel. Combined, level and layer define the
|
||||
* 2D miptree slice to use.
|
||||
*
|
||||
* Note: if mt is a 2D multisample array texture on Gen7+ using
|
||||
* INTEL_MSAA_LAYOUT_UMS or INTEL_MSAA_LAYOUT_CMS, layer is the physical
|
||||
* layer holding sample 0. So, for example, if mt->num_samples == 4, then
|
||||
* logical layer n corresponds to layer == 4*n.
|
||||
*/
|
||||
uint32_t layer;
|
||||
|
||||
|
|
|
|||
|
|
@ -123,6 +123,14 @@ find_miptree(GLbitfield buffer_bit, struct intel_renderbuffer *irb)
|
|||
return mt;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Note: if the src (or dst) is a 2D multisample array texture on Gen7+ using
|
||||
* INTEL_MSAA_LAYOUT_UMS or INTEL_MSAA_LAYOUT_CMS, src_layer (dst_layer) is
|
||||
* the physical layer holding sample 0. So, for example, if
|
||||
* src_mt->num_samples == 4, then logical layer n corresponds to src_layer ==
|
||||
* 4*n.
|
||||
*/
|
||||
void
|
||||
brw_blorp_blit_miptrees(struct brw_context *brw,
|
||||
struct intel_mipmap_tree *src_mt,
|
||||
|
|
|
|||
|
|
@ -63,6 +63,11 @@ struct intel_renderbuffer
|
|||
*
|
||||
* For renderbuffers not created with glFramebufferTexture*(), mt_level and
|
||||
* mt_layer are 0.
|
||||
*
|
||||
* Note: for a 2D multisample array texture on Gen7+ using
|
||||
* INTEL_MSAA_LAYOUT_UMS or INTEL_MSAA_LAYOUT_CMS, mt_layer is the physical
|
||||
* layer holding sample 0. So, for example, if mt->num_samples == 4, then
|
||||
* logical layer n corresponds to mt_layer == 4*n.
|
||||
*/
|
||||
unsigned int mt_level;
|
||||
unsigned int mt_layer;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue