GL_DYNAMIC_DRAW_ARB);
/* draw quad(s) */
- if (fb->NumLayers > 0) {
+ if (fb->MaxNumLayers > 0) {
unsigned layer;
- for (layer = 0; layer < fb->NumLayers; layer++) {
+ for (layer = 0; layer < fb->MaxNumLayers; layer++) {
if (fb->_IntegerColor)
_mesa_Uniform1i(clear->IntegerLayerLocation, layer);
else
if (rb == NULL)
continue;
- if (fb->NumLayers > 0) {
+ if (fb->MaxNumLayers > 0) {
unsigned layer_multiplier =
(irb->mt->msaa_layout == INTEL_MSAA_LAYOUT_UMS ||
irb->mt->msaa_layout == INTEL_MSAA_LAYOUT_CMS) ?
irb->mt->num_samples : 1;
- assert(fb->NumLayers * layer_multiplier ==
- irb->mt->level[irb->mt_level].depth);
- for (unsigned layer = 0; layer < fb->NumLayers; layer++) {
+ unsigned num_layers =
+ irb->mt->level[irb->mt_level].depth / layer_multiplier;
+ for (unsigned layer = 0; layer < num_layers; layer++) {
if (!do_single_blorp_clear(brw, fb, rb, buf, partial_clear,
layer * layer_multiplier)) {
return false;
*/
intel_batchbuffer_emit_mi_flush(brw);
- if (fb->NumLayers > 0) {
- assert(fb->NumLayers == depth_irb->mt->level[depth_irb->mt_level].depth);
- for (unsigned layer = 0; layer < fb->NumLayers; layer++) {
+ if (fb->MaxNumLayers > 0) {
+ unsigned num_layers = depth_irb->mt->level[depth_irb->mt_level].depth;
+ for (unsigned layer = 0; layer < num_layers; layer++) {
intel_hiz_exec(brw, mt, depth_irb->mt_level, layer,
GEN6_HIZ_OP_DEPTH_CLEAR);
}
for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) {
if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) {
brw->vtbl.update_renderbuffer_surface(brw, ctx->DrawBuffer->_ColorDrawBuffers[i],
- ctx->DrawBuffer->NumLayers > 0, i);
+ ctx->DrawBuffer->MaxNumLayers > 0, i);
} else {
brw->vtbl.update_null_renderbuffer_surface(brw, i);
}
dw2);
OUT_BATCH(U_FIXED(0.125, 3) << GEN6_CLIP_MIN_POINT_WIDTH_SHIFT |
U_FIXED(255.875, 3) << GEN6_CLIP_MAX_POINT_WIDTH_SHIFT |
- (fb->NumLayers > 0 ? 0 : GEN6_CLIP_FORCE_ZERO_RTAINDEX));
+ (fb->MaxNumLayers > 0 ? 0 : GEN6_CLIP_FORCE_ZERO_RTAINDEX));
ADVANCE_BATCH();
}
break;
}
- if (fb->NumLayers > 0 || !irb) {
+ if (fb->MaxNumLayers > 0 || !irb) {
min_array_element = 0;
} else if (irb->mt->num_samples > 1) {
/* Convert physical layer to logical layer. */
GLint fixedSampleLocations = -1;
GLint i;
GLuint j;
- bool layer_info_valid = false; /* Covers layer_count and layer_tex_target */
- GLuint layer_count = 0, att_layer_count;
+ /* Covers max_layer_count, is_layered, and layer_tex_target */
+ bool layer_info_valid = false;
+ GLuint max_layer_count = 0, att_layer_count;
+ bool is_layered;
GLenum layer_tex_target = 0;
assert(_mesa_is_user_fbo(fb));
att_layer_count = 0;
}
if (!layer_info_valid) {
- layer_count = att_layer_count;
+ is_layered = att->Layered;
+ max_layer_count = att_layer_count;
layer_tex_target = att_tex_target;
layer_info_valid = true;
- } else if (layer_count > 0 && layer_tex_target != att_tex_target) {
+ } else if (max_layer_count > 0 && layer_tex_target != att_tex_target) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
fbo_incomplete(ctx, "layered framebuffer has mismatched targets", i);
return;
- } else if (layer_count != att_layer_count) {
- if (layer_count == 0 || att_layer_count == 0) {
- fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
- fbo_incomplete(ctx, "framebuffer attachment layer mode is inconsistent", i);
- } else {
- fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB;
- fbo_incomplete(ctx, "framebuffer attachment layer count is inconsistent", i);
- }
+ } else if (is_layered != att->Layered) {
+ fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
+ fbo_incomplete(ctx, "framebuffer attachment layer mode is inconsistent", i);
return;
+ } else if (att_layer_count > max_layer_count) {
+ max_layer_count = att_layer_count;
}
}
- fb->NumLayers = layer_count;
+ fb->MaxNumLayers = max_layer_count;
if (_mesa_is_desktop_gl(ctx) && !ctx->Extensions.ARB_ES2_compatibility) {
/* Check that all DrawBuffers are present */
struct gl_renderbuffer *_ColorReadBuffer;
/**
- * The number of layers in the framebuffer, or 0 if the framebuffer is not
- * layered. For cube maps, this value is 6. For cube map arrays, this
- * value is the "depth" value passed to TexImage3D (always a multiple of
- * 6).
+ * The maximum number of layers in the framebuffer, or 0 if the framebuffer
+ * is not layered. For cube maps and cube map arrays, each cube face
+ * counts as a layer.
*/
- GLuint NumLayers;
+ GLuint MaxNumLayers;
/** Delete this framebuffer */
void (*Delete)(struct gl_framebuffer *fb);