*/
+#include "compiler/nir/nir.h"
#include "main/api_exec.h"
#include "main/context.h"
#include "main/fbobject.h"
#include "brw_context.h"
#include "brw_defines.h"
#include "brw_blorp.h"
-#include "brw_compiler.h"
#include "brw_draw.h"
#include "brw_state.h"
!intel_miptree_is_lossless_compressed(brw, intel_tex->mt))
return false;
- const uint32_t brw_format = brw_format_for_mesa_format(intel_tex->_Format);
+ const uint32_t brw_format = brw_isl_format_for_mesa_format(intel_tex->_Format);
- if (isl_format_supports_lossless_compression(&brw->screen->devinfo,
- brw_format))
+ if (isl_format_supports_ccs_e(&brw->screen->devinfo, brw_format))
return false;
perf_debug("Incompatible sampling format (%s) for rbc (%s)\n",
tex_obj = intel_texture_object(ctx->Texture.Unit[i]._Current);
if (!tex_obj || !tex_obj->mt)
continue;
- intel_miptree_all_slices_resolve_depth(brw, tex_obj->mt);
+ if (intel_miptree_sample_with_hiz(brw, tex_obj->mt))
+ intel_miptree_all_slices_resolve_hiz(brw, tex_obj->mt);
+ else
+ intel_miptree_all_slices_resolve_depth(brw, tex_obj->mt);
/* Sampling engine understands lossless compression and resolving
* those surfaces should be skipped for performance reasons.
*/
const int flags = intel_texture_view_requires_resolve(brw, tex_obj) ?
0 : INTEL_MIPTREE_IGNORE_CCS_E;
- intel_miptree_resolve_color(brw, tex_obj->mt, flags);
+ intel_miptree_all_slices_resolve_color(brw, tex_obj->mt, flags);
brw_render_cache_set_check_flush(brw, tex_obj->mt->bo);
if (tex_obj->base.StencilSampling ||
/* Resolve color for each active shader image. */
for (unsigned i = 0; i < MESA_SHADER_STAGES; i++) {
- const struct gl_linked_shader *shader =
- ctx->_Shader->CurrentProgram[i] ?
- ctx->_Shader->CurrentProgram[i]->_LinkedShaders[i] : NULL;
+ const struct gl_program *prog = ctx->_Shader->CurrentProgram[i];
- if (unlikely(shader && shader->NumImages)) {
- for (unsigned j = 0; j < shader->NumImages; j++) {
- struct gl_image_unit *u = &ctx->ImageUnits[shader->ImageUnits[j]];
+ if (unlikely(prog && prog->info.num_images)) {
+ for (unsigned j = 0; j < prog->info.num_images; j++) {
+ struct gl_image_unit *u =
+ &ctx->ImageUnits[prog->sh.ImageUnits[j]];
tex_obj = intel_texture_object(u->TexObj);
if (tex_obj && tex_obj->mt) {
* compressed surfaces need to be resolved prior to accessing
* them. Hence skip setting INTEL_MIPTREE_IGNORE_CCS_E.
*/
- intel_miptree_resolve_color(brw, tex_obj->mt, 0);
+ intel_miptree_all_slices_resolve_color(brw, tex_obj->mt, 0);
if (intel_miptree_is_lossless_compressed(brw, tex_obj->mt) &&
intel_disable_rb_aux_buffer(brw, tex_obj->mt->bo)) {
/* Resolve color buffers for non-coherent framebuffer fetch. */
if (!ctx->Extensions.MESA_shader_framebuffer_fetch &&
ctx->FragmentProgram._Current &&
- ctx->FragmentProgram._Current->Base.OutputsRead) {
+ ctx->FragmentProgram._Current->info.outputs_read) {
const struct gl_framebuffer *fb = ctx->DrawBuffer;
for (unsigned i = 0; i < fb->_NumColorDrawBuffers; i++) {
intel_renderbuffer(fb->_ColorDrawBuffers[i]);
if (irb &&
- intel_miptree_resolve_color(brw, irb->mt,
- INTEL_MIPTREE_IGNORE_CCS_E))
+ intel_miptree_resolve_color(
+ brw, irb->mt, irb->mt_level, irb->mt_layer, irb->layer_count,
+ INTEL_MIPTREE_IGNORE_CCS_E))
brw_render_cache_set_check_flush(brw, irb->mt->bo);
}
}
* should be impossible to get here with such surfaces.
*/
assert(!intel_miptree_is_lossless_compressed(brw, mt));
- intel_miptree_resolve_color(brw, mt, 0);
+ intel_miptree_all_slices_resolve_color(brw, mt, 0);
brw_render_cache_set_check_flush(brw, mt->bo);
}
}
intelInitBufferFuncs(functions);
intelInitPixelFuncs(functions);
intelInitBufferObjectFuncs(functions);
- intel_init_syncobj_functions(functions);
+ brw_init_syncobj_functions(functions);
brw_init_object_purgeable_functions(functions);
brwInitFragProgFuncs( functions );
functions->NewTransformFeedback = brw_new_transform_feedback;
functions->DeleteTransformFeedback = brw_delete_transform_feedback;
- if (brw->screen->has_mi_math_and_lrr) {
+ if (can_do_mi_math_and_lrr(brw->screen)) {
functions->BeginTransformFeedback = hsw_begin_transform_feedback;
functions->EndTransformFeedback = hsw_end_transform_feedback;
functions->PauseTransformFeedback = hsw_pause_transform_feedback;
} else {
functions->BeginTransformFeedback = brw_begin_transform_feedback;
functions->EndTransformFeedback = brw_end_transform_feedback;
+ functions->PauseTransformFeedback = brw_pause_transform_feedback;
+ functions->ResumeTransformFeedback = brw_resume_transform_feedback;
+ functions->GetTransformFeedbackVertexCount =
+ brw_get_transform_feedback_vertex_count;
}
if (brw->gen >= 6)
[MESA_SHADER_GEOMETRY] = brw->gen >= 6,
[MESA_SHADER_FRAGMENT] = true,
[MESA_SHADER_COMPUTE] =
- (ctx->API == API_OPENGL_CORE &&
+ ((ctx->API == API_OPENGL_COMPAT || ctx->API == API_OPENGL_CORE) &&
ctx->Const.MaxComputeWorkGroupSize[0] >= 1024) ||
(ctx->API == API_OPENGLES2 &&
ctx->Const.MaxComputeWorkGroupSize[0] >= 128) ||
ctx->Const.MaxTextureCoordUnits = 8; /* Mesa limit */
ctx->Const.MaxImageUnits = MAX_IMAGE_UNITS;
- ctx->Const.MaxRenderbufferSize = 8192;
- ctx->Const.MaxTextureLevels = MIN2(14 /* 8192 */, MAX_TEXTURE_LEVELS);
+ if (brw->gen >= 7) {
+ ctx->Const.MaxRenderbufferSize = 16384;
+ ctx->Const.MaxTextureLevels = MIN2(15 /* 16384 */, MAX_TEXTURE_LEVELS);
+ ctx->Const.MaxCubeTextureLevels = 15; /* 16384 */
+ } else {
+ ctx->Const.MaxRenderbufferSize = 8192;
+ ctx->Const.MaxTextureLevels = MIN2(14 /* 8192 */, MAX_TEXTURE_LEVELS);
+ ctx->Const.MaxCubeTextureLevels = 14; /* 8192 */
+ }
ctx->Const.Max3DTextureLevels = 12; /* 2048 */
- ctx->Const.MaxCubeTextureLevels = 14; /* 8192 */
ctx->Const.MaxArrayTextureLayers = brw->gen >= 7 ? 2048 : 512;
ctx->Const.MaxTextureMbytes = 1536;
ctx->Const.MaxTextureRectSize = 1 << 12;
ctx->Const.MaxTextureMaxAnisotropy = 16.0;
+ ctx->Const.MaxTextureLodBias = 15.0;
ctx->Const.StripTextureBorder = true;
- if (brw->gen >= 7)
+ if (brw->gen >= 7) {
ctx->Const.MaxProgramTextureGatherComponents = 4;
- else if (brw->gen == 6)
+ ctx->Const.MinProgramTextureGatherOffset = -32;
+ ctx->Const.MaxProgramTextureGatherOffset = 31;
+ } else if (brw->gen == 6) {
ctx->Const.MaxProgramTextureGatherComponents = 1;
+ ctx->Const.MinProgramTextureGatherOffset = -8;
+ ctx->Const.MaxProgramTextureGatherOffset = 7;
+ }
ctx->Const.MaxUniformBlockSize = 65536;
BRW_MAX_SOL_BINDINGS / BRW_MAX_SOL_BUFFERS;
ctx->Const.AlwaysUseGetTransformFeedbackVertexCount =
- !brw->screen->has_mi_math_and_lrr;
+ !can_do_mi_math_and_lrr(brw->screen);
int max_samples;
const int *msaa_modes = intel_supported_msaa_modes(brw->screen);
if (brw->gen >= 5 || brw->is_g4x)
ctx->Const.MaxClipPlanes = 8;
- ctx->Const.LowerTessLevel = true;
+ ctx->Const.GLSLTessLevelsAsInputs = true;
ctx->Const.LowerTCSPatchVerticesIn = brw->gen >= 8;
ctx->Const.LowerTESPatchVerticesIn = true;
ctx->Const.PrimitiveRestartForPatches = true;
ctx->Const.MaxViewportHeight = 32768;
}
- /* ARB_viewport_array */
- if (brw->gen >= 6 && ctx->API == API_OPENGL_CORE) {
+ /* ARB_viewport_array, OES_viewport_array */
+ if (brw->gen >= 6) {
ctx->Const.MaxViewports = GEN6_NUM_VIEWPORTS;
ctx->Const.ViewportSubpixelBits = 0;
ctx->Const.ForceGLSLExtensionsWarn =
driQueryOptionb(options, "force_glsl_extensions_warn");
+ ctx->Const.ForceGLSLVersion =
+ driQueryOptioni(options, "force_glsl_version");
+
ctx->Const.DisableGLSLLineContinuations =
driQueryOptionb(options, "disable_glsl_line_continuations");
ctx->Const.AllowGLSLExtensionDirectiveMidShader =
driQueryOptionb(options, "allow_glsl_extension_directive_midshader");
+ ctx->Const.AllowHigherCompatVersion =
+ driQueryOptionb(options, "allow_higher_compat_version");
+
ctx->Const.GLSLZeroInit = driQueryOptionb(options, "glsl_zero_init");
brw->dual_color_blend_by_location =
intel_fbo_init(brw);
- intel_batchbuffer_init(brw);
+ intel_batchbuffer_init(&brw->batch, brw->bufmgr, brw->has_llc);
if (brw->gen >= 6) {
/* Create a new hardware context. Using a hardware context means that
brw->prim_restart.enable_cut_index = false;
brw->gs.enabled = false;
brw->sf.viewport_transform_enable = true;
+ brw->clip.viewport_count = 1;
brw->predicate.state = BRW_PREDICATE_STATE_RENDER;
brw->max_gtt_map_object_size = screen->max_gtt_map_object_size;
- brw->use_resource_streamer = screen->has_resource_streamer &&
- (env_var_as_boolean("INTEL_USE_HW_BT", false) ||
- env_var_as_boolean("INTEL_USE_GATHER", false));
-
ctx->VertexProgram._MaintainTnlProgram = true;
ctx->FragmentProgram._MaintainTexEnvProgram = true;
brw->perf_debug = true;
}
- if ((flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS) != 0)
+ if ((flags & __DRI_CTX_FLAG_ROBUST_BUFFER_ACCESS) != 0) {
ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_ROBUST_ACCESS_BIT_ARB;
+ ctx->Const.RobustAccess = GL_TRUE;
+ }
if (INTEL_DEBUG & DEBUG_SHADER_TIME)
brw_init_shader_time(brw);
_mesa_initialize_dispatch_tables(ctx);
_mesa_initialize_vbo_vtxfmt(ctx);
- if (ctx->Extensions.AMD_performance_monitor) {
- brw_init_performance_monitors(brw);
- }
+ if (ctx->Extensions.INTEL_performance_query)
+ brw_init_performance_queries(brw);
vbo_use_buffer_objects(ctx);
vbo_always_unmap_buffers(ctx);
(struct brw_context *) driContextPriv->driverPrivate;
struct gl_context *ctx = &brw->ctx;
- /* Dump a final BMP in case the application doesn't call SwapBuffers */
- if (INTEL_DEBUG & DEBUG_AUB) {
- intel_batchbuffer_flush(brw);
- aub_dump_bmp(&brw->ctx);
- }
-
_mesa_meta_free(&brw->ctx);
if (INTEL_DEBUG & DEBUG_SHADER_TIME) {
if (brw->wm.base.scratch_bo)
drm_intel_bo_unreference(brw->wm.base.scratch_bo);
- gen7_reset_hw_bt_pool_offsets(brw);
- drm_intel_bo_unreference(brw->hw_bt_pool.bo);
- brw->hw_bt_pool.bo = NULL;
-
drm_intel_gem_context_destroy(brw->hw_ctx);
if (ctx->swrast_context) {
_swrast_DestroyContext(&brw->ctx);
brw_fini_pipe_control(brw);
- intel_batchbuffer_free(brw);
+ intel_batchbuffer_free(&brw->batch);
drm_intel_bo_unreference(brw->throttle_batch[1]);
drm_intel_bo_unreference(brw->throttle_batch[0]);
rb = intel_get_renderbuffer(fb, buffers[i]);
if (rb == NULL || rb->mt == NULL)
continue;
- if (rb->mt->num_samples <= 1)
- intel_miptree_resolve_color(brw, rb->mt, 0);
- else
+ if (rb->mt->num_samples <= 1) {
+ assert(rb->mt_layer == 0 && rb->mt_level == 0 &&
+ rb->layer_count == 1);
+ intel_miptree_resolve_color(brw, rb->mt, 0, 0, 1, 0);
+ } else {
intel_renderbuffer_downsample(brw, rb);
+ }
}
}