diff --git a/src/egl/drivers/dri2/platform_drm.c b/src/egl/drivers/dri2/platform_drm.c index 35bc4b5b1a..ec35d9b772 100644 --- a/src/egl/drivers/dri2/platform_drm.c +++ b/src/egl/drivers/dri2/platform_drm.c @@ -740,6 +740,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) dri2_dpy->gbm_dri = gbm_dri_device(gbm); dri2_dpy->driver_name = strdup(dri2_dpy->gbm_dri->driver_name); + fprintf(stderr, "$$$ DRIVER_NAME: %s\n", dri2_dpy->gbm_dri->driver_name); dri2_dpy->dri_screen = dri2_dpy->gbm_dri->screen; dri2_dpy->core = dri2_dpy->gbm_dri->core; @@ -787,6 +788,7 @@ dri2_initialize_drm(_EGLDriver *drv, _EGLDisplay *disp) */ dri2_dpy->vtbl = &dri2_drm_display_vtbl; + fprintf(stderr, "---> EGL_TRUE\n"); return EGL_TRUE; cleanup: diff --git a/src/gallium/drivers/vc4/kernel/vc4_validate.c b/src/gallium/drivers/vc4/kernel/vc4_validate.c index bd193b993b..f4155c9e0b 100644 --- a/src/gallium/drivers/vc4/kernel/vc4_validate.c +++ b/src/gallium/drivers/vc4/kernel/vc4_validate.c @@ -647,10 +647,12 @@ reloc_tex(struct vc4_exec_info *exec, width = (width + 3) >> 2; height = (height + 3) >> 2; break; + case VC4_TEXTURE_TYPE_RGBA64: + cpp = 8; + break; case VC4_TEXTURE_TYPE_BW1: case VC4_TEXTURE_TYPE_A4: case VC4_TEXTURE_TYPE_A1: - case VC4_TEXTURE_TYPE_RGBA64: case VC4_TEXTURE_TYPE_YUV422R: default: DRM_ERROR("Texture format %d unsupported\n", type); diff --git a/src/gallium/drivers/vc4/vc4_formats.c b/src/gallium/drivers/vc4/vc4_formats.c index 6d4a6249fb..cb971994aa 100644 --- a/src/gallium/drivers/vc4/vc4_formats.c +++ b/src/gallium/drivers/vc4/vc4_formats.c @@ -40,12 +40,13 @@ #define RT_NO 0 #define RT_RGBA8888 1 #define RT_RGB565 2 +#define RT_RGBA16F 3 struct vc4_format { /** Set if the pipe format is defined in the table. */ bool present; - /** Set to 0 if unsupported, 1 if RGBA8888, 2 if rgb565. */ + /** Set to 0 if unsupported, 1 if RGBA8888, 2 if rgb565, 3 if RGBA16F */ uint8_t rt_type; /** One of VC4_TEXTURE_TYPE_*. */ @@ -58,6 +59,9 @@ struct vc4_format { * value into shader rgba values. */ uint8_t swizzle[4]; + + /* Whether the return value is 16F/I/UI or 32F/I/UI. */ + uint8_t return_size; }; #define SWIZ(x,y,z,w) { \ @@ -104,6 +108,8 @@ static const struct vc4_format vc4_format_table[] = { FORMAT(L8A8_UNORM, NO, LUMALPHA, SWIZ(X, X, X, W)), FORMAT(R8G8_UNORM, NO, LUMALPHA, SWIZ(X, W, 0, 1)), + + FORMAT(R16G16B16A16_FLOAT, RGBA16F, RGBA64, SWIZ(X, Y, Z, W)), }; static const struct vc4_format * diff --git a/src/gallium/drivers/vc4/vc4_program.c b/src/gallium/drivers/vc4/vc4_program.c index 13c3b7678b..a5b4ab8462 100644 --- a/src/gallium/drivers/vc4/vc4_program.c +++ b/src/gallium/drivers/vc4/vc4_program.c @@ -617,7 +617,12 @@ ntq_emit_tex(struct vc4_compile *c, nir_tex_instr *instr) dest[i] = depth_output; } else { for (int i = 0; i < 4; i++) - dest[i] = qir_UNPACK_8_F(c, tex, i); + if (c->key->tex[unit].format == PIPE_FORMAT_R16G16B16A16_FLOAT) { + // TODO(kreeger) - unpack 8 or 16 as needed! + /* dest[i] = qir_UNPACK_8_F(c, tex, i); */ + } else { + dest[i] = qir_UNPACK_8_F(c, tex, i); + } } } @@ -939,6 +944,15 @@ ntq_emit_pack_unorm_4x8(struct vc4_compile *c, nir_alu_instr *instr) ntq_store_dest(c, &instr->dest.dest, 0, qir_MOV(c, result)); } +/** + * TODO(kreeger): Document me. + */ +static void +ntq_emit_pack_half_2x16(struct vc4_compile *c, nir_alu_instr *instr) +{ + // TODO(kreeger): Write me +} + /** Handles sign-extended bitfield extracts for 16 bits. */ static struct qreg ntq_emit_ibfe(struct vc4_compile *c, struct qreg base, struct qreg offset, @@ -1142,6 +1156,11 @@ ntq_emit_alu(struct vc4_compile *c, nir_alu_instr *instr) return; } + if (instr->op == nir_op_pack_half_2x16) { + ntq_emit_pack_half_2x16(c, instr); + return; + } + if (instr->op == nir_op_unpack_unorm_4x8) { struct qreg src = ntq_get_src(c, instr->src[0].src, instr->src[0].swizzle[0]); @@ -1153,6 +1172,12 @@ ntq_emit_alu(struct vc4_compile *c, nir_alu_instr *instr) return; } + if (instr->op == nir_op_unpack_half_2x16) { + // + // TODO(kreeger): Write me. + // + } + /* General case: We can just grab the one used channel per src. */ struct qreg src[nir_op_infos[instr->op].num_inputs]; for (int i = 0; i < nir_op_infos[instr->op].num_inputs; i++) { @@ -2722,6 +2747,8 @@ vc4_setup_shared_key(struct vc4_context *vc4, struct vc4_key *key, if (!sampler) continue; + // TODO(kreeger): Assign "is_float_texture" here. + key->tex[i].format = sampler->format; key->tex[i].swizzle[0] = sampler->swizzle_r; key->tex[i].swizzle[1] = sampler->swizzle_g; diff --git a/src/gallium/drivers/vc4/vc4_qir.h b/src/gallium/drivers/vc4/vc4_qir.h index 3afa98a66a..49c58eafb1 100644 --- a/src/gallium/drivers/vc4/vc4_qir.h +++ b/src/gallium/drivers/vc4/vc4_qir.h @@ -329,6 +329,7 @@ struct vc4_key { struct { enum pipe_format format; uint8_t swizzle[4]; + uint8_t return_size; // Needed? union { struct { unsigned compare_mode:1; @@ -352,6 +353,7 @@ struct vc4_fs_key { bool stencil_enabled; bool stencil_twoside; bool stencil_full_writemasks; + bool is_float_render_target; // TODO(kreeger): Use this. bool is_points; bool is_lines; bool point_coord_upper_left; diff --git a/src/gallium/drivers/vc4/vc4_screen.c b/src/gallium/drivers/vc4/vc4_screen.c index 17776fa4d9..4d7da374ea 100644 --- a/src/gallium/drivers/vc4/vc4_screen.c +++ b/src/gallium/drivers/vc4/vc4_screen.c @@ -504,6 +504,7 @@ vc4_screen_is_format_supported(struct pipe_screen *pscreen, case PIPE_FORMAT_R32G32B32_SSCALED: case PIPE_FORMAT_R32G32_SSCALED: case PIPE_FORMAT_R32_SSCALED: + case PIPE_FORMAT_R16G16B16A16_FLOAT: case PIPE_FORMAT_R16G16B16A16_UNORM: case PIPE_FORMAT_R16G16B16_UNORM: case PIPE_FORMAT_R16G16_UNORM: diff --git a/src/glx/dri2.c b/src/glx/dri2.c index f00b96525a..317d0b3634 100644 --- a/src/glx/dri2.c +++ b/src/glx/dri2.c @@ -299,7 +299,11 @@ DRI2Connect(Display * dpy, XID window, char **driverName, char **deviceName) return False; } + fprintf(stderr, "rep.length: %lu\n", rep.length); + fprintf(stderr, "rep.type: %x\n", rep.type); + if (rep.driverNameLength == 0 && rep.deviceNameLength == 0) { + fprintf(stderr, "Bad driver info...\n"); UnlockDisplay(dpy); SyncHandle(); return False; diff --git a/src/glx/dri2_glx.c b/src/glx/dri2_glx.c index 91afc33750..d16dd68450 100644 --- a/src/glx/dri2_glx.c +++ b/src/glx/dri2_glx.c @@ -1219,10 +1219,16 @@ dri2CreateScreen(int screen, struct glx_display * priv) return NULL; } + fprintf(stderr, "dri2CreateDrawable: %d\n", screen); + if (!DRI2Connect(priv->dpy, RootWindow(priv->dpy, screen), &driverName, &deviceName)) { glx_screen_cleanup(&psc->base); free(psc); + + fprintf(stderr, "deviceName: %s\n", deviceName); + fprintf(stderr, "driverName: %s\n", driverName); + /* InfoMessageF("---> DRIVER: %n\n", deviceName); */ InfoMessageF("screen %d does not appear to be DRI2 capable\n", screen); return NULL; } @@ -1435,6 +1441,8 @@ dri2CreateDisplay(Display * dpy) pdp->base.destroyDisplay = dri2DestroyDisplay; pdp->base.createScreen = dri2CreateScreen; + fprintf(stderr, "dri2CreateDisplay()\n"); + i = 0; if (pdp->driMinor < 1) pdp->loader_extensions[i++] = &dri2LoaderExtension_old.base; diff --git a/src/glx/dri_common.c b/src/glx/dri_common.c index ab5d6c5bc0..167cfb2a52 100644 --- a/src/glx/dri_common.c +++ b/src/glx/dri_common.c @@ -97,6 +97,8 @@ dri_message(int level, const char *f, ...) _X_HIDDEN void * driOpenDriver(const char *driverName) { + fprintf(stderr, "---> driOpenDriver(): %s\n", driverName); + void *glhandle, *handle; const char *libPaths, *p, *next; char realDriverName[200]; diff --git a/src/glx/glxext.c b/src/glx/glxext.c index 5f23d3717a..889dd086f3 100644 --- a/src/glx/glxext.c +++ b/src/glx/glxext.c @@ -819,10 +819,14 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv) if (priv->dri3Display) psc = (*priv->dri3Display->createScreen) (i, priv); #endif /* HAVE_DRI3 */ - if (psc == NULL && priv->dri2Display) + if (psc == NULL && priv->dri2Display) { psc = (*priv->dri2Display->createScreen) (i, priv); - if (psc == NULL && priv->driDisplay) + fprintf(stderr, "... checking dri2Display\n"); + } + if (psc == NULL && priv->driDisplay) { + fprintf(stderr, "... checking driDisplay\n"); psc = (*priv->driDisplay->createScreen) (i, priv); + } #endif /* GLX_USE_DRM */ #ifdef GLX_USE_WINDOWSGL @@ -830,8 +834,10 @@ AllocAndFetchScreenConfigs(Display * dpy, struct glx_display * priv) psc = (*priv->windowsdriDisplay->createScreen) (i, priv); #endif - if (psc == NULL && priv->driswDisplay) + if (psc == NULL && priv->driswDisplay) { + fprintf(stderr, "... checking driswDisplay\n"); psc = (*priv->driswDisplay->createScreen) (i, priv); + } #endif /* GLX_DIRECT_RENDERING && !GLX_USE_APPLEGL */ #if defined(GLX_USE_APPLEGL) diff --git a/src/mesa/drivers/dri/swrast/swrast.c b/src/mesa/drivers/dri/swrast/swrast.c index a88ece97f3..b492e419e0 100644 --- a/src/mesa/drivers/dri/swrast/swrast.c +++ b/src/mesa/drivers/dri/swrast/swrast.c @@ -692,6 +692,7 @@ get_string(struct gl_context *ctx, GLenum pname) case GL_VENDOR: return (const GLubyte *) swrast_vendor_string; case GL_RENDERER: + fprintf(stderr, "$$ HAHA getting string from swrast driver\n"); return (const GLubyte *) swrast_renderer_string; default: return NULL;